diff --git a/DEPS b/DEPS index 4e8d7b1..cceebea 100644 --- a/DEPS +++ b/DEPS
@@ -244,7 +244,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. - 'swiftshader_revision': 'b2af6a85583d1adf61033e82eaa5d067d764ece9', + 'swiftshader_revision': '526b987888fbeb5c952912d41265156d53e9e849', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling PDFium # and whatever else without interference from each other. @@ -307,7 +307,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': '0c89c093baa32d638ca2f30d1b2900333ec4a973', + 'devtools_frontend_revision': '663d38164a832ee24620cb34f050eb6b1cf4d652', # 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. @@ -347,7 +347,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': 'eda73e3c4e9d380a48df081041e787fda0e26b45', + 'dawn_revision': '39c4fcbdd394850a0ab110587cd03f920eceb0b5', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -702,7 +702,7 @@ 'packages': [ { 'package': 'chromium/rts/model/windows-amd64', - 'version': 'sGM459U6ITlYDwiWqQn10RIOqmZ9qqwCL6FpzeWpE7EC', + 'version': 'NqOitHC717V_OdyDQtQRi_nCOXxYLBK9eUjNd4K_vy8C', }, ], 'dep_type': 'cipd', @@ -983,7 +983,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' + '@' + 'f157bb00c47e35a90e7ff6d98c07b489cc7299e3', + 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + 'b42923018e834765e06b92d7825eacbe715c0dd1', 'condition': 'checkout_chromeos', }, @@ -1146,7 +1146,7 @@ Var('chromium_git') + '/chromium/deps/hunspell_dictionaries.git' + '@' + '18e09b9197a3b1d771c077c530d1a4ebad04c167', 'src/third_party/icu': - Var('chromium_git') + '/chromium/deps/icu.git' + '@' + '75e34bcccea0be165c31fdb278b3712c516c5876', + Var('chromium_git') + '/chromium/deps/icu.git' + '@' + 'a38aef9142ace942a8bf166020c569f4cda0f8d3', 'src/third_party/icu4j': { 'packages': [ @@ -1372,7 +1372,7 @@ Var('chromium_git') + '/external/github.com/cisco/openh264' + '@' + '3dd5b80bc4f172dd82925bb259cb7c82348409c5', 'src/third_party/openscreen/src': - Var('chromium_git') + '/openscreen' + '@' + '65bcc6e2e999734396ed5abef202b1bfe4228e21', + Var('chromium_git') + '/openscreen' + '@' + '158ca93469cede82d28c0c3d5d5d82c9fa0bfeea', 'src/third_party/openxr/src': { 'url': Var('chromium_git') + '/external/github.com/KhronosGroup/OpenXR-SDK' + '@' + 'bf21ccb1007bb531b45d9978919a56ea5059c245', @@ -1621,7 +1621,7 @@ Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '97d686891b20622fc5cb04b32665e9739adce068', 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + 'a17ec76351cce6efee4880105af7f0cf75ed2fce', + Var('webrtc_git') + '/src.git' + '@' + '8b18304e66524060eca390f143033ba51322b3a2', 'src/third_party/libgifcodec': Var('skia_git') + '/libgifcodec' + '@'+ Var('libgifcodec_revision'), @@ -1682,7 +1682,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@c8d317bc1a9fb9d476c6a663207143d5bd00a4c5', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@ad9d10a4762f54f93ae704108378ae2a695693b5', 'condition': 'checkout_src_internal', },
diff --git a/WATCHLISTS b/WATCHLISTS index 27b2181..9423b04 100644 --- a/WATCHLISTS +++ b/WATCHLISTS
@@ -2433,7 +2433,7 @@ 'ukai+cc@chromium.org', 'yyanagisawa+cc@chromium.org'], 'cr_elements': ['michaelpg+watch-elements@chromium.org'], - 'cros_commercial_policy': ['chromeos-commercial-stability-reviews@google.com'], + 'cros_commercial_policy': ['chromeos-commercial-remote-management+watchlist@google.com'], 'cros_reporting': ['cros-reporting-reviews@google.com'], 'cros_sharesheet': ['melzhang+watch+sharesheet@chromium.org'], 'crostini': ['crostini-ui@chromium.org'],
diff --git a/ash/BUILD.gn b/ash/BUILD.gn index 8ef9e66d..4e9759b 100644 --- a/ash/BUILD.gn +++ b/ash/BUILD.gn
@@ -1873,6 +1873,7 @@ "//ash/public/cpp/ambient/proto", "//ash/quick_pair", "//ash/quick_pair/keyed_service", + "//ash/services/quick_pair/public/mojom", "//ash/services/recording", "//ash/services/recording/public/mojom", "//ash/system/machine_learning:user_settings_event_proto",
diff --git a/ash/app_list/app_list_metrics_unittest.cc b/ash/app_list/app_list_metrics_unittest.cc index 9d7bd17f..bbf98aa 100644 --- a/ash/app_list/app_list_metrics_unittest.cc +++ b/ash/app_list/app_list_metrics_unittest.cc
@@ -106,14 +106,10 @@ ShelfItem shelf_item; shelf_item.id = ShelfID("app_id"); shelf_item.type = TYPE_BROWSER_SHORTCUT; - ShelfModel::Get()->Add(shelf_item); + ShelfModel::Get()->Add( + shelf_item, std::make_unique<TestShelfItemDelegate>(shelf_item.id)); shelf_test_api_->RunMessageLoopUntilAnimationsDone(); - // The TestShelfItemDelegate will simulate a window activation after the - // shelf item is clicked. - ShelfModel::Get()->ReplaceShelfItemDelegate( - shelf_item.id, std::make_unique<TestShelfItemDelegate>(shelf_item.id)); - ClickShelfItem(); }
diff --git a/ash/constants/ash_features.cc b/ash/constants/ash_features.cc index 4abf8f85..b2ed0f45 100644 --- a/ash/constants/ash_features.cc +++ b/ash/constants/ash_features.cc
@@ -353,6 +353,10 @@ const base::Feature kDisableOfficeEditingComponentApp{ "DisableOfficeEditingComponentApp", base::FEATURE_DISABLED_BY_DEFAULT}; +// Disables translation services of the Quick Answers V2. +const base::Feature kDisableQuickAnswersV2Translation{ + "DisableQuickAnswersV2Translation", base::FEATURE_DISABLED_BY_DEFAULT}; + // Enables indicators to hint where displays are connected. const base::Feature kDisplayAlignAssist{"DisplayAlignAssist", base::FEATURE_DISABLED_BY_DEFAULT}; @@ -1514,6 +1518,10 @@ return base::FeatureList::IsEnabled(kQuickAnswersV2); } +bool IsQuickAnswersV2TranslationDisabled() { + return base::FeatureList::IsEnabled(kDisableQuickAnswersV2Translation); +} + bool IsReduceDisplayNotificationsEnabled() { return base::FeatureList::IsEnabled(kReduceDisplayNotifications); }
diff --git a/ash/constants/ash_features.h b/ash/constants/ash_features.h index 1970aed..be145f81 100644 --- a/ash/constants/ash_features.h +++ b/ash/constants/ash_features.h
@@ -331,6 +331,8 @@ extern const base::Feature kQuickAnswersTranslationCloudAPI; COMPONENT_EXPORT(ASH_CONSTANTS) extern const base::Feature kQuickAnswersV2; COMPONENT_EXPORT(ASH_CONSTANTS) +extern const base::Feature kDisableQuickAnswersV2Translation; +COMPONENT_EXPORT(ASH_CONSTANTS) extern const base::Feature kQuickAnswersOnEditableText; COMPONENT_EXPORT(ASH_CONSTANTS) extern const base::Feature kQuickAnswersStandaloneSettings; @@ -524,6 +526,7 @@ COMPONENT_EXPORT(ASH_CONSTANTS) bool IsQuickAnswersTranslationCloudAPIEnabled(); COMPONENT_EXPORT(ASH_CONSTANTS) bool IsQuickAnswersTranslationEnabled(); COMPONENT_EXPORT(ASH_CONSTANTS) bool IsQuickAnswersV2Enabled(); +COMPONENT_EXPORT(ASH_CONSTANTS) bool IsQuickAnswersV2TranslationDisabled(); COMPONENT_EXPORT(ASH_CONSTANTS) bool IsReduceDisplayNotificationsEnabled(); COMPONENT_EXPORT(ASH_CONSTANTS) bool IsReverseScrollGesturesEnabled(); COMPONENT_EXPORT(ASH_CONSTANTS)
diff --git a/ash/metrics/user_metrics_recorder_unittest.cc b/ash/metrics/user_metrics_recorder_unittest.cc index 284988a..6891025d 100644 --- a/ash/metrics/user_metrics_recorder_unittest.cc +++ b/ash/metrics/user_metrics_recorder_unittest.cc
@@ -8,6 +8,7 @@ #include "ash/login_status.h" #include "ash/metrics/user_metrics_recorder_test_api.h" +#include "ash/public/cpp/shelf_item_delegate.h" #include "ash/public/cpp/shelf_model.h" #include "ash/session/session_controller_impl.h" #include "ash/session/test_session_controller_client.h" @@ -20,6 +21,17 @@ namespace ash { namespace { +class TestShelfItemDelegate : public ShelfItemDelegate { + public: + explicit TestShelfItemDelegate(const ShelfID& shelf_id) + : ShelfItemDelegate(shelf_id) {} + void ExecuteCommand(bool from_context_menu, + int64_t command_id, + int32_t event_flags, + int64_t display_id) override {} + void Close() override {} +}; + const char kAsh_NumberOfVisibleWindowsInPrimaryDisplay[] = "Ash.NumberOfVisibleWindowsInPrimaryDisplay"; @@ -143,17 +155,22 @@ ShelfItem shelf_item; shelf_item.type = TYPE_PINNED_APP; shelf_item.id = ShelfID("app_id_1"); - shelf_model->Add(shelf_item); + shelf_model->Add(shelf_item, + std::make_unique<TestShelfItemDelegate>(shelf_item.id)); shelf_item.id = ShelfID("app_id_2"); - shelf_model->Add(shelf_item); + shelf_model->Add(shelf_item, + std::make_unique<TestShelfItemDelegate>(shelf_item.id)); shelf_item.type = TYPE_APP; shelf_item.id = ShelfID("app_id_3"); - shelf_model->Add(shelf_item); + shelf_model->Add(shelf_item, + std::make_unique<TestShelfItemDelegate>(shelf_item.id)); shelf_item.id = ShelfID("app_id_4"); - shelf_model->Add(shelf_item); + shelf_model->Add(shelf_item, + std::make_unique<TestShelfItemDelegate>(shelf_item.id)); shelf_item.id = ShelfID("app_id_5"); - shelf_model->Add(shelf_item); + shelf_model->Add(shelf_item, + std::make_unique<TestShelfItemDelegate>(shelf_item.id)); test_api().RecordPeriodicMetrics(); histograms().ExpectBucketCount(kAsh_Shelf_NumberOfItems, 5, 1);
diff --git a/ash/public/cpp/shelf_model_unittest.cc b/ash/public/cpp/shelf_model_unittest.cc index fc844e2..f1619d1 100644 --- a/ash/public/cpp/shelf_model_unittest.cc +++ b/ash/public/cpp/shelf_model_unittest.cc
@@ -67,7 +67,7 @@ class TestShelfItemDelegate : public ShelfItemDelegate { public: - TestShelfItemDelegate(const ShelfID& shelf_id) + explicit TestShelfItemDelegate(const ShelfID& shelf_id) : ShelfItemDelegate(shelf_id) {} void ItemSelected(std::unique_ptr<ui::Event> event, @@ -100,6 +100,16 @@ model_.reset(); } + // Helper function for simplifying adding items to the shelf. + int Add(const ShelfItem& item) { + return model_->Add(item, std::make_unique<TestShelfItemDelegate>(item.id)); + } + + int AddAt(int index, const ShelfItem& item) { + return model_->AddAt(index, item, + std::make_unique<TestShelfItemDelegate>(item.id)); + } + std::unique_ptr<ShelfModel> model_; std::unique_ptr<TestShelfModelObserver> observer_; @@ -112,11 +122,11 @@ ShelfItem item1; item1.id = ShelfID("item1"); item1.type = TYPE_PINNED_APP; - int index = model_->Add(item1); + int index = Add(item1); EXPECT_EQ(1, model_->item_count()); EXPECT_LE(0, model_->ItemIndexByID(item1.id)); EXPECT_TRUE(model_->ItemByID(item1.id)); - EXPECT_EQ("added=1", observer_->StateStringAndClear()); + EXPECT_EQ("added=1 delegate_changed=1", observer_->StateStringAndClear()); // Change to a platform app item. item1.type = TYPE_APP; @@ -138,11 +148,11 @@ ShelfItem item2; item2.id = ShelfID("item2"); item2.type = TYPE_PINNED_APP; - index = model_->Add(item2); + index = Add(item2); EXPECT_EQ(1, model_->item_count()); EXPECT_LE(0, model_->ItemIndexByID(item2.id)); EXPECT_TRUE(model_->ItemByID(item2.id)); - EXPECT_EQ("added=1", observer_->StateStringAndClear()); + EXPECT_EQ("added=1 delegate_changed=1", observer_->StateStringAndClear()); // Change the item type. item2.type = TYPE_APP; @@ -156,11 +166,11 @@ ShelfItem item3; item3.id = ShelfID("item3"); item3.type = TYPE_PINNED_APP; - model_->Add(item3); + Add(item3); EXPECT_EQ(2, model_->item_count()); EXPECT_LE(0, model_->ItemIndexByID(item3.id)); EXPECT_TRUE(model_->ItemByID(item3.id)); - EXPECT_EQ("added=1", observer_->StateStringAndClear()); + EXPECT_EQ("added=1 delegate_changed=1", observer_->StateStringAndClear()); // Move the second to the first. model_->Move(1, 0); @@ -183,18 +193,18 @@ ShelfItem browser_shortcut; browser_shortcut.id = ShelfID("browser"); browser_shortcut.type = TYPE_BROWSER_SHORTCUT; - EXPECT_EQ(0, model_->Add(browser_shortcut)); + EXPECT_EQ(0, Add(browser_shortcut)); // App items should be after the browser shortcut. ShelfItem item; item.type = TYPE_APP; item.id = ShelfID("id1"); - int platform_app_index1 = model_->Add(item); + int platform_app_index1 = Add(item); EXPECT_EQ(1, platform_app_index1); // Add another platform app item, it should follow first. item.id = ShelfID("id2"); - int platform_app_index2 = model_->Add(item); + int platform_app_index2 = Add(item); EXPECT_EQ(2, platform_app_index2); // TYPE_PINNED_APP priority is higher than TYPE_APP but same as @@ -202,42 +212,42 @@ // TYPE_BROWSER_SHORTCUT. item.type = TYPE_PINNED_APP; item.id = ShelfID("id3"); - int app_shortcut_index1 = model_->Add(item); + int app_shortcut_index1 = Add(item); EXPECT_EQ(1, app_shortcut_index1); item.type = TYPE_PINNED_APP; item.id = ShelfID("id4"); - int app_shortcut_index2 = model_->Add(item); + int app_shortcut_index2 = Add(item); EXPECT_EQ(2, app_shortcut_index2); - // Check that AddAt() figures out the correct indexes for app shortcuts. - // TYPE_PINNED_APP and TYPE_BROWSER_SHORTCUT has the same weight. + // Check that AddAt() figures out the correct indexes for app + // shortcuts. TYPE_PINNED_APP and TYPE_BROWSER_SHORTCUT has the same weight. // So TYPE_PINNED_APP is located at index 0. And, TYPE_BROWSER_SHORTCUT is // located at index 1. item.type = TYPE_PINNED_APP; item.id = ShelfID("id5"); - int app_shortcut_index3 = model_->AddAt(0, item); + int app_shortcut_index3 = AddAt(0, item); EXPECT_EQ(0, app_shortcut_index3); item.type = TYPE_PINNED_APP; item.id = ShelfID("id6"); - int app_shortcut_index4 = model_->AddAt(5, item); + int app_shortcut_index4 = AddAt(5, item); EXPECT_EQ(4, app_shortcut_index4); item.type = TYPE_PINNED_APP; item.id = ShelfID("id7"); - int app_shortcut_index5 = model_->AddAt(1, item); + int app_shortcut_index5 = AddAt(1, item); EXPECT_EQ(1, app_shortcut_index5); // Check that AddAt() figures out the correct indexes for apps. item.type = TYPE_APP; item.id = ShelfID("id8"); - int platform_app_index3 = model_->AddAt(2, item); + int platform_app_index3 = AddAt(2, item); EXPECT_EQ(6, platform_app_index3); item.type = TYPE_APP; item.id = ShelfID("id9"); - int platform_app_index4 = model_->AddAt(6, item); + int platform_app_index4 = AddAt(6, item); EXPECT_EQ(6, platform_app_index4); EXPECT_EQ(TYPE_BROWSER_SHORTCUT, model_->items()[2].type); @@ -246,7 +256,7 @@ // unpinned apps. item.type = TYPE_UNPINNED_BROWSER_SHORTCUT; item.id = ShelfID("unpinned_browser"); - int unpinned_browser_index = model_->AddAt(2, item); + int unpinned_browser_index = AddAt(2, item); EXPECT_EQ(6, unpinned_browser_index); } @@ -257,28 +267,28 @@ ShelfItem item; item.id = ShelfID("browser"); item.type = TYPE_BROWSER_SHORTCUT; - EXPECT_EQ(0, model_->Add(item)); + EXPECT_EQ(0, Add(item)); EXPECT_EQ(1, model_->FirstRunningAppIndex()); // Insert an application shortcut and make sure that the running application // index would be behind it. item.type = TYPE_PINNED_APP; item.id = ShelfID("pinned app"); - EXPECT_EQ(1, model_->Add(item)); + EXPECT_EQ(1, Add(item)); EXPECT_EQ(2, model_->FirstRunningAppIndex()); // Insert a two app items and check the first running app index. item.type = TYPE_APP; item.id = ShelfID("app1"); - EXPECT_EQ(2, model_->Add(item)); + EXPECT_EQ(2, Add(item)); EXPECT_EQ(2, model_->FirstRunningAppIndex()); item.id = ShelfID("app2"); - EXPECT_EQ(3, model_->Add(item)); + EXPECT_EQ(3, Add(item)); EXPECT_EQ(2, model_->FirstRunningAppIndex()); item.type = TYPE_UNPINNED_BROWSER_SHORTCUT; item.id = ShelfID("unpinned browser"); - EXPECT_EQ(4, model_->Add(item)); + EXPECT_EQ(4, Add(item)); EXPECT_EQ(2, model_->FirstRunningAppIndex()); } @@ -288,19 +298,19 @@ ShelfItem item1; item1.type = TYPE_PINNED_APP; item1.id = ShelfID("id1"); - int app1_index = model_->Add(item1); + int app1_index = Add(item1); EXPECT_EQ(0, app1_index); ShelfItem item2; item2.type = TYPE_PINNED_APP; item2.id = ShelfID("id2"); - int app2_index = model_->Add(item2); + int app2_index = Add(item2); EXPECT_EQ(1, app2_index); ShelfItem item3; item3.type = TYPE_PINNED_APP; item3.id = ShelfID("id3"); - int app3_index = model_->Add(item3); + int app3_index = Add(item3); EXPECT_EQ(2, app3_index); // Unpinning an item moves it behind the shortcuts. @@ -321,14 +331,14 @@ ShelfItem item1; item1.type = TYPE_PINNED_APP; item1.id = ShelfID("app_id1", "launch_id1"); - const int index1 = model_->Add(item1); + const int index1 = Add(item1); EXPECT_EQ(index1, model_->ItemIndexByID(item1.id)); // Add another item and expect to get another valid index for its id. ShelfItem item2; item2.type = TYPE_APP; item2.id = ShelfID("app_id2", "launch_id2"); - const int index2 = model_->Add(item2); + const int index2 = Add(item2); EXPECT_EQ(index2, model_->ItemIndexByID(item2.id)); // Removing the first item should yield an invalid index for that item. @@ -385,7 +395,7 @@ item.type = TYPE_APP; item.status = STATUS_RUNNING; item.id = ShelfID(app_id); - const int index = model_->Add(item); + const int index = Add(item); // The item should be added but not pinned. EXPECT_FALSE(model_->IsAppPinned(app_id)); @@ -431,7 +441,7 @@ item.type = TYPE_APP; item.status = STATUS_RUNNING; item.id = ShelfID(app_id); - const int index = model_->Add(item); + const int index = Add(item); EXPECT_FALSE(model_->items()[index].has_notification); @@ -451,11 +461,11 @@ ShelfItem item1; item1.id = ShelfID("item1"); item1.type = TYPE_PINNED_APP; - model_->Add(item1); + Add(item1); EXPECT_EQ(1, model_->item_count()); EXPECT_LE(0, model_->ItemIndexByID(item1.id)); EXPECT_TRUE(model_->ItemByID(item1.id)); - EXPECT_EQ("added=1", observer_->StateStringAndClear()); + EXPECT_EQ("added=1 delegate_changed=1", observer_->StateStringAndClear()); // Set item delegate. auto* delegate = new TestShelfItemDelegate(item1.id);
diff --git a/ash/public/cpp/wallpaper/wallpaper_controller_client.h b/ash/public/cpp/wallpaper/wallpaper_controller_client.h index 6c267aa..0e543fce 100644 --- a/ash/public/cpp/wallpaper/wallpaper_controller_client.h +++ b/ash/public/cpp/wallpaper/wallpaper_controller_client.h
@@ -47,6 +47,9 @@ virtual bool SaveWallpaperToDriveFs(const AccountId& account_id, const base::FilePath& origin) = 0; + virtual base::FilePath GetWallpaperPathFromDriveFs( + const AccountId& account_id) = 0; + virtual void GetFilesId( const AccountId& account_id, base::OnceCallback<void(const std::string&)> files_id_callback) const = 0;
diff --git a/ash/services/quick_pair/DIR_METADATA b/ash/services/quick_pair/DIR_METADATA new file mode 100644 index 0000000..4891ec87 --- /dev/null +++ b/ash/services/quick_pair/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail: { + component: "OS>Systems>Multidevice>FastPair" +}
diff --git a/ash/services/quick_pair/OWNERS b/ash/services/quick_pair/OWNERS new file mode 100644 index 0000000..bcade17 --- /dev/null +++ b/ash/services/quick_pair/OWNERS
@@ -0,0 +1 @@ +file://ash/quick_pair/OWNERS
diff --git a/ash/services/quick_pair/public/mojom/BUILD.gn b/ash/services/quick_pair/public/mojom/BUILD.gn new file mode 100644 index 0000000..b305f42 --- /dev/null +++ b/ash/services/quick_pair/public/mojom/BUILD.gn
@@ -0,0 +1,18 @@ +# Copyright 2021 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import("//build/config/chromeos/ui_mode.gni") +import("//mojo/public/tools/bindings/mojom.gni") + +assert(is_chromeos_ash, + "Quick Pair protocols (e.g. Fast Pair) are ash-chrome only") + +mojom("mojom") { + sources = [ + "fast_pair_data_parser.mojom", + "quick_pair_service.mojom", + ] + + public_deps = [ "//sandbox/policy/mojom" ] +}
diff --git a/ash/services/quick_pair/public/mojom/OWNERS b/ash/services/quick_pair/public/mojom/OWNERS new file mode 100644 index 0000000..08850f4 --- /dev/null +++ b/ash/services/quick_pair/public/mojom/OWNERS
@@ -0,0 +1,2 @@ +per-file *.mojom=set noparent +per-file *.mojom=file://ipc/SECURITY_OWNERS
diff --git a/ash/services/quick_pair/public/mojom/fast_pair_data_parser.mojom b/ash/services/quick_pair/public/mojom/fast_pair_data_parser.mojom new file mode 100644 index 0000000..88e9ad5 --- /dev/null +++ b/ash/services/quick_pair/public/mojom/fast_pair_data_parser.mojom
@@ -0,0 +1,58 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +module ash.quick_pair.mojom; + +// Type values for Fast Pair messages. +enum MessageType { + // Key-based Pairing Request. + kKeyBasedPairingRequest, + // Key-based Pairing Response. + kKeyBasedPairingResponse, + // Seeker's passkey. + kSeekersPasskey, + // Provider's passkey. + kProvidersPasskey, +}; + +// Decrypted response value. +struct DecryptedResponse { + // Message type. + MessageType message_type; + // Provider's public (BR/EDR) address. + array<uint8, 6> address_bytes; + // Random value. + array<uint8, 9> salt; +}; + +// Decrypted passkey value. +struct DecryptedPasskey { + // Message type. + MessageType message_type; + // 6 digit passkey. + uint32 passkey; + // Random value. + array<uint8, 12> salt; +}; + +// Parses untrusted bytes from a Bluetooth device during Fast Pair. Lives in a +// sandboxed utility process which is launched by Ash. Instances should be +// retrieved via QuickPairService. +interface FastPairDataParser { + // Gets the hex string representation of the device's model ID from the + // service data. + GetHexModelIdFromServiceData(array<uint8> service_data) => (string? model_id); + + // Decrypts |encrypted_response_bytes| using |aes_key| and parses a + // DecryptedResponse instance if possible. + ParseDecryptedResponse( + array<uint8, 16> aes_key, + array<uint8, 16> encrypted_response_bytes) => (DecryptedResponse? response); + + // Decrypts |encrypted_passkey_bytes| using |aes_key| and parses a + // DecryptedPasskey instance if possible. + ParseDecryptedPasskey( + array<uint8, 16> aes_key, + array<uint8, 16> encrypted_passkey_bytes) => (DecryptedPasskey? passkey); +};
diff --git a/ash/services/quick_pair/public/mojom/quick_pair_service.mojom b/ash/services/quick_pair/public/mojom/quick_pair_service.mojom new file mode 100644 index 0000000..0b91a3a --- /dev/null +++ b/ash/services/quick_pair/public/mojom/quick_pair_service.mojom
@@ -0,0 +1,16 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +module ash.quick_pair.mojom; + +import "ash/services/quick_pair/public/mojom/fast_pair_data_parser.mojom"; +import "sandbox/policy/mojom/sandbox.mojom"; + +// Interface for Quick Pair related services. Lives in a sandboxed utility +// process which is launched by Ash. +[ServiceSandbox=sandbox.mojom.Sandbox.kService] +interface QuickPairService { + // Initializes and connects everything needed to start the service. + Connect(pending_receiver<FastPairDataParser> fast_pair_data_parser); +};
diff --git a/ash/shelf/shelf_controller_unittest.cc b/ash/shelf/shelf_controller_unittest.cc index d4525f3..90c3c44 100644 --- a/ash/shelf/shelf_controller_unittest.cc +++ b/ash/shelf/shelf_controller_unittest.cc
@@ -7,6 +7,7 @@ #include <string> #include "ash/constants/ash_pref_names.h" +#include "ash/public/cpp/shelf_item_delegate.h" #include "ash/public/cpp/shelf_model.h" #include "ash/public/cpp/shelf_prefs.h" #include "ash/public/cpp/window_properties.h" @@ -33,6 +34,17 @@ namespace ash { namespace { +class TestShelfItemDelegate : public ShelfItemDelegate { + public: + explicit TestShelfItemDelegate(const ShelfID& shelf_id) + : ShelfItemDelegate(shelf_id) {} + void ExecuteCommand(bool from_context_menu, + int64_t command_id, + int32_t event_flags, + int64_t display_id) override {} + void Close() override {} +}; + Shelf* GetShelfForDisplay(int64_t display_id) { return Shell::GetRootWindowControllerWithDisplayId(display_id)->shelf(); } @@ -114,7 +126,8 @@ ShelfItem item; item.type = TYPE_APP; item.id = ShelfID(app_id); - const int index = controller->model()->Add(item); + const int index = controller->model()->Add( + item, std::make_unique<TestShelfItemDelegate>(item.id)); EXPECT_FALSE(controller->model()->items()[index].has_notification); // Send an app update to ShelfController for adding a notification badge.
diff --git a/ash/shelf/shelf_test_util.cc b/ash/shelf/shelf_test_util.cc index e200d94..9b46f22 100644 --- a/ash/shelf/shelf_test_util.cc +++ b/ash/shelf/shelf_test_util.cc
@@ -5,12 +5,26 @@ #include "ash/shelf/shelf_test_util.h" #include "ash/public/cpp/overview_test_api.h" +#include "ash/public/cpp/shelf_item_delegate.h" #include "ash/public/cpp/test/shell_test_api.h" #include "ash/shelf/shelf_controller.h" #include "ash/shell.h" namespace ash { +namespace { +class TestShelfItemDelegate : public ShelfItemDelegate { + public: + explicit TestShelfItemDelegate(const ShelfID& shelf_id) + : ShelfItemDelegate(shelf_id) {} + void ExecuteCommand(bool from_context_menu, + int64_t command_id, + int32_t event_flags, + int64_t display_id) override {} + void Close() override {} +}; +} // namespace + // static ShelfItem ShelfTestUtil::AddAppShortcut(const std::string id, const ShelfItemType type) { @@ -20,7 +34,8 @@ if (type == TYPE_APP) item.status = STATUS_RUNNING; item.id = ShelfID(id); - controller->model()->Add(item); + controller->model()->Add(item, + std::make_unique<TestShelfItemDelegate>(item.id)); return item; }
diff --git a/ash/shelf/shelf_tooltip_manager_unittest.cc b/ash/shelf/shelf_tooltip_manager_unittest.cc index 0ae14ab4..f08e233 100644 --- a/ash/shelf/shelf_tooltip_manager_unittest.cc +++ b/ash/shelf/shelf_tooltip_manager_unittest.cc
@@ -6,6 +6,7 @@ #include <memory> +#include "ash/public/cpp/shelf_item_delegate.h" #include "ash/public/cpp/shelf_model.h" #include "ash/shelf/home_button.h" #include "ash/shelf/shelf.h" @@ -23,6 +24,19 @@ namespace ash { +namespace { +class TestShelfItemDelegate : public ShelfItemDelegate { + public: + explicit TestShelfItemDelegate(const ShelfID& shelf_id) + : ShelfItemDelegate(shelf_id) {} + void ExecuteCommand(bool from_context_menu, + int64_t command_id, + int32_t event_flags, + int64_t display_id) override {} + void Close() override {} +}; +} // namespace + class ShelfTooltipManagerTest : public AshTestBase { public: ShelfTooltipManagerTest() = default; @@ -90,7 +104,8 @@ ShelfItem item; item.id = ShelfID("foo"); item.type = TYPE_PINNED_APP; - const int index = model->Add(item); + const int index = + model->Add(item, std::make_unique<TestShelfItemDelegate>(item.id)); ShelfViewTestAPI(GetPrimaryShelf()->GetShelfViewForTesting()) .RunMessageLoopUntilAnimationsDone();
diff --git a/ash/shelf/shelf_unittest.cc b/ash/shelf/shelf_unittest.cc index be47e686..878a18e 100644 --- a/ash/shelf/shelf_unittest.cc +++ b/ash/shelf/shelf_unittest.cc
@@ -5,6 +5,7 @@ #include <memory> #include <utility> +#include "ash/public/cpp/shelf_item_delegate.h" #include "ash/public/cpp/shelf_model.h" #include "ash/root_window_controller.h" #include "ash/session/session_controller_impl.h" @@ -26,6 +27,17 @@ namespace ash { namespace { +class TestShelfItemDelegate : public ShelfItemDelegate { + public: + explicit TestShelfItemDelegate(const ShelfID& shelf_id) + : ShelfItemDelegate(shelf_id) {} + void ExecuteCommand(bool from_context_menu, + int64_t command_id, + int32_t event_flags, + int64_t display_id) override {} + void Close() override {} +}; + class ShelfTest : public AshTestBase { public: ShelfTest() = default; @@ -70,7 +82,8 @@ item.id = ShelfID("foo"); item.type = TYPE_APP; item.status = STATUS_RUNNING; - int index = shelf_model()->Add(item); + int index = shelf_model()->Add( + item, std::make_unique<TestShelfItemDelegate>(item.id)); ASSERT_EQ(++button_count, test_api()->GetButtonCount()); ShelfAppButton* button = test_api()->GetButton(index); EXPECT_EQ(ShelfAppButton::STATE_RUNNING, button->state()); @@ -91,7 +104,8 @@ item.id = ShelfID("foo"); item.type = TYPE_APP; item.status = STATUS_RUNNING; - int index = shelf_model()->Add(item); + int index = shelf_model()->Add( + item, std::make_unique<TestShelfItemDelegate>(item.id)); ASSERT_EQ(++button_count, test_api()->GetButtonCount()); ShelfAppButton* button = test_api()->GetButton(index);
diff --git a/ash/shelf/shelf_view.cc b/ash/shelf/shelf_view.cc index c7b79bc..2276cb0 100644 --- a/ash/shelf/shelf_view.cc +++ b/ash/shelf/shelf_view.cc
@@ -1977,13 +1977,18 @@ } void ShelfView::ShelfItemAdded(int model_index) { + // ShelfView must keep view_model_ in sync with ShelfModel::items_ as its very + // first response to ShelfModel changes. Failure to do so can result in UaF in + // methods like ShelfView::ShelfItemForView, which can be implicitly called by + // other classes. See https://crbug.com/1238959 for more details. + const ShelfItem& item(model_->items()[model_index]); + views::View* view = CreateViewForItem(item); + { base::AutoReset<bool> cancelling_drag(&cancelling_drag_model_changed_, true); model_index = CancelDrag(model_index); } - const ShelfItem& item(model_->items()[model_index]); - views::View* view = CreateViewForItem(item); // Hide the view, it'll be made visible when the animation is done. Using // opacity 0 here to avoid messing with CalculateIdealBounds which touches // the view's visibility. @@ -2025,14 +2030,19 @@ } void ShelfView::ShelfItemRemoved(int model_index, const ShelfItem& old_item) { - if (old_item.id == context_menu_id_ && shelf_menu_model_adapter_) - shelf_menu_model_adapter_->Cancel(); - + // ShelfView must keep view_model_ in sync with ShelfModel::items_ as its very + // first response to ShelfModel changes. Failure to do so can result in UaF in + // methods like ShelfView::ShelfItemForView, which can be implicitly called by + // other classes. See https://crbug.com/1238959 for more details. + // // If std::move is not called on |view|, |view| will be deleted once out of // scope. std::unique_ptr<views::View> view(view_model_->view_at(model_index)); view_model_->Remove(model_index); + if (old_item.id == context_menu_id_ && shelf_menu_model_adapter_) + shelf_menu_model_adapter_->Cancel(); + { base::AutoReset<bool> cancelling_drag(&cancelling_drag_model_changed_, true);
diff --git a/ash/shelf/shelf_view_test_api.cc b/ash/shelf/shelf_view_test_api.cc index 93d4e9b..d22c715 100644 --- a/ash/shelf/shelf_view_test_api.cc +++ b/ash/shelf/shelf_view_test_api.cc
@@ -4,6 +4,7 @@ #include "ash/shelf/shelf_view_test_api.h" +#include "ash/public/cpp/shelf_item_delegate.h" #include "ash/public/cpp/shelf_model.h" #include "ash/shelf/shelf_app_button.h" #include "ash/shelf/shelf_menu_model_adapter.h" @@ -38,6 +39,19 @@ namespace ash { +namespace { +class TestShelfItemDelegate : public ShelfItemDelegate { + public: + explicit TestShelfItemDelegate(const ShelfID& shelf_id) + : ShelfItemDelegate(shelf_id) {} + void ExecuteCommand(bool from_context_menu, + int64_t command_id, + int32_t event_flags, + int64_t display_id) override {} + void Close() override {} +}; +} // namespace + ShelfViewTestAPI::ShelfViewTestAPI(ShelfView* shelf_view) : shelf_view_(shelf_view) {} @@ -55,7 +69,8 @@ ShelfItem item; item.type = type; item.id = ShelfID(base::NumberToString(id_++)); - shelf_view_->model_->Add(item); + shelf_view_->model_->Add(item, + std::make_unique<TestShelfItemDelegate>(item.id)); return item.id; }
diff --git a/ash/shelf/shelf_view_unittest.cc b/ash/shelf/shelf_view_unittest.cc index 8cf93238..5dd42ca 100644 --- a/ash/shelf/shelf_view_unittest.cc +++ b/ash/shelf/shelf_view_unittest.cc
@@ -98,6 +98,17 @@ namespace ash { namespace { +class TestShelfItemDelegate : public ShelfItemDelegate { + public: + explicit TestShelfItemDelegate(const ShelfID& shelf_id) + : ShelfItemDelegate(shelf_id) {} + void ExecuteCommand(bool from_context_menu, + int64_t command_id, + int32_t event_flags, + int64_t display_id) override {} + void Close() override {} +}; + int64_t GetPrimaryDisplayId() { return display::Screen::GetScreen()->GetPrimaryDisplay().id(); } @@ -264,7 +275,8 @@ item.id = ShelfID("foo"); item.type = TYPE_APP; EXPECT_FALSE(observer()->icon_positions_changed()); - const int shelf_item_index = ShelfModel::Get()->Add(item); + const int shelf_item_index = ShelfModel::Get()->Add( + item, std::make_unique<TestShelfItemDelegate>(item.id)); shelf_view_test()->RunMessageLoopUntilAnimationsDone(); EXPECT_TRUE(observer()->icon_positions_changed()); observer()->Reset(); @@ -294,7 +306,8 @@ EXPECT_FALSE(second_observer.icon_positions_changed()); // Add item and wait for all animations to finish. - const int shelf_item_index = ShelfModel::Get()->Add(item); + const int shelf_item_index = ShelfModel::Get()->Add( + item, std::make_unique<TestShelfItemDelegate>(item.id)); shelf_view_test()->RunMessageLoopUntilAnimationsDone(); second_shelf_test_api.RunMessageLoopUntilAnimationsDone();
diff --git a/ash/strings/ash_strings_am.xtb b/ash/strings/ash_strings_am.xtb index 16a547d..415b38f 100644 --- a/ash/strings/ash_strings_am.xtb +++ b/ash/strings/ash_strings_am.xtb
@@ -244,6 +244,7 @@ <translation id="2946119680249604491">ግንኑነት ያክሉ</translation> <translation id="2961963223658824723">የሆነ ስህተት ተከስቷል። በጥቂት ሰከንዶች ውስጥ እንደገና ይሞክሩ።</translation> <translation id="2963773877003373896">mod3</translation> +<translation id="296762781903199866">የ<ph name="LANGUAGE" /> የንግግር ፋይሎችን ማውረድ አልተቻለም</translation> <translation id="2970920913501714344">መተግበሪያዎችን፣ ቅጥያዎችን እና ገጽታዎችን ይጫኑ</translation> <translation id="2977598380246111477">ቀጣይ ቁጥር</translation> <translation id="2992327365391326550">የመሣሪያው ማይክሮፎን አዝራር ጠፍቷል።</translation> @@ -348,6 +349,7 @@ <translation id="370665806235115550">በመጫን ላይ…</translation> <translation id="371370241367527062">የፊት ማይክሮፎን</translation> <translation id="3713734891607377840">ሲጠናቀቅ ይክፈቱ</translation> +<translation id="3732269052167349831"><ph name="DESC_TEXT" />፤ በGoogle ፍለጋ ውስጥ ውጤቱን ለማየት መገናኛውን ጠቅ ያድርጉት።</translation> <translation id="3742055079367172538">ቅጽበታዊ ገጽ እይታ ተነስቷል</translation> <translation id="3771549900096082774">ባለከፍተኛ ንፅፅር ሁነታ</translation> <translation id="3773700760453577392">አንድ አስተዳዳሪ ለ<ph name="USER_EMAIL" /> በበርካታ መለያ መግባቶችን ከልክሏል። ለመቀጠል ሁሉም ተጠቃሚዎች ዘግተው መውጣት አለባቸው።</translation> @@ -485,6 +487,7 @@ <translation id="4696813013609194136">በወላጅ ኮድ መሣሪያን ክፈት</translation> <translation id="4702647871202761252">የግላዊነት ማያ ገጽ ጠፍቷል</translation> <translation id="4705716602320768426">የፋይል ግብረመልስ</translation> +<translation id="4706121060329443414">ማውረድ በኋላ ላይ ይሞከራል። ለአሁን ንግግር ለመሰናዳት ወደ Google ይላካል።</translation> <translation id="4731797938093519117">የወላጅ መዳረሻ</translation> <translation id="4734965478015604180">አግድማዊ</translation> <translation id="4735498845456076464"><ph name="LAUNCHER_KEY_NAME" /> + የቁጥር የቁልፍ ሰሌዳ አቋራጭ ተለውጧል። የተግባር ቁልፎችን ለመጠቀም በላይኛው ረድፍ ላይ የ<ph name="LAUNCHER_KEY_NAME" /> ቁልፍ + አንድ ቁልፍ ይጫኑ።</translation> @@ -590,6 +593,7 @@ <translation id="5600837773213129531">የሚነገር ግብረመልስን ለማሰናከል Ctrl + Alt + Z ይጫኑ።</translation> <translation id="5601503069213153581">ፒን</translation> <translation id="5619862035903135339">የአስተዳዳሪ መመሪያ የማያ ገጽ ቀረጻን ያሰናክላል</translation> +<translation id="5620281292257375798">ውስጣዊ ብቻ</translation> <translation id="5625955975703555628">LTE+</translation> <translation id="5648021990716966815">የማይክሮፎን መሰኪያ</translation> <translation id="5662709761327382534">ማይክሮፎን ይቅረጹ <ph name="CURRENT_STATE" />፣ የማይክሮፎን ቀረፃን ለማዞር አስገባን ይጫኑ <ph name="NEW_STATE" /></translation> @@ -657,6 +661,7 @@ <translation id="6073451960410192870">መቅረጽ አቁም</translation> <translation id="607652042414456612">ኮምፒውተርዎ አቅራቢያ ባሉ የብሉቱዝ መሣሪያዎች ሊገኝ የሚችል ነው፣ እና በ<ph name="ADDRESS" /> አድራሻ እንደ «<ph name="NAME" />» ሆኖ ይታያል</translation> <translation id="6094290315941448991">ሚስጥራዊ ይዘት በሚታይበት ጊዜ የአስተዳዳሪ መመሪያ የማያ ገጽ ቀረጻን ያሰናክላል</translation> +<translation id="6114505516289286752"><ph name="LANGUAGE" /> የንግግር ፋይሎች ወርደዋል</translation> <translation id="6119360623251949462"><ph name="CHARGING_STATE" />። <ph name="BATTERY_SAVER_STATE" /></translation> <translation id="612734058257491180">የGoogle ረዳቱ በእንግዳ ክፍለ-ጊዜ ውስጥ አይገኝም።</translation> <translation id="6137566720514957455">ለ<ph name="USER_EMAIL_ADDRESS" /> የአስወግድ መገናኛን ክፈት</translation> @@ -738,6 +743,7 @@ <translation id="6816797338148849397">ከሚገኘው የእርስዎ ምርጫ ጋር የተገናኘ መረጃ ለመድረስ የላይ ቀስት ቁልፍን ይጠቀሙ።</translation> <translation id="6818242057446442178">በቃል ይመለሱ</translation> <translation id="6820676911989879663">እረፍት ይውሰዱ!</translation> +<translation id="6836499262298959512">አደገኛ ፋይል</translation> <translation id="6837064795450991317">የዴስክ አሞሌን ደብቅ</translation> <translation id="6850010208275816200">የአሁኑ መተግበሪያዎ ሙሉ ማያ ገጽ ነው። መተግበሪያው የይለፍ ቃልዎን ከጠየቀ መጀመሪያ ከሙሉ ማያ ገጽ ይውጡ።</translation> <translation id="6852052252232534364">ለማግበር ጠቅ ያድርጉ</translation> @@ -878,6 +884,7 @@ <translation id="7901405293566323524">የስልክ መገናኛ</translation> <translation id="7902625623987030061">የጣት አሻራ ዳሳሹን ይንኩ</translation> <translation id="7904094684485781019">የዚህ መለያ አስተዳዳሪ ባለብዙ መለያ መግባትን ከልክሏል።</translation> +<translation id="7930731167419639574">ንግግር አሁን በመሣሪያው ላይ የሚሰናዳ ነው እና በቃል ማስጻፍ ከመስመር ውጭ ይሰራል</translation> <translation id="7933084174919150729">Google ረዳቱ ለዋናው መገለጫ ብቻ የሚገኝ ነው።</translation> <translation id="79341161159229895">መለያው በ<ph name="FIRST_PARENT_EMAIL" /> እና <ph name="SECOND_PARENT_EMAIL" /> ነው የሚቀናበረው</translation> <translation id="793716872548410480">የእርስዎን ቅንጥብ ሰሌዳ ለመመልከት <ph name="SHORTCUT_KEY_NAME" /> + Vን ይጫኑ። እርስዎ የቀዷቸው የመጨረሻዎቹ 5 ንጥሎች ቅንጥብ ሰሌዳዎ ላይ ተቀምጠዋል።</translation>
diff --git a/ash/strings/ash_strings_ar.xtb b/ash/strings/ash_strings_ar.xtb index 411b1a6..b3a9db6 100644 --- a/ash/strings/ash_strings_ar.xtb +++ b/ash/strings/ash_strings_ar.xtb
@@ -244,6 +244,7 @@ <translation id="2946119680249604491">إضافة اتصال</translation> <translation id="2961963223658824723">حدث خطأ. يُرجى إعادة المحاولة خلال بضع ثوانٍ.</translation> <translation id="2963773877003373896">mod3</translation> +<translation id="296762781903199866">يتعذّر تنزيل ملفات اللغة <ph name="LANGUAGE" /> في ميزة "التعرّف على الكلام"</translation> <translation id="2970920913501714344">تثبيت التطبيقات والإضافات والتصاميم</translation> <translation id="2977598380246111477">الرقم التالي</translation> <translation id="2992327365391326550">زر ميكروفون الجهاز غير مفعَّل.</translation> @@ -348,6 +349,7 @@ <translation id="370665806235115550">جارٍ التحميل...</translation> <translation id="371370241367527062">الميكروفون الأمامي</translation> <translation id="3713734891607377840">فتح الملف بعد اكتمال تنزيله</translation> +<translation id="3732269052167349831"><ph name="DESC_TEXT" />، يمكنك النقر على مربّع الحوار لعرض النتيجة في "بحث Google".</translation> <translation id="3742055079367172538">تم التقاط لقطة الشاشة</translation> <translation id="3771549900096082774">وضع التباين العالي</translation> <translation id="3773700760453577392">منع أحد المشرفين الدخول المتعدد لـ <ph name="USER_EMAIL" />. لذا على جميع المستخدمين تسجيل الخروج للمتابعة.</translation> @@ -485,6 +487,7 @@ <translation id="4696813013609194136">فتح قفل الجهاز باستخدام رمز الوالدين</translation> <translation id="4702647871202761252">تم إيقاف شاشة الخصوصية.</translation> <translation id="4705716602320768426">تقديم تعليقات</translation> +<translation id="4706121060329443414">ستتم إعادة محاولة التنزيل لاحقًا. سيتم إرسال ملفات الكلام إلى Google لمعالجتها الآن.</translation> <translation id="4731797938093519117">وصول أحد الوالدين</translation> <translation id="4734965478015604180">أفقي</translation> <translation id="4735498845456076464">تم تغيير اختصارات لوحة المفاتيح "<ph name="LAUNCHER_KEY_NAME" /> + رقم". لاستخدام مفاتيح الوظائف، اضغط على المفتاح <ph name="LAUNCHER_KEY_NAME" /> مع الضغط على مفتاح في الصف العلوي.</translation> @@ -590,6 +593,7 @@ <translation id="5600837773213129531">اضغط على Ctrl + Alt + Z لإيقاف التعليقات والملاحظات المنطوقة</translation> <translation id="5601503069213153581">رقم التعريف الشخصي</translation> <translation id="5619862035903135339">تحظر سياسة المشرف تصوير الشاشة.</translation> +<translation id="5620281292257375798">داخلي فقط</translation> <translation id="5625955975703555628">LTE+</translation> <translation id="5648021990716966815">مقبس الميكروفون</translation> <translation id="5662709761327382534">التسجيل من الميكروفون <ph name="CURRENT_STATE" />. يمكنك الضغط على مفتاح Enter لضبط إعداد التسجيل من الميكروفون على <ph name="NEW_STATE" />.</translation> @@ -657,6 +661,7 @@ <translation id="6073451960410192870">إيقاف التسجيل</translation> <translation id="607652042414456612">يمكن لأجهزة بلوتوث القريبة اكتشاف جهاز الكمبيوتر وسيظهر كـ "<ph name="NAME" />" بالعنوان <ph name="ADDRESS" /></translation> <translation id="6094290315941448991">تحظر سياسة المشرف ميزة تسجيل الشاشة عند عرض محتوى سري.</translation> +<translation id="6114505516289286752">تم تنزيل ملفات اللغة <ph name="LANGUAGE" /> في ميزة "التعرّف على الكلام"</translation> <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation> <translation id="612734058257491180">لا يتوفر "مساعد Google" في جلسة ضيف.</translation> <translation id="6137566720514957455">فتح مربع الحوار لإزالة الحساب <ph name="USER_EMAIL_ADDRESS" /></translation> @@ -738,6 +743,7 @@ <translation id="6816797338148849397">تتوفّر معلومات ذات صلة باختيارك. يمكنك استخدام مفتاح السهم المتجه للأعلى للوصول إلى هذه المعلومات.</translation> <translation id="6818242057446442178">الرجوع بمقدار كلمة واحدة</translation> <translation id="6820676911989879663">حان وقت الاستراحة</translation> +<translation id="6836499262298959512">ملف ضار</translation> <translation id="6837064795450991317">إخفاء شريط سطح المكتب</translation> <translation id="6850010208275816200">يتم عرض التطبيق الحالي في وضع ملء الشاشة. إذا طلب التطبيق إدخال كلمة المرور، يُرجى أولاً الخروج من وضع ملء الشاشة.</translation> <translation id="6852052252232534364">انقر للتفعيل.</translation> @@ -878,6 +884,7 @@ <translation id="7901405293566323524">Phone Hub</translation> <translation id="7902625623987030061">المس مستشعر بصمات الإصبع.</translation> <translation id="7904094684485781019">لقد حظر مشرف هذا الحساب إمكانية الدخول المتعدد.</translation> +<translation id="7930731167419639574">ميزة "التعرّف على الكلام" جاهزة للعمل الآن على جهازك، كما تعمل ميزة "الإملاء" بلا اتصال بالإنترنت.</translation> <translation id="7933084174919150729">لا يتوفر مساعد Google إلا للملف الشخصي الأساسي.</translation> <translation id="79341161159229895">يُدير <ph name="FIRST_PARENT_EMAIL" /> و<ph name="SECOND_PARENT_EMAIL" /> الحساب.</translation> <translation id="793716872548410480">يُرجى الضغط على <ph name="SHORTCUT_KEY_NAME" /> + V للاطّلاع على الحافظة. تم حفظ آخر 5 عناصر نسختها إلى الحافظة.</translation>
diff --git a/ash/strings/ash_strings_bg.xtb b/ash/strings/ash_strings_bg.xtb index c2621a1..5a97f46 100644 --- a/ash/strings/ash_strings_bg.xtb +++ b/ash/strings/ash_strings_bg.xtb
@@ -244,6 +244,7 @@ <translation id="2946119680249604491">Добавяне на връзка</translation> <translation id="2961963223658824723">Нещо се обърка. Опитайте отново след няколко секунди.</translation> <translation id="2963773877003373896">mod3</translation> +<translation id="296762781903199866">Файловете за говор на <ph name="LANGUAGE" /> не бяха изтеглени</translation> <translation id="2970920913501714344">да инсталира приложения, разширения и теми;</translation> <translation id="2977598380246111477">Следваща цифра</translation> <translation id="2992327365391326550">Бутонът за микрофона на устройството е изключен.</translation> @@ -348,6 +349,7 @@ <translation id="370665806235115550">Зарежда се...</translation> <translation id="371370241367527062">Преден микрофон</translation> <translation id="3713734891607377840">Отваряне, когато е завършено</translation> +<translation id="3732269052167349831"><ph name="DESC_TEXT" />; Кликнете върху диалоговия прозорец, за да прегледате резултата в Google Търсене.</translation> <translation id="3742055079367172538">Направена бе екранна снимка</translation> <translation id="3771549900096082774">Режим на висок контраст</translation> <translation id="3773700760453577392">Администратор е деактивирал централизирания вход за <ph name="USER_EMAIL" />. За да се продължи, всички потребители трябва да излязат от профилите си.</translation> @@ -485,6 +487,7 @@ <translation id="4696813013609194136">Отключване на устройството с код на родител</translation> <translation id="4702647871202761252">Екранът за поверителност е изключен</translation> <translation id="4705716602320768426">Изпращане на отзиви</translation> +<translation id="4706121060329443414">По-късно ще се направи опит за изтегляне. Засега говорът ще бъде изпратен до Google за обработка.</translation> <translation id="4731797938093519117">Достъп на родител</translation> <translation id="4734965478015604180">Хоризонтално</translation> <translation id="4735498845456076464">Клавишната комбинация клавиш „<ph name="LAUNCHER_KEY_NAME" />“ + цифра се промени. За да използвате функционалните клавиши, натиснете „<ph name="LAUNCHER_KEY_NAME" />“ + клавиш от най-горния ред.</translation> @@ -590,6 +593,7 @@ <translation id="5600837773213129531">Натиснете Ctrl + Alt + Z, за да деактивирате обратната връзка с говор.</translation> <translation id="5601503069213153581">ПИН код</translation> <translation id="5619862035903135339">Заснемането на екрана е деактивирано чрез администраторско правило</translation> +<translation id="5620281292257375798">Само за вътрешно ползване</translation> <translation id="5625955975703555628">LTE+</translation> <translation id="5648021990716966815">Жак за микрофон</translation> <translation id="5662709761327382534">Записването от микрофона e <ph name="CURRENT_STATE" />. Натиснете Enter, за да бъде <ph name="NEW_STATE" /></translation> @@ -657,6 +661,7 @@ <translation id="6073451960410192870">Спиране на записа</translation> <translation id="607652042414456612">Компютърът ви е откриваем за устройства с Bluetooth наблизо и ще се показва като „<ph name="NAME" />“ с адрес <ph name="ADDRESS" /></translation> <translation id="6094290315941448991">Записването на екрана, когато се вижда поверително съдържание, е деактивирано чрез администраторско правило</translation> +<translation id="6114505516289286752">Файловете за говор на <ph name="LANGUAGE" /> бяха изтеглени</translation> <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation> <translation id="612734058257491180">Google Асистент не се поддържа по време на сесия като гост.</translation> <translation id="6137566720514957455">Отваряне на диалоговия прозорец за премахване на профила <ph name="USER_EMAIL_ADDRESS" /></translation> @@ -738,6 +743,7 @@ <translation id="6816797338148849397">Има информация, свързана с избраното от вас. За достъп използвайте стрелката нагоре.</translation> <translation id="6818242057446442178">Придвижване назад с една дума</translation> <translation id="6820676911989879663">Време е за почивка!</translation> +<translation id="6836499262298959512">Опасен файл</translation> <translation id="6837064795450991317">Скриване на лентата с работни кътове</translation> <translation id="6850010208275816200">Текущото приложение е в режим на цял екран. Ако то поиска да въведете паролата си, първо излезте от този режим.</translation> <translation id="6852052252232534364">Кликнете за активиране</translation> @@ -878,6 +884,7 @@ <translation id="7901405293566323524">Център за телефоните</translation> <translation id="7902625623987030061">Докоснете сензора за отпечатъци</translation> <translation id="7904094684485781019">Администраторът на този профил е забранил централизирания вход.</translation> +<translation id="7930731167419639574">Говорът вече се обработва локално, а диктуването работи офлайн</translation> <translation id="7933084174919150729">Google Асистент е налице само за основния потребителски профил.</translation> <translation id="79341161159229895">Профилът се управлява от <ph name="FIRST_PARENT_EMAIL" /> и <ph name="SECOND_PARENT_EMAIL" /></translation> <translation id="793716872548410480">Натиснете <ph name="SHORTCUT_KEY_NAME" /> + V, за да видите буферната памет. В нея се запазват последните 5 неща, които сте копирали.</translation>
diff --git a/ash/strings/ash_strings_bs.xtb b/ash/strings/ash_strings_bs.xtb index 3281c56..19c9654 100644 --- a/ash/strings/ash_strings_bs.xtb +++ b/ash/strings/ash_strings_bs.xtb
@@ -244,6 +244,7 @@ <translation id="2946119680249604491">Dodaj vezu</translation> <translation id="2961963223658824723">Nešto nije uredu. Pokušajte ponovo za nekoliko sekundi.</translation> <translation id="2963773877003373896">mod3</translation> +<translation id="296762781903199866">Preuzimanje fajlova govora na jeziku <ph name="LANGUAGE" /> nije uspjelo</translation> <translation id="2970920913501714344">Instaliranje aplikacija, proširenja i tema</translation> <translation id="2977598380246111477">Sljedeći broj</translation> <translation id="2992327365391326550">Dugme za mikrofon uređaja je isključeno.</translation> @@ -348,6 +349,7 @@ <translation id="370665806235115550">Učitavanje...</translation> <translation id="371370241367527062">Prednji mikrofon</translation> <translation id="3713734891607377840">Otvori kada se završi</translation> +<translation id="3732269052167349831"><ph name="DESC_TEXT" />; Kliknite na dijaloški okvir da vidite rezultate na Google Pretraživanju.</translation> <translation id="3742055079367172538">Snimak ekrana je napravljen</translation> <translation id="3771549900096082774">Način rada visokog kontrasta</translation> <translation id="3773700760453577392">Administrator nije dozvolio višestruku prijavu za korisnika <ph name="USER_EMAIL" />. Svi korisnici se moraju odjaviti kako bi se nastavilo.</translation> @@ -485,6 +487,7 @@ <translation id="4696813013609194136">Otključajte uređaj pomoću koda roditelja</translation> <translation id="4702647871202761252">Ekran za privatnost je isključen</translation> <translation id="4705716602320768426">Pošaljite povratne informacije</translation> +<translation id="4706121060329443414">Pokušaj preuzimanja će se izvršiti kasnije. Govor će se odmah poslati Googleu na obradu.</translation> <translation id="4731797938093519117">Pristup roditelja</translation> <translation id="4734965478015604180">Horizontalno</translation> <translation id="4735498845456076464">Prečica na tastaturi <ph name="LAUNCHER_KEY_NAME" /> + broj je promijenjena. Da koristite funkcijske tipke, pritisnite tipku <ph name="LAUNCHER_KEY_NAME" /> + tipku u gornjem redu.</translation> @@ -590,6 +593,7 @@ <translation id="5600837773213129531">Pritisnite Ctrl + Alt + Z da onemogućite izgovaranje povratnih informacija.</translation> <translation id="5601503069213153581">PIN</translation> <translation id="5619862035903135339">Administratorska pravila onemogućavaju snimanje ekrana</translation> +<translation id="5620281292257375798">Samo interno</translation> <translation id="5625955975703555628">LTE+</translation> <translation id="5648021990716966815">Utičnica mikrofona</translation> <translation id="5662709761327382534">Snimanje zvuka putem mikrofona je <ph name="CURRENT_STATE" />. Pritisnite Enter da postavite snimanje zvuka putem mikrofona na <ph name="NEW_STATE" /></translation> @@ -657,6 +661,7 @@ <translation id="6073451960410192870">Zaustavi snimanje</translation> <translation id="607652042414456612">Vaš računar je vidljiv Bluetooth uređajima u blizini i pojavit će se kao "<ph name="NAME" />" s adresom <ph name="ADDRESS" /></translation> <translation id="6094290315941448991">Administratorska pravila onemogućavaju snimanje ekrana kada je prisutan povjerljivi sadržaj</translation> +<translation id="6114505516289286752">Fajlovi govora na jeziku <ph name="LANGUAGE" /> su preuzeti</translation> <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation> <translation id="612734058257491180">Google Asistent nije dostupan u sesiji gosta.</translation> <translation id="6137566720514957455">Otvaranje dijaloškog okvira za uklanjanje korisnika <ph name="USER_EMAIL_ADDRESS" /></translation> @@ -738,6 +743,7 @@ <translation id="6816797338148849397">Dostupne su informacije u vezi s vašim odabirom. Pristupite tipkom strelice nagore.</translation> <translation id="6818242057446442178">Riječ unazad</translation> <translation id="6820676911989879663">Odmori se!</translation> +<translation id="6836499262298959512">Opasan fajl</translation> <translation id="6837064795450991317">Sakrij traku radne površine</translation> <translation id="6850010208275816200">Trenutna aplikacija je prikazana preko cijelog ekrana. Ako vam aplikacija zatraži lozinku, prvo izađite iz prikaza preko cijelog ekrana.</translation> <translation id="6852052252232534364">Kliknite da aktivirate</translation> @@ -878,6 +884,7 @@ <translation id="7901405293566323524">Hub telefona</translation> <translation id="7902625623987030061">Dodirnite senzor za otisak prsta</translation> <translation id="7904094684485781019">Administrator ovog računa nije dozvolio višestruku prijavu.</translation> +<translation id="7930731167419639574">Govor se sada obrađuje lokalno i Diktiranje radi offline</translation> <translation id="7933084174919150729">Google Asistent je dostupan samo za primarni profil.</translation> <translation id="79341161159229895">Računom upravlja <ph name="FIRST_PARENT_EMAIL" /> i <ph name="SECOND_PARENT_EMAIL" /></translation> <translation id="793716872548410480">Pritisnite <ph name="SHORTCUT_KEY_NAME" /> + V da vidite međumemoriju. Posljednjih 5 kopiranih stavki se pohranjuje u međumemoriju.</translation>
diff --git a/ash/strings/ash_strings_ca.xtb b/ash/strings/ash_strings_ca.xtb index 9c46be6..921c3451 100644 --- a/ash/strings/ash_strings_ca.xtb +++ b/ash/strings/ash_strings_ca.xtb
@@ -244,6 +244,7 @@ <translation id="2946119680249604491">Afegeix una connexió</translation> <translation id="2961963223658824723">S'ha produït un error. Torna-ho a provar d'aquí a uns quants segons.</translation> <translation id="2963773877003373896">mod3</translation> +<translation id="296762781903199866">No s'han pogut baixar els fitxers de veu en <ph name="LANGUAGE" /></translation> <translation id="2970920913501714344">Instal·lar aplicacions, extensions i temes.</translation> <translation id="2977598380246111477">Número següent</translation> <translation id="2992327365391326550">El botó del micròfon del dispositiu està desactivat.</translation> @@ -348,6 +349,7 @@ <translation id="370665806235115550">S'està carregant...</translation> <translation id="371370241367527062">Micròfon frontal</translation> <translation id="3713734891607377840">Obre'l en acabar</translation> +<translation id="3732269052167349831"><ph name="DESC_TEXT" />; fes clic al quadre de diàleg per veure el resultat a Cerca de Google</translation> <translation id="3742055079367172538">Captura de pantalla feta</translation> <translation id="3771549900096082774">Mode d'alt contrast</translation> <translation id="3773700760453577392">Un administrador ha desactivat l'inici de sessió múltiple per a <ph name="USER_EMAIL" />. Tots els usuaris han de tancar la sessió per continuar.</translation> @@ -485,6 +487,7 @@ <translation id="4696813013609194136">Desbloqueja el dispositiu amb el codi parental</translation> <translation id="4702647871202761252">La pantalla de privadesa està desactivada</translation> <translation id="4705716602320768426">Envia suggeriments</translation> +<translation id="4706121060329443414">La baixada s'intentarà més tard. Per ara, la parla s'enviarà a Google perquè la processi.</translation> <translation id="4731797938093519117">Accés parental</translation> <translation id="4734965478015604180">Horitzontal</translation> <translation id="4735498845456076464">La tecla de drecera <ph name="LAUNCHER_KEY_NAME" />+número ha canviat. Per fer servir les tecles de funció, prem la tecla <ph name="LAUNCHER_KEY_NAME" />+una tecla de la fila superior.</translation> @@ -590,6 +593,7 @@ <translation id="5600837773213129531">Prem Ctrl+Alt+Z per desactivar els avisos de veu.</translation> <translation id="5601503069213153581">PIN</translation> <translation id="5619862035903135339">La política de l'administrador desactiva la captura de pantalla</translation> +<translation id="5620281292257375798">Només intern</translation> <translation id="5625955975703555628">LTE+</translation> <translation id="5648021990716966815">Connector per al micròfon</translation> <translation id="5662709761327382534">Grava el micròfon <ph name="CURRENT_STATE" />. Prem Retorn per canviar la gravació del micròfon a <ph name="NEW_STATE" /></translation> @@ -657,6 +661,7 @@ <translation id="6073451960410192870">Atura la gravació</translation> <translation id="607652042414456612">El vostre ordinador està visible als dispositius Bluetooth propers i apareixerà com a "<ph name="NAME" />" amb l'adreça <ph name="ADDRESS" />.</translation> <translation id="6094290315941448991">La política de l'administrador desactiva la gravació de pantalla quan es mostra contingut confidencial</translation> +<translation id="6114505516289286752">S'han baixat fitxers de veu en <ph name="LANGUAGE" /></translation> <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" />.</translation> <translation id="612734058257491180">L'Assistent de Google no està disponible a les sessions de convidat.</translation> <translation id="6137566720514957455">Obre el quadre de diàleg per suprimir <ph name="USER_EMAIL_ADDRESS" /></translation> @@ -738,6 +743,7 @@ <translation id="6816797338148849397">Hi ha disponible informació relacionada amb la teva selecció. Utilitza la tecla de fletxa amunt per accedir-hi.</translation> <translation id="6818242057446442178">Enrere per paraula</translation> <translation id="6820676911989879663">Fes una pausa</translation> +<translation id="6836499262298959512">Fitxer perillós</translation> <translation id="6837064795450991317">Amaga la barra d'escriptori</translation> <translation id="6850010208275816200">L'aplicació actual està oberta en pantalla completa. Si et demana la contrasenya, primer has de sortir de la pantalla completa.</translation> <translation id="6852052252232534364">Clic per activar</translation> @@ -878,6 +884,7 @@ <translation id="7901405293566323524">Phone Hub</translation> <translation id="7902625623987030061">Toca el sensor d'empremtes digitals</translation> <translation id="7904094684485781019">L'administrador d'aquest compte no ha permès l'inici de sessió múltiple.</translation> +<translation id="7930731167419639574">La parla ara es processa localment i l'opció de dictat funciona sense connexió.</translation> <translation id="7933084174919150729">L'Assistent de Google només està disponible per al perfil principal.</translation> <translation id="79341161159229895">Compte gestionat per <ph name="FIRST_PARENT_EMAIL" /> i <ph name="SECOND_PARENT_EMAIL" /></translation> <translation id="793716872548410480">Prem <ph name="SHORTCUT_KEY_NAME" />+V per veure el porta-retalls. Els 5 darrers elements que has copiat estan desats al porta-retalls.</translation>
diff --git a/ash/strings/ash_strings_da.xtb b/ash/strings/ash_strings_da.xtb index c8a80fa..8aded86 100644 --- a/ash/strings/ash_strings_da.xtb +++ b/ash/strings/ash_strings_da.xtb
@@ -244,6 +244,7 @@ <translation id="2946119680249604491">Tilføj forbindelse</translation> <translation id="2961963223658824723">Noget gik galt. Prøv igen om et par sekunder.</translation> <translation id="2963773877003373896">mod3</translation> +<translation id="296762781903199866"><ph name="LANGUAGE" /> talefiler kunne ikke downloades</translation> <translation id="2970920913501714344">Installer apps, udvidelser og temaer</translation> <translation id="2977598380246111477">Næste tal</translation> <translation id="2992327365391326550">Enhedens mikrofonknap er slået fra.</translation> @@ -348,6 +349,7 @@ <translation id="370665806235115550">Indlæser...</translation> <translation id="371370241367527062">Mikrofon på forsiden</translation> <translation id="3713734891607377840">Åbn efter download</translation> +<translation id="3732269052167349831"><ph name="DESC_TEXT" /> – klik på dialogboksen for at se resultatet i Google Søgning.</translation> <translation id="3742055079367172538">Screenshottet blev gemt</translation> <translation id="3771549900096082774">Tilstanden Høj kontrast</translation> <translation id="3773700760453577392">En administrator har afvist samlet login fra flere konti for <ph name="USER_EMAIL" />. Alle brugere skal logge ud for at fortsætte.</translation> @@ -485,6 +487,7 @@ <translation id="4696813013609194136">Lås enheden op med forældrekode</translation> <translation id="4702647871202761252">Privatlivsskærmen er slået fra</translation> <translation id="4705716602320768426">Giv feedback</translation> +<translation id="4706121060329443414">Downloaden forsøges senere. Tale sendes i mellemtiden til behandling hos Google.</translation> <translation id="4731797938093519117">Forældreadgang</translation> <translation id="4734965478015604180">Vandret</translation> <translation id="4735498845456076464">Tastaturgenvejen <ph name="LAUNCHER_KEY_NAME" />+numerisk tast er blevet ændret. Hvis du vil bruge funktionstaster, skal du trykke på tasten <ph name="LAUNCHER_KEY_NAME" />+en tast i øverste række.</translation> @@ -590,6 +593,7 @@ <translation id="5600837773213129531">Tryk på Ctrl+Alt+Z for at deaktivere talefeedback.</translation> <translation id="5601503069213153581">Pinkode</translation> <translation id="5619862035903135339">Administratorpolitikken tillader ikke screenshots</translation> +<translation id="5620281292257375798">Kun internt</translation> <translation id="5625955975703555628">LTE+</translation> <translation id="5648021990716966815">Stik til mikrofon</translation> <translation id="5662709761327382534">Optag mikrofon er slået <ph name="CURRENT_STATE" />, tryk på Enter for at slå optagelse af mikrofon <ph name="NEW_STATE" /></translation> @@ -657,6 +661,7 @@ <translation id="6073451960410192870">Stop optagelse</translation> <translation id="607652042414456612">Din computer kan registreres af Bluetooth-enheder i nærheden, og den vil blive vist som "<ph name="NAME" />" med adressen <ph name="ADDRESS" /></translation> <translation id="6094290315941448991">Administratorpolitikken deaktiverer skærmoptagelse, når fortroligt indhold er synligt</translation> +<translation id="6114505516289286752"><ph name="LANGUAGE" /> talefiler blev downloadet</translation> <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation> <translation id="612734058257491180">Google Assistent er ikke tilgængelig i en gæstesession.</translation> <translation id="6137566720514957455">Åbn dialogboksen til fjernelse for <ph name="USER_EMAIL_ADDRESS" /></translation> @@ -738,6 +743,7 @@ <translation id="6816797338148849397">Du kan få oplysninger om det, du har markeret. Tryk på pil op for at se oplysningerne.</translation> <translation id="6818242057446442178">Et ord tilbage</translation> <translation id="6820676911989879663">Hold en pause</translation> +<translation id="6836499262298959512">Farlig fil</translation> <translation id="6837064795450991317">Skjul diskbjælke</translation> <translation id="6850010208275816200">Din aktuelle app er åbnet i fuld skærm. Afslut fuld skærm, hvis appen beder dig om at angive din adgangskode.</translation> <translation id="6852052252232534364">Aktivér</translation> @@ -878,6 +884,7 @@ <translation id="7901405293566323524">Phone Hub</translation> <translation id="7902625623987030061">Sæt finger på fingeraftrykslæser</translation> <translation id="7904094684485781019">Administratoren for denne konto tillader ikke samlet login fra flere konti.</translation> +<translation id="7930731167419639574">Tale behandles nu lokalt, og diktering kan bruges offline</translation> <translation id="7933084174919150729">Google Assistent kan kun bruges via den primære profil.</translation> <translation id="79341161159229895">Kontoen administreres af <ph name="FIRST_PARENT_EMAIL" /> og <ph name="SECOND_PARENT_EMAIL" /></translation> <translation id="793716872548410480">Tryk på <ph name="SHORTCUT_KEY_NAME" />+V for at se din udklipsholder. De seneste fem elementer, du har kopieret, gemmes i din udklipsholder.</translation>
diff --git a/ash/strings/ash_strings_el.xtb b/ash/strings/ash_strings_el.xtb index 9f9cbdb..21b3f4d 100644 --- a/ash/strings/ash_strings_el.xtb +++ b/ash/strings/ash_strings_el.xtb
@@ -244,6 +244,7 @@ <translation id="2946119680249604491">Προσθήκη σύνδεσης</translation> <translation id="2961963223658824723">Δυστυχώς, παρουσιάστηκε κάποιο πρόβλημα. Δοκιμάστε ξανά σε λίγα δευτερόλεπτα.</translation> <translation id="2963773877003373896">mod3</translation> +<translation id="296762781903199866">Δεν ήταν δυνατή η λήψη αρχείων ομιλίας στα <ph name="LANGUAGE" /></translation> <translation id="2970920913501714344">Εγκαταστήσει εφαρμογές, επεκτάσεις και θέματα</translation> <translation id="2977598380246111477">Επόμενος αριθμός</translation> <translation id="2992327365391326550">Το κουμπί μικροφώνου της συσκευής είναι απενεργοποιημένο.</translation> @@ -348,6 +349,7 @@ <translation id="370665806235115550">Φόρτωση...</translation> <translation id="371370241367527062">Μπροστινό μικρόφωνο</translation> <translation id="3713734891607377840">Άνοιγμα όταν ολοκληρωθεί</translation> +<translation id="3732269052167349831"><ph name="DESC_TEXT" />. Κάντε κλικ στο παράθυρο διαλόγου για να δείτε το αποτέλεσμα στην Αναζήτηση Google.</translation> <translation id="3742055079367172538">Το στιγμιότυπο οθόνης έχει ληφθεί</translation> <translation id="3771549900096082774">Λειτουργία υψηλής αντίθεσης</translation> <translation id="3773700760453577392">Ένας διαχειριστής δεν επιτρέπει τη σύνδεση σε πολλούς λογαριασμούς για τον χρήστη <ph name="USER_EMAIL" />. Όλοι οι χρήστες πρέπει να αποσυνδεθούν για να συνεχίσετε.</translation> @@ -485,6 +487,7 @@ <translation id="4696813013609194136">Ξεκλείδωμα συσκευής με κωδικό γονέα</translation> <translation id="4702647871202761252">Η οθόνη απορρήτου είναι απενεργοποιημένη.</translation> <translation id="4705716602320768426">Υποβολή σχολίων</translation> +<translation id="4706121060329443414">Θα γίνει προσπάθεια για λήψη αργότερα. Προς το παρόν, η ομιλία θα σταλεί στην Google για επεξεργασία.</translation> <translation id="4731797938093519117">Γονική πρόσβαση</translation> <translation id="4734965478015604180">Οριζόντια περιστροφή</translation> <translation id="4735498845456076464">Η συντόμευση πληκτρολογίου <ph name="LAUNCHER_KEY_NAME" /> + Αριθμός άλλαξε. Για να χρησιμοποιήσετε τα πλήκτρα λειτουργιών, πατήστε το πλήκτρο <ph name="LAUNCHER_KEY_NAME" /> + ένα πλήκτρο στην επάνω σειρά.</translation> @@ -590,6 +593,7 @@ <translation id="5600837773213129531">Πιέστε Ctrl + Alt + Z, για να απενεργοποιήσετε τα εκφωνημένα σχόλια.</translation> <translation id="5601503069213153581">PIN</translation> <translation id="5619862035903135339">Η πολιτική διαχειριστή απενεργοποιεί τη λήψη οθόνης.</translation> +<translation id="5620281292257375798">Εσωτερική χρήση μόνο</translation> <translation id="5625955975703555628">LTE+</translation> <translation id="5648021990716966815">Υποδοχή μικροφώνου</translation> <translation id="5662709761327382534">Εγγραφή μικροφώνου <ph name="CURRENT_STATE" />. Πατήστε Enter για να ενεργοποιήσετε την εγγραφή μικροφώνου <ph name="NEW_STATE" />.</translation> @@ -657,6 +661,7 @@ <translation id="6073451960410192870">Διακοπή εγγραφής</translation> <translation id="607652042414456612">Ο υπολογιστής σας μπορεί να εντοπιστεί από κοντινές συσκευές Bluetooth και θα εμφανίζεται ως "<ph name="NAME" />" με διεύθυνση <ph name="ADDRESS" /></translation> <translation id="6094290315941448991">Η πολιτική διαχειριστή απενεργοποιεί την εγγραφή οθόνης όταν είναι ορατό εμπιστευτικό περιεχόμενο.</translation> +<translation id="6114505516289286752">Έγινε λήψη των αρχείων ομιλίας στα <ph name="LANGUAGE" /></translation> <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" />.</translation> <translation id="612734058257491180">Ο Βοηθός Google δεν είναι διαθέσιμος σε περιόδους σύνδεσης επισκέπτη.</translation> <translation id="6137566720514957455">Άνοιγμα παραθύρου διαλόγου κατάργησης για το <ph name="USER_EMAIL_ADDRESS" /></translation> @@ -738,6 +743,7 @@ <translation id="6816797338148849397">Πληροφορίες που σχετίζονται με τη διαθέσιμη επιλογή σας. Χρησιμοποιήστε το πλήκτρο πάνω βέλους για πρόσβαση.</translation> <translation id="6818242057446442178">Πίσω ανά λέξη</translation> <translation id="6820676911989879663">Κάντε ένα διάλειμμα!</translation> +<translation id="6836499262298959512">Επικίνδυνο αρχείο</translation> <translation id="6837064795450991317">Απόκρυψη της γραμμής γραφείων</translation> <translation id="6850010208275816200">Η τρέχουσα εφαρμογή σας βρίσκεται σε πλήρη οθόνη. Εάν η εφαρμογή ζητήσει τον κωδικό πρόσβασής σας, εξέλθετε πρώτα από την πλήρη οθόνη.</translation> <translation id="6852052252232534364">Κλικ για ενεργ.</translation> @@ -878,6 +884,7 @@ <translation id="7901405293566323524">Phone Hub</translation> <translation id="7902625623987030061">Αγγίξτε τον αισθητήρα δακτυλικών αποτυπωμάτων.</translation> <translation id="7904094684485781019">Ο διαχειριστής αυτού του λογαριασμού δεν έχει επιτρέψει τις πολλαπλές συνδέσεις.</translation> +<translation id="7930731167419639574">Η επεξεργασία της ομιλίας γίνεται πλέον τοπικά και η υπαγόρευση λειτουργεί εκτός σύνδεσης.</translation> <translation id="7933084174919150729">Ο Βοηθός Google είναι διαθέσιμος μόνο για το κύριο προφίλ.</translation> <translation id="79341161159229895">Ο λογαριασμός είναι διαχειριζόμενος από τους χρήστες <ph name="FIRST_PARENT_EMAIL" /> και <ph name="SECOND_PARENT_EMAIL" /></translation> <translation id="793716872548410480">Πιέστε <ph name="SHORTCUT_KEY_NAME" /> + V για να δείτε το πρόχειρο. Τα τελευταία 5 στοιχεία που αντιγράψατε αποθηκεύονται στο πρόχειρο.</translation>
diff --git a/ash/strings/ash_strings_en-GB.xtb b/ash/strings/ash_strings_en-GB.xtb index c9f2e81..ca89335c 100644 --- a/ash/strings/ash_strings_en-GB.xtb +++ b/ash/strings/ash_strings_en-GB.xtb
@@ -244,6 +244,7 @@ <translation id="2946119680249604491">Add connection</translation> <translation id="2961963223658824723">Something went wrong. Try again in a few seconds.</translation> <translation id="2963773877003373896">mod3</translation> +<translation id="296762781903199866">Couldn't download <ph name="LANGUAGE" /> speech files</translation> <translation id="2970920913501714344">Install apps, extensions and themes</translation> <translation id="2977598380246111477">Next number</translation> <translation id="2992327365391326550">Device's microphone button is turned off.</translation> @@ -348,6 +349,7 @@ <translation id="370665806235115550">Loading...</translation> <translation id="371370241367527062">Front microphone</translation> <translation id="3713734891607377840">Open when complete</translation> +<translation id="3732269052167349831"><ph name="DESC_TEXT" />; click the dialogue to see result in Google Search.</translation> <translation id="3742055079367172538">Screenshot taken</translation> <translation id="3771549900096082774">High contrast mode</translation> <translation id="3773700760453577392">An administrator has disallowed multiple sign-in for <ph name="USER_EMAIL" />. All users must sign out to continue.</translation> @@ -485,6 +487,7 @@ <translation id="4696813013609194136">Unlock device with parent code</translation> <translation id="4702647871202761252">Privacy screen is off</translation> <translation id="4705716602320768426">File feedback</translation> +<translation id="4706121060329443414">Download will be attempted later. Speech will be sent to Google for processing for now.</translation> <translation id="4731797938093519117">Parent access</translation> <translation id="4734965478015604180">Horizontal</translation> <translation id="4735498845456076464">The <ph name="LAUNCHER_KEY_NAME" /> + number keyboard shortcut has changed. To use function keys, press the <ph name="LAUNCHER_KEY_NAME" /> key + a key on the top row.</translation> @@ -590,6 +593,7 @@ <translation id="5600837773213129531">Press Ctrl + Alt + Z to disable spoken feedback.</translation> <translation id="5601503069213153581">PIN</translation> <translation id="5619862035903135339">Administrator policy disables screen capture</translation> +<translation id="5620281292257375798">Internal only</translation> <translation id="5625955975703555628">LTE+</translation> <translation id="5648021990716966815">Mic jack</translation> <translation id="5662709761327382534">Record microphone <ph name="CURRENT_STATE" />, press enter to turn microphone recording <ph name="NEW_STATE" /></translation> @@ -657,6 +661,7 @@ <translation id="6073451960410192870">Stop recording</translation> <translation id="607652042414456612">Your computer is discoverable to nearby Bluetooth devices and will appear as "<ph name="NAME" />" with address <ph name="ADDRESS" /></translation> <translation id="6094290315941448991">Administrator policy disables screen recording when confidential content is visible</translation> +<translation id="6114505516289286752"><ph name="LANGUAGE" /> speech files downloaded</translation> <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation> <translation id="612734058257491180">The Google Assistant is not available in a guest session.</translation> <translation id="6137566720514957455">Open remove dialogue for <ph name="USER_EMAIL_ADDRESS" /></translation> @@ -738,6 +743,7 @@ <translation id="6816797338148849397">Info related to your selection available. Use the up arrow key to access.</translation> <translation id="6818242057446442178">Back by word</translation> <translation id="6820676911989879663">Take a break!</translation> +<translation id="6836499262298959512">Dangerous file</translation> <translation id="6837064795450991317">Hide deskbar</translation> <translation id="6850010208275816200">Your current app is full screen. If the app asks for your password, exit full screen first.</translation> <translation id="6852052252232534364">Click to activate</translation> @@ -878,6 +884,7 @@ <translation id="7901405293566323524">Phone Hub</translation> <translation id="7902625623987030061">Touch the fingerprint sensor</translation> <translation id="7904094684485781019">The administrator for this account has disallowed multiple sign-in.</translation> +<translation id="7930731167419639574">Speech is now processed locally and dictation works offline</translation> <translation id="7933084174919150729">The Google Assistant is only available for primary profile.</translation> <translation id="79341161159229895">Account managed by <ph name="FIRST_PARENT_EMAIL" /> and <ph name="SECOND_PARENT_EMAIL" /></translation> <translation id="793716872548410480">Press <ph name="SHORTCUT_KEY_NAME" /> + V to view your clipboard. The last five items that you've copied are saved to your clipboard.</translation>
diff --git a/ash/strings/ash_strings_es.xtb b/ash/strings/ash_strings_es.xtb index 1c4a0d80..bd39ebad 100644 --- a/ash/strings/ash_strings_es.xtb +++ b/ash/strings/ash_strings_es.xtb
@@ -244,6 +244,7 @@ <translation id="2946119680249604491">Añadir conexión</translation> <translation id="2961963223658824723">Se ha producido un error. Vuelve a intentarlo en unos segundos.</translation> <translation id="2963773877003373896">mod3</translation> +<translation id="296762781903199866">No se han podido descargar los archivos de voz en <ph name="LANGUAGE" /></translation> <translation id="2970920913501714344">Instalar aplicaciones, extensiones y temas</translation> <translation id="2977598380246111477">Número siguiente</translation> <translation id="2992327365391326550">El botón del micrófono del dispositivo está desactivado.</translation> @@ -348,6 +349,7 @@ <translation id="370665806235115550">Cargando...</translation> <translation id="371370241367527062">Micrófono delantero</translation> <translation id="3713734891607377840">Abrir al terminar</translation> +<translation id="3732269052167349831"><ph name="DESC_TEXT" />; haz clic en el cuadro de diálogo para ver el resultado en la Búsqueda de Google.</translation> <translation id="3742055079367172538">Captura de pantalla hecha</translation> <translation id="3771549900096082774">Modo de contraste alto</translation> <translation id="3773700760453577392">Un administrador ha inhabilitado el inicio de sesión múltiple para <ph name="USER_EMAIL" />. @@ -486,6 +488,7 @@ <translation id="4696813013609194136">Desbloquear con código parental</translation> <translation id="4702647871202761252">La pantalla de privacidad está desactivada</translation> <translation id="4705716602320768426">Comentarios sobre el archivo</translation> +<translation id="4706121060329443414">Se intentarán descargar más tarde. De momento, se enviará la voz a Google para procesarse.</translation> <translation id="4731797938093519117">Acceso parental</translation> <translation id="4734965478015604180">Horizontal</translation> <translation id="4735498845456076464">La combinación de teclas <ph name="LAUNCHER_KEY_NAME" /> + número ha cambiado. Para usar las teclas de funciones, pulsa la tecla <ph name="LAUNCHER_KEY_NAME" /> + una tecla de la fila superior.</translation> @@ -591,6 +594,7 @@ <translation id="5600837773213129531">Pulsa Ctrl + Alt + Z para inhabilitar los mensajes de voz.</translation> <translation id="5601503069213153581">PIN</translation> <translation id="5619862035903135339">La política del administrador inhabilita la captura de pantalla</translation> +<translation id="5620281292257375798">Solo para uso interno</translation> <translation id="5625955975703555628">LTE+</translation> <translation id="5648021990716966815">Conector jack para micrófono</translation> <translation id="5662709761327382534">Grabar micrófono <ph name="CURRENT_STATE" />. Pulsa Intro para cambiar el estado de grabación del micrófono a <ph name="NEW_STATE" /></translation> @@ -658,6 +662,7 @@ <translation id="6073451960410192870">Detener grabación</translation> <translation id="607652042414456612">Tu ordenador es visible para dispositivos Bluetooth cercanos y aparecerá como "<ph name="NAME" />" con la dirección <ph name="ADDRESS" /></translation> <translation id="6094290315941448991">La política del administrador inhabilita la grabación de pantalla cuando se muestra contenido confidencial</translation> +<translation id="6114505516289286752">Archivos de voz en <ph name="LANGUAGE" /> descargados</translation> <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation> <translation id="612734058257491180">El Asistente de Google no está disponible en las sesiones de invitado.</translation> <translation id="6137566720514957455">Abre el cuadro de diálogo para quitar la cuenta de <ph name="USER_EMAIL_ADDRESS" /></translation> @@ -739,6 +744,7 @@ <translation id="6816797338148849397">Hay disponible información relacionada con tu selección. Utiliza la flecha hacia arriba para consultarla.</translation> <translation id="6818242057446442178">Retroceder por palabra</translation> <translation id="6820676911989879663">Haz una pausa</translation> +<translation id="6836499262298959512">Archivo peligroso</translation> <translation id="6837064795450991317">Ocultar barra de escritorio</translation> <translation id="6850010208275816200">La aplicación actual está en pantalla completa. Si la aplicación te pide la contraseña, primero sal del modo de pantalla completa.</translation> <translation id="6852052252232534364">Clic para activar</translation> @@ -879,6 +885,7 @@ <translation id="7901405293566323524">Phone Hub</translation> <translation id="7902625623987030061">Toca el sensor de huellas digitales</translation> <translation id="7904094684485781019">El administrador de esta cuenta ha inhabilitado el inicio de sesión múltiple.</translation> +<translation id="7930731167419639574">Ahora la voz se procesa de forma local y el dictado funciona sin conexión.</translation> <translation id="7933084174919150729">El Asistente de Google solo está disponible en el perfil principal.</translation> <translation id="79341161159229895">Cuenta gestionada por <ph name="FIRST_PARENT_EMAIL" /> y <ph name="SECOND_PARENT_EMAIL" /></translation> <translation id="793716872548410480">Pulsa <ph name="SHORTCUT_KEY_NAME" /> + V para ver el portapapeles, que guarda los 5 últimos elementos que hayas copiado.</translation>
diff --git a/ash/strings/ash_strings_et.xtb b/ash/strings/ash_strings_et.xtb index bd8de02..6825e6a 100644 --- a/ash/strings/ash_strings_et.xtb +++ b/ash/strings/ash_strings_et.xtb
@@ -244,6 +244,7 @@ <translation id="2946119680249604491">Lisa ühendus</translation> <translation id="2961963223658824723">Midagi läks valesti. Proovige mõne sekundi pärast uuesti.</translation> <translation id="2963773877003373896">mod3</translation> +<translation id="296762781903199866">Kõnefaile <ph name="LANGUAGE" /> keeles ei õnnestunud alla laadida</translation> <translation id="2970920913501714344">Installige rakendusi, laiendusi ja teemasid</translation> <translation id="2977598380246111477">Järgmine number</translation> <translation id="2992327365391326550">Seadme mikrofoninupp on välja lülitatud.</translation> @@ -348,6 +349,7 @@ <translation id="370665806235115550">Laadimine...</translation> <translation id="371370241367527062">Eesmine mikrofon</translation> <translation id="3713734891607377840">Lõpetamisel avatakse</translation> +<translation id="3732269052167349831"><ph name="DESC_TEXT" />; klõpsake dialoogil, et tulemust näha Google'i otsingus.</translation> <translation id="3742055079367172538">Ekraanipilt on tehtud</translation> <translation id="3771549900096082774">Suure kontrastsusega režiim</translation> <translation id="3773700760453577392">Administraator on keelanud e-posti aadressi <ph name="USER_EMAIL" /> puhul mitmele kontole sisselogimise. @@ -486,6 +488,7 @@ <translation id="4696813013609194136">Avage seade lapsevanema koodiga</translation> <translation id="4702647871202761252">Privaatsuskuva on väljas</translation> <translation id="4705716602320768426">Tagasiside esitamine</translation> +<translation id="4706121060329443414">Hiljem üritatakse uuesti alla laadida. Kõne saadetakse praegu töötlemiseks Google'ile.</translation> <translation id="4731797938093519117">Vanema juurdepääs</translation> <translation id="4734965478015604180">Horisontaalne</translation> <translation id="4735498845456076464">Klaviatuuri otseteed <ph name="LAUNCHER_KEY_NAME" /> + numbriklahv on muudetud. Funktsiooniklahvide kasutamiseks vajutage klahvi <ph name="LAUNCHER_KEY_NAME" /> + ülemise rea klahvi.</translation> @@ -591,6 +594,7 @@ <translation id="5600837773213129531">Vajutage suulise tagasiside keelamiseks klahvikombinatsiooni Ctrl + Alt + Z.</translation> <translation id="5601503069213153581">PIN-kood</translation> <translation id="5619862035903135339">Ekraanikuva jäädvustamine on administraatori eeskirjadega keelatud</translation> +<translation id="5620281292257375798">Ainult sisemine</translation> <translation id="5625955975703555628">LTE+</translation> <translation id="5648021990716966815">Mikrofoni pistikupesa</translation> <translation id="5662709761327382534">Mikrofoni salvestamine: <ph name="CURRENT_STATE" />, vajutage sisestusklahvi, et mikrofoni salvestamine <ph name="NEW_STATE" /> lülitada</translation> @@ -658,6 +662,7 @@ <translation id="6073451960410192870">Peata salvestamine</translation> <translation id="607652042414456612">Lähedal olevad Bluetoothi seadmed saavad teie arvuti tuvastada ja see kuvatakse nimega „<ph name="NAME" />” ja aadressiga <ph name="ADDRESS" /></translation> <translation id="6094290315941448991">Administraatori eeskirjad keelavad ekraanikuva salvestamise, kui konfidentsiaalne sisu on nähtaval</translation> +<translation id="6114505516289286752">Kõnefailid <ph name="LANGUAGE" /> keeles laaditi alla</translation> <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation> <translation id="612734058257491180">Google'i assistent ei ole külastajaseansis saadaval.</translation> <translation id="6137566720514957455">Kasutaja <ph name="USER_EMAIL_ADDRESS" /> eemaldamise dialoogi avamine</translation> @@ -739,6 +744,7 @@ <translation id="6816797338148849397">Teie valikuga seotud teave on saadaval. Kasutage juurdepääsemiseks ülesnooleklahvi.</translation> <translation id="6818242057446442178">Sõna võrra tagasi</translation> <translation id="6820676911989879663">Tehke paus!</translation> +<translation id="6836499262298959512">Ohtlik fail</translation> <translation id="6837064795450991317">Peida töölauariba</translation> <translation id="6850010208275816200">Praegune rakendus on kuvatud täisekraanil. Kui rakendus küsib teie parooli, väljuge esmalt täisekraanilt.</translation> <translation id="6852052252232534364">Klõpsake aktiveerimiseks</translation> @@ -879,6 +885,7 @@ <translation id="7901405293566323524">Phone Hub</translation> <translation id="7902625623987030061">Puudutage sõrmejäljeandurit</translation> <translation id="7904094684485781019">Selle konto administraator on mitmesse kontosse sisselogimise keelanud.</translation> +<translation id="7930731167419639574">Kõnet töödeldakse nüüd kohalikult ja dikteerimine töötab võrguühenduseta</translation> <translation id="7933084174919150729">Google'i assistent on saadaval ainult peamisel profiilil.</translation> <translation id="79341161159229895">Kontohaldurid: <ph name="FIRST_PARENT_EMAIL" /> ja <ph name="SECOND_PARENT_EMAIL" /></translation> <translation id="793716872548410480">Lõikelaua vaatamiseks vajutage klahve <ph name="SHORTCUT_KEY_NAME" /> + V. Viis viimati kopeeritud üksust salvestatakse lõikelauale.</translation>
diff --git a/ash/strings/ash_strings_fa.xtb b/ash/strings/ash_strings_fa.xtb index 9676047..ff9d9035 100644 --- a/ash/strings/ash_strings_fa.xtb +++ b/ash/strings/ash_strings_fa.xtb
@@ -244,6 +244,7 @@ <translation id="2946119680249604491">افزودن اتصال</translation> <translation id="2961963223658824723">مشکلی پیش آمد. چند ثانیه دیگر دوباره امتحان کنید.</translation> <translation id="2963773877003373896">mod3</translation> +<translation id="296762781903199866">فایلهای گفتار <ph name="LANGUAGE" /> بارگیری نشد</translation> <translation id="2970920913501714344">نصب برنامهها، افزونهها و طرحهای زمینه</translation> <translation id="2977598380246111477">عدد بعدی</translation> <translation id="2992327365391326550">دکمه میکروفون دستگاه خاموش است.</translation> @@ -348,6 +349,7 @@ <translation id="370665806235115550">در حال بارکردن…</translation> <translation id="371370241367527062">میکروفون جلو</translation> <translation id="3713734891607377840">بعداز تکمیل بارگیری باز میشود</translation> +<translation id="3732269052167349831"><ph name="DESC_TEXT" />؛ برای دیدن نتیجه در «جستجوی Google» روی کادر گفتگو کلیک کنید.</translation> <translation id="3742055079367172538">نماگرفت گرفته شد</translation> <translation id="3771549900096082774">حالت تضاد بالا</translation> <translation id="3773700760453577392">یکی از سرپرستان ورود چندگانه به سیستم را برای <ph name="USER_EMAIL" /> غیرمجاز کرده است. برای ادامه دادن، همه کاربران باید از سیستم خارج شوند.</translation> @@ -485,6 +487,7 @@ <translation id="4696813013609194136">باز کردن قفل دستگاه با کد والدین</translation> <translation id="4702647871202761252">صفحه حریمخصوصی خاموش است</translation> <translation id="4705716602320768426">ثبت بازخورد</translation> +<translation id="4706121060329443414">بارگیری بعداً انجام خواهد شد. اکنون گفتار برای پردازش به Google ارسال خواهد شد.</translation> <translation id="4731797938093519117">دسترسی ولی</translation> <translation id="4734965478015604180">افقی</translation> <translation id="4735498845456076464">میانبر صفحهکلید «<ph name="LAUNCHER_KEY_NAME" /> + عدد» تغییر کرده است. برای استفاده از کلیدهای عملکرد، کلید <ph name="LAUNCHER_KEY_NAME" /> + یکی از کلیدهای ردیف بالا را فشار دهید.</translation> @@ -590,6 +593,7 @@ <translation id="5600837773213129531">برای غیرفعال کردن بازخورد گفتاری، Ctrl + Alt + Z را فشار دهید.</translation> <translation id="5601503069213153581">پین</translation> <translation id="5619862035903135339">خطمشی سرپرست ضبط صفحهنمایش را غیرفعال میکند</translation> +<translation id="5620281292257375798">فقط داخلی</translation> <translation id="5625955975703555628">LTE+</translation> <translation id="5648021990716966815">فیش میکروفون</translation> <translation id="5662709761327382534">ضبط میکروفون <ph name="CURRENT_STATE" /> است، کلید ورود را فشار دهید تا ضبط میکروفون <ph name="NEW_STATE" /> شود</translation> @@ -657,6 +661,7 @@ <translation id="6073451960410192870">توقف ضبط</translation> <translation id="607652042414456612">رایانه شما توسط دستگاههای بلوتوث نزدیک قابل شناسایی است و با نام «<ph name="NAME" />» و آدرس <ph name="ADDRESS" /> نشان داده میشود</translation> <translation id="6094290315941448991">خطمشی سرپرست ضبط صفحهنمایش را هنگامی که محتوای محرمانه نمایان باشد غیرفعال میکند</translation> +<translation id="6114505516289286752">فایلهای گفتار <ph name="LANGUAGE" /> بارگیری شد</translation> <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation> <translation id="612734058257491180">«دستیار Google» در جلسه مهمان دردسترس نیست.</translation> <translation id="6137566720514957455">باز کردن کادر گفتگوی برداشتن <ph name="USER_EMAIL_ADDRESS" /></translation> @@ -738,6 +743,7 @@ <translation id="6816797338148849397">اطلاعات مرتبط با انتخاب شما دردسترس است. برای دسترسی، از کلید «پیکان روبه بالا» استفاده کنید.</translation> <translation id="6818242057446442178">عقب رفتن کلمهبهکلمه</translation> <translation id="6820676911989879663">استراحت کنید!</translation> +<translation id="6836499262298959512">فایل خطرناک</translation> <translation id="6837064795450991317">پنهان کردن نوار میزکار</translation> <translation id="6850010208275816200">برنامه فعلی شما درحالت تمامصفحه است. اگر برنامه گذرواژهتان را درخواست کرد، ابتدا از حالت تمامصفحه خارج شوید.</translation> <translation id="6852052252232534364">کلیک برای فعالسازی</translation> @@ -878,6 +884,7 @@ <translation id="7901405293566323524">مرکز تلفن</translation> <translation id="7902625623987030061">حسگر اثر انگشت را لمس کنید</translation> <translation id="7904094684485781019">سرپرست این حساب اجازه ورود چندگانه به سیستم را نمیدهد.</translation> +<translation id="7930731167419639574">اکنون گفتار در دستگاه پردازش میشود و «تایپ صوتی» بهصورت آفلاین کار میکند</translation> <translation id="7933084174919150729">«دستیار Google» فقط برای نمایه اصلی دردسترس است.</translation> <translation id="79341161159229895">حساب تحت مدیریت <ph name="FIRST_PARENT_EMAIL" /> و <ph name="SECOND_PARENT_EMAIL" /> است</translation> <translation id="793716872548410480">برای مشاهده بریدهدان، کلیدهای <ph name="SHORTCUT_KEY_NAME" /> + V را فشار دهید. ۵ مورد آخری که کپی کردهاید در بریدهدان ذخیره میشود.</translation>
diff --git a/ash/strings/ash_strings_fr.xtb b/ash/strings/ash_strings_fr.xtb index e921594a..450632b 100644 --- a/ash/strings/ash_strings_fr.xtb +++ b/ash/strings/ash_strings_fr.xtb
@@ -244,6 +244,7 @@ <translation id="2946119680249604491">Ajouter une connexion</translation> <translation id="2961963223658824723">Une erreur s'est produite. Veuillez réessayer dans quelques secondes.</translation> <translation id="2963773877003373896">mod3</translation> +<translation id="296762781903199866">Impossible de télécharger les fichiers vocaux en <ph name="LANGUAGE" /></translation> <translation id="2970920913501714344">Installer des applications, des extensions et des thèmes</translation> <translation id="2977598380246111477">Chiffre suivant</translation> <translation id="2992327365391326550">Le bouton du micro de l'appareil est désactivé.</translation> @@ -348,6 +349,7 @@ <translation id="370665806235115550">Chargement en cours...</translation> <translation id="371370241367527062">Micro avant</translation> <translation id="3713734891607377840">Ouvrir une fois terminé</translation> +<translation id="3732269052167349831"><ph name="DESC_TEXT" />. Cliquez sur la boîte de dialogue pour voir le résultat dans la recherche Google.</translation> <translation id="3742055079367172538">Capture d'écran réalisée</translation> <translation id="3771549900096082774">Mode Contraste élevé</translation> <translation id="3773700760453577392">Un administrateur a désactivé la connexion multicompte pour <ph name="USER_EMAIL" />. Tous les utilisateurs doivent se déconnecter pour continuer.</translation> @@ -485,6 +487,7 @@ <translation id="4696813013609194136">Déverrouiller l'appareil avec le code parental</translation> <translation id="4702647871202761252">L'écran de confidentialité est désactivé</translation> <translation id="4705716602320768426">Classer le commentaire</translation> +<translation id="4706121060329443414">Le téléchargement sera relancé ultérieurement. Entre temps, les paroles seront envoyées à Google pour traitement.</translation> <translation id="4731797938093519117">Accès parental</translation> <translation id="4734965478015604180">Horizontal</translation> <translation id="4735498845456076464">Le raccourci clavier <ph name="LAUNCHER_KEY_NAME" />+Chiffre a été modifié. Pour utiliser les touches de fonction, appuyez sur la touche <ph name="LAUNCHER_KEY_NAME" /> et sur une touche de la rangée supérieure.</translation> @@ -590,6 +593,7 @@ <translation id="5600837773213129531">Appuyez sur Ctrl+Alt+Z pour désactiver les commentaires audio.</translation> <translation id="5601503069213153581">Code d'accès</translation> <translation id="5619862035903135339">Une règle définie par l'administrateur a désactivé la capture d'écran</translation> +<translation id="5620281292257375798">Interne uniquement</translation> <translation id="5625955975703555628">LTE+</translation> <translation id="5648021990716966815">Connecteur micro</translation> <translation id="5662709761327382534">Enregistrement via le micro <ph name="CURRENT_STATE" />, appuyez sur Entrée pour qu'il soit <ph name="NEW_STATE" /></translation> @@ -657,6 +661,7 @@ <translation id="6073451960410192870">Arrêter l'enregistrement</translation> <translation id="607652042414456612">Votre ordinateur est visible par les appareils Bluetooth situés à proximité sous le nom "<ph name="NAME" />", associé à l'adresse <ph name="ADDRESS" />.</translation> <translation id="6094290315941448991">Une règle définie par l'administrateur a désactivé l'enregistrement d'écran lorsqu'un contenu confidentiel est affiché</translation> +<translation id="6114505516289286752">Fichiers vocaux en <ph name="LANGUAGE" /> téléchargés</translation> <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation> <translation id="612734058257491180">L'Assistant Google n'est pas disponible dans une session Invité.</translation> <translation id="6137566720514957455">Ouvrir la boîte de dialogue de suppression du compte <ph name="USER_EMAIL_ADDRESS" /></translation> @@ -738,6 +743,7 @@ <translation id="6816797338148849397">Informations sur le texte sélectionné disponibles. Pour y accéder, utilisez la flèche vers le haut.</translation> <translation id="6818242057446442178">Reculer par mot</translation> <translation id="6820676911989879663">Faites une pause !</translation> +<translation id="6836499262298959512">Fichier dangereux</translation> <translation id="6837064795450991317">Masquer la barre de bureau</translation> <translation id="6850010208275816200">Votre application actuelle est en plein écran. Si elle vous demande votre mot de passe, quittez d'abord le mode plein écran.</translation> <translation id="6852052252232534364">Cliquer pour activer</translation> @@ -878,6 +884,7 @@ <translation id="7901405293566323524">Phone Hub</translation> <translation id="7902625623987030061">Appuyez sur le lecteur d'empreinte</translation> <translation id="7904094684485781019">L'administrateur de ce compte a désactivé la connexion multicompte.</translation> +<translation id="7930731167419639574">Les paroles sont maintenant traitées localement et la dictée fonctionne hors connexion.</translation> <translation id="7933084174919150729">L'Assistant Google n'est disponible que pour le profil principal.</translation> <translation id="79341161159229895">Compte géré par <ph name="FIRST_PARENT_EMAIL" /> et <ph name="SECOND_PARENT_EMAIL" /></translation> <translation id="793716872548410480">Appuyez sur <ph name="SHORTCUT_KEY_NAME" />+V pour afficher le presse-papiers. Les cinq derniers éléments que vous avez copiés y sont enregistrés.</translation>
diff --git a/ash/strings/ash_strings_hr.xtb b/ash/strings/ash_strings_hr.xtb index 450ab5f..aec9aae5 100644 --- a/ash/strings/ash_strings_hr.xtb +++ b/ash/strings/ash_strings_hr.xtb
@@ -244,6 +244,7 @@ <translation id="2946119680249604491">Dodaj vezu</translation> <translation id="2961963223658824723">Nešto nije u redu. Pokušajte ponovno za nekoliko sekundi.</translation> <translation id="2963773877003373896">mod3</translation> +<translation id="296762781903199866">Nije uspjelo preuzimanje govornih datoteka za <ph name="LANGUAGE" /></translation> <translation id="2970920913501714344">Instaliranje aplikacija, proširenja i tema</translation> <translation id="2977598380246111477">Sljedeći broj</translation> <translation id="2992327365391326550">Gumb mikrofona na uređaju je isključen.</translation> @@ -348,6 +349,7 @@ <translation id="370665806235115550">Učitavanje...</translation> <translation id="371370241367527062">Prednji mikrofon</translation> <translation id="3713734891607377840">Otvaranje nakon završetka</translation> +<translation id="3732269052167349831"><ph name="DESC_TEXT" />; Kliknite dijaloški okvir za prikaz rezultata u Google pretraživanju.</translation> <translation id="3742055079367172538">Izrađena je snimka zaslona</translation> <translation id="3771549900096082774">Način visokog kontrasta</translation> <translation id="3773700760453577392">Administrator je onemogućio višestruku prijavu za <ph name="USER_EMAIL" />. Svi se korisnici moraju odjaviti da bi nastavili.</translation> @@ -485,6 +487,7 @@ <translation id="4696813013609194136">Otključajte uređaj roditeljskim kodom</translation> <translation id="4702647871202761252">Zaslon privatnosti je isključen</translation> <translation id="4705716602320768426">Pošaljite povratne informacije</translation> +<translation id="4706121060329443414">Kasnije ćemo pokušati preuzimanje. Govor će se sada poslati Googleu radi obrade.</translation> <translation id="4731797938093519117">Roditeljski pristup</translation> <translation id="4734965478015604180">Vodoravno</translation> <translation id="4735498845456076464">Promijenjen je tipkovni prečac <ph name="LAUNCHER_KEY_NAME" /> + broj. Da biste upotrijebili tipke funkcija, pritisnite tipku <ph name="LAUNCHER_KEY_NAME" /> + tipku u gornjem redu.</translation> @@ -590,6 +593,7 @@ <translation id="5600837773213129531">Pritisnite Ctrl + Alt + Z da biste onemogućili govorne povratne informacije.</translation> <translation id="5601503069213153581">PIN</translation> <translation id="5619862035903135339">Administratorska pravila onemogućuju snimku zaslona</translation> +<translation id="5620281292257375798">Samo interno</translation> <translation id="5625955975703555628">LTE+</translation> <translation id="5648021990716966815">Utičnica mikrofona</translation> <translation id="5662709761327382534">Snimanje mikrofona <ph name="CURRENT_STATE" />, pritisnite enter da biste snimanje mikrofona postavili na <ph name="NEW_STATE" /></translation> @@ -657,6 +661,7 @@ <translation id="6073451960410192870">Zaustavi snimanje</translation> <translation id="607652042414456612">Vaše računalo mogu otkriti Bluetooth uređaji u blizini i prikazivat će se kao "<ph name="NAME" />" s adresom <ph name="ADDRESS" />.</translation> <translation id="6094290315941448991">Administratorska pravila onemogućuju snimanje zaslona ako je vidljiv povjerljiv sadržaj</translation> +<translation id="6114505516289286752">Preuzete su govorne datoteke za <ph name="LANGUAGE" /></translation> <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation> <translation id="612734058257491180">Google asistent nije dostupan u gostujućoj sesiji.</translation> <translation id="6137566720514957455">Otvorite dijalog za uklanjanje za <ph name="USER_EMAIL_ADDRESS" /></translation> @@ -738,6 +743,7 @@ <translation id="6816797338148849397">Dostupne su informacije o vašem odabiru. Pristupite im pritiskom strelice prema gore.</translation> <translation id="6818242057446442178">Riječ unatrag</translation> <translation id="6820676911989879663">Odmorite se!</translation> +<translation id="6836499262298959512">Opasna datoteka</translation> <translation id="6837064795450991317">Sakrivanje deskbara</translation> <translation id="6850010208275816200">Aplikacija se trenutačno prikazuje na cijelom zaslonu. Ako aplikacija zatraži zaporku, prvo izađite iz prikaza preko cijelog zaslona.</translation> <translation id="6852052252232534364">Kliknite za aktivaciju</translation> @@ -878,6 +884,7 @@ <translation id="7901405293566323524">Telefonsko središte</translation> <translation id="7902625623987030061">Dodirnite senzor otiska prsta</translation> <translation id="7904094684485781019">Administrator ovog računa onemogućio je višestruku prijavu.</translation> +<translation id="7930731167419639574">Govor se sada obrađuje lokalno, a diktiranje funkcionira offline.</translation> <translation id="7933084174919150729">Google asistent dostupan je samo za primarni profil.</translation> <translation id="79341161159229895">Računom upravljaju <ph name="FIRST_PARENT_EMAIL" /> i <ph name="SECOND_PARENT_EMAIL" /></translation> <translation id="793716872548410480">Pritisnite <ph name="SHORTCUT_KEY_NAME" /> + V da biste vidjeli međuspremnik. Posljednjih pet kopiranih stavki spremljeno je u međuspremnik.</translation>
diff --git a/ash/strings/ash_strings_hu.xtb b/ash/strings/ash_strings_hu.xtb index 2249fdb..5b7f5f2 100644 --- a/ash/strings/ash_strings_hu.xtb +++ b/ash/strings/ash_strings_hu.xtb
@@ -244,6 +244,7 @@ <translation id="2946119680249604491">Kapcsolat hozzáadása</translation> <translation id="2961963223658824723">Valami nem sikerült. Próbálja újra néhány másodperc múlva.</translation> <translation id="2963773877003373896">mod3</translation> +<translation id="296762781903199866">Nem sikerült letölteni a(z) <ph name="LANGUAGE" /> nyelvű beszédfájlokat</translation> <translation id="2970920913501714344">Alkalmazások, bővítmények és témák telepítése</translation> <translation id="2977598380246111477">Következő szám</translation> <translation id="2992327365391326550">Az eszköz mikrofongombját kikapcsolták.</translation> @@ -348,6 +349,7 @@ <translation id="370665806235115550">Betöltés...</translation> <translation id="371370241367527062">Elülső mikrofon</translation> <translation id="3713734891607377840">Megnyitás, ha kész</translation> +<translation id="3732269052167349831"><ph name="DESC_TEXT" />; A párbeszédpanelre kattintva megtekintheti a találatot a Google Keresőben.</translation> <translation id="3742055079367172538">Képernyőkép elkészítve</translation> <translation id="3771549900096082774">Nagy kontrasztú mód</translation> <translation id="3773700760453577392">Egy rendszergazda letiltotta a többfiókos bejelentkezést <ph name="USER_EMAIL" /> számára. @@ -486,6 +488,7 @@ <translation id="4696813013609194136">Zárolás feloldása szülői kóddal</translation> <translation id="4702647871202761252">Az adatvédelmi képernyő ki van kapcsolva</translation> <translation id="4705716602320768426">Visszajelzés küldése</translation> +<translation id="4706121060329443414">A letöltést később kísérli meg a rendszer. A beszédet a rendszer egyelőre elküldi a Google-nak feldolgozásra.</translation> <translation id="4731797938093519117">Szülői hozzáférés</translation> <translation id="4734965478015604180">Vízszintes</translation> <translation id="4735498845456076464">A(z) <ph name="LAUNCHER_KEY_NAME" /> + szám billentyűparancs módosult. A funkcióbillentyűk használatához nyomja le a következő billentyűparancsot: <ph name="LAUNCHER_KEY_NAME" /> + a kívánt billentyű a felső soron.</translation> @@ -591,6 +594,7 @@ <translation id="5600837773213129531">A hangos visszajelzés kikapcsolásához nyomja meg a Ctrl+Alt+Z billentyűkombinációt.</translation> <translation id="5601503069213153581">PIN-kód</translation> <translation id="5619862035903135339">A rendszergazdai házirend tiltja felvétel készítését a képernyőről</translation> +<translation id="5620281292257375798">Csak belső</translation> <translation id="5625955975703555628">LTE+</translation> <translation id="5648021990716966815">Mikrofon jack csatlakozója</translation> <translation id="5662709761327382534">A mikrofon általi hangrögzítés jelenleg <ph name="CURRENT_STATE" /> állásban van. Ha <ph name="NEW_STATE" /> állásba szeretné állítani, nyomja meg az Enter billentyűt</translation> @@ -658,6 +662,7 @@ <translation id="6073451960410192870">Felvétel leállítása</translation> <translation id="607652042414456612">Számítógépét felfedezhetik a közeli Bluetooth-eszközök. Számítógépe „<ph name="NAME" />” néven, <ph name="ADDRESS" /> címmel lesz látható</translation> <translation id="6094290315941448991">Rendszergazdai házirend tiltja felvétel készítését a képernyőről, ha bizalmas tartalom látható rajta.</translation> +<translation id="6114505516289286752"><ph name="LANGUAGE" /> nyelvű beszédfájlok letöltve</translation> <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation> <translation id="612734058257491180">A Google Segéd nem áll rendelkezésre Vendég-munkafolyamatban.</translation> <translation id="6137566720514957455">Eltávolítási párbeszédpanel megnyitása, <ph name="USER_EMAIL_ADDRESS" /></translation> @@ -739,6 +744,7 @@ <translation id="6816797338148849397">Rendelkezésre áll információ a kiválasztott elemmel kapcsolatban. A felfelé nyíllal érheti el.</translation> <translation id="6818242057446442178">Visszalépés szavanként</translation> <translation id="6820676911989879663">Tartson egy kis szünetet!</translation> +<translation id="6836499262298959512">Veszélyes fájl</translation> <translation id="6837064795450991317">Deskbar elrejtése</translation> <translation id="6850010208275816200">Az aktuális alkalmazás teljes képernyős módban van. Ha az alkalmazás jelszót kér, először lépjen ki a teljes képernyős módból.</translation> <translation id="6852052252232534364">Aktiválás</translation> @@ -879,6 +885,7 @@ <translation id="7901405293566323524">Phone Hub</translation> <translation id="7902625623987030061">Érintse meg az ujjlenyomat-érzékelőt</translation> <translation id="7904094684485781019">A fiók rendszergazdája letiltotta a többfiókos bejelentkezést.</translation> +<translation id="7930731167419639574">A beszéd feldolgozása helyben történik, a diktálás pedig offline működik.</translation> <translation id="7933084174919150729">A Google Segéd csak az elsődleges profilhoz áll rendelkezésre.</translation> <translation id="79341161159229895">A fiókot a(z) <ph name="FIRST_PARENT_EMAIL" /> és a(z) <ph name="SECOND_PARENT_EMAIL" /> kezeli</translation> <translation id="793716872548410480">Nyomja le a(z) <ph name="SHORTCUT_KEY_NAME" /> + V billentyűkombinációt a vágólap megtekintéséhez. A rendszer az utoljára másolt öt elemet menti a vágólapra.</translation>
diff --git a/ash/strings/ash_strings_kk.xtb b/ash/strings/ash_strings_kk.xtb index 62d9217..f4c0be0f 100644 --- a/ash/strings/ash_strings_kk.xtb +++ b/ash/strings/ash_strings_kk.xtb
@@ -244,6 +244,7 @@ <translation id="2946119680249604491">Байланыс қосу</translation> <translation id="2961963223658824723">Бірдеңе дұрыс болмады. Бірнеше секундтан кейін қайталап көріңіз.</translation> <translation id="2963773877003373896">mod3</translation> +<translation id="296762781903199866">Тіл файлдары (<ph name="LANGUAGE" />) жүктеп алынбады</translation> <translation id="2970920913501714344">Қолданбаларды, кеңейтімдерді және тақырыптарды орнатыңыз</translation> <translation id="2977598380246111477">Келесі сан</translation> <translation id="2992327365391326550">Құрылғы микрофоны өшірулі.</translation> @@ -348,6 +349,7 @@ <translation id="370665806235115550">Жүктелуде…</translation> <translation id="371370241367527062">Алдыңғы микрофон</translation> <translation id="3713734891607377840">Жүктеп алынған соң ашу</translation> +<translation id="3732269052167349831"><ph name="DESC_TEXT" />; нәтижені Google Search-те көру үшін диалогтік терезені басыңыз.</translation> <translation id="3742055079367172538">Скриншот түсірілді</translation> <translation id="3771549900096082774">Жоғары контраст режимі</translation> <translation id="3773700760453577392">Әкімшінің шешімі бойынша енді <ph name="USER_EMAIL" /> электрондық поштасына бір уақытта бірнеше пайдаланушы кіре алмайды. Жалғастыру үшін пайдаланушылардың барлығы есептік жазбадан шығуы керек.</translation> @@ -485,6 +487,7 @@ <translation id="4696813013609194136">Құрылғының құлпын ата-ана кодымен ашыңыз</translation> <translation id="4702647871202761252">Құпиялылық экраны өшірулі.</translation> <translation id="4705716602320768426">Пікір жіберу</translation> +<translation id="4706121060329443414">Кейінірек жүктеп алынады. Айтылған сөз әзірше Google-дың өңдеуіне жіберіледі.</translation> <translation id="4731797938093519117">Ата-ананың кіру рұқсаты</translation> <translation id="4734965478015604180">Көлденең</translation> <translation id="4735498845456076464"><ph name="LAUNCHER_KEY_NAME" /> + сан пернелер тіркесімінің функциясы өзгерді. Функциялық пернелерді пайдалану үшін <ph name="LAUNCHER_KEY_NAME" /> пернесі + жоғарғы қатар пернесі тіркесімін басыңыз.</translation> @@ -590,6 +593,7 @@ <translation id="5600837773213129531">Айтылған пікірді өшіру үшін Ctrl + Alt + Z пернелерін басыңыз.</translation> <translation id="5601503069213153581">PIN</translation> <translation id="5619862035903135339">Әкімші саясаты экранды түсіру режимін өшіреді.</translation> +<translation id="5620281292257375798">Тек ішкі қолданысқа арналған</translation> <translation id="5625955975703555628">LTE+</translation> <translation id="5648021990716966815">Микрофон ұяшығы</translation> <translation id="5662709761327382534">Микрофон арқылы жазу <ph name="CURRENT_STATE" />. <ph name="NEW_STATE" /> үшін Enter пернесін басыңыз.</translation> @@ -657,6 +661,7 @@ <translation id="6073451960410192870">Бейнеге түсіруді тоқтату</translation> <translation id="607652042414456612">Компьютеріңізді жақын жердегі Bluetooth құрылғылары анықтай алады. <ph name="ADDRESS" /> мекенжайымен және "<ph name="NAME" />" атауымен көрсетіледі</translation> <translation id="6094290315941448991">Құпия мазмұн көрініп тұрғанда, әкімші саясаты экранды жазу функциясын өшіреді.</translation> +<translation id="6114505516289286752">Тіл файлдары (<ph name="LANGUAGE" />) жүктеп алынды</translation> <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation> <translation id="612734058257491180">Google Assistant қонақ сеансында жұмыс істемейді.</translation> <translation id="6137566720514957455"><ph name="USER_EMAIL_ADDRESS" /> есептік жазбасын өшіру диалогтік терезесін ашу</translation> @@ -738,6 +743,7 @@ <translation id="6816797338148849397">Таңдауға қатысты ақпарат қолжетімді. Оны пайдалану үшін жоғарыға бағыттауыш пернені қолданыңыз.</translation> <translation id="6818242057446442178">Бір сөзге артқа жылжу</translation> <translation id="6820676911989879663">Үзіліс жасаңыз!</translation> +<translation id="6836499262298959512">Қауіпті файл</translation> <translation id="6837064795450991317">Іздеу жолағын жасыру</translation> <translation id="6850010208275816200">Ағымдағы қолданба толық экран режимінде пайдаланылады. Егер қолданба құпия сөзді сұраса, толық экран режимінен шығыңыз.</translation> <translation id="6852052252232534364">Іске қосу үшін басыңыз.</translation> @@ -878,6 +884,7 @@ <translation id="7901405293566323524">Phone Hub</translation> <translation id="7902625623987030061">Саусақ ізін оқу сканерін түртіңіз.</translation> <translation id="7904094684485781019">Бұл есептік жазбаның әкімшісі бірнеше рет кіруге рұқсат бермеген.</translation> +<translation id="7930731167419639574">Айтылған сөз енді жергілікті деңгейде өңделеді және Мәтінді дауыспен енгізу функциясы офлайн режимде жұмыс істейді</translation> <translation id="7933084174919150729">Google Assistant тек негізгі профиль үшін қолжетімді.</translation> <translation id="79341161159229895"><ph name="FIRST_PARENT_EMAIL" /> және <ph name="SECOND_PARENT_EMAIL" /> басқаратын есептік жазба</translation> <translation id="793716872548410480">Буферді көру үшін <ph name="SHORTCUT_KEY_NAME" /> + V пернелер тіркесімін басыңыз. Соңғы көшірген бес элемент буферде сақталады.</translation>
diff --git a/ash/strings/ash_strings_ky.xtb b/ash/strings/ash_strings_ky.xtb index 0b16190e..2b6b6fa 100644 --- a/ash/strings/ash_strings_ky.xtb +++ b/ash/strings/ash_strings_ky.xtb
@@ -244,6 +244,7 @@ <translation id="2946119680249604491">Туташуу кошуу</translation> <translation id="2961963223658824723">Бир жерден ката кетти. Бир нече секунддан кийин кайталап көрүңүз.</translation> <translation id="2963773877003373896">mod3</translation> +<translation id="296762781903199866"><ph name="LANGUAGE" /> тилиндеги кеп файлдары жүктөлүп алынган жок</translation> <translation id="2970920913501714344">Колдонмолорду, кеңейтүүлөрдү жана темаларды жүктөп алат</translation> <translation id="2977598380246111477">Кийинки номер</translation> <translation id="2992327365391326550">Түзмөктүн микрофон баскычы өчүк.</translation> @@ -348,6 +349,7 @@ <translation id="370665806235115550">Жүктөлүүдө…</translation> <translation id="371370241367527062">Маңдайкы микрофон</translation> <translation id="3713734891607377840">Жүктөлүп бүткөндөн кийин ачылсын</translation> +<translation id="3732269052167349831"><ph name="DESC_TEXT" />; Google Издөө кызматында натыйжаны көрүү үчүн диалогду басыңыз.</translation> <translation id="3742055079367172538">Скриншот тартылды</translation> <translation id="3771549900096082774">Жогорку контраст режими</translation> <translation id="3773700760453577392">Администратор <ph name="USER_EMAIL" /> дарегине бир убакта бир нече колдонуучуга кирүүгө тыюу салды. Улантуу үчүн бардык колдонуучулар чыгышы керек.</translation> @@ -485,6 +487,7 @@ <translation id="4696813013609194136">Түзмөктүн кулпусун ата-эненин коду менен ачуу</translation> <translation id="4702647871202761252">Купуялык экраны өчүк</translation> <translation id="4705716602320768426">Пикир билдирүү</translation> +<translation id="4706121060329443414">Жүктөп алууга кийинчерээк аракет жасалат. Азырынча иштетүү үчүн кеп Google'га жөнөтүлөт.</translation> <translation id="4731797938093519117">Ата-эненин кирүү уруксаты</translation> <translation id="4734965478015604180">Туурасынан</translation> <translation id="4735498845456076464"><ph name="LAUNCHER_KEY_NAME" /> + Номер ыкчам баскычы өзгөртүлдү. Функциялык баскычтарды колдонуу үчүн <ph name="LAUNCHER_KEY_NAME" /> баскычын + жогорку саптагы баскычты басыңыз.</translation> @@ -590,6 +593,7 @@ <translation id="5600837773213129531">Экрандагы текстти окуп берүүнү өчүрүү үчүн Ctrl + Alt + Z баскычтарын басыңыз.</translation> <translation id="5601503069213153581">PIN</translation> <translation id="5619862035903135339">Администратордун саясаты боюнча экрандагыны сүрөткө тартып алуу өчүрүлгөн</translation> +<translation id="5620281292257375798">Ички колдонуу үчүн</translation> <translation id="5625955975703555628">LTE+</translation> <translation id="5648021990716966815">Микрофондун оюкчасы</translation> <translation id="5662709761327382534">Аудиону жаздыруу <ph name="CURRENT_STATE" />. Микрофонду <ph name="NEW_STATE" /> абалына өткөрүү үчүн "Enter" баскычын басыңыз</translation> @@ -657,6 +661,7 @@ <translation id="6073451960410192870">Жаздырууну токтотуу</translation> <translation id="607652042414456612">Компьютериңиз жакын арадагы Bluetooth түзмөктөрүнө көрүнүп, <ph name="ADDRESS" /> дарегиндеги "<ph name="NAME" />" катары күйүп турат.</translation> <translation id="6094290315941448991">Купуя нерселер көрүнүп турганда, Администратордун саясатына ылайык экрандагыны видеого жаздырып алууга болбойт</translation> +<translation id="6114505516289286752"><ph name="LANGUAGE" /> тилиндеги кеп файлдары жүктөлүп алынды</translation> <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation> <translation id="612734058257491180">Google Жардамчысы конок сеансында жеткиликсиз.</translation> <translation id="6137566720514957455"><ph name="USER_EMAIL_ADDRESS" /> аккаунтун өчүрүү диалогун ачуу</translation> @@ -738,6 +743,7 @@ <translation id="6816797338148849397">Сиз тандаган нерсеге тиешелүү маалымат бар. Көрүү үчүн Өйдө жебе баскычын басыңыз.</translation> <translation id="6818242057446442178">Бир сөз артка кайтуу</translation> <translation id="6820676911989879663">Тыныгуу алыңыз!</translation> +<translation id="6836499262298959512">Кооптуу файл</translation> <translation id="6837064795450991317">Издөө панелин жашыруу</translation> <translation id="6850010208275816200">Учурдагы колдонмо толук экранда көрсөтүлүүдө. Эгер колдонмо сырсөздү киргизүүнү суранса, адегенде толук экран режиминен чыгыңыз.</translation> <translation id="6852052252232534364">Иштетүү үчүн басыңыз</translation> @@ -878,6 +884,7 @@ <translation id="7901405293566323524">Phone Hub</translation> <translation id="7902625623987030061">Манжа изинин сенсорун басыңыз</translation> <translation id="7904094684485781019">Администратор бул аккаунтка бир нече профиль менен кирүүгө тыюу салган.</translation> +<translation id="7930731167419639574">Кеп эми түзмөктө иштетилип, Текстти айтып терүү оффлайнда иштейт</translation> <translation id="7933084174919150729">Google Жардамчы колдонуучунун негизги профилинде гана иштейт.</translation> <translation id="79341161159229895">Аккаунтту башкарган: <ph name="FIRST_PARENT_EMAIL" /> жана <ph name="SECOND_PARENT_EMAIL" /></translation> <translation id="793716872548410480">Алмашуу буфериңизди көрүү үчүн <ph name="SHORTCUT_KEY_NAME" /> + V баскычтарын басыңыз. Көчүрүлгөн акыркы 5 объект алмашуу буфериңизге сакталды.</translation>
diff --git a/ash/strings/ash_strings_pl.xtb b/ash/strings/ash_strings_pl.xtb index 5f8e98a..40918d90 100644 --- a/ash/strings/ash_strings_pl.xtb +++ b/ash/strings/ash_strings_pl.xtb
@@ -244,6 +244,7 @@ <translation id="2946119680249604491">Dodaj połączenie</translation> <translation id="2961963223658824723">Coś poszło nie tak. Spróbuj ponownie za kilka sekund.</translation> <translation id="2963773877003373896">mod3</translation> +<translation id="296762781903199866">Nie udało się pobrać plików z mową w języku: <ph name="LANGUAGE" /></translation> <translation id="2970920913501714344">instalować aplikacje, rozszerzenia i motywy;</translation> <translation id="2977598380246111477">Następny numer</translation> <translation id="2992327365391326550">Przycisk mikrofonu urządzenia jest wyłączony.</translation> @@ -348,6 +349,7 @@ <translation id="370665806235115550">Ładuję...</translation> <translation id="371370241367527062">Przedni mikrofon</translation> <translation id="3713734891607377840">Otwórz po pobraniu</translation> +<translation id="3732269052167349831"><ph name="DESC_TEXT" />; kliknij okno, aby zobaczyć wynik w wyszukiwarce Google.</translation> <translation id="3742055079367172538">Wykonano zrzut ekranu</translation> <translation id="3771549900096082774">Tryb wysokiego kontrastu</translation> <translation id="3773700760453577392">Administrator nie zezwolił na wielokrotne logowanie użytkownika <ph name="USER_EMAIL" />. Aby kontynuować, wszyscy użytkownicy muszą się wylogować.</translation> @@ -485,6 +487,7 @@ <translation id="4696813013609194136">Odblokuj urządzenie kodem rodzica</translation> <translation id="4702647871202761252">Ekran chroniący prywatność jest wyłączony</translation> <translation id="4705716602320768426">Zgłoś opinię</translation> +<translation id="4706121060329443414">Spróbuję je pobrać później. Na razie mowa będzie wysyłana do Google i tam będzie przetwarzana.</translation> <translation id="4731797938093519117">Dostęp rodzica</translation> <translation id="4734965478015604180">Poziomo</translation> <translation id="4735498845456076464">Skrót klawiszowy <ph name="LAUNCHER_KEY_NAME" /> + cyfra został zmieniony. Aby użyć klawiszy funkcyjnych, naciśnij klawisz <ph name="LAUNCHER_KEY_NAME" /> + klawisz w górnym rzędzie.</translation> @@ -590,6 +593,7 @@ <translation id="5600837773213129531">Naciśnij Ctrl + Alt + Z, by wyłączyć komunikaty głosowe.</translation> <translation id="5601503069213153581">PIN</translation> <translation id="5619862035903135339">Możliwość robienia zrzutów ekranu jest wyłączona przez zasadę administratora</translation> +<translation id="5620281292257375798">Na użytek wewnętrzny</translation> <translation id="5625955975703555628">LTE+</translation> <translation id="5648021990716966815">Gniazdo mikrofonu</translation> <translation id="5662709761327382534">Nagrywanie z mikrofonu: <ph name="CURRENT_STATE" />. Naciśnij enter, by przełączyć na: <ph name="NEW_STATE" /></translation> @@ -657,6 +661,7 @@ <translation id="6073451960410192870">Zatrzymaj nagrywanie</translation> <translation id="607652042414456612">Twój komputer jest wykrywalny na urządzenia Bluetooth znajdujących się w pobliżu. Będzie prezentowany jako „<ph name="NAME" />” z adresem <ph name="ADDRESS" /></translation> <translation id="6094290315941448991">Zasada administratora wyłącza nagrywanie ekranu, gdy widoczne są treści poufne</translation> +<translation id="6114505516289286752">Pliki z mową w języku: <ph name="LANGUAGE" /> zostały pobrane</translation> <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation> <translation id="612734058257491180">Asystent Google jest niedostępny w sesji gościa.</translation> <translation id="6137566720514957455">Otwórz okno usuwania konta <ph name="USER_EMAIL_ADDRESS" /></translation> @@ -738,6 +743,7 @@ <translation id="6816797338148849397">Dostępne są informacje związane z zaznaczoną treścią. Aby je otworzyć, naciśnij klawisz strzałki w górę.</translation> <translation id="6818242057446442178">Cofnij o jedno słowo</translation> <translation id="6820676911989879663">Zrób sobie przerwę</translation> +<translation id="6836499262298959512">Niebezpieczny plik</translation> <translation id="6837064795450991317">Ukryj pasek</translation> <translation id="6850010208275816200">Bieżąca aplikacja działa w trybie pełnoekranowym. Jeśli aplikacja pyta o hasło, najpierw zamknij ten tryb.</translation> <translation id="6852052252232534364">Kliknij, by włączyć</translation> @@ -878,6 +884,7 @@ <translation id="7901405293566323524">Phone Hub</translation> <translation id="7902625623987030061">Dotknij czytnika linii papilarnych</translation> <translation id="7904094684485781019">Administrator tego konta zablokował możliwość wielokrotnego logowania.</translation> +<translation id="7930731167419639574">Mowa jest teraz przetwarzana lokalnie, a dyktowanie działa offline</translation> <translation id="7933084174919150729">Asystent Google jest dostępny tylko na profilu głównym.</translation> <translation id="79341161159229895">Kontem zarządzają <ph name="FIRST_PARENT_EMAIL" /> i <ph name="SECOND_PARENT_EMAIL" /></translation> <translation id="793716872548410480">Naciśnij <ph name="SHORTCUT_KEY_NAME" /> + V, by przejrzeć zawartość schowka. Znajdziesz tam ostatnie 5 skopiowanych elementów.</translation>
diff --git a/ash/strings/ash_strings_pt-BR.xtb b/ash/strings/ash_strings_pt-BR.xtb index 0bd70df6..a3b59fb 100644 --- a/ash/strings/ash_strings_pt-BR.xtb +++ b/ash/strings/ash_strings_pt-BR.xtb
@@ -244,6 +244,7 @@ <translation id="2946119680249604491">Adicionar conexão</translation> <translation id="2961963223658824723">Algo deu errado. Tente novamente em alguns segundos.</translation> <translation id="2963773877003373896">mod3</translation> +<translation id="296762781903199866">Não foi possível fazer o download dos arquivos de fala em <ph name="LANGUAGE" /></translation> <translation id="2970920913501714344">instalar apps, extensões e temas;</translation> <translation id="2977598380246111477">Próximo número</translation> <translation id="2992327365391326550">O botão do microfone do dispositivo está desativado.</translation> @@ -348,6 +349,7 @@ <translation id="370665806235115550">Carregando...</translation> <translation id="371370241367527062">Microfone frontal</translation> <translation id="3713734891607377840">Abrir quando o download for concluído</translation> +<translation id="3732269052167349831"><ph name="DESC_TEXT" />. Clique na caixa de diálogo para ver o resultado na Pesquisa Google.</translation> <translation id="3742055079367172538">Captura de tela realizada</translation> <translation id="3771549900096082774">Modo de alto contraste</translation> <translation id="3773700760453577392">Um administrador desativou o login múltiplo para <ph name="USER_EMAIL" />. Todos os usuários precisam sair para continuar.</translation> @@ -485,6 +487,7 @@ <translation id="4696813013609194136">Desbloquear dispositivo usando o código de pai/mãe</translation> <translation id="4702647871202761252">A tela de privacidade está desativada</translation> <translation id="4705716602320768426">Enviar feedback</translation> +<translation id="4706121060329443414">O download será feito mais tarde. Por enquanto, a fala será enviada ao Google para processamento.</translation> <translation id="4731797938093519117">Acesso de pai/mãe</translation> <translation id="4734965478015604180">Horizontal</translation> <translation id="4735498845456076464">O atalho de teclado <ph name="LAUNCHER_KEY_NAME" /> + tecla numérica mudou. Para usar as teclas de função, pressione <ph name="LAUNCHER_KEY_NAME" /> + uma tecla na linha superior.</translation> @@ -590,6 +593,7 @@ <translation id="5600837773213129531">Pressione Ctrl + Alt + Z para desativar o feedback falado.</translation> <translation id="5601503069213153581">PIN</translation> <translation id="5619862035903135339">A captura de tela foi desativada pela política do administrador</translation> +<translation id="5620281292257375798">Somente uso interno</translation> <translation id="5625955975703555628">LTE+</translation> <translation id="5648021990716966815">Entrada para microfone</translation> <translation id="5662709761327382534">Gravação do microfone <ph name="CURRENT_STATE" />. Pressione "Enter" para que a gravação do microfone seja <ph name="NEW_STATE" /></translation> @@ -657,6 +661,7 @@ <translation id="6073451960410192870">Parar de gravar</translation> <translation id="607652042414456612">Seu computador pode ser detectado por dispositivos Bluetooth próximos e aparecerá como "<ph name="NAME" />", com o endereço <ph name="ADDRESS" /></translation> <translation id="6094290315941448991">A gravação de tela é desativada pela política do administrador quando há conteúdo protegido visível</translation> +<translation id="6114505516289286752">Download de arquivos de fala em <ph name="LANGUAGE" /> concluído</translation> <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation> <translation id="612734058257491180">O Google Assistente não está disponível em uma sessão de visitante.</translation> <translation id="6137566720514957455">Abrir caixa de diálogo para a remoção de <ph name="USER_EMAIL_ADDRESS" /></translation> @@ -738,6 +743,7 @@ <translation id="6816797338148849397">Informações relacionadas à sua seleção disponíveis. Use a tecla de seta para cima para acessar.</translation> <translation id="6818242057446442178">Voltar por palavra</translation> <translation id="6820676911989879663">Faça uma pausa</translation> +<translation id="6836499262298959512">Arquivo perigoso</translation> <translation id="6837064795450991317">Ocultar barra de espaços de trabalho</translation> <translation id="6850010208275816200">O app atual está no modo tela cheia. Se o app pedir sua senha, saia da tela cheia antes de digitá-la.</translation> <translation id="6852052252232534364">Clique para ativar</translation> @@ -878,6 +884,7 @@ <translation id="7901405293566323524">Phone Hub</translation> <translation id="7902625623987030061">Toque no sensor de digital</translation> <translation id="7904094684485781019">O administrador desta conta bloqueou o login múltiplo.</translation> +<translation id="7930731167419639574">As falas agora são processadas localmente, e o Ditado funciona off-line</translation> <translation id="7933084174919150729">O Google Assistente só está disponível para o perfil principal.</translation> <translation id="79341161159229895">Conta gerenciada por <ph name="FIRST_PARENT_EMAIL" /> e <ph name="SECOND_PARENT_EMAIL" /></translation> <translation id="793716872548410480">Pressione <ph name="SHORTCUT_KEY_NAME" /> + V para ver a área de transferência. Os últimos cinco itens que você copiou ficam salvos nela.</translation>
diff --git a/ash/strings/ash_strings_ro.xtb b/ash/strings/ash_strings_ro.xtb index d4190b45..fe831085 100644 --- a/ash/strings/ash_strings_ro.xtb +++ b/ash/strings/ash_strings_ro.xtb
@@ -244,6 +244,7 @@ <translation id="2946119680249604491">Adăugați o conexiune</translation> <translation id="2961963223658824723">A apărut o eroare. Încearcă din nou în câteva secunde.</translation> <translation id="2963773877003373896">mod3</translation> +<translation id="296762781903199866">Nu s-au putut descărca fișierele de redare în scris a vorbirii în <ph name="LANGUAGE" /></translation> <translation id="2970920913501714344">să instaleze aplicații, extensii și teme;</translation> <translation id="2977598380246111477">Următorul număr</translation> <translation id="2992327365391326550">Butonul pentru microfonul dispozitivului este dezactivat.</translation> @@ -348,6 +349,7 @@ <translation id="370665806235115550">Se încarcă…</translation> <translation id="371370241367527062">Microfonul din față</translation> <translation id="3713734891607377840">Deschide după finalizare</translation> +<translation id="3732269052167349831"><ph name="DESC_TEXT" />; dă clic pe caseta de dialog ca să vezi rezultatul în Căutarea Google.</translation> <translation id="3742055079367172538">Captură de ecran efectuată</translation> <translation id="3771549900096082774">Mod de contrast ridicat</translation> <translation id="3773700760453577392">Un administrator a interzis conectarea multiplă pentru <ph name="USER_EMAIL" />. Toți utilizatorii trebuie să se deconecteze pentru a continua.</translation> @@ -485,6 +487,7 @@ <translation id="4696813013609194136">Deblochează dispozitivul cu codul părintelui</translation> <translation id="4702647871202761252">Ecranul de confidențialitate este dezactivat</translation> <translation id="4705716602320768426">Feedback pentru fișiere</translation> +<translation id="4706121060329443414">Se va încerca descărcarea mai târziu. Momentan, fișierele de redare în scris a vorbirii vor fi trimise la Google pentru procesare.</translation> <translation id="4731797938093519117">Acces pentru părinți</translation> <translation id="4734965478015604180">Orizontal</translation> <translation id="4735498845456076464">Comanda rapidă de la tastatură <ph name="LAUNCHER_KEY_NAME" /> + număr s-a schimbat. Pentru a folosi tastele pentru funcții, apasă tasta <ph name="LAUNCHER_KEY_NAME" /> + o tastă de pe rândul de sus.</translation> @@ -590,6 +593,7 @@ <translation id="5600837773213129531">Apasă Ctrl + Alt + Z ca să dezactivezi feedbackul rostit.</translation> <translation id="5601503069213153581">Cod PIN</translation> <translation id="5619862035903135339">Politica implementată de administrator dezactivează capturarea ecranului</translation> +<translation id="5620281292257375798">Numai intern</translation> <translation id="5625955975703555628">LTE+</translation> <translation id="5648021990716966815">Mufă pentru microfon</translation> <translation id="5662709761327382534">Înregistrare audio <ph name="CURRENT_STATE" />, Apasă pe Enter pentru înregistrare audio <ph name="NEW_STATE" /></translation> @@ -657,6 +661,7 @@ <translation id="6073451960410192870">Oprește înregistrarea</translation> <translation id="607652042414456612">Computerul poate fi detectat de dispozitivele Bluetooth din apropiere și va apărea ca „<ph name="NAME" />” cu adresa <ph name="ADDRESS" /></translation> <translation id="6094290315941448991">Politica implementată de administrator dezactivează înregistrarea ecranului atunci când se afișează conținut confidențial</translation> +<translation id="6114505516289286752">Fișierele de redare în scris a vorbirii în <ph name="LANGUAGE" /> s-au descărcat</translation> <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation> <translation id="612734058257491180">Asistentul Google nu este disponibil într-o sesiune pentru invitați.</translation> <translation id="6137566720514957455">Deschide fereastra de dialog Elimină pentru <ph name="USER_EMAIL_ADDRESS" /></translation> @@ -738,6 +743,7 @@ <translation id="6816797338148849397">Sunt disponibile informații despre selecția ta. Folosește tasta săgeată în sus pentru a le accesa.</translation> <translation id="6818242057446442178">Înapoi cu un cuvânt</translation> <translation id="6820676911989879663">Fă o pauză!</translation> +<translation id="6836499262298959512">Fișier periculos</translation> <translation id="6837064795450991317">Ascunde bara de pe desktop</translation> <translation id="6850010208275816200">Aplicația actuală este afișată pe ecran complet. Dacă aplicația solicită parola, mai întâi ieși din ecranul complet.</translation> <translation id="6852052252232534364">Dă clic pentru activare</translation> @@ -878,6 +884,7 @@ <translation id="7901405293566323524">Phone Hub</translation> <translation id="7902625623987030061">Atinge senzorul de amprentă</translation> <translation id="7904094684485781019">Administratorul acestui cont a dezactivat conectarea multiplă.</translation> +<translation id="7930731167419639574">Vorbirea este acum procesată local și Dictarea funcționează offline</translation> <translation id="7933084174919150729">Asistentul Google este disponibil numai pentru profilul principal.</translation> <translation id="79341161159229895">Cont gestionat de <ph name="FIRST_PARENT_EMAIL" /> și de <ph name="SECOND_PARENT_EMAIL" /></translation> <translation id="793716872548410480">Apasă <ph name="SHORTCUT_KEY_NAME" /> + V pentru a vedea clipboardul. Ultimele cinci elemente pe care le-ai copiat sunt salvate în clipboard.</translation>
diff --git a/ash/strings/ash_strings_sk.xtb b/ash/strings/ash_strings_sk.xtb index d7d8c48..f7f85e5 100644 --- a/ash/strings/ash_strings_sk.xtb +++ b/ash/strings/ash_strings_sk.xtb
@@ -244,6 +244,7 @@ <translation id="2946119680249604491">Pridať pripojenie</translation> <translation id="2961963223658824723">Vyskytol sa problém. Skúste to znova o niekoľko minút.</translation> <translation id="2963773877003373896">mod3</translation> +<translation id="296762781903199866">Súbory s balíkmi reči <ph name="LANGUAGE" /> sa nepodarilo stiahnuť</translation> <translation id="2970920913501714344">Inštalácia aplikácií, rozšírení a motívov</translation> <translation id="2977598380246111477">Ďalšie číslo</translation> <translation id="2992327365391326550">Tlačidlo mikrofónu zariadenia je vypnuté.</translation> @@ -348,6 +349,7 @@ <translation id="370665806235115550">Načítava sa...</translation> <translation id="371370241367527062">Predný mikrofón</translation> <translation id="3713734891607377840">Po dokončení otvoriť</translation> +<translation id="3732269052167349831"><ph name="DESC_TEXT" />; Kliknutím na dialógové okno zobrazte výsledok vo Vyhľadávaní Google.</translation> <translation id="3742055079367172538">Vytvorila sa snímka obrazovky</translation> <translation id="3771549900096082774">Režim s vysokým kontrastom</translation> <translation id="3773700760453577392">Správca zakázal viacnásobné prihlásenie pre používateľa <ph name="USER_EMAIL" />. Všetci používatelia sa musia odhlásiť a až potom môžu pokračovať.</translation> @@ -485,6 +487,7 @@ <translation id="4696813013609194136">Odomknutie zariadenia kódom rodiča</translation> <translation id="4702647871202761252">Obrazovka ochrany súkromia je vypnutá</translation> <translation id="4705716602320768426">Odoslať spätnú väzbu</translation> +<translation id="4706121060329443414">K pokusu o stiahnutie dôjde neskôr. Reč bude odoslaná Googlu na spracovanie.</translation> <translation id="4731797938093519117">Rodičovský prístup</translation> <translation id="4734965478015604180">Na šírku</translation> <translation id="4735498845456076464">Klávesová skratka <ph name="LAUNCHER_KEY_NAME" /> + číslo bola zmenená. Ak chcete použiť klávesy s funkciami, stlačte kláves <ph name="LAUNCHER_KEY_NAME" /> + kláves v hornom rade.</translation> @@ -590,6 +593,7 @@ <translation id="5600837773213129531">Hovorenú spätnú väzbu zakážete kombináciou klávesov Ctrl+Alt+Z.</translation> <translation id="5601503069213153581">Kód PIN</translation> <translation id="5619862035903135339">Snímanie obrazovky je zakázané pravidlom správcu</translation> +<translation id="5620281292257375798">Iba interné</translation> <translation id="5625955975703555628">LTE+</translation> <translation id="5648021990716966815">Konektor mikrofónu</translation> <translation id="5662709761327382534">Nahrávať mikrofón <ph name="CURRENT_STATE" />. Stlačením klávesa Enter zapnete nahrávanie zvuku z mikrofónu <ph name="NEW_STATE" />.</translation> @@ -657,6 +661,7 @@ <translation id="6073451960410192870">Zastaviť zaznamenávanie</translation> <translation id="607652042414456612">Váš počítač je viditeľný pre zariadenia Bluetooth v blízkosti a zobrazí sa ako <ph name="NAME" /> s adresou <ph name="ADDRESS" /></translation> <translation id="6094290315941448991">Pravidlo správcu zakazuje nahrávanie obrazovky, keď je viditeľný dôverný obsah</translation> +<translation id="6114505516289286752">Súbory s balíkmi reči <ph name="LANGUAGE" /> boli stiahnuté</translation> <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation> <translation id="612734058257491180">Asistent Google nie je k dispozícii v relácii hosťa.</translation> <translation id="6137566720514957455">Otvoriť dialógové okno na odstránenie účtu <ph name="USER_EMAIL_ADDRESS" /></translation> @@ -738,6 +743,7 @@ <translation id="6816797338148849397">K dispozícii sú informácie súvisiace s vaším výberom. Prístup získate pomocou šípky nahor.</translation> <translation id="6818242057446442178">Dozadu o slovo</translation> <translation id="6820676911989879663">Urobte si prestávku.</translation> +<translation id="6836499262298959512">Nebezpečný súbor</translation> <translation id="6837064795450991317">Skryť panel na ploche</translation> <translation id="6850010208275816200">Aktuálna aplikácia je spustená v režime celej obrazovky. Ak vás požiada o heslo, najprv ukončite režim celej obrazovky.</translation> <translation id="6852052252232534364">Aktivovať kliknutím</translation> @@ -878,6 +884,7 @@ <translation id="7901405293566323524">Telefonické centrum</translation> <translation id="7902625623987030061">Dotknite sa senzora odtlačkov prstov</translation> <translation id="7904094684485781019">Správca tohto účtu zakázal viacnásobné prihlásenie.</translation> +<translation id="7930731167419639574">Reč sa teraz spracúva miestne a diktovanie funguje offline</translation> <translation id="7933084174919150729">Asistent Google je k dispozícii iba pre primárny profil.</translation> <translation id="79341161159229895">Správcovia účtu: <ph name="FIRST_PARENT_EMAIL" /> a <ph name="SECOND_PARENT_EMAIL" /></translation> <translation id="793716872548410480">Schránku zobrazíte klávesmi <ph name="SHORTCUT_KEY_NAME" /> + V. Posledných päť skopírovaných položiek sa uloží do vašej schránky.</translation>
diff --git a/ash/strings/ash_strings_sl.xtb b/ash/strings/ash_strings_sl.xtb index ca64731..405fa02 100644 --- a/ash/strings/ash_strings_sl.xtb +++ b/ash/strings/ash_strings_sl.xtb
@@ -244,6 +244,7 @@ <translation id="2946119680249604491">Dodaj povezavo</translation> <translation id="2961963223658824723">Prišlo je do napake. Poskusite znova čez nekaj sekund.</translation> <translation id="2963773877003373896">mod3</translation> +<translation id="296762781903199866">Ni bilo mogoče prenesti datotek za govor za jezik <ph name="LANGUAGE" /></translation> <translation id="2970920913501714344">nameščanje aplikacij, razširitev in tem;</translation> <translation id="2977598380246111477">Naslednja številka</translation> <translation id="2992327365391326550">Gumb naprave za mikrofon je izklopljen.</translation> @@ -348,6 +349,7 @@ <translation id="370665806235115550">Nalaganje ...</translation> <translation id="371370241367527062">Sprednji mikrofon</translation> <translation id="3713734891607377840">Odpri ob dokončanju</translation> +<translation id="3732269052167349831"><ph name="DESC_TEXT" />; Kliknite pogovorno okno, če si želite ogledati rezultat v Iskanju Google.</translation> <translation id="3742055079367172538">Posnetek zaslona je narejen</translation> <translation id="3771549900096082774">Visokokontrastni način</translation> <translation id="3773700760453577392">Skrbnik je prepovedal prijavo z več računi za <ph name="USER_EMAIL" />. Če želite nadaljevati, morajo biti odjavljeni vsi uporabniki.</translation> @@ -485,6 +487,7 @@ <translation id="4696813013609194136">Odklepanje naprave s kodo starša</translation> <translation id="4702647871202761252">Zaslon za zasebnost je izklopljen</translation> <translation id="4705716602320768426">Pošiljanje povratnih informacij</translation> +<translation id="4706121060329443414">Poskus prenosa bo izveden pozneje. Za zdaj bo govor poslan Googlu v obdelavo.</translation> <translation id="4731797938093519117">Starševski dostop</translation> <translation id="4734965478015604180">Vodoravno</translation> <translation id="4735498845456076464">Bližnjica na tipkovnici <ph name="LAUNCHER_KEY_NAME" /> + številka je spremenjena. Če želite uporabljati funkcijske tipke, pritisnite tipko za <ph name="LAUNCHER_KEY_NAME" /> in tipko v vrhnji vrstici.</translation> @@ -590,6 +593,7 @@ <translation id="5600837773213129531">Če želite onemogočiti glasovni odziv, pritisnite Ctrl + Alt + Z.</translation> <translation id="5601503069213153581">PIN</translation> <translation id="5619862035903135339">Pravilnik skrbnika onemogoča zajem zaslonske slike.</translation> +<translation id="5620281292257375798">Samo za interno rabo</translation> <translation id="5625955975703555628">LTE+</translation> <translation id="5648021990716966815">Vtič za mikrofon</translation> <translation id="5662709761327382534">Snemanje mikrofona <ph name="CURRENT_STATE" />. Pritisnite Enter, če želite vklopiti mikrofon: <ph name="NEW_STATE" />.</translation> @@ -657,6 +661,7 @@ <translation id="6073451960410192870">Ustavi snemanje</translation> <translation id="607652042414456612">Vaš računalnik je viden bližnjim napravam Bluetooth in bo videti kot »<ph name="NAME" />« z naslovom <ph name="ADDRESS" /></translation> <translation id="6094290315941448991">Pravilnik skrbnika onemogoča snemanje zaslona, če je vidna zaupna vsebina.</translation> +<translation id="6114505516289286752">Datoteke za govor v jeziku <ph name="LANGUAGE" /> so bile prenesene</translation> <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" />.</translation> <translation id="612734058257491180">Pomočnik Google ni na voljo v gostujoči seji.</translation> <translation id="6137566720514957455">Odpri pogovorno okno za odstranjevanje za <ph name="USER_EMAIL_ADDRESS" /></translation> @@ -738,6 +743,7 @@ <translation id="6816797338148849397">Podatki, ki so na voljo v zvezi z vašim izborom. Za dostop uporabite tipko s puščico gor.</translation> <translation id="6818242057446442178">Nazaj po besedo</translation> <translation id="6820676911989879663">Čas za odmor!</translation> +<translation id="6836499262298959512">Nevarna datoteka</translation> <translation id="6837064795450991317">Skrij namizno vrstico</translation> <translation id="6850010208275816200">Trenutna aplikacija je v celozaslonskem načinu. Če aplikacija zahteva geslo, najprej zaprite celozaslonski način.</translation> <translation id="6852052252232534364">Klik. za akt.</translation> @@ -878,6 +884,7 @@ <translation id="7901405293566323524">Središče za telefone</translation> <translation id="7902625623987030061">Dotaknite se tipala prstnih odtisov.</translation> <translation id="7904094684485781019">Skrbnik tega računa je onemogočil prijavo z več računi.</translation> +<translation id="7930731167419639574">Govor se zdaj obdela lokalno in narek deluje brez povezave.</translation> <translation id="7933084174919150729">Pomočnik Google je na voljo samo za primarni profil.</translation> <translation id="79341161159229895">Račun upravljata <ph name="FIRST_PARENT_EMAIL" /> in <ph name="SECOND_PARENT_EMAIL" /></translation> <translation id="793716872548410480">Pritisnite <ph name="SHORTCUT_KEY_NAME" /> + V, če si želite ogledati odložišče. Zadnjih pet kopiranih elementov je shranjenih v odložišču.</translation>
diff --git a/ash/strings/ash_strings_sr-Latn.xtb b/ash/strings/ash_strings_sr-Latn.xtb index 61c22cc..5991ee6 100644 --- a/ash/strings/ash_strings_sr-Latn.xtb +++ b/ash/strings/ash_strings_sr-Latn.xtb
@@ -244,6 +244,7 @@ <translation id="2946119680249604491">Dodaj vezu</translation> <translation id="2961963223658824723">Nešto nije u redu. Probajte ponovo za par sekundi.</translation> <translation id="2963773877003373896">mod3</translation> +<translation id="296762781903199866">Preuzimanje fajlova sa govorom na jeziku <ph name="LANGUAGE" /> nije uspelo</translation> <translation id="2970920913501714344">Instalirajte aplikacije, dodatke i teme</translation> <translation id="2977598380246111477">Sledeći broj</translation> <translation id="2992327365391326550">Dugme za mikrofon na uređaju je isključeno.</translation> @@ -348,6 +349,7 @@ <translation id="370665806235115550">Učitava se...</translation> <translation id="371370241367527062">Prednji mikrofon</translation> <translation id="3713734891607377840">Otvori kada bude završeno</translation> +<translation id="3732269052167349831"><ph name="DESC_TEXT" />; Kliknite na dijalog da biste videli rezultat u Google pretrazi.</translation> <translation id="3742055079367172538">Snimak ekrana je napravljen</translation> <translation id="3771549900096082774">Režim visokog kontrasta</translation> <translation id="3773700760453577392">Administrator je zabranio višestruko prijavljivanje za <ph name="USER_EMAIL" />. Svi korisnici moraju da se odjave da bismo nastavili sa sesijom.</translation> @@ -485,6 +487,7 @@ <translation id="4696813013609194136">Otključajte uređaj pomoću koda roditelja</translation> <translation id="4702647871202761252">Ekran za privatnost je isključen</translation> <translation id="4705716602320768426">Pošaljite povratne informacije</translation> +<translation id="4706121060329443414">Probaćemo preuzimanje kasnije. Govor će za sada biti poslat Google-u radi obrade.</translation> <translation id="4731797938093519117">Roditeljski pristup</translation> <translation id="4734965478015604180">Horizontalno</translation> <translation id="4735498845456076464">Tasterska prečica <ph name="LAUNCHER_KEY_NAME" /> + broj je promenjena. Da biste koristili funkcijske tastere, pritisnite taster <ph name="LAUNCHER_KEY_NAME" /> + taster u gornjem redu.</translation> @@ -590,6 +593,7 @@ <translation id="5600837773213129531">Pritisnite Ctrl + Alt + Z da biste onemogućili govorne povratne informacije.</translation> <translation id="5601503069213153581">PIN</translation> <translation id="5619862035903135339">Smernice administratora onemogućavaju snimanje ekrana</translation> +<translation id="5620281292257375798">Samo interno</translation> <translation id="5625955975703555628">LTE+</translation> <translation id="5648021990716966815">Utikač za mikrofon</translation> <translation id="5662709761327382534">Podešavanje Snimaj pomoću mikrofona je <ph name="CURRENT_STATE" />, pritisnite enter da bi snimanje pomoću mikrofona bilo <ph name="NEW_STATE" /></translation> @@ -657,6 +661,7 @@ <translation id="6073451960410192870">Zaustavi snimanje</translation> <translation id="607652042414456612">Obližnji Bluetooth uređaji mogu da otkriju računar i on će se prikazivati kao „<ph name="NAME" />“ sa adresom <ph name="ADDRESS" /></translation> <translation id="6094290315941448991">Smernice administratora onemogućavaju snimanje ekrana kada je vidljiv poverljiv sadržaj</translation> +<translation id="6114505516289286752">Preuzeti su fajlovi sa govorom na jeziku <ph name="LANGUAGE" /></translation> <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation> <translation id="612734058257491180">Google pomoćnik nije dostupan u sesiji gosta.</translation> <translation id="6137566720514957455">Otvara nalog za uklanjanje za korisnika <ph name="USER_EMAIL_ADDRESS" /></translation> @@ -738,6 +743,7 @@ <translation id="6816797338148849397">Dostupne su informacije vezane za vaš izbor. Koristite taster sa strelicom nagore da biste im pristupili.</translation> <translation id="6818242057446442178">Reč unazad</translation> <translation id="6820676911989879663">Napravite pauzu!</translation> +<translation id="6836499262298959512">Opasan fajl</translation> <translation id="6837064795450991317">Sakrij traku za radne površine</translation> <translation id="6850010208275816200">Aktuelna aplikacija se prikazuje preko celog ekrana. Ako aplikacija traži lozinku, prvo izađite iz prikazivanja preko celog ekrana.</translation> <translation id="6852052252232534364">Aktivirajte</translation> @@ -878,6 +884,7 @@ <translation id="7901405293566323524">Phone Hub</translation> <translation id="7902625623987030061">Dodirnite senzor za otisak prsta</translation> <translation id="7904094684485781019">Administrator za ovaj nalog je zabranio višestruko prijavljivanje.</translation> +<translation id="7930731167419639574">Govor se sada lokalno obrađuje i diktiranje radi oflajn</translation> <translation id="7933084174919150729">Google pomoćnik je dostupan samo za primarni profil.</translation> <translation id="79341161159229895">Nalogom upravljaju <ph name="FIRST_PARENT_EMAIL" /> i <ph name="SECOND_PARENT_EMAIL" /></translation> <translation id="793716872548410480">Pritisnite <ph name="SHORTCUT_KEY_NAME" /> + V da biste videli privremenu memoriju. Poslednjih 5 stavki koje ste kopirali se čuvaju u privremenoj memoriji.</translation>
diff --git a/ash/strings/ash_strings_sr.xtb b/ash/strings/ash_strings_sr.xtb index 31ef547..0f1a0b3 100644 --- a/ash/strings/ash_strings_sr.xtb +++ b/ash/strings/ash_strings_sr.xtb
@@ -244,6 +244,7 @@ <translation id="2946119680249604491">Додај везу</translation> <translation id="2961963223658824723">Нешто није у реду. Пробајте поново за пар секунди.</translation> <translation id="2963773877003373896">mod3</translation> +<translation id="296762781903199866">Преузимање фајлова са говором на језику <ph name="LANGUAGE" /> није успело</translation> <translation id="2970920913501714344">Инсталирајте апликације, додатке и теме</translation> <translation id="2977598380246111477">Следећи број</translation> <translation id="2992327365391326550">Дугме за микрофон на уређају је искључено.</translation> @@ -348,6 +349,7 @@ <translation id="370665806235115550">Учитава се...</translation> <translation id="371370241367527062">Предњи микрофон</translation> <translation id="3713734891607377840">Отвори када буде завршено</translation> +<translation id="3732269052167349831"><ph name="DESC_TEXT" />; Кликните на дијалог да бисте видели резултат у Google претрази.</translation> <translation id="3742055079367172538">Снимак екрана је направљен</translation> <translation id="3771549900096082774">Режим високог контраста</translation> <translation id="3773700760453577392">Администратор је забранио вишеструко пријављивање за <ph name="USER_EMAIL" />. Сви корисници морају да се одјаве да бисмо наставили са сесијом.</translation> @@ -485,6 +487,7 @@ <translation id="4696813013609194136">Откључајте уређај помоћу кода родитеља</translation> <translation id="4702647871202761252">Екран за приватност је искључен</translation> <translation id="4705716602320768426">Пошаљите повратне информације</translation> +<translation id="4706121060329443414">Пробаћемо преузимање касније. Говор ће за сада бити послат Google-у ради обраде.</translation> <translation id="4731797938093519117">Родитељски приступ</translation> <translation id="4734965478015604180">Хоризонтално</translation> <translation id="4735498845456076464">Тастерска пречица <ph name="LAUNCHER_KEY_NAME" /> + број је промењена. Да бисте користили функцијске тастере, притисните тастер <ph name="LAUNCHER_KEY_NAME" /> + тастер у горњем реду.</translation> @@ -590,6 +593,7 @@ <translation id="5600837773213129531">Притисните Ctrl + Alt + Z да бисте онемогућили говорне повратне информације.</translation> <translation id="5601503069213153581">PIN</translation> <translation id="5619862035903135339">Смернице администратора онемогућавају снимање екрана</translation> +<translation id="5620281292257375798">Само интерно</translation> <translation id="5625955975703555628">LTE+</translation> <translation id="5648021990716966815">Утикач за микрофон</translation> <translation id="5662709761327382534">Подешавање Снимај помоћу микрофона је <ph name="CURRENT_STATE" />, притисните enter да би снимање помоћу микрофона било <ph name="NEW_STATE" /></translation> @@ -657,6 +661,7 @@ <translation id="6073451960410192870">Заустави снимање</translation> <translation id="607652042414456612">Оближњи Bluetooth уређаји могу да открију рачунар и он ће се приказивати као „<ph name="NAME" />“ са адресом <ph name="ADDRESS" /></translation> <translation id="6094290315941448991">Смернице администратора онемогућавају снимање екрана када је видљив поверљив садржај</translation> +<translation id="6114505516289286752">Преузети су фајлови са говором на језику <ph name="LANGUAGE" /></translation> <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation> <translation id="612734058257491180">Google помоћник није доступан у сесији госта.</translation> <translation id="6137566720514957455">Отвара налог за уклањање за корисника <ph name="USER_EMAIL_ADDRESS" /></translation> @@ -738,6 +743,7 @@ <translation id="6816797338148849397">Доступне су информације везане за ваш избор. Користите тастер са стрелицом нагоре да бисте им приступили.</translation> <translation id="6818242057446442178">Реч уназад</translation> <translation id="6820676911989879663">Направите паузу!</translation> +<translation id="6836499262298959512">Опасан фајл</translation> <translation id="6837064795450991317">Сакриј траку за радне површине</translation> <translation id="6850010208275816200">Актуелна апликација се приказује преко целог екрана. Ако апликација тражи лозинку, прво изађите из приказивања преко целог екрана.</translation> <translation id="6852052252232534364">Активирајте</translation> @@ -878,6 +884,7 @@ <translation id="7901405293566323524">Phone Hub</translation> <translation id="7902625623987030061">Додирните сензор за отисак прста</translation> <translation id="7904094684485781019">Администратор за овај налог је забранио вишеструко пријављивање.</translation> +<translation id="7930731167419639574">Говор се сада локално обрађује и диктирање ради офлајн</translation> <translation id="7933084174919150729">Google помоћник је доступан само за примарни профил.</translation> <translation id="79341161159229895">Налогом управљају <ph name="FIRST_PARENT_EMAIL" /> и <ph name="SECOND_PARENT_EMAIL" /></translation> <translation id="793716872548410480">Притисните <ph name="SHORTCUT_KEY_NAME" /> + V да бисте видели привремену меморију. Последњих 5 ставки које сте копирали се чувају у привременој меморији.</translation>
diff --git a/ash/strings/ash_strings_te.xtb b/ash/strings/ash_strings_te.xtb index 015c5c7..f2f1f32c 100644 --- a/ash/strings/ash_strings_te.xtb +++ b/ash/strings/ash_strings_te.xtb
@@ -122,7 +122,7 @@ <translation id="1885785240814121742">వేలిముద్రతో అన్లాక్ చేయండి</translation> <translation id="1888656773939766144"><ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz)ను <ph name="DISPLAY_NAME" /> సపోర్ట్ చేయదు. రిజల్యూషన్ <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />)కు మార్చబడింది. మార్పులను అలాగే ఉంచడానికి 'నిర్ధారించు'ను క్లిక్ చేయండి. మునుపటి సెట్టింగ్లు <ph name="TIMEOUT_SECONDS" />లో రీస్టోర్ చేయబడతాయి.</translation> <translation id="1919743966458266018">టాస్క్ మేనేజర్ను తెరిచే షార్ట్కట్ మార్చబడింది. దయచేసి <ph name="OLD_SHORTCUT" />కు బదులుగా <ph name="NEW_SHORTCUT" />ను ఉపయోగించండి.</translation> -<translation id="1923539912171292317">స్వయంచాలక క్లిక్లు</translation> +<translation id="1923539912171292317">ఆటోమేటిక్ క్లిక్లు</translation> <translation id="1928739107511554905">అప్డేట్ను పొందడానికి, కీబోర్డ్ను అలానే జోడించి ఉంచి మీ Chromebookను పునఃప్రారంభించడం కోసం టచ్స్క్రీన్ను ఉపయోగించండి.</translation> <translation id="1951012854035635156">Assistant</translation> <translation id="1954252331066828794">స్క్రీన్ రికార్డింగ్ పూర్తయింది</translation> @@ -305,7 +305,7 @@ <translation id="3413817803639110246">ఇప్పటికీ చూడటానికి ఏమీ లేవు</translation> <translation id="3428447136709161042"><ph name="NETWORK_NAME" /> నుండి డిస్కనెక్ట్ చేయి</translation> <translation id="3430396595145920809">వెనుకకు వెళ్లడానికి కుడి వైపు నుండి స్వైప్ చేయండి</translation> -<translation id="343571671045587506">రిమైండర్ను సవరించండి</translation> +<translation id="343571671045587506">రిమైండర్ను ఎడిట్ చేయండి</translation> <translation id="3435967511775410570">వేలిముద్ర గుర్తించబడింది</translation> <translation id="3441920967307853524"><ph name="RECEIVED_BYTES" />/<ph name="TOTAL_BYTES" /></translation> <translation id="3445288400492335833"><ph name="MINUTES" /> నిమి</translation> @@ -787,7 +787,7 @@ <translation id="7246071203293827765"><ph name="UPDATE_TEXT" />. ఒక అప్డేట్ను వర్తింపజేయడానికి ఈ Chromebookను రీస్టార్ట్ చేయాలి. దీనికి 1 నిమిషం వరకు పట్టవచ్చు.</translation> <translation id="7256634071279256947">వెనుకవైపు మైక్రోఫోన్</translation> <translation id="726276584504105859">విభజన స్క్రీన్ను ఉపయోగించడానికి ఇక్కడికి లాగండి</translation> -<translation id="7262906531272962081">రిమైండర్ను సృష్టించండి</translation> +<translation id="7262906531272962081">రిమైండర్ను క్రియేట్ చేయండి</translation> <translation id="7279434993080105272"><ph name="COLOR_PARAMETER" /> మార్కర్ రంగు</translation> <translation id="7302889331339392448">లైవ్ క్యాప్షన్ ఆఫ్ చేయబడింది.</translation> <translation id="7303365578352795231">మరొక పరికరంలో సమాధానం ఇవ్వబడుతోంది.</translation> @@ -928,7 +928,7 @@ <translation id="8308637677604853869">మునుపటి మెనూ</translation> <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation> <translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> విండో ఎంచుకోబడింది</translation> -<translation id="8351131234907093545">గమనికను సృష్టించండి</translation> +<translation id="8351131234907093545">గమనికను క్రియేట్ చేయండి</translation> <translation id="8371779926711439835">ఒక అక్షరం ముందుకు</translation> <translation id="8371991222807690464">గెస్ట్ మోడ్లో పెరిఫెరల్ పనితీరు పరిమితంగా ఉండవచ్చు</translation> <translation id="8375916635258623388">ఈ <ph name="DEVICE_NAME" /> మరియు మీ ఫోన్ ఆటోమెటిక్గా కనెక్ట్ చేయబడతాయి</translation>
diff --git a/ash/strings/ash_strings_uk.xtb b/ash/strings/ash_strings_uk.xtb index b97b1507..b1a9c79a 100644 --- a/ash/strings/ash_strings_uk.xtb +++ b/ash/strings/ash_strings_uk.xtb
@@ -244,6 +244,7 @@ <translation id="2946119680249604491">Додати з’єднання</translation> <translation id="2961963223658824723">Сталася помилка. Повторіть спробу за кілька секунд.</translation> <translation id="2963773877003373896">mod3</translation> +<translation id="296762781903199866">Не вдалося завантажити файли живих субтитрів для такої мови: <ph name="LANGUAGE" /></translation> <translation id="2970920913501714344">установлювати додатки, розширення й теми</translation> <translation id="2977598380246111477">Наступна цифра</translation> <translation id="2992327365391326550">Кнопку мікрофона пристрою вимкнено.</translation> @@ -348,6 +349,7 @@ <translation id="370665806235115550">Завантаження...</translation> <translation id="371370241367527062">Мікрофон на передній панелі</translation> <translation id="3713734891607377840">Відкриється після завершення</translation> +<translation id="3732269052167349831"><ph name="DESC_TEXT" />. Натисніть вікно, щоб переглянути результат у Пошуку Google.</translation> <translation id="3742055079367172538">Знімок екрана зроблено</translation> <translation id="3771549900096082774">Режим високого контрасту</translation> <translation id="3773700760453577392">Адміністратор заборонив паралельний вхід користувачеві <ph name="USER_EMAIL" />. Щоб продовжити, усі користувачі повинні вийти.</translation> @@ -485,6 +487,7 @@ <translation id="4696813013609194136">Введіть код доступу батьків</translation> <translation id="4702647871202761252">Екран конфіденційності вимкнено</translation> <translation id="4705716602320768426">Надіслати відгук</translation> +<translation id="4706121060329443414">Спроба завантаження повториться пізніше. Наразі мовлення буде надіслано на сервери Google для обробки.</translation> <translation id="4731797938093519117">Батьківський доступ</translation> <translation id="4734965478015604180">Горизонтально</translation> <translation id="4735498845456076464">Комбінацію клавіш "<ph name="LAUNCHER_KEY_NAME" /> + цифра" змінено. Щоб скористатися функціональними клавішами, натисніть <ph name="LAUNCHER_KEY_NAME" /> + клавішу у верхньому рядку.</translation> @@ -590,6 +593,7 @@ <translation id="5600837773213129531">Натисніть Ctrl + Alt + Z, щоб вимкнути голосові підказки.</translation> <translation id="5601503069213153581">PIN-код</translation> <translation id="5619862035903135339">Адміністратор заборонив запис екрана</translation> +<translation id="5620281292257375798">Лише для внутрішнього використання</translation> <translation id="5625955975703555628">LTE+</translation> <translation id="5648021990716966815">Гніздо для мікрофона</translation> <translation id="5662709761327382534">Мікрофон для запису <ph name="CURRENT_STATE" />. Щоб запис із мікрофона було <ph name="NEW_STATE" />, натисніть клавішу Enter</translation> @@ -657,6 +661,7 @@ <translation id="6073451960410192870">Припинити запис</translation> <translation id="607652042414456612">Ваш комп’ютер видимий для пристроїв Bluetooth поблизу та відображатиметься з назвою "<ph name="NAME" />" та адресою <ph name="ADDRESS" /></translation> <translation id="6094290315941448991">Адміністратор заборонив запис екрана, якщо видно конфіденційний контент</translation> +<translation id="6114505516289286752">Файли живих субтитрів завантажено (<ph name="LANGUAGE" />)</translation> <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation> <translation id="612734058257491180">Google Асистент недоступний під час сеансу в режимі "Гість".</translation> <translation id="6137566720514957455">Відкрити вікно видалення облікового запису <ph name="USER_EMAIL_ADDRESS" /></translation> @@ -738,6 +743,7 @@ <translation id="6816797338148849397">Доступна інформація, пов'язана з виділеним текстом. Щоб перейти до неї, натисніть клавішу зі стрілкою вгору.</translation> <translation id="6818242057446442178">Назад на одне слово</translation> <translation id="6820676911989879663">Зробіть перерву!</translation> +<translation id="6836499262298959512">Небезпечний файл</translation> <translation id="6837064795450991317">Сховати панель</translation> <translation id="6850010208275816200">Поточний додаток розгорнуто на весь екран. Якщо з'явиться запит пароля, спершу вийдіть із цього режиму.</translation> <translation id="6852052252232534364">Активувати</translation> @@ -878,6 +884,7 @@ <translation id="7901405293566323524">Телефонний центр</translation> <translation id="7902625623987030061">Торкніться сканера відбитків пальців</translation> <translation id="7904094684485781019">Адміністратор цього облікового запису заборонив паралельний вхід.</translation> +<translation id="7930731167419639574">Мовлення тепер обробляється лише на пристрої, а функція диктування працює в режимі офлайн</translation> <translation id="7933084174919150729">Google Асистент доступний лише в основному профілі.</translation> <translation id="79341161159229895">Обліковим записом керують <ph name="FIRST_PARENT_EMAIL" /> і <ph name="SECOND_PARENT_EMAIL" /></translation> <translation id="793716872548410480">Щоб переглянути буфер обміну, натисніть комбінацію клавіш <ph name="SHORTCUT_KEY_NAME" /> + V. У ньому зберігаються 5 останніх елементів, які ви скопіювали.</translation>
diff --git a/ash/wallpaper/test_wallpaper_controller_client.cc b/ash/wallpaper/test_wallpaper_controller_client.cc index 1d35734..727b13c 100644 --- a/ash/wallpaper/test_wallpaper_controller_client.cc +++ b/ash/wallpaper/test_wallpaper_controller_client.cc
@@ -60,6 +60,12 @@ return true; } +base::FilePath TestWallpaperControllerClient::GetWallpaperPathFromDriveFs( + const AccountId& account_id) { + NOTIMPLEMENTED(); + return base::FilePath(); +} + void TestWallpaperControllerClient::GetFilesId( const AccountId& account_id, base::OnceCallback<void(const std::string&)> files_id_callback) const {
diff --git a/ash/wallpaper/test_wallpaper_controller_client.h b/ash/wallpaper/test_wallpaper_controller_client.h index 86bc4bb..d4b74545 100644 --- a/ash/wallpaper/test_wallpaper_controller_client.h +++ b/ash/wallpaper/test_wallpaper_controller_client.h
@@ -60,6 +60,8 @@ DailyWallpaperUrlFetchedCallback callback) override; bool SaveWallpaperToDriveFs(const AccountId& account_id, const base::FilePath& origin) override; + base::FilePath GetWallpaperPathFromDriveFs( + const AccountId& account_id) override; void GetFilesId(const AccountId& account_id, base::OnceCallback<void(const std::string&)> files_id_callback) const override;
diff --git a/ash/wallpaper/wallpaper_controller_impl.cc b/ash/wallpaper/wallpaper_controller_impl.cc index 8a7aa7c..3e45a85 100644 --- a/ash/wallpaper/wallpaper_controller_impl.cc +++ b/ash/wallpaper/wallpaper_controller_impl.cc
@@ -2408,9 +2408,7 @@ return; switch (info.type) { case CUSTOMIZED: - // TODO(b/180736877): Implement getting synced wallpaper image and - // setting it as the wallpaper. - NOTIMPLEMENTED(); + HandleCustomWallpaperInfoSyncedIn(account_id, info); break; case DEFAULT: SetDefaultWallpaper(account_id, /*show_wallpaper=*/true); @@ -2492,10 +2490,13 @@ (local_info == synced_info || local_info.date < synced_info.date)) { return; } - - base::FilePath source = GetCustomWallpaperDir(kOriginalWallpaperSubDir) - .Append(local_info.location); - SaveWallpaperToDriveFs(account_id, source); + if (synced_info.date >= local_info.date) { + OnPrefChanged(); + } else { + base::FilePath source = GetCustomWallpaperDir(kOriginalWallpaperSubDir) + .Append(local_info.location); + SaveWallpaperToDriveFs(account_id, source); + } } bool WallpaperControllerImpl::IsDailyRefreshEnabled() const { @@ -2619,4 +2620,38 @@ SetSyncedWallpaperInfo(account_id, local_info); } +void WallpaperControllerImpl::HandleCustomWallpaperInfoSyncedIn( + const AccountId& account_id, + WallpaperInfo info) { + base::FilePath drivefs_path = + wallpaper_controller_client_->GetWallpaperPathFromDriveFs(account_id); + if (drivefs_path.empty()) + return; + base::File::Info drivefs_file_info; + base::GetFileInfo(drivefs_path, &drivefs_file_info); + // If the drivefs image is older than the synced info date, we know it is + // outdated. + if (drivefs_file_info.last_modified < info.date) { + drive_fs_wallpaper_watcher_.Watch( + drivefs_path, base::FilePathWatcher::Type::kNonRecursive, + base::BindRepeating(&WallpaperControllerImpl::DriveFsWallpaperChanged, + weak_factory_.GetWeakPtr())); + return; + } + + base::FilePath path_in_prefs = base::FilePath(info.location); + std::string file_name = path_in_prefs.BaseName().value(); + ReadAndDecodeWallpaper( + base::BindOnce(&WallpaperControllerImpl::SaveAndSetWallpaper, + weak_factory_.GetWeakPtr(), account_id, file_name, + CUSTOMIZED, info.layout, /*show_wallpaper=*/true), + sequenced_task_runner_, drivefs_path); +} + +void WallpaperControllerImpl::DriveFsWallpaperChanged( + const base::FilePath& path, + bool error) { + OnPrefChanged(); +} + } // namespace ash
diff --git a/ash/wallpaper/wallpaper_controller_impl.h b/ash/wallpaper/wallpaper_controller_impl.h index df4e67c..fd63a65 100644 --- a/ash/wallpaper/wallpaper_controller_impl.h +++ b/ash/wallpaper/wallpaper_controller_impl.h
@@ -26,6 +26,7 @@ #include "ash/wm/overview/overview_observer.h" #include "base/callback_helpers.h" #include "base/files/file_path.h" +#include "base/files/file_path_watcher.h" #include "base/memory/ref_counted.h" #include "base/observer_list.h" #include "base/scoped_observation.h" @@ -623,6 +624,11 @@ void SaveWallpaperToDriveFs(const AccountId& account_id, const base::FilePath& origin_path); + void HandleCustomWallpaperInfoSyncedIn(const AccountId& account_id, + WallpaperInfo info); + + void DriveFsWallpaperChanged(const base::FilePath& path, bool error); + bool locked_ = false; WallpaperMode wallpaper_mode_ = WALLPAPER_NONE; @@ -712,6 +718,8 @@ // true. base::RepeatingClosure reload_always_on_top_wallpaper_callback_; + base::FilePathWatcher drive_fs_wallpaper_watcher_; + // If true, use a solid color wallpaper as if it is the decoded image. bool bypass_decode_for_testing_ = false;
diff --git a/ash/webui/scanning/resources/scanning_app.js b/ash/webui/scanning/resources/scanning_app.js index b6ea4362..b0756ff 100644 --- a/ash/webui/scanning/resources/scanning_app.js +++ b/ash/webui/scanning/resources/scanning_app.js
@@ -931,12 +931,10 @@ } this.setSelectedSourceTypeIfAvailable_(scannerSettings.sourceName); - afterNextRender(this, () => { - this.setSelectedFileTypeIfAvailable_(scannerSettings.fileType); - this.setSelectedColorModeIfAvailable_(scannerSettings.colorMode); - this.setSelectedPageSizeIfAvailable_(scannerSettings.pageSize); - this.setSelectedResolutionIfAvailable_(scannerSettings.resolutionDpi); - }); + this.setSelectedFileTypeIfAvailable_(scannerSettings.fileType); + this.setSelectedColorModeIfAvailable_(scannerSettings.colorMode); + this.setSelectedPageSizeIfAvailable_(scannerSettings.pageSize); + this.setSelectedResolutionIfAvailable_(scannerSettings.resolutionDpi); }, /**
diff --git a/ash/wm/desks/desks_unittests.cc b/ash/wm/desks/desks_unittests.cc index 2a8be30..b02ea66 100644 --- a/ash/wm/desks/desks_unittests.cc +++ b/ash/wm/desks/desks_unittests.cc
@@ -21,6 +21,7 @@ #include "ash/public/cpp/event_rewriter_controller.h" #include "ash/public/cpp/multi_user_window_manager.h" #include "ash/public/cpp/multi_user_window_manager_delegate.h" +#include "ash/public/cpp/shelf_item_delegate.h" #include "ash/public/cpp/shelf_model.h" #include "ash/public/cpp/shelf_types.h" #include "ash/screen_util.h" @@ -114,6 +115,17 @@ namespace { +class TestShelfItemDelegate : public ShelfItemDelegate { + public: + explicit TestShelfItemDelegate(const ShelfID& shelf_id) + : ShelfItemDelegate(shelf_id) {} + void ExecuteCommand(bool from_context_menu, + int64_t command_id, + int32_t event_flags, + int64_t display_id) override {} + void Close() override {} +}; + void NewDesk() { // Create a desk through keyboard. Do not use |kButton| to avoid empty name. DesksController::Get()->NewDesk(DesksCreationRemovalSource::kKeyboard); @@ -3938,7 +3950,8 @@ item.status = ShelfItemStatus::STATUS_RUNNING; item.type = type; item.id = shelf_id; - ShelfModel::Get()->Add(item); + ShelfModel::Get()->Add(item, + std::make_unique<TestShelfItemDelegate>(item.id)); return window; }
diff --git a/base/i18n/rtl_unittest.cc b/base/i18n/rtl_unittest.cc index 30bb648..b566d50 100644 --- a/base/i18n/rtl_unittest.cc +++ b/base/i18n/rtl_unittest.cc
@@ -542,13 +542,18 @@ TEST_F(SetICULocaleTest, OverlongLocaleId) { test::ScopedRestoreICUDefaultLocale restore_locale; std::string id("fr-ca-x-foo"); - while (id.length() < 152) + std::string lid("fr_CA@x=foo"); + while (id.length() < 152) { id.append("-x-foo"); + lid.append("-x-foo"); + } SetICUDefaultLocale(id); EXPECT_STRNE("en_US", icu::Locale::getDefault().getName()); id.append("zzz"); + lid.append("zzz"); SetICUDefaultLocale(id); - EXPECT_STREQ("en_US", icu::Locale::getDefault().getName()); + // ICU-21639 fix the long locale issue now. + EXPECT_STREQ(lid.c_str(), icu::Locale::getDefault().getName()); } } // namespace i18n
diff --git a/base/task/post_task.h b/base/task/post_task.h index b1cc3c1..4de54c8d 100644 --- a/base/task/post_task.h +++ b/base/task/post_task.h
@@ -131,11 +131,21 @@ // or thread and same TaskTraits if applicable) when |task| completes. Returns // false if the task definitely won't run because of current shutdown state. Can // only be called when SequencedTaskRunnerHandle::IsSet(). -template <typename TaskReturnType, typename ReplyArgType> +// +// Templating on the types of |task| and |reply| allows template matching to +// work for both base::RepeatingCallback and base::OnceCallback in each case. +template <typename TaskReturnType, + typename ReplyArgType, + template <typename> + class TaskCallbackType, + template <typename> + class ReplyCallbackType, + typename = EnableIfIsBaseCallback<TaskCallbackType>, + typename = EnableIfIsBaseCallback<ReplyCallbackType>> bool PostTaskAndReplyWithResult(const Location& from_here, const TaskTraits& traits, - OnceCallback<TaskReturnType()> task, - OnceCallback<void(ReplyArgType)> reply) { + TaskCallbackType<TaskReturnType()> task, + ReplyCallbackType<void(ReplyArgType)> reply) { auto* result = new std::unique_ptr<TaskReturnType>(); return PostTaskAndReply( from_here, traits,
diff --git a/base/task/thread_pool/thread_group_impl.cc b/base/task/thread_pool/thread_group_impl.cc index a3a9fa6..a927e22 100644 --- a/base/task/thread_pool/thread_group_impl.cc +++ b/base/task/thread_pool/thread_group_impl.cc
@@ -308,6 +308,10 @@ // Time when MayBlockScopeEntered() was last called. Reset when // BlockingScopeExited() is called. TimeTicks blocking_start_time; + + // Cumulative time spend in MAY_BLOCK since the beginning of the current + // task. + TimeDelta cumulative_blocking_time; } write_worker_read_any_; WorkerOnly& worker_only() { @@ -624,6 +628,7 @@ outer_->IncrementTasksRunningLockRequired(priority); DCHECK(!outer_->idle_workers_stack_.Contains(worker)); write_worker().current_task_priority = priority; + write_worker().cumulative_blocking_time = TimeDelta(); if (outer_->after_start().wakeup_after_getwork && outer_->after_start().wakeup_strategy != @@ -854,10 +859,14 @@ CheckedAutoLock auto_lock(outer_->lock_); DCHECK(!read_worker().blocking_start_time.is_null()); - if (incremented_max_tasks_since_blocked_) + if (incremented_max_tasks_since_blocked_) { outer_->DecrementMaxTasksLockRequired(); - else + } else { --outer_->num_unresolved_may_block_; + write_worker().cumulative_blocking_time += + subtle::TimeTicksNowIgnoringOverride() - + write_worker().blocking_start_time; + } if (*read_worker().current_task_priority == TaskPriority::BEST_EFFORT) { if (incremented_max_best_effort_tasks_since_blocked_) @@ -904,7 +913,8 @@ void ThreadGroupImpl::WorkerThreadDelegateImpl:: MaybeIncrementMaxTasksLockRequired() { if (read_any().blocking_start_time.is_null() || - subtle::TimeTicksNowIgnoringOverride() - read_any().blocking_start_time < + subtle::TimeTicksNowIgnoringOverride() - read_any().blocking_start_time + + read_any().cumulative_blocking_time < outer_->after_start().may_block_threshold) { return; }
diff --git a/base/task/thread_pool/thread_group_impl_unittest.cc b/base/task/thread_pool/thread_group_impl_unittest.cc index a58294b..40dff67 100644 --- a/base/task/thread_pool/thread_group_impl_unittest.cc +++ b/base/task/thread_pool/thread_group_impl_unittest.cc
@@ -1016,6 +1016,36 @@ threads_running.Wait(); } + void SaturateWithBusyBlockingTasks( + const NestedBlockingType& nested_blocking_type, + TaskPriority priority = TaskPriority::USER_BLOCKING) { + TestWaitableEvent threads_running; + + const scoped_refptr<TaskRunner> task_runner = test::CreatePooledTaskRunner( + {MayBlock(), WithBaseSyncPrimitives(), priority}, + &mock_pooled_task_runner_delegate_); + + RepeatingClosure threads_running_barrier = BarrierClosure( + kMaxTasks, + BindOnce(&TestWaitableEvent::Signal, Unretained(&threads_running))); + + for (size_t i = 0; i < kMaxTasks; ++i) { + task_runner->PostTask( + FROM_HERE, BindLambdaForTesting([this, &threads_running_barrier, + nested_blocking_type]() { + threads_running_barrier.Run(); + bool done = false; + while (!done) { + NestedScopedBlockingCall nested_scoped_blocking_call( + nested_blocking_type); + done = blocking_threads_continue_.TimedWait( + TimeDelta::FromMilliseconds(100)); + } + })); + } + threads_running.Wait(); + } + // Returns how long we can expect a change to |max_tasks_| to occur // after a task has become blocked. TimeDelta GetMaxTasksChangeSleepTime() { @@ -1073,6 +1103,25 @@ EXPECT_EQ(thread_group_->GetMaxTasksForTesting(), kMaxTasks); } +TEST_P(ThreadGroupImplBlockingTest, ThreadBusyBlockedUnblocked) { + CreateAndStartThreadGroup(); + + ASSERT_EQ(thread_group_->GetMaxTasksForTesting(), kMaxTasks); + + SaturateWithBusyBlockingTasks(GetParam()); + + // Forces |kMaxTasks| extra workers to be instantiated by posting tasks. This + // should not block forever. + SaturateWithBusyTasks(); + + EXPECT_EQ(thread_group_->NumberOfWorkersForTesting(), 2 * kMaxTasks); + + UnblockBusyTasks(); + UnblockBlockingTasks(); + task_tracker_.FlushForTesting(); + EXPECT_EQ(thread_group_->GetMaxTasksForTesting(), kMaxTasks); +} + // Verify that SaturateWithBlockingTasks() of BEST_EFFORT tasks causes max best // effort tasks to increase and creates a worker if needed. Also verify that // UnblockBlockingTasks() decreases max best effort tasks after an increase.
diff --git a/base/task_runner.h b/base/task_runner.h index 11952d0e..9927377 100644 --- a/base/task_runner.h +++ b/base/task_runner.h
@@ -10,6 +10,7 @@ #include "base/base_export.h" #include "base/bind.h" #include "base/callback.h" +#include "base/callback_helpers.h" #include "base/check.h" #include "base/location.h" #include "base/memory/ref_counted.h" @@ -135,10 +136,20 @@ // FROM_HERE, // BindOnce(&DoWorkAndReturn), // BindOnce(&Callback)); - template <typename TaskReturnType, typename ReplyArgType> + // + // Templating on the types of `task` and `reply` allows template matching to + // work for both base::RepeatingCallback and base::OnceCallback in each case. + template <typename TaskReturnType, + typename ReplyArgType, + template <typename> + class TaskCallbackType, + template <typename> + class ReplyCallbackType, + typename = EnableIfIsBaseCallback<TaskCallbackType>, + typename = EnableIfIsBaseCallback<ReplyCallbackType>> bool PostTaskAndReplyWithResult(const Location& from_here, - OnceCallback<TaskReturnType()> task, - OnceCallback<void(ReplyArgType)> reply) { + TaskCallbackType<TaskReturnType()> task, + ReplyCallbackType<void(ReplyArgType)> reply) { DCHECK(task); DCHECK(reply); // std::unique_ptr used to avoid the need of a default constructor.
diff --git a/base/task_runner_unittest.cc b/base/task_runner_unittest.cc index 97fa6ba..5ee1cfb 100644 --- a/base/task_runner_unittest.cc +++ b/base/task_runner_unittest.cc
@@ -104,6 +104,19 @@ EXPECT_EQ(42, result); } +TEST_F(TaskRunnerTest, PostTaskAndReplyWithResultRepeatingCallbacks) { + int result = 0; + + test::SingleThreadTaskEnvironment task_environment; + ThreadTaskRunnerHandle::Get()->PostTaskAndReplyWithResult( + FROM_HERE, BindRepeating(&ReturnFourtyTwo), + BindRepeating(&StoreValue, &result)); + + RunLoop().RunUntilIdle(); + + EXPECT_EQ(42, result); +} + TEST_F(TaskRunnerTest, PostTaskAndReplyWithResultImplicitConvert) { double result = 0;
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1 index acc55f8..0f6761d 100644 --- a/build/fuchsia/linux.sdk.sha1 +++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@ -6.20210812.0.1 +6.20210812.1.1
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1 index acc55f8..26622324 100644 --- a/build/fuchsia/mac.sdk.sha1 +++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@ -6.20210812.0.1 +6.20210812.2.1
diff --git a/cc/layers/scrollbar_layer_impl_base.cc b/cc/layers/scrollbar_layer_impl_base.cc index 59901bd..1f57d26a 100644 --- a/cc/layers/scrollbar_layer_impl_base.cc +++ b/cc/layers/scrollbar_layer_impl_base.cc
@@ -6,7 +6,7 @@ #include <algorithm> -#include "base/numerics/ranges.h" +#include "base/cxx17_backports.h" #include "cc/trees/effect_node.h" #include "cc/trees/layer_tree_impl.h" #include "cc/trees/scroll_node.h" @@ -214,12 +214,7 @@ float maximum = scroll_layer_length() - clip_layer_length(); // With the length known, we can compute the thumb's position. - // This is a broken clamp function that successfully returns a bogus value - // when invalid inputs are provided, rather than crashing. - // TODO(https://crbug.com/1231833): Migrate this call to use base::clamp() - // from base/cxx17_backports.h, and fix all the broken tests that result. - float clamped_current_pos = - base::BrokenClampThatShouldNotBeUsed(current_pos(), 0.0f, maximum); + float clamped_current_pos = base::clamp(current_pos(), 0.0f, maximum); int thumb_offset = TrackStart(); if (maximum > 0) {
diff --git a/cc/trees/layer_tree_host_unittest_damage.cc b/cc/trees/layer_tree_host_unittest_damage.cc index 2d2993d1..479801c 100644 --- a/cc/trees/layer_tree_host_unittest_damage.cc +++ b/cc/trees/layer_tree_host_unittest_damage.cc
@@ -337,7 +337,10 @@ content_layer_ = FakePictureLayer::Create(&client_); content_layer_->SetElementId( LayerIdToElementIdForTesting(content_layer_->id())); - content_layer_->SetScrollable(root_layer->bounds()); + + // The size of the container in which scrolling contents are visible need + // to be smaller than the bounds of the layer itself. + content_layer_->SetScrollable(gfx::Size(80, 180)); content_layer_->SetScrollOffset(gfx::ScrollOffset(10, 20)); content_layer_->SetBounds(gfx::Size(100, 200)); content_layer_->SetIsDrawable(true);
diff --git a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingComponentBridge.java b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingComponentBridge.java index b55f5fe..49a6391 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingComponentBridge.java +++ b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingComponentBridge.java
@@ -23,6 +23,7 @@ import org.chromium.chrome.browser.keyboard_accessory.data.UserInfoField; import org.chromium.content_public.browser.WebContents; import org.chromium.ui.base.WindowAndroid; +import org.chromium.url.GURL; class ManualFillingComponentBridge { private final SparseArray<PropertyProvider<AccessorySheetData>> mProviders = @@ -166,8 +167,8 @@ @CalledByNative private Object addUserInfoToAccessorySheetData( - Object objAccessorySheetData, String origin, boolean isPslMatch) { - UserInfo userInfo = new UserInfo(origin, isPslMatch); + Object objAccessorySheetData, String origin, boolean isPslMatch, GURL iconUrl) { + UserInfo userInfo = new UserInfo(origin, isPslMatch, iconUrl); ((AccessorySheetData) objAccessorySheetData).getUserInfoList().add(userInfo); return userInfo; }
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 81829847..22576310 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
@@ -3,7 +3,8 @@ // found in the LICENSE file. package org.chromium.chrome.browser.keyboard_accessory.sheet_tabs; - +import android.graphics.Bitmap; +import android.graphics.drawable.BitmapDrawable; import android.view.View; import android.view.ViewGroup; @@ -11,6 +12,7 @@ import androidx.appcompat.content.res.AppCompatResources; import androidx.recyclerview.widget.RecyclerView; +import org.chromium.chrome.browser.autofill.PersonalDataManager; import org.chromium.chrome.browser.keyboard_accessory.R; import org.chromium.chrome.browser.keyboard_accessory.data.KeyboardAccessoryData; import org.chromium.chrome.browser.keyboard_accessory.data.UserInfoField; @@ -57,9 +59,21 @@ || view.getExpMonth().getVisibility() == View.VISIBLE ? View.VISIBLE : View.GONE); - - view.setIcon(AppCompatResources.getDrawable( - view.getContext(), getDrawableForOrigin(info.getOrigin()))); + // If the icon url is present, fetch the bitmap from the PersonalDataManager. In + // the event that the bitmap is not present in the PersonalDataManager, fall back to the + // icon corresponding to the `mOrigin`. + Bitmap iconBitmap = null; + if (info.getIconUrl() != null && info.getIconUrl().isValid()) { + iconBitmap = + PersonalDataManager.getInstance() + .getCustomImageForAutofillSuggestionIfAvailable(info.getIconUrl()); + } + if (iconBitmap != null) { + view.setIcon(new BitmapDrawable(view.getContext().getResources(), iconBitmap)); + } else { + view.setIcon(AppCompatResources.getDrawable( + view.getContext(), getDrawableForOrigin(info.getOrigin()))); + } } private static void bindChipView(ChipView chip, UserInfoField field) {
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 2f14ace..6c251de 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
@@ -10,9 +10,18 @@ import static org.hamcrest.Matchers.notNullValue; import static org.hamcrest.Matchers.nullValue; import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; import android.view.View; import android.view.ViewGroup; +import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; @@ -25,10 +34,13 @@ 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.util.CommandLineFlags; import org.chromium.base.test.util.Criteria; import org.chromium.base.test.util.CriteriaHelper; +import org.chromium.chrome.browser.autofill.PersonalDataManager; import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.browser.keyboard_accessory.AccessoryTabType; import org.chromium.chrome.browser.keyboard_accessory.R; @@ -41,6 +53,7 @@ import org.chromium.chrome.test.ChromeTabbedActivityTestRule; import org.chromium.content_public.browser.test.util.TestThreadUtils; import org.chromium.ui.widget.ChipView; +import org.chromium.url.GURL; import java.util.concurrent.ExecutionException; import java.util.concurrent.atomic.AtomicBoolean; @@ -52,15 +65,25 @@ @RunWith(ChromeJUnit4ClassRunner.class) @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) public class CreditCardAccessorySheetViewTest { + private static final String CUSTOM_ICON_URL = "https://www.example.com/image.png"; + private static final Bitmap TEST_CARD_ART_IMAGE = + Bitmap.createBitmap(100, 200, Bitmap.Config.ARGB_8888); + private AccessorySheetTabModel mModel; private AtomicReference<RecyclerView> mView = new AtomicReference<>(); @Rule public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); + @Mock + PersonalDataManager mMockPersonalDataManager; + @Before public void setUp() throws InterruptedException { + MockitoAnnotations.initMocks(this); + mActivityTestRule.startMainActivityOnBlankPage(); + PersonalDataManager.setInstanceForTesting(mMockPersonalDataManager); TestThreadUtils.runOnUiThreadBlocking(() -> { mModel = new AccessorySheetTabModel(); AccessorySheetCoordinator accessorySheet = @@ -117,7 +140,8 @@ TestThreadUtils.runOnUiThreadBlocking(() -> { mModel.add(new AccessorySheetDataPiece( - createInfo("4111111111111111", "04", "2034", "Kirby Puckett", "123", clicked), + createInfo("visaCC", "4111111111111111", "04", "2034", "Kirby Puckett", "123", + null, clicked), AccessorySheetDataPiece.Type.CREDIT_CARD_INFO)); mModel.add(new AccessorySheetDataPiece( new KeyboardAccessoryData.FooterCommand("Manage credit cards", null), @@ -131,7 +155,11 @@ assertThat(getChipText(R.id.exp_month), is("04")); assertThat(getChipText(R.id.exp_year), is("2034")); assertThat(getChipText(R.id.cardholder), is("Kirby Puckett")); - + // Verify that the icon is correctly set. + ImageView iconImageView = (ImageView) mView.get().getChildAt(0).findViewById(R.id.icon); + Drawable expectedIcon = + mActivityTestRule.getActivity().getResources().getDrawable(R.drawable.visa_card); + assertTrue(getBitmap(expectedIcon).sameAs(getBitmap(iconImageView.getDrawable()))); // Chips are clickable: TestThreadUtils.runOnUiThreadBlocking(findChipView(R.id.cc_number)::performClick); assertThat(clicked.get(), is(true)); @@ -142,6 +170,78 @@ @Test @MediumTest + public void testAddingUserInfoWithIconUrl_iconCachedInPersonalDataManager() + throws ExecutionException { + GURL iconUrl = mock(GURL.class); + when(iconUrl.isValid()).thenReturn(true); + when(iconUrl.getSpec()).thenReturn(CUSTOM_ICON_URL); + // Return the cached image when + // PersonalDataManager.getCustomImageForAutofillSuggestionIfAvailable is called for the + // above url. + when(mMockPersonalDataManager.getCustomImageForAutofillSuggestionIfAvailable(any())) + .thenReturn(TEST_CARD_ART_IMAGE); + + TestThreadUtils.runOnUiThreadBlocking(() -> { + mModel.add(new AccessorySheetDataPiece( + createInfo("", "4111111111111111", "04", "2034", "Kirby Puckett", "123", + iconUrl, new AtomicBoolean()), + AccessorySheetDataPiece.Type.CREDIT_CARD_INFO)); + mModel.add(new AccessorySheetDataPiece( + new KeyboardAccessoryData.FooterCommand("Manage credit cards", null), + AccessorySheetDataPiece.Type.FOOTER_COMMAND)); + }); + + CriteriaHelper.pollUiThread(() -> Criteria.checkThat(mView.get().getChildCount(), is(2))); + // Check that the titles are correct: + assertThat(getChipText(R.id.cc_number), is("4111111111111111")); + assertThat(getChipText(R.id.exp_month), is("04")); + assertThat(getChipText(R.id.exp_year), is("2034")); + assertThat(getChipText(R.id.cardholder), is("Kirby Puckett")); + // Verify that the icon is set to the cached image returned by + // PersonalDataManager.getCustomImageForAutofillSuggestionIfAvailable. + ImageView iconImageView = (ImageView) mView.get().getChildAt(0).findViewById(R.id.icon); + assertTrue(((BitmapDrawable) iconImageView.getDrawable()) + .getBitmap() + .equals(TEST_CARD_ART_IMAGE)); + } + + @Test + @MediumTest + public void testAddingUserInfoWithIconUrl_iconNotCachedInPersonalDataManager() + throws ExecutionException { + GURL iconUrl = mock(GURL.class); + when(iconUrl.isValid()).thenReturn(true); + when(iconUrl.getSpec()).thenReturn(CUSTOM_ICON_URL); + // Return null when PersonalDataManager.getCustomImageForAutofillSuggestionIfAvailable is + // called for the above url. + when(mMockPersonalDataManager.getCustomImageForAutofillSuggestionIfAvailable(any())) + .thenReturn(null); + + TestThreadUtils.runOnUiThreadBlocking(() -> { + mModel.add(new AccessorySheetDataPiece( + createInfo("visaCC", "4111111111111111", "04", "2034", "Kirby Puckett", "123", + iconUrl, new AtomicBoolean()), + AccessorySheetDataPiece.Type.CREDIT_CARD_INFO)); + mModel.add(new AccessorySheetDataPiece( + new KeyboardAccessoryData.FooterCommand("Manage credit cards", null), + AccessorySheetDataPiece.Type.FOOTER_COMMAND)); + }); + + CriteriaHelper.pollUiThread(() -> Criteria.checkThat(mView.get().getChildCount(), is(2))); + // Check that the titles are correct: + assertThat(getChipText(R.id.cc_number), is("4111111111111111")); + assertThat(getChipText(R.id.exp_month), is("04")); + assertThat(getChipText(R.id.exp_year), is("2034")); + assertThat(getChipText(R.id.cardholder), is("Kirby Puckett")); + // Verify that the icon is set to the drawable corresponding to `visaCC`. + ImageView iconImageView = (ImageView) mView.get().getChildAt(0).findViewById(R.id.icon); + Drawable expectedIcon = + mActivityTestRule.getActivity().getResources().getDrawable(R.drawable.visa_card); + assertTrue(getBitmap(expectedIcon).sameAs(getBitmap(iconImageView.getDrawable()))); + } + + @Test + @MediumTest public void testAddingUnselectableFieldsRendersUnclickabeChips() { assertThat(mView.get().getChildCount(), is(0)); @@ -176,7 +276,7 @@ TestThreadUtils.runOnUiThreadBlocking(() -> { mModel.add(new AccessorySheetDataPiece( // Cardholder name is empty - createInfo("4111111111111111", "04", "2034", "", "", clicked), + createInfo("", "4111111111111111", "04", "2034", "", "", null, clicked), AccessorySheetDataPiece.Type.CREDIT_CARD_INFO)); mModel.add(new AccessorySheetDataPiece( new KeyboardAccessoryData.FooterCommand("Manage credit cards", null), @@ -212,9 +312,9 @@ assertThat(warningText.getText(), is(kWarning)); } - private UserInfo createInfo(String number, String month, String year, String name, String cvc, - AtomicBoolean clickRecorder) { - UserInfo info = new UserInfo("", false); + private UserInfo createInfo(String origin, String number, String month, String year, + String name, String cvc, GURL iconUrl, AtomicBoolean clickRecorder) { + UserInfo info = new UserInfo(origin, false, iconUrl); info.addField( new UserInfoField(number, number, "", false, item -> clickRecorder.set(true))); info.addField(new UserInfoField(month, month, "", false, item -> clickRecorder.set(true))); @@ -236,4 +336,14 @@ private CharSequence getChipText(@IdRes int id) { return findChipView(id).getPrimaryTextView().getText(); } + + // Convert a drawable to a Bitmap for comparison. + private static Bitmap getBitmap(Drawable drawable) { + Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), + drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(bitmap); + drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); + drawable.draw(canvas); + return bitmap; + } }
diff --git a/chrome/android/features/keyboard_accessory/public/BUILD.gn b/chrome/android/features/keyboard_accessory/public/BUILD.gn index 35579ec1..d78110e 100644 --- a/chrome/android/features/keyboard_accessory/public/BUILD.gn +++ b/chrome/android/features/keyboard_accessory/public/BUILD.gn
@@ -12,6 +12,7 @@ "//content/public/android:content_java", "//third_party/androidx:androidx_annotation_annotation_java", "//ui/android:ui_full_java", + "//url:gurl_java", ] sources = [ "java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingComponent.java",
diff --git a/chrome/android/features/keyboard_accessory/public/java/src/org/chromium/chrome/browser/keyboard_accessory/data/KeyboardAccessoryData.java b/chrome/android/features/keyboard_accessory/public/java/src/org/chromium/chrome/browser/keyboard_accessory/data/KeyboardAccessoryData.java index 91155fd..a22a574c 100644 --- a/chrome/android/features/keyboard_accessory/public/java/src/org/chromium/chrome/browser/keyboard_accessory/data/KeyboardAccessoryData.java +++ b/chrome/android/features/keyboard_accessory/public/java/src/org/chromium/chrome/browser/keyboard_accessory/data/KeyboardAccessoryData.java
@@ -13,6 +13,7 @@ import org.chromium.base.Callback; import org.chromium.chrome.browser.keyboard_accessory.AccessoryAction; import org.chromium.chrome.browser.keyboard_accessory.AccessoryTabType; +import org.chromium.url.GURL; import java.util.ArrayList; import java.util.List; @@ -235,12 +236,18 @@ */ public static final class UserInfo { private final String mOrigin; + private final GURL mIconUrl; private final List<UserInfoField> mFields = new ArrayList<>(); private final boolean mIsPslMatch; public UserInfo(String origin, boolean isPslMatch) { + this(origin, isPslMatch, null); + } + + public UserInfo(String origin, boolean isPslMatch, GURL iconUrl) { mOrigin = origin; mIsPslMatch = isPslMatch; + mIconUrl = iconUrl; } /** @@ -271,6 +278,15 @@ public boolean isPslMatch() { return mIsPslMatch; } + + /** + * The url for the icon to be downloaded and displayed in the manual filling view. For + * credit cards, the `mOrigin` is used as an identifier for the icon. However, if the + * `mIconUrl` is set, it'll be used to download the icon and then display it. + */ + public GURL getIconUrl() { + return mIconUrl; + } } /**
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_de.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_de.xtb index 64fadc2..ebc51a752 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_de.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_de.xtb
@@ -48,6 +48,7 @@ <translation id="58326064309361797">Tabs zum Gruppieren ziehen</translation> <translation id="5846292395804797011">Tabgruppe "<ph name="TITLE_OF_GROUP" />" mit <ph name="NUMBER_OF_TABS" /> Tabs schließen</translation> <translation id="6040143037577758943">Schließen</translation> +<translation id="6054741997831917303">Der Preis dieses Artikels ist kürzlich von <ph name="PREVIOUS_PRICE" /> auf <ph name="NEW_PRICE" /> gefallen</translation> <translation id="6193448654517602979">Tabs auswählen</translation> <translation id="6510648526783655549">Tableiste schließen</translation> <translation id="6562820390860419811">Tab nach links bewegen</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pa.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pa.xtb index c96769f..98fd40d 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pa.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pa.xtb
@@ -48,6 +48,7 @@ <translation id="58326064309361797">ਟੈਬਾਂ ਨੂੰ ਇਕੱਠਾ ਕਰਨ ਲਈ ਉਹਨਾਂ ਨੂੰ ਘਸੀਟੋ</translation> <translation id="5846292395804797011"><ph name="NUMBER_OF_TABS" /> ਟੈਬਾਂ ਵਾਲੇ <ph name="TITLE_OF_GROUP" /> ਗਰੁੱਪ ਨੂੰ ਬੰਦ ਕਰੋ</translation> <translation id="6040143037577758943">ਬੰਦ ਕਰੋ</translation> +<translation id="6054741997831917303">ਇਸ ਆਈਟਮ ਦੀ ਕੀਮਤ ਹਾਲ ਹੀ ਵਿੱਚ <ph name="PREVIOUS_PRICE" /> ਤੋਂ ਘੱਟ ਕੇ <ph name="NEW_PRICE" /> ਹੋ ਗਈ ਹੈ</translation> <translation id="6193448654517602979">ਟੈਬਾਂ ਚੁਣੋ</translation> <translation id="6510648526783655549">ਟੈਬ ਪੱਟੀ ਨੂੰ ਬੰਦ ਕਰੋ</translation> <translation id="6562820390860419811">ਟੈਬ ਨੂੰ ਖੱਬੇ ਪਾਸੇ ਲਿਜਾਓ</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ta.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ta.xtb index ad33e2e3..f4bba04 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ta.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ta.xtb
@@ -48,6 +48,7 @@ <translation id="58326064309361797">தாவல்களை இழுப்பதன் மூலம் அவற்றைக் குழுவாக்கலாம்</translation> <translation id="5846292395804797011"><ph name="NUMBER_OF_TABS" /> தாவல்கள் உள்ள <ph name="TITLE_OF_GROUP" /> குழுவை மூடும்</translation> <translation id="6040143037577758943">மூடு</translation> +<translation id="6054741997831917303">இந்தப் பொருளின் விலை சமீபத்தில் <ph name="PREVIOUS_PRICE" /> இல் இருந்து <ph name="NEW_PRICE" /> ஆகக் குறைந்துள்ளது</translation> <translation id="6193448654517602979">தாவல்களைத் தேர்ந்தெடுக்கவும்</translation> <translation id="6510648526783655549">தாவல் பட்டையை மூடும்</translation> <translation id="6562820390860419811">தாவலை இடப்புறம் நகர்த்து</translation>
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 fc40ac6a..baa100a 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
@@ -988,6 +988,8 @@ resetSavedInstanceState(); StartSurfaceConfiguration.addFeedVisibilityObserver(); + BookmarkUtils.maybeExpireLastBookmarkLocationForReadLater( + mInactivityTracker.getTimeSinceLastBackgroundedMs()); } @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java index 8f39d2d..d4e5167 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
@@ -46,6 +46,7 @@ import org.chromium.base.Callback; import org.chromium.base.CommandLine; import org.chromium.base.ContextUtils; +import org.chromium.base.Log; import org.chromium.base.MathUtils; import org.chromium.base.PowerMonitor; import org.chromium.base.StrictModeContext; @@ -255,6 +256,7 @@ StatusBarColorController.StatusBarColorProvider, AppMenuDelegate, AppMenuBlocker, MenuOrKeyboardActionController, CompositorViewHolder.Initializer, TabModelInitializer { + private static final String TAG = "ChromeActivity"; private C mComponent; /** Used to access the {@link ShareDelegate} from {@link WindowAndroid}. */ @@ -2675,9 +2677,22 @@ public void onExitVr() {} private void clearToolbarResourceCache() { - ControlContainer controlContainer = (ControlContainer) findViewById(R.id.control_container); - if (controlContainer != null) { - controlContainer.getToolbarResourceAdapter().dropCachedBitmap(); + View v = findViewById(R.id.control_container); + try { + ControlContainer controlContainer = (ControlContainer) v; + if (controlContainer != null) { + controlContainer.getToolbarResourceAdapter().dropCachedBitmap(); + } + } catch (ClassCastException e) { + // This is a workaround for crbug.com/1236981. Doing nothing here is better than + // crashing. We assert, which will be stripped in builds that get shipped to users. + Log.e(TAG, "crbug.com/1236981", e); + String extraInfo = ""; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + extraInfo = " inflated from layout ID #" + v.getSourceLayoutResId(); + } + assert false : "View " + v.toString() + extraInfo + " was not a ControlContainer. " + + " If you can reproduce, post in crbug.com/1236981"; } }
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 50292917..edfb5a9 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
@@ -118,13 +118,7 @@ add(ConditionalTabStripUtils.CONDITIONAL_TAB_STRIP_INFOBAR_LIMIT); add(ConditionalTabStripUtils.CONDITIONAL_TAB_STRIP_INFOBAR_PERIOD); add(ConditionalTabStripUtils.CONDITIONAL_TAB_STRIP_SESSION_TIME_MS); - add(LensFeature.DISABLE_LENS_CAMERA_ASSISTED_SEARCH_ON_INCOGNITO); - add(LensFeature.ENABLE_LENS_CAMERA_ASSISTED_SEARCH_ON_LOW_END_DEVICE); - add(LensFeature.ENABLE_LENS_CAMERA_ASSISTED_SEARCH_ON_TABLET); - add(LensFeature.MIN_AGSA_VERSION_LENS_CAMERA_ASSISTED_SEARCH); add(LensFeature.SEARCH_BOX_START_VARIANT_LENS_CAMERA_ASSISTED_SEARCH); - add(LensFeature.SKIP_AGSA_VERSION_CHECK); - add(LensFeature.SKIP_LENS_ELIGIBILITY_CHECKS); add(PageAnnotationsServiceConfig.PAGE_ANNOTATIONS_BASE_URL); add(ReturnToChromeExperimentsUtil.TAB_SWITCHER_ON_RETURN_MS); add(StartSurfaceConfiguration.HOME_BUTTON_ON_GRID_TAB_SWITCHER);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java index a27d7c61..b68c8082 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java
@@ -89,7 +89,7 @@ && node.getId().equals(mStateStack.peek().mFolder)) { if (mBookmarkModel.getTopLevelFolderIDs(true, true).contains( node.getId())) { - openFolder(mBookmarkModel.getDefaultFolder()); + openFolder(mBookmarkModel.getDefaultFolderViewLocation()); } else { openFolder(parent.getId()); } @@ -392,8 +392,8 @@ */ private void setState(BookmarkUIState state) { if (!state.isValid(mBookmarkModel)) { - state = BookmarkUIState.createFolderState(mBookmarkModel.getDefaultFolder(), - mBookmarkModel); + state = BookmarkUIState.createFolderState( + mBookmarkModel.getDefaultFolderViewLocation(), mBookmarkModel); } if (!mStateStack.isEmpty() && mStateStack.peek().equals(state)) return;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkModel.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkModel.java index 8b2b324..3e0fb1e 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkModel.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkModel.java
@@ -132,9 +132,18 @@ } /** - * @return The id of the default folder to add bookmarks/folders to. + * @return The id of the default folder to save bookmarks/folders to. */ public BookmarkId getDefaultFolder() { return getMobileFolderId(); } + + /** + * @return The id of the default folder to view bookmarks. + */ + public BookmarkId getDefaultFolderViewLocation() { + if (BookmarkUtils.shouldUseRootFolderAsDefaultForReadLater()) return getRootFolderId(); + + return getMobileFolderId(); + } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUIState.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUIState.java index b1b55e2..7f1fdf9 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUIState.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUIState.java
@@ -63,7 +63,7 @@ state.mUrl = uri.toString(); if (state.mUrl.equals(UrlConstants.BOOKMARKS_URL)) { - return createFolderState(bookmarkModel.getDefaultFolder(), bookmarkModel); + return createFolderState(bookmarkModel.getDefaultFolderViewLocation(), bookmarkModel); } else if (state.mUrl.startsWith(UrlConstants.BOOKMARKS_FOLDER_URL)) { String path = uri.getLastPathSegment(); if (!path.isEmpty()) { @@ -73,7 +73,7 @@ } if (!state.isValid(bookmarkModel)) { - state = createFolderState(bookmarkModel.getDefaultFolder(), bookmarkModel); + state = createFolderState(bookmarkModel.getDefaultFolderViewLocation(), bookmarkModel); } return state;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java index 99c36b4..1a3bc9f3 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java
@@ -67,6 +67,7 @@ */ public class BookmarkUtils { private static final String TAG = "BookmarkUtils"; + private static final int DEFAULT_SESSION_LENGTH_SECONDS = 60 * 60; // 60 minutes * 60 s/min /** * If the tab has already been bookmarked, start {@link BookmarkEditActivity} for the @@ -289,6 +290,12 @@ Context context = activity == null ? ContextUtils.getApplicationContext() : activity; String url = getFirstUrlToLoad(context, folderId); + if (shouldUseRootFolderAsDefaultForReadLater() + && SharedPreferencesManager.getInstance().contains( + ChromePreferenceKeys.BOOKMARKS_LAST_USED_URL)) { + RecordUserAction.record("MobileBookmarkManagerReopenBookmarksInSameSession"); + } + // Tablet. if (DeviceFormFactor.isNonMultiDisplayContextOnTablet(context)) { openUrl(context, url, activity == null ? null : activity.getComponentName()); @@ -546,4 +553,34 @@ topLevelFolders.addAll(managedAndPartnerFolderIds); return topLevelFolders; } + + /** Returns whether the root folder should be used as the default location. */ + public static boolean shouldUseRootFolderAsDefaultForReadLater() { + return ChromeFeatureList.isInitialized() + && ChromeFeatureList.isEnabled(ChromeFeatureList.READ_LATER) + && ChromeFeatureList.getFieldTrialParamByFeatureAsBoolean( + ChromeFeatureList.READ_LATER, "use_root_bookmark_as_default", false); + } + + /** + * Expires the stored last used url if Chrome has been in the background long enough to mark it + * as a new session. We're using the "Start Surface" concept of session here which is if the + * app has been in the background for X amount of time. Called from #onStartWithNative, after + * which the time stored in {@link ChromeInactivityTracker} is expired. + * + * @param timeSinceLastBackgroundedMs The time since Chrome has sent into the background. + */ + public static void maybeExpireLastBookmarkLocationForReadLater( + long timeSinceLastBackgroundedMs) { + if (!shouldUseRootFolderAsDefaultForReadLater()) return; + + int readLaterSessionLengthMs = + ChromeFeatureList.getFieldTrialParamByFeatureAsInt(ChromeFeatureList.READ_LATER, + "session_length", DEFAULT_SESSION_LENGTH_SECONDS) + * 1000; + if (timeSinceLastBackgroundedMs > readLaterSessionLengthMs) { + SharedPreferencesManager.getInstance().removeKey( + ChromePreferenceKeys.BOOKMARKS_LAST_USED_URL); + } + } }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/ShareIntentTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/ShareIntentTest.java index b359120..622fdb9c 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/ShareIntentTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/ShareIntentTest.java
@@ -4,6 +4,7 @@ package org.chromium.chrome.browser; +import android.app.Activity; import android.content.ComponentName; import android.content.Context; import android.content.pm.PackageManager; @@ -21,7 +22,6 @@ import org.chromium.base.supplier.ObservableSupplier; import org.chromium.base.supplier.OneshotSupplierImpl; import org.chromium.base.test.util.CommandLineFlags; -import org.chromium.base.test.util.DisabledTest; import org.chromium.chrome.browser.app.ChromeActivity; import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.browser.fullscreen.BrowserControlsManager; @@ -34,8 +34,9 @@ import org.chromium.chrome.test.ChromeTabbedActivityTestRule; import org.chromium.chrome.test.util.browser.tabmodel.MockTabModelSelector; import org.chromium.content_public.browser.test.util.TestThreadUtils; -import org.chromium.ui.base.ActivityWindowAndroid; +import org.chromium.ui.base.WindowAndroid; +import java.lang.ref.WeakReference; import java.util.concurrent.ExecutionException; /** @@ -127,7 +128,6 @@ @Test @LargeTest - @DisabledTest(message = "https://crbug.com/1237503") public void testShareIntent() throws ExecutionException, InterruptedException { MockChromeActivity mockActivity = TestThreadUtils.runOnUiThreadBlocking(() -> { // Sets a test component as last shared and "shareDirectly" option is set so that @@ -137,8 +137,6 @@ }); TestThreadUtils.runOnUiThreadBlocking(() -> { - ActivityWindowAndroid activityWindowAndroid = - new ActivityWindowAndroid(mockActivity, false, null); BrowserControlsManager browserControlsManager = new BrowserControlsManager( mockActivity, BrowserControlsManager.ControlsPosition.TOP); RootUiCoordinator rootUiCoordinator = new RootUiCoordinator(mockActivity, null, @@ -147,8 +145,9 @@ new OneshotSupplierImpl<>(), new OneshotSupplierImpl<>(), () -> null, - browserControlsManager, activityWindowAndroid, new DummyJankTracker(), - mockActivity.getLifecycleDispatcher(), mockActivity.getLayoutManagerSupplier(), + browserControlsManager, mActivityTestRule.getActivity().getWindowAndroid(), + new DummyJankTracker(), mockActivity.getLifecycleDispatcher(), + mockActivity.getLayoutManagerSupplier(), /* menuOrKeyboardActionController= */ mockActivity, mockActivity::getActivityThemeColor, mockActivity.getModalDialogManagerSupplier(), @@ -165,12 +164,20 @@ ShareHelper.setLastShareComponentName( null, new ComponentName("test.package", "test.activity")); - mockActivity.getActivityTab().updateAttachment(activityWindowAndroid, null); + + WindowAndroid window = new WindowAndroid(mActivityTestRule.getActivity()) { + @Override + public WeakReference<Activity> getActivity() { + return new WeakReference<>(mockActivity); + } + }; + mockActivity.getActivityTab().updateAttachment(window, null); rootUiCoordinator.onShareMenuItemSelected( true /* shareDirectly */, false /* isIncognito */); + ShareHelper.setLastShareComponentName(null, new ComponentName("", "")); mockActivity.getActivityTab().updateAttachment(null, null); - activityWindowAndroid.destroy(); + window.destroy(); }); }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkTest.java index d3ee413..df2f099 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkTest.java
@@ -422,6 +422,45 @@ @Test @MediumTest + @Features.EnableFeatures({ChromeFeatureList.READ_LATER + "<Study"}) + @CommandLineFlags.Add({"force-fieldtrials=Study/Group", + "force-fieldtrial-params=Study.Group:use_root_bookmark_as_default/true"}) + public void + testOpenBookmarkManagerWhenDefaultToRootEnabled() + throws InterruptedException, ExecutionException { + openBookmarkManager(); + BookmarkTestUtil.waitForBookmarkModelLoaded(); + BookmarkDelegate delegate = getBookmarkManager(); + BookmarkActionBar toolbar = ((BookmarkManager) delegate).getToolbarForTests(); + + // We should default to the root bookmark. + Assert.assertTrue(BookmarkUtils.shouldUseRootFolderAsDefaultForReadLater()); + Assert.assertEquals(BookmarkUIState.STATE_FOLDER, delegate.getCurrentState()); + Assert.assertEquals("chrome-native://bookmarks/folder/0", + BookmarkUtils.getLastUsedUrl(mActivityTestRule.getActivity())); + Assert.assertEquals("Bookmarks", toolbar.getTitle()); + + // When opening "Mobile bookmarks", we should come back to it when within the same session. + TestThreadUtils.runOnUiThreadBlocking( + () -> delegate.openFolder(mBookmarkModel.getMobileFolderId())); + Assert.assertEquals("Mobile bookmarks", toolbar.getTitle()); + Assert.assertEquals(SelectableListToolbar.NAVIGATION_BUTTON_BACK, + toolbar.getNavigationButtonForTests()); + Assert.assertFalse(toolbar.getMenu().findItem(R.id.edit_menu_id).isVisible()); + + // Close bookmarks. + TestThreadUtils.runOnUiThreadBlocking( + () -> toolbar.onMenuItemClick(toolbar.getMenu().findItem(R.id.close_menu_id))); + ApplicationTestUtils.waitForActivityState(mBookmarkActivity, Stage.DESTROYED); + + // Reopen and make sure we're back in "Mobile bookmarks". + Assert.assertEquals(BookmarkUIState.STATE_FOLDER, delegate.getCurrentState()); + Assert.assertEquals("chrome-native://bookmarks/folder/3", + BookmarkUtils.getLastUsedUrl(mActivityTestRule.getActivity())); + } + + @Test + @MediumTest @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE}) public void testFolderNavigation_Phone() throws InterruptedException, ExecutionException { BookmarkId testFolder = addFolder(TEST_FOLDER_TITLE);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/CompositorVisibilityTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/CompositorVisibilityTest.java index 9181a1c..eeeb138 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/CompositorVisibilityTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/CompositorVisibilityTest.java
@@ -12,16 +12,18 @@ import androidx.test.filters.SmallTest; import org.junit.Assert; -import org.junit.Before; +import org.junit.ClassRule; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; +import org.chromium.base.test.util.Batch; import org.chromium.base.test.util.CommandLineFlags; import org.chromium.chrome.browser.compositor.layouts.LayoutRenderHost; import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeTabbedActivityTestRule; +import org.chromium.chrome.test.batch.BlankCTATabInitialStateRule; import org.chromium.ui.resources.ResourceManager; /** @@ -29,9 +31,15 @@ */ @RunWith(ChromeJUnit4ClassRunner.class) @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) +@Batch(Batch.PER_CLASS) public class CompositorVisibilityTest { + @ClassRule + public static ChromeTabbedActivityTestRule sActivityTestRule = + new ChromeTabbedActivityTestRule(); + @Rule - public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); + public BlankCTATabInitialStateRule mBlankCTATabInitialStateRule = + new BlankCTATabInitialStateRule(sActivityTestRule, false); private CompositorView mCompositorView; @@ -71,11 +79,6 @@ public void invalidateAccessibilityProvider() {} }; - @Before - public void setUp() throws InterruptedException { - mActivityTestRule.startMainActivityOnBlankPage(); - } - // Verify that setVisibility on |mCompositorView| is transferred to its children. Otherwise, // the underlying surface is not destroyed. This can interfere with VR, which hides the // CompositorView and creates its own surfaces. The compositor surfaces can show up when the VR @@ -83,10 +86,10 @@ @Test @SmallTest public void testSetVisibilityHidesSurfaces() throws Throwable { - mActivityTestRule.runOnUiThread(new Runnable() { + sActivityTestRule.runOnUiThread(new Runnable() { @Override public void run() { - mCompositorView = new CompositorView(mActivityTestRule.getActivity(), mRenderHost); + mCompositorView = new CompositorView(sActivityTestRule.getActivity(), mRenderHost); mCompositorView.setVisibility(View.VISIBLE); Assert.assertEquals(View.VISIBLE, mCompositorView.getChildAt(0).getVisibility()); mCompositorView.setVisibility(View.INVISIBLE); @@ -102,10 +105,10 @@ @Test @SmallTest public void testSurfaceViewIsAttachedImmediately() throws Throwable { - mActivityTestRule.runOnUiThread(new Runnable() { + sActivityTestRule.runOnUiThread(new Runnable() { @Override public void run() { - mCompositorView = new CompositorView(mActivityTestRule.getActivity(), mRenderHost); + mCompositorView = new CompositorView(sActivityTestRule.getActivity(), mRenderHost); Assert.assertEquals(mCompositorView.getChildCount(), 1); Assert.assertTrue(mCompositorView.getChildAt(0) instanceof SurfaceView); } @@ -118,10 +121,10 @@ @Test @SmallTest public void testInitialVisibility() throws Throwable { - mActivityTestRule.runOnUiThread(new Runnable() { + sActivityTestRule.runOnUiThread(new Runnable() { @Override public void run() { - mCompositorView = new CompositorView(mActivityTestRule.getActivity(), mRenderHost); + mCompositorView = new CompositorView(sActivityTestRule.getActivity(), mRenderHost); Assert.assertEquals(View.VISIBLE, mCompositorView.getVisibility()); Assert.assertEquals(View.INVISIBLE, mCompositorView.getChildAt(0).getVisibility()); }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanelBaseTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanelBaseTest.java index 49777ae..74ecd91 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanelBaseTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanelBaseTest.java
@@ -4,6 +4,7 @@ package org.chromium.chrome.browser.compositor.bottombar; +import android.app.Activity; import android.content.Context; import android.support.test.InstrumentationRegistry; import android.view.ViewGroup; @@ -15,6 +16,8 @@ import org.junit.After; import org.junit.Assert; import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.ClassRule; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; @@ -22,24 +25,28 @@ import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; +import org.chromium.base.test.BaseActivityTestRule; import org.chromium.base.test.UiThreadTest; +import org.chromium.base.test.util.Batch; import org.chromium.base.test.util.Feature; import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider; import org.chromium.chrome.browser.compositor.bottombar.OverlayPanel.PanelState; import org.chromium.chrome.browser.compositor.layouts.LayoutManagerImpl; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; -import org.chromium.chrome.test.DummyUiChromeActivityTestCase; import org.chromium.content_public.browser.test.util.TestThreadUtils; import org.chromium.ui.base.ActivityWindowAndroid; import org.chromium.ui.base.IntentRequestTracker; import org.chromium.ui.base.WindowAndroid; +import org.chromium.ui.test.util.DisableAnimationsTestRule; +import org.chromium.ui.test.util.DummyUiActivity; /** * Tests logic in the OverlayPanelBase. */ @RunWith(ChromeJUnit4ClassRunner.class) -public class OverlayPanelBaseTest extends DummyUiChromeActivityTestCase { +@Batch(Batch.PER_CLASS) +public class OverlayPanelBaseTest { private static final float UPWARD_VELOCITY = -1.0f; private static final float DOWNWARD_VELOCITY = 1.0f; @@ -49,6 +56,12 @@ private static final int MOCK_TOOLBAR_HEIGHT = 100; + @ClassRule + public static DisableAnimationsTestRule disableAnimationsRule = new DisableAnimationsTestRule(); + @ClassRule + public static BaseActivityTestRule<DummyUiActivity> activityTestRule = + new BaseActivityTestRule<>(DummyUiActivity.class); + @Rule public MockitoRule mMockitoRule = MockitoJUnit.rule(); @@ -61,6 +74,7 @@ @Mock private Tab mTab; + Activity mActivity; ActivityWindowAndroid mWindowAndroid; MockOverlayPanel mNoExpandPanel; MockOverlayPanel mExpandPanel; @@ -127,12 +141,17 @@ } } + @BeforeClass + public static void setupSuite() { + activityTestRule.launchActivity(null); + } + @Before - public void setUp() { + public void setupTest() { TestThreadUtils.runOnUiThreadBlocking(() -> { - mWindowAndroid = - new ActivityWindowAndroid(getActivity(), /* listenToActivityState= */ true, - IntentRequestTracker.createFromActivity(getActivity())); + mActivity = activityTestRule.getActivity(); + mWindowAndroid = new ActivityWindowAndroid(mActivity, /* listenToActivityState= */ true, + IntentRequestTracker.createFromActivity(mActivity)); OverlayPanelManager panelManager = new OverlayPanelManager(); mExpandPanel = new MockOverlayPanel(InstrumentationRegistry.getTargetContext(), mLayoutManager, panelManager, mBrowserControlsStateProvider, mWindowAndroid,
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanelEventFilterTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanelEventFilterTest.java index c84f896..16b9ad9 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanelEventFilterTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanelEventFilterTest.java
@@ -16,6 +16,8 @@ import org.junit.After; import org.junit.Assert; import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.ClassRule; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; @@ -23,23 +25,27 @@ import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; +import org.chromium.base.test.BaseActivityTestRule; import org.chromium.base.test.UiThreadTest; +import org.chromium.base.test.util.Batch; import org.chromium.base.test.util.Feature; import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider; import org.chromium.chrome.browser.compositor.layouts.LayoutManagerImpl; import org.chromium.chrome.browser.compositor.layouts.eventfilter.OverlayPanelEventFilter; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; -import org.chromium.chrome.test.DummyUiChromeActivityTestCase; import org.chromium.content_public.browser.test.util.TestThreadUtils; import org.chromium.ui.base.ActivityWindowAndroid; import org.chromium.ui.base.IntentRequestTracker; import org.chromium.ui.base.WindowAndroid; +import org.chromium.ui.test.util.DisableAnimationsTestRule; +import org.chromium.ui.test.util.DummyUiActivity; /** * Class responsible for testing the OverlayPanelEventFilter. */ @RunWith(ChromeJUnit4ClassRunner.class) -public class OverlayPanelEventFilterTest extends DummyUiChromeActivityTestCase { +@Batch(Batch.PER_CLASS) +public class OverlayPanelEventFilterTest { private static final float PANEL_ALMOST_MAXIMIZED_OFFSET_Y_DP = 50.f; private static final float BAR_HEIGHT_DP = 100.f; @@ -51,6 +57,12 @@ private static final int MOCK_TOOLBAR_HEIGHT = 100; + @ClassRule + public static DisableAnimationsTestRule disableAnimationsRule = new DisableAnimationsTestRule(); + @ClassRule + public static BaseActivityTestRule<DummyUiActivity> activityTestRule = + new BaseActivityTestRule<>(DummyUiActivity.class); + @Rule public MockitoRule mMockitoRule = MockitoJUnit.rule(); @@ -241,18 +253,22 @@ // Test Suite // -------------------------------------------------------------------------------------------- + @BeforeClass + public static void setupSuite() { + activityTestRule.launchActivity(null); + } + @Before - public void setUp() { + public void setupTest() { Context context = InstrumentationRegistry.getTargetContext(); mDpToPx = context.getResources().getDisplayMetrics().density; mTouchSlopDp = ViewConfiguration.get(context).getScaledTouchSlop() / mDpToPx; TestThreadUtils.runOnUiThreadBlocking(() -> { - mWindowAndroid = - new ActivityWindowAndroid(getActivity(), /* listenToActivityState= */ true, - IntentRequestTracker.createFromActivity(getActivity())); - mActivity = getActivity(); + mActivity = activityTestRule.getActivity(); + mWindowAndroid = new ActivityWindowAndroid(mActivity, /* listenToActivityState= */ true, + IntentRequestTracker.createFromActivity(mActivity)); mPanel = new MockOverlayPanel(context, mLayoutManager, new OverlayPanelManager(), mBrowserControlsStateProvider, mWindowAndroid, mCompositorViewHolder, mTab);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanelManagerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanelManagerTest.java index 73d5211..529f611f 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanelManagerTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanelManagerTest.java
@@ -4,6 +4,7 @@ package org.chromium.chrome.browser.compositor.bottombar; +import android.app.Activity; import android.content.Context; import android.support.test.InstrumentationRegistry; import android.view.ViewGroup; @@ -15,6 +16,8 @@ import org.junit.After; import org.junit.Assert; import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.ClassRule; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; @@ -22,7 +25,9 @@ import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; +import org.chromium.base.test.BaseActivityTestRule; import org.chromium.base.test.UiThreadTest; +import org.chromium.base.test.util.Batch; import org.chromium.base.test.util.CallbackHelper; import org.chromium.base.test.util.Feature; import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider; @@ -32,12 +37,13 @@ import org.chromium.chrome.browser.compositor.layouts.LayoutManagerImpl; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; -import org.chromium.chrome.test.DummyUiChromeActivityTestCase; import org.chromium.content_public.browser.test.util.TestThreadUtils; import org.chromium.ui.base.ActivityWindowAndroid; import org.chromium.ui.base.IntentRequestTracker; import org.chromium.ui.base.WindowAndroid; import org.chromium.ui.resources.dynamics.DynamicResourceLoader; +import org.chromium.ui.test.util.DisableAnimationsTestRule; +import org.chromium.ui.test.util.DummyUiActivity; import java.util.concurrent.TimeoutException; @@ -45,9 +51,16 @@ * Class responsible for testing the OverlayPanelManager. */ @RunWith(ChromeJUnit4ClassRunner.class) -public class OverlayPanelManagerTest extends DummyUiChromeActivityTestCase { +@Batch(Batch.PER_CLASS) +public class OverlayPanelManagerTest { private static final int MOCK_TOOLBAR_HEIGHT = 100; + @ClassRule + public static DisableAnimationsTestRule disableAnimationsRule = new DisableAnimationsTestRule(); + @ClassRule + public static BaseActivityTestRule<DummyUiActivity> activityTestRule = + new BaseActivityTestRule<>(DummyUiActivity.class); + @Rule public MockitoRule mMockitoRule = MockitoJUnit.rule(); @@ -60,6 +73,7 @@ @Mock private Tab mTab; + Activity mActivity; ActivityWindowAndroid mWindowAndroid; // -------------------------------------------------------------------------------------------- @@ -146,11 +160,17 @@ } } + @BeforeClass + public static void setupSuite() { + activityTestRule.launchActivity(null); + } + @Before - public void setUp() { + public void setupTest() { mWindowAndroid = TestThreadUtils.runOnUiThreadBlockingNoException(() -> { - return new ActivityWindowAndroid(getActivity(), /* listenToActivityState= */ true, - IntentRequestTracker.createFromActivity(getActivity())); + mActivity = activityTestRule.getActivity(); + return new ActivityWindowAndroid(mActivity, /* listenToActivityState= */ true, + IntentRequestTracker.createFromActivity(mActivity)); }); }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/overlays/strip/TabStripTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/overlays/strip/TabStripTest.java index fe023e0..d3849e0 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/overlays/strip/TabStripTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/overlays/strip/TabStripTest.java
@@ -11,11 +11,12 @@ import org.hamcrest.Matchers; import org.junit.Assert; -import org.junit.Before; +import org.junit.ClassRule; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; +import org.chromium.base.test.util.Batch; import org.chromium.base.test.util.CallbackHelper; import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.Criteria; @@ -30,6 +31,7 @@ import org.chromium.chrome.browser.tabmodel.TabModelUtils; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeTabbedActivityTestRule; +import org.chromium.chrome.test.batch.BlankCTATabInitialStateRule; import org.chromium.chrome.test.util.ChromeTabUtils; import org.chromium.chrome.test.util.TabStripUtils; import org.chromium.content_public.browser.test.util.DOMUtils; @@ -45,15 +47,16 @@ * Test suite for the TabStrip and making sure it properly represents the TabModel backend. */ @RunWith(ChromeJUnit4ClassRunner.class) +@Batch(Batch.PER_CLASS) @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) public class TabStripTest { - @Rule - public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); + @ClassRule + public static ChromeTabbedActivityTestRule sActivityTestRule = + new ChromeTabbedActivityTestRule(); - @Before - public void setUp() throws InterruptedException { - mActivityTestRule.startMainActivityOnBlankPage(); - } + @Rule + public BlankCTATabInitialStateRule mBlankCTATabInitialStateRule = + new BlankCTATabInitialStateRule(sActivityTestRule, false); /** * Tests that the initial state of the system is good. This is so the default TabStrips match @@ -79,18 +82,18 @@ public void testNewTabButtonWithOneTab() throws Exception { InstrumentationRegistry.getInstrumentation().waitForIdleSync(); Assert.assertEquals("Expected original tab to be selected", - mActivityTestRule.getActivity().getTabModelSelector().getModel(false).index(), 0); + sActivityTestRule.getActivity().getTabModelSelector().getModel(false).index(), 0); ChromeTabUtils.clickNewTabButton( - InstrumentationRegistry.getInstrumentation(), mActivityTestRule.getActivity()); + InstrumentationRegistry.getInstrumentation(), sActivityTestRule.getActivity()); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); Assert.assertEquals("Expected two tabs to exist", - mActivityTestRule.getActivity().getTabModelSelector().getModel(false).getCount(), + sActivityTestRule.getActivity().getTabModelSelector().getModel(false).getCount(), 2); compareAllTabStripsWithModel(); Assert.assertEquals("Expected second tab to be selected", - mActivityTestRule.getActivity().getTabModelSelector().getModel(false).index(), 1); + sActivityTestRule.getActivity().getTabModelSelector().getModel(false).index(), 1); } /** @@ -103,28 +106,28 @@ @Feature({"TabStrip"}) public void testNewTabButtonWithManyTabs() throws Exception { ChromeTabUtils.newTabsFromMenu( - InstrumentationRegistry.getInstrumentation(), mActivityTestRule.getActivity(), 3); + InstrumentationRegistry.getInstrumentation(), sActivityTestRule.getActivity(), 3); InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() { @Override public void run() { TabModelUtils.setIndex( - mActivityTestRule.getActivity().getTabModelSelector().getModel(false), 0); + sActivityTestRule.getActivity().getTabModelSelector().getModel(false), 0); } }); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); Assert.assertEquals("Expected original tab to be selected", - mActivityTestRule.getActivity().getTabModelSelector().getModel(false).index(), 0); + sActivityTestRule.getActivity().getTabModelSelector().getModel(false).index(), 0); compareAllTabStripsWithModel(); ChromeTabUtils.clickNewTabButton( - InstrumentationRegistry.getInstrumentation(), mActivityTestRule.getActivity()); + InstrumentationRegistry.getInstrumentation(), sActivityTestRule.getActivity()); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); Assert.assertEquals("Expected five tabs to exist", - mActivityTestRule.getActivity().getTabModelSelector().getModel(false).getCount(), + sActivityTestRule.getActivity().getTabModelSelector().getModel(false).getCount(), 5); Assert.assertEquals("Expected last tab to be selected", - mActivityTestRule.getActivity().getTabModelSelector().getModel(false).index(), 4); + sActivityTestRule.getActivity().getTabModelSelector().getModel(false).index(), 4); compareAllTabStripsWithModel(); } @@ -139,10 +142,10 @@ InstrumentationRegistry.getInstrumentation().waitForIdleSync(); compareAllTabStripsWithModel(); ChromeTabUtils.newTabFromMenu( - InstrumentationRegistry.getInstrumentation(), mActivityTestRule.getActivity()); + InstrumentationRegistry.getInstrumentation(), sActivityTestRule.getActivity()); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); Assert.assertEquals("Expected two tabs to exist", - mActivityTestRule.getActivity().getTabModelSelector().getModel(false).getCount(), + sActivityTestRule.getActivity().getTabModelSelector().getModel(false).getCount(), 2); compareAllTabStripsWithModel(); } @@ -158,17 +161,17 @@ public void testNewIncognitoTabFromMenuAtNormalStrip() throws Exception { InstrumentationRegistry.getInstrumentation().waitForIdleSync(); Assert.assertFalse("Expected normal strip to be selected", - mActivityTestRule.getActivity().getTabModelSelector().isIncognitoSelected()); - mActivityTestRule.newIncognitoTabFromMenu(); + sActivityTestRule.getActivity().getTabModelSelector().isIncognitoSelected()); + sActivityTestRule.newIncognitoTabFromMenu(); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); compareAllTabStripsWithModel(); Assert.assertTrue("Expected incognito strip to be selected", - mActivityTestRule.getActivity().getTabModelSelector().isIncognitoSelected()); + sActivityTestRule.getActivity().getTabModelSelector().isIncognitoSelected()); Assert.assertEquals("Expected normal model to have one tab", - mActivityTestRule.getActivity().getTabModelSelector().getModel(false).getCount(), + sActivityTestRule.getActivity().getTabModelSelector().getModel(false).getCount(), 1); Assert.assertEquals("Expected incognito model to have one tab", - mActivityTestRule.getActivity().getTabModelSelector().getModel(false).getCount(), + sActivityTestRule.getActivity().getTabModelSelector().getModel(false).getCount(), 1); } @@ -181,14 +184,14 @@ @Feature({"TabStrip"}) public void testSelectWithTwoTabs() throws Exception { ChromeTabUtils.newTabFromMenu( - InstrumentationRegistry.getInstrumentation(), mActivityTestRule.getActivity()); + InstrumentationRegistry.getInstrumentation(), sActivityTestRule.getActivity()); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); Assert.assertEquals("The second tab is not selected", - mActivityTestRule.getActivity().getCurrentTabModel().index(), 1); - selectTab(false, mActivityTestRule.getActivity().getCurrentTabModel().getTabAt(0).getId()); + sActivityTestRule.getActivity().getCurrentTabModel().index(), 1); + selectTab(false, sActivityTestRule.getActivity().getCurrentTabModel().getTabAt(0).getId()); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); Assert.assertEquals("The first tab is not selected", - mActivityTestRule.getActivity().getCurrentTabModel().index(), 0); + sActivityTestRule.getActivity().getCurrentTabModel().index(), 0); compareAllTabStripsWithModel(); } @@ -202,17 +205,17 @@ @Feature({"TabStrip"}) public void testSelectWithManyTabs() throws Exception { ChromeTabUtils.newTabsFromMenu( - InstrumentationRegistry.getInstrumentation(), mActivityTestRule.getActivity(), 4); + InstrumentationRegistry.getInstrumentation(), sActivityTestRule.getActivity(), 4); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); Assert.assertEquals("The last tab is not selected", - mActivityTestRule.getActivity().getCurrentTabModel().index(), 4); + sActivityTestRule.getActivity().getCurrentTabModel().index(), 4); compareAllTabStripsWithModel(); // Note: if the tab is not visible, this will fail. Currently that's not a problem, because // the devices we test on are wide enough. - selectTab(false, mActivityTestRule.getActivity().getCurrentTabModel().getTabAt(0).getId()); + selectTab(false, sActivityTestRule.getActivity().getCurrentTabModel().getTabAt(0).getId()); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); Assert.assertEquals("The middle tab is not selected", - mActivityTestRule.getActivity().getCurrentTabModel().index(), 0); + sActivityTestRule.getActivity().getCurrentTabModel().index(), 0); compareAllTabStripsWithModel(); } @@ -226,21 +229,21 @@ @Feature({"TabStrip"}) public void testCloseTabWithTwoTabs() throws Exception { ChromeTabUtils.newTabFromMenu( - InstrumentationRegistry.getInstrumentation(), mActivityTestRule.getActivity()); + InstrumentationRegistry.getInstrumentation(), sActivityTestRule.getActivity()); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); Assert.assertEquals("There are not two tabs present", - mActivityTestRule.getActivity().getCurrentTabModel().getCount(), 2); + sActivityTestRule.getActivity().getCurrentTabModel().getCount(), 2); Assert.assertEquals("The second tab is not selected", - mActivityTestRule.getActivity().getCurrentTabModel().index(), 1); - int initialSelectedId = mActivityTestRule.getActivity().getActivityTab().getId(); - closeTab(false, mActivityTestRule.getActivity().getCurrentTabModel().getTabAt(0).getId()); + sActivityTestRule.getActivity().getCurrentTabModel().index(), 1); + int initialSelectedId = sActivityTestRule.getActivity().getActivityTab().getId(); + closeTab(false, sActivityTestRule.getActivity().getCurrentTabModel().getTabAt(0).getId()); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); Assert.assertEquals("There is not one tab present", - mActivityTestRule.getActivity().getCurrentTabModel().getCount(), 1); + sActivityTestRule.getActivity().getCurrentTabModel().getCount(), 1); Assert.assertEquals("The wrong tab index is selected after close", - mActivityTestRule.getActivity().getCurrentTabModel().index(), 0); + sActivityTestRule.getActivity().getCurrentTabModel().index(), 0); Assert.assertEquals("Same tab not still selected", initialSelectedId, - mActivityTestRule.getActivity().getActivityTab().getId()); + sActivityTestRule.getActivity().getActivityTab().getId()); compareAllTabStripsWithModel(); } @@ -254,23 +257,23 @@ @Feature({"TabStrip"}) public void testCloseTabWithManyTabs() throws Exception { ChromeTabUtils.newTabsFromMenu( - InstrumentationRegistry.getInstrumentation(), mActivityTestRule.getActivity(), 4); + InstrumentationRegistry.getInstrumentation(), sActivityTestRule.getActivity(), 4); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); Assert.assertEquals("There are not five tabs present", - mActivityTestRule.getActivity().getCurrentTabModel().getCount(), 5); + sActivityTestRule.getActivity().getCurrentTabModel().getCount(), 5); Assert.assertEquals("The last tab is not selected", - mActivityTestRule.getActivity().getCurrentTabModel().index(), 4); - int initialSelectedId = mActivityTestRule.getActivity().getActivityTab().getId(); + sActivityTestRule.getActivity().getCurrentTabModel().index(), 4); + int initialSelectedId = sActivityTestRule.getActivity().getActivityTab().getId(); // Note: if the tab is not visible, this will fail. Currently that's not a problem, because // the devices we test on are wide enough. - closeTab(false, mActivityTestRule.getActivity().getCurrentTabModel().getTabAt(0).getId()); + closeTab(false, sActivityTestRule.getActivity().getCurrentTabModel().getTabAt(0).getId()); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); Assert.assertEquals("There are not four tabs present", - mActivityTestRule.getActivity().getCurrentTabModel().getCount(), 4); + sActivityTestRule.getActivity().getCurrentTabModel().getCount(), 4); Assert.assertEquals("The wrong tab index is selected after close", - mActivityTestRule.getActivity().getCurrentTabModel().index(), 3); + sActivityTestRule.getActivity().getCurrentTabModel().index(), 3); Assert.assertEquals("Same tab not still selected", initialSelectedId, - mActivityTestRule.getActivity().getActivityTab().getId()); + sActivityTestRule.getActivity().getActivityTab().getId()); compareAllTabStripsWithModel(); } @@ -284,22 +287,22 @@ @Feature({"TabStrip"}) public void testCloseSelectedTab() throws Exception { ChromeTabUtils.newTabFromMenu( - InstrumentationRegistry.getInstrumentation(), mActivityTestRule.getActivity()); + InstrumentationRegistry.getInstrumentation(), sActivityTestRule.getActivity()); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); Assert.assertEquals("There are not two tabs present", - mActivityTestRule.getActivity().getCurrentTabModel().getCount(), 2); + sActivityTestRule.getActivity().getCurrentTabModel().getCount(), 2); Assert.assertEquals("The second tab is not selected", - mActivityTestRule.getActivity().getCurrentTabModel().index(), 1); + sActivityTestRule.getActivity().getCurrentTabModel().index(), 1); int newSelectionId = - mActivityTestRule.getActivity().getCurrentTabModel().getTabAt(0).getId(); - closeTab(false, mActivityTestRule.getActivity().getCurrentTabModel().getTabAt(1).getId()); + sActivityTestRule.getActivity().getCurrentTabModel().getTabAt(0).getId(); + closeTab(false, sActivityTestRule.getActivity().getCurrentTabModel().getTabAt(1).getId()); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); Assert.assertEquals("There is not one tab present", - mActivityTestRule.getActivity().getCurrentTabModel().getCount(), 1); + sActivityTestRule.getActivity().getCurrentTabModel().getCount(), 1); Assert.assertEquals("The wrong tab index is selected after close", - mActivityTestRule.getActivity().getCurrentTabModel().index(), 0); + sActivityTestRule.getActivity().getCurrentTabModel().index(), 0); Assert.assertEquals("New tab not selected", newSelectionId, - mActivityTestRule.getActivity().getActivityTab().getId()); + sActivityTestRule.getActivity().getActivityTab().getId()); compareAllTabStripsWithModel(); } @@ -314,34 +317,34 @@ public void testCloseAllTabsFromTabMenuClosesAllTabs() { // 1. Create a second tab ChromeTabUtils.newTabFromMenu( - InstrumentationRegistry.getInstrumentation(), mActivityTestRule.getActivity()); + InstrumentationRegistry.getInstrumentation(), sActivityTestRule.getActivity()); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); Assert.assertEquals("There are not two tabs present", 2, - mActivityTestRule.getActivity().getCurrentTabModel().getCount()); + sActivityTestRule.getActivity().getCurrentTabModel().getCount()); Assert.assertEquals("The second tab is not selected", 1, - mActivityTestRule.getActivity().getCurrentTabModel().index()); + sActivityTestRule.getActivity().getCurrentTabModel().index()); // 2. Display tab menu on first tab int tabSelectionId = - mActivityTestRule.getActivity().getCurrentTabModel().getTabAt(0).getId(); + sActivityTestRule.getActivity().getCurrentTabModel().getTabAt(0).getId(); longPressCloseTab(false, tabSelectionId); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); Assert.assertEquals("There are not two tabs present", 2, - mActivityTestRule.getActivity().getCurrentTabModel().getCount()); + sActivityTestRule.getActivity().getCurrentTabModel().getCount()); Assert.assertEquals("The wrong tab index is selected after long press", 0, - mActivityTestRule.getActivity().getCurrentTabModel().index()); + sActivityTestRule.getActivity().getCurrentTabModel().index()); Assert.assertEquals("Long pressed tab not selected", tabSelectionId, - mActivityTestRule.getActivity().getActivityTab().getId()); + sActivityTestRule.getActivity().getActivityTab().getId()); // 3. Invoke "close all tabs" menu action; block until action is completed TestThreadUtils.runOnUiThreadBlocking(() -> { - TabStripUtils.getActiveStripLayoutHelper(mActivityTestRule.getActivity()) + TabStripUtils.getActiveStripLayoutHelper(sActivityTestRule.getActivity()) .clickTabMenuItem(StripLayoutHelper.ID_CLOSE_ALL_TABS); }); // 4. Ensure all tabs were closed Assert.assertEquals("Expected no tabs to be present", 0, - mActivityTestRule.getActivity().getCurrentTabModel().getCount()); + sActivityTestRule.getActivity().getCurrentTabModel().getCount()); } /** @@ -354,27 +357,27 @@ @Feature({"TabStrip"}) public void testTabMenuDismissedOnOrientationChange() { // 1. Set orientation to portrait - mActivityTestRule.getActivity().setRequestedOrientation( + sActivityTestRule.getActivity().setRequestedOrientation( ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); // 2. Open tab menu int tabSelectionId = - mActivityTestRule.getActivity().getCurrentTabModel().getTabAt(0).getId(); + sActivityTestRule.getActivity().getCurrentTabModel().getTabAt(0).getId(); longPressCloseTab(false, tabSelectionId); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); // 3. Set orientation to landscape and assert tab menu is not showing - mActivityTestRule.getActivity().setRequestedOrientation( + sActivityTestRule.getActivity().setRequestedOrientation( ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); - Assert.assertFalse(TabStripUtils.getActiveStripLayoutHelper(mActivityTestRule.getActivity()) + Assert.assertFalse(TabStripUtils.getActiveStripLayoutHelper(sActivityTestRule.getActivity()) .isTabMenuShowing()); Assert.assertEquals("Expected 1 tab to be present", 1, - mActivityTestRule.getActivity().getCurrentTabModel().getCount()); + sActivityTestRule.getActivity().getCurrentTabModel().getCount()); // 4. Reset orientation - mActivityTestRule.getActivity().setRequestedOrientation( + sActivityTestRule.getActivity().setRequestedOrientation( ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); } @@ -391,21 +394,21 @@ public void testToggleIncognitoMode() throws Exception { InstrumentationRegistry.getInstrumentation().waitForIdleSync(); Assert.assertFalse("Expected normal strip to be selected", - mActivityTestRule.getActivity().getTabModelSelector().isIncognitoSelected()); - mActivityTestRule.newIncognitoTabFromMenu(); + sActivityTestRule.getActivity().getTabModelSelector().isIncognitoSelected()); + sActivityTestRule.newIncognitoTabFromMenu(); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); Assert.assertTrue("Expected incognito strip to be selected", - mActivityTestRule.getActivity().getTabModelSelector().isIncognitoSelected()); + sActivityTestRule.getActivity().getTabModelSelector().isIncognitoSelected()); compareAllTabStripsWithModel(); clickIncognitoToggleButton(); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); Assert.assertFalse("Expected normal strip to be selected", - mActivityTestRule.getActivity().getTabModelSelector().isIncognitoSelected()); + sActivityTestRule.getActivity().getTabModelSelector().isIncognitoSelected()); compareAllTabStripsWithModel(); clickIncognitoToggleButton(); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); Assert.assertTrue("Expected incognito strip to be selected", - mActivityTestRule.getActivity().getTabModelSelector().isIncognitoSelected()); + sActivityTestRule.getActivity().getTabModelSelector().isIncognitoSelected()); } /** @@ -419,22 +422,22 @@ public void testCloseLastIncognitoTab() { InstrumentationRegistry.getInstrumentation().waitForIdleSync(); Assert.assertFalse("Expected normal strip to be selected", - mActivityTestRule.getActivity().getTabModelSelector().isIncognitoSelected()); - mActivityTestRule.newIncognitoTabFromMenu(); + sActivityTestRule.getActivity().getTabModelSelector().isIncognitoSelected()); + sActivityTestRule.newIncognitoTabFromMenu(); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); Assert.assertTrue("Expected incognito strip to be selected", - mActivityTestRule.getActivity().getTabModelSelector().isIncognitoSelected()); + sActivityTestRule.getActivity().getTabModelSelector().isIncognitoSelected()); closeTab(true, TabModelUtils .getCurrentTab( - mActivityTestRule.getActivity().getTabModelSelector().getModel( + sActivityTestRule.getActivity().getTabModelSelector().getModel( true)) .getId()); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); Assert.assertFalse("Expected normal strip to be selected", - mActivityTestRule.getActivity().getTabModelSelector().isIncognitoSelected()); + sActivityTestRule.getActivity().getTabModelSelector().isIncognitoSelected()); Assert.assertEquals("Expected incognito strip to have no tabs", - mActivityTestRule.getActivity().getTabModelSelector().getModel(true).getCount(), 0); + sActivityTestRule.getActivity().getTabModelSelector().getModel(true).getCount(), 0); } /** @@ -449,21 +452,21 @@ //1. Create two incognito tabs InstrumentationRegistry.getInstrumentation().waitForIdleSync(); Assert.assertFalse("Expected normal strip to be selected", - mActivityTestRule.getActivity().getTabModelSelector().isIncognitoSelected()); - mActivityTestRule.newIncognitoTabFromMenu(); + sActivityTestRule.getActivity().getTabModelSelector().isIncognitoSelected()); + sActivityTestRule.newIncognitoTabFromMenu(); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); - mActivityTestRule.newIncognitoTabFromMenu(); + sActivityTestRule.newIncognitoTabFromMenu(); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); Assert.assertTrue("Expected incognito strip to be selected", - mActivityTestRule.getActivity().getTabModelSelector().isIncognitoSelected()); + sActivityTestRule.getActivity().getTabModelSelector().isIncognitoSelected()); Assert.assertEquals("Expected incognito strip to have 2 tabs", 2, - mActivityTestRule.getActivity().getTabModelSelector().getModel(true).getCount()); + sActivityTestRule.getActivity().getTabModelSelector().getModel(true).getCount()); // 2. Open tab menu int tabSelectionId = TabModelUtils .getCurrentTab( - mActivityTestRule.getActivity().getTabModelSelector().getModel( + sActivityTestRule.getActivity().getTabModelSelector().getModel( true)) .getId(); longPressCloseTab(true, tabSelectionId); @@ -471,17 +474,17 @@ // 3. Invoke menu action; block until action is completed TestThreadUtils.runOnUiThreadBlocking(() -> { - TabStripUtils.getActiveStripLayoutHelper(mActivityTestRule.getActivity()) + TabStripUtils.getActiveStripLayoutHelper(sActivityTestRule.getActivity()) .clickTabMenuItem(StripLayoutHelper.ID_CLOSE_ALL_TABS); }); // 4. Ensure all incognito tabs were closed and TabStrip is switched to normal Assert.assertFalse("Expected normal strip to be selected", - mActivityTestRule.getActivity().getTabModelSelector().isIncognitoSelected()); + sActivityTestRule.getActivity().getTabModelSelector().isIncognitoSelected()); Assert.assertEquals("Expected normal strip to have 1 tab", 1, - mActivityTestRule.getActivity().getTabModelSelector().getModel(false).getCount()); + sActivityTestRule.getActivity().getTabModelSelector().getModel(false).getCount()); Assert.assertEquals("Expected incognito strip to have no tabs", 0, - mActivityTestRule.getActivity().getTabModelSelector().getModel(true).getCount()); + sActivityTestRule.getActivity().getTabModelSelector().getModel(true).getCount()); } /** @@ -495,18 +498,18 @@ public void testTabSelectionViewDoesNotBreakModelSwitch() { InstrumentationRegistry.getInstrumentation().waitForIdleSync(); Assert.assertFalse("Expected normal strip to be selected", - mActivityTestRule.getActivity().getTabModelSelector().isIncognitoSelected()); - mActivityTestRule.newIncognitoTabFromMenu(); + sActivityTestRule.getActivity().getTabModelSelector().isIncognitoSelected()); + sActivityTestRule.newIncognitoTabFromMenu(); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); Assert.assertTrue("Expected incognito strip to be selected", - mActivityTestRule.getActivity().getTabModelSelector().isIncognitoSelected()); - mActivityTestRule.newIncognitoTabFromMenu(); - ChromeTabUtils.switchTabInCurrentTabModel(mActivityTestRule.getActivity(), 0); + sActivityTestRule.getActivity().getTabModelSelector().isIncognitoSelected()); + sActivityTestRule.newIncognitoTabFromMenu(); + ChromeTabUtils.switchTabInCurrentTabModel(sActivityTestRule.getActivity(), 0); clickIncognitoToggleButton(); Assert.assertFalse("Expected normal strip to be selected", - mActivityTestRule.getActivity().getTabModelSelector().isIncognitoSelected()); + sActivityTestRule.getActivity().getTabModelSelector().isIncognitoSelected()); } /** @@ -522,21 +525,21 @@ @Feature({"TabStrip"}) public void testSwitchStripStackersWithIncognito() throws Exception { // Open an incognito tab to switch to the incognito model. - mActivityTestRule.newIncognitoTabFromMenu(); + sActivityTestRule.newIncognitoTabFromMenu(); // Open enough regular tabs to cause the tabs to cascade or the strip to scroll depending // on which stacker is being used. ChromeTabUtils.newTabsFromMenu( - InstrumentationRegistry.getInstrumentation(), mActivityTestRule.getActivity(), 10); + InstrumentationRegistry.getInstrumentation(), sActivityTestRule.getActivity(), 10); // Switch to the ScrollingStripStacker. setShouldCascadeTabsAndCheckTabStrips(false); // Scroll so the selected tab is not visible. assertSetTabStripScrollOffset(0); - TabModel model = mActivityTestRule.getActivity().getTabModelSelector().getModel(false); + TabModel model = sActivityTestRule.getActivity().getTabModelSelector().getModel(false); StripLayoutTab tab = TabStripUtils.findStripLayoutTab( - mActivityTestRule.getActivity(), false, model.getTabAt(10).getId()); + sActivityTestRule.getActivity(), false, model.getTabAt(10).getId()); assertTabVisibility(false, tab); // Create visibility callback helper. @@ -552,7 +555,7 @@ }); // Open another incognito tab to switch to the incognito model. - mActivityTestRule.newIncognitoTabFromMenu(); + sActivityTestRule.newIncognitoTabFromMenu(); // Switch tab models to switch back to the regular tab strip. clickIncognitoToggleButton(); @@ -577,7 +580,7 @@ // Open enough regular tabs to cause the tabs to cascade or the strip to scroll depending // on which stacker is being used. ChromeTabUtils.newTabsFromMenu( - InstrumentationRegistry.getInstrumentation(), mActivityTestRule.getActivity(), 10); + InstrumentationRegistry.getInstrumentation(), sActivityTestRule.getActivity(), 10); // Switch to the ScrollingStripStacker. setShouldCascadeTabsAndCheckTabStrips(false); @@ -599,11 +602,11 @@ // Open enough regular tabs to cause the tabs to cascade or the strip to scroll depending // on which stacker is being used. ChromeTabUtils.newTabsFromMenu( - InstrumentationRegistry.getInstrumentation(), mActivityTestRule.getActivity(), 10); + InstrumentationRegistry.getInstrumentation(), sActivityTestRule.getActivity(), 10); // Select the first tab by setting the index directly. It may not be visible, so don't // try to tap on it. - ChromeTabUtils.switchTabInCurrentTabModel(mActivityTestRule.getActivity(), 0); + ChromeTabUtils.switchTabInCurrentTabModel(sActivityTestRule.getActivity(), 0); // Switch to the ScrollingStripStacker. setShouldCascadeTabsAndCheckTabStrips(false); @@ -613,11 +616,11 @@ // when using the CascadingStripStacker but may not be visible when using the // ScrollingStripStacker. assertSetTabStripScrollOffset( - (int) TabStripUtils.getActiveStripLayoutHelper(mActivityTestRule.getActivity()) + (int) TabStripUtils.getActiveStripLayoutHelper(sActivityTestRule.getActivity()) .getMinimumScrollOffset()); StripLayoutTab selectedLayoutTab = - TabStripUtils.findStripLayoutTab(mActivityTestRule.getActivity(), false, - mActivityTestRule.getActivity().getCurrentTabModel().getTabAt(0).getId()); + TabStripUtils.findStripLayoutTab(sActivityTestRule.getActivity(), false, + sActivityTestRule.getActivity().getCurrentTabModel().getTabAt(0).getId()); assertTabVisibility(false, selectedLayoutTab); // Switch to the CascadingStripStacker. @@ -637,11 +640,11 @@ // Open enough regular tabs to cause the tabs to cascade or the strip to scroll depending // on which stacker is being used. ChromeTabUtils.newTabsFromMenu( - InstrumentationRegistry.getInstrumentation(), mActivityTestRule.getActivity(), 10); + InstrumentationRegistry.getInstrumentation(), sActivityTestRule.getActivity(), 10); // Select the sixth tab by setting the index directly. It may not be visible, so don't // try to tap on it. - ChromeTabUtils.switchTabInCurrentTabModel(mActivityTestRule.getActivity(), 5); + ChromeTabUtils.switchTabInCurrentTabModel(sActivityTestRule.getActivity(), 5); // Switch to the ScrollingStripStacker. setShouldCascadeTabsAndCheckTabStrips(false); @@ -665,7 +668,7 @@ // Open enough regular tabs to cause the strip to scroll. ChromeTabUtils.newTabsFromMenu( - InstrumentationRegistry.getInstrumentation(), mActivityTestRule.getActivity(), 10); + InstrumentationRegistry.getInstrumentation(), sActivityTestRule.getActivity(), 10); // In RTL the expectation for left/right fade opacities is swapped. boolean isLeft = !LocalizationUtils.isLayoutRtl(); @@ -677,7 +680,7 @@ // Scroll a little below the minimum scroll offset causing the right fade (in LTR) to be // at partial opacity. assertSetTabStripScrollOffset( - (int) (TabStripUtils.getActiveStripLayoutHelper(mActivityTestRule.getActivity()) + (int) (TabStripUtils.getActiveStripLayoutHelper(sActivityTestRule.getActivity()) .getMinimumScrollOffset() + StripLayoutHelper.FADE_FULL_OPACITY_THRESHOLD_DP / 2)); assertTabStripFadePartiallyVisible(!isLeft); @@ -709,12 +712,12 @@ // Open enough regular tabs to cause the strip to scroll. ChromeTabUtils.newTabsFromMenu( - InstrumentationRegistry.getInstrumentation(), mActivityTestRule.getActivity(), 10); + InstrumentationRegistry.getInstrumentation(), sActivityTestRule.getActivity(), 10); // Get tab at index 0 and assert it is not visible. - TabModel model = mActivityTestRule.getActivity().getTabModelSelector().getModel(false); + TabModel model = sActivityTestRule.getActivity().getTabModelSelector().getModel(false); final StripLayoutTab tab = TabStripUtils.findStripLayoutTab( - mActivityTestRule.getActivity(), false, model.getTabAt(0).getId()); + sActivityTestRule.getActivity(), false, model.getTabAt(0).getId()); assertTabVisibility(false, tab); // Create visibility callback helper. @@ -730,7 +733,7 @@ }); // Select tab 0. - ChromeTabUtils.switchTabInCurrentTabModel(mActivityTestRule.getActivity(), 0); + ChromeTabUtils.switchTabInCurrentTabModel(sActivityTestRule.getActivity(), 0); // Tab should now be visible. helper.waitForCallback(0); @@ -750,11 +753,11 @@ // Open enough regular tabs to cause the strip to scroll and select the first tab. ChromeTabUtils.newTabsFromMenu( - InstrumentationRegistry.getInstrumentation(), mActivityTestRule.getActivity(), 10); + InstrumentationRegistry.getInstrumentation(), sActivityTestRule.getActivity(), 10); // Set up some variables. StripLayoutHelper strip = - TabStripUtils.getActiveStripLayoutHelper(mActivityTestRule.getActivity()); + TabStripUtils.getActiveStripLayoutHelper(sActivityTestRule.getActivity()); StripLayoutTab[] tabs = strip.getStripLayoutTabs(); float tabDrawWidth = tabs[0].getWidth() - strip.getTabOverlapWidth(); @@ -774,7 +777,7 @@ }); // Switch to the first tab and wait until it's visible. - ChromeTabUtils.switchTabInCurrentTabModel(mActivityTestRule.getActivity(), 0); + ChromeTabUtils.switchTabInCurrentTabModel(sActivityTestRule.getActivity(), 0); visibleHelper.waitForCallback(0); // Check initial model validity. @@ -824,20 +827,20 @@ @Restriction(UiRestriction.RESTRICTION_TYPE_TABLET) @Feature({"TabStrip", "IME"}) public void testSwitchingTabsHidesKeyboard() throws Throwable { - mActivityTestRule.loadUrl("data:text/html;charset=utf-8,<html><head></head><body><form>" + sActivityTestRule.loadUrl("data:text/html;charset=utf-8,<html><head></head><body><form>" + "<input type='text' id='input0'></form></body></html>"); DOMUtils.clickNode( - mActivityTestRule.getActivity().getActivityTab().getWebContents(), "input0"); + sActivityTestRule.getActivity().getActivityTab().getWebContents(), "input0"); assertWaitForKeyboardStatus(true); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); ChromeTabUtils.clickNewTabButton( - InstrumentationRegistry.getInstrumentation(), mActivityTestRule.getActivity()); + InstrumentationRegistry.getInstrumentation(), sActivityTestRule.getActivity()); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); Assert.assertEquals("Expected two tabs to exist", - mActivityTestRule.getActivity().getTabModelSelector().getModel(false).getCount(), + sActivityTestRule.getActivity().getTabModelSelector().getModel(false).getCount(), 2); assertWaitForKeyboardStatus(false); @@ -872,18 +875,18 @@ } }; TestThreadUtils.runOnUiThreadBlocking( - () -> mActivityTestRule.getActivity().getTabModelSelector().addObserver(observer)); + () -> sActivityTestRule.getActivity().getTabModelSelector().addObserver(observer)); StripLayoutHelperManager manager = - TabStripUtils.getStripLayoutHelperManager(mActivityTestRule.getActivity()); + TabStripUtils.getStripLayoutHelperManager(sActivityTestRule.getActivity()); TabStripUtils.clickCompositorButton(manager.getModelSelectorButton(), - InstrumentationRegistry.getInstrumentation(), mActivityTestRule.getActivity()); + InstrumentationRegistry.getInstrumentation(), sActivityTestRule.getActivity()); try { tabModelSelectedCallback.waitForCallback(0); } catch (TimeoutException e) { Assert.fail("Tab model selected event never occurred."); } TestThreadUtils.runOnUiThreadBlocking(() -> { - mActivityTestRule.getActivity().getTabModelSelector().removeObserver(observer); + sActivityTestRule.getActivity().getTabModelSelector().removeObserver(observer); }); } @@ -894,14 +897,14 @@ */ protected void selectTab(final boolean incognito, final int id) { ChromeTabUtils.selectTabWithAction(InstrumentationRegistry.getInstrumentation(), - mActivityTestRule.getActivity(), new Runnable() { + sActivityTestRule.getActivity(), new Runnable() { @Override public void run() { TabStripUtils.clickTab( TabStripUtils.findStripLayoutTab( - mActivityTestRule.getActivity(), incognito, id), + sActivityTestRule.getActivity(), incognito, id), InstrumentationRegistry.getInstrumentation(), - mActivityTestRule.getActivity()); + sActivityTestRule.getActivity()); } }); } @@ -913,14 +916,14 @@ */ protected void closeTab(final boolean incognito, final int id) { ChromeTabUtils.closeTabWithAction(InstrumentationRegistry.getInstrumentation(), - mActivityTestRule.getActivity(), new Runnable() { + sActivityTestRule.getActivity(), new Runnable() { @Override public void run() { StripLayoutTab tab = TabStripUtils.findStripLayoutTab( - mActivityTestRule.getActivity(), incognito, id); + sActivityTestRule.getActivity(), incognito, id); TabStripUtils.clickCompositorButton(tab.getCloseButton(), InstrumentationRegistry.getInstrumentation(), - mActivityTestRule.getActivity()); + sActivityTestRule.getActivity()); } }); } @@ -933,17 +936,17 @@ */ protected void longPressCloseTab(final boolean incognito, final int id) { ChromeTabUtils.selectTabWithAction(InstrumentationRegistry.getInstrumentation(), - mActivityTestRule.getActivity(), new Runnable() { + sActivityTestRule.getActivity(), new Runnable() { @Override public void run() { StripLayoutTab tab = TabStripUtils.findStripLayoutTab( - mActivityTestRule.getActivity(), incognito, id); + sActivityTestRule.getActivity(), incognito, id); TabStripUtils.longPressCompositorButton(tab.getCloseButton(), InstrumentationRegistry.getInstrumentation(), - mActivityTestRule.getActivity()); + sActivityTestRule.getActivity()); } }); - Assert.assertTrue(TabStripUtils.getActiveStripLayoutHelper(mActivityTestRule.getActivity()) + Assert.assertTrue(TabStripUtils.getActiveStripLayoutHelper(sActivityTestRule.getActivity()) .isTabMenuShowing()); } @@ -954,12 +957,12 @@ * @param id The id of the tab to compare. */ protected void compareTabViewWithModel(boolean incognito, int id) throws ExecutionException { - TabModel model = mActivityTestRule.getActivity().getTabModelSelector().getModel(incognito); + TabModel model = sActivityTestRule.getActivity().getTabModelSelector().getModel(incognito); Tab tab = TabModelUtils.getTabById(model, id); StripLayoutHelper tabStrip = - TabStripUtils.getStripLayoutHelper(mActivityTestRule.getActivity(), incognito); + TabStripUtils.getStripLayoutHelper(sActivityTestRule.getActivity(), incognito); StripLayoutTab tabView = - TabStripUtils.findStripLayoutTab(mActivityTestRule.getActivity(), incognito, id); + TabStripUtils.findStripLayoutTab(sActivityTestRule.getActivity(), incognito, id); Assert.assertTrue("One of Tab and TabView does not exist", (tabView == null && tab == null) || (tabView != null && tab != null)); @@ -975,7 +978,7 @@ tabStrip.visualIndexOfTab(tabView)); if (TabModelUtils.getCurrentTab(model) == tab - && mActivityTestRule.getActivity().getTabModelSelector().isIncognitoSelected() + && sActivityTestRule.getActivity().getTabModelSelector().isIncognitoSelected() == incognito) { Assert.assertTrue("ChromeTab is not in the proper selection state", tabStrip.isForegroundTab(tabView)); @@ -1002,12 +1005,12 @@ * @param incognito Whether or not to check the incognito or normal TabStrip. */ protected void compareTabStripWithModel(boolean incognito) throws ExecutionException { - TabModel model = mActivityTestRule.getActivity().getTabModelSelector().getModel(incognito); + TabModel model = sActivityTestRule.getActivity().getTabModelSelector().getModel(incognito); StripLayoutHelper strip = - TabStripUtils.getStripLayoutHelper(mActivityTestRule.getActivity(), incognito); + TabStripUtils.getStripLayoutHelper(sActivityTestRule.getActivity(), incognito); StripLayoutHelper activeStrip = - TabStripUtils.getActiveStripLayoutHelper(mActivityTestRule.getActivity()); - TabModel activeModel = mActivityTestRule.getActivity().getCurrentTabModel(); + TabStripUtils.getActiveStripLayoutHelper(sActivityTestRule.getActivity()); + TabModel activeModel = sActivityTestRule.getActivity().getCurrentTabModel(); if (activeModel.isIncognito() == incognito) { Assert.assertEquals("TabStrip is not in the right visible state", strip, activeStrip); @@ -1018,13 +1021,13 @@ } CompositorButton incognitoIndicator = - TabStripUtils.getStripLayoutHelperManager(mActivityTestRule.getActivity()) + TabStripUtils.getStripLayoutHelperManager(sActivityTestRule.getActivity()) .getModelSelectorButton(); if (activeModel.isIncognito()) { Assert.assertNotNull("Incognito indicator null in incognito mode", incognitoIndicator); Assert.assertTrue("Incognito indicator not visible in incognito mode", incognitoIndicator.isVisible()); - } else if (mActivityTestRule.getActivity().getTabModelSelector().getModel(true).getCount() + } else if (sActivityTestRule.getActivity().getTabModelSelector().getModel(true).getCount() == 0) { Assert.assertFalse("Incognito indicator visible in non incognito mode", incognitoIndicator.isVisible()); @@ -1052,13 +1055,13 @@ */ private void setShouldCascadeTabsAndCheckTabStrips(final boolean shouldCascadeTabs) throws ExecutionException { - TabModel model = mActivityTestRule.getActivity().getCurrentTabModel(); + TabModel model = sActivityTestRule.getActivity().getCurrentTabModel(); int selectedTabIndex = model.index(); TestThreadUtils.runOnUiThreadBlocking(() -> { - TabStripUtils.getStripLayoutHelper(mActivityTestRule.getActivity(), true) + TabStripUtils.getStripLayoutHelper(sActivityTestRule.getActivity(), true) .setShouldCascadeTabs(shouldCascadeTabs); - TabStripUtils.getStripLayoutHelper(mActivityTestRule.getActivity(), false) + TabStripUtils.getStripLayoutHelper(sActivityTestRule.getActivity(), false) .setShouldCascadeTabs(shouldCascadeTabs); }); @@ -1067,7 +1070,7 @@ ? "Expected CascadingStripStacker but was ScrollingStripStacker." : "Expected ScrollingStripStacker but was CascadingStripStacker.", shouldCascadeTabs, - TabStripUtils.getActiveStripLayoutHelper(mActivityTestRule.getActivity()) + TabStripUtils.getActiveStripLayoutHelper(sActivityTestRule.getActivity()) .shouldCascadeTabs()); // Assert that the same tab is still selected. @@ -1079,7 +1082,7 @@ // The selected tab should always be visible in the CascadingStripStacker and switching to // the ScrollingStripStacker should auto-scroll to make the selected tab visible. StripLayoutTab selectedLayoutTab = - TabStripUtils.findStripLayoutTab(mActivityTestRule.getActivity(), + TabStripUtils.findStripLayoutTab(sActivityTestRule.getActivity(), model.isIncognito(), model.getTabAt(selectedTabIndex).getId()); assertTabVisibility(true, selectedLayoutTab); } @@ -1091,7 +1094,7 @@ */ private void assertSetTabStripScrollOffset(final int scrollOffset) throws ExecutionException { final StripLayoutHelper strip = - TabStripUtils.getActiveStripLayoutHelper(mActivityTestRule.getActivity()); + TabStripUtils.getActiveStripLayoutHelper(sActivityTestRule.getActivity()); TestThreadUtils.runOnUiThreadBlocking( () -> { strip.setScrollOffsetForTesting(scrollOffset); }); @@ -1105,7 +1108,7 @@ */ private void assertTabStripFadeFullyHidden(boolean isLeft) { StripLayoutHelper strip = - TabStripUtils.getActiveStripLayoutHelper(mActivityTestRule.getActivity()); + TabStripUtils.getActiveStripLayoutHelper(sActivityTestRule.getActivity()); if (isLeft) { Assert.assertEquals("Left tab strip fade visibility is incorrect.", 0.f, strip.getLeftFadeOpacity(), 0); @@ -1121,7 +1124,7 @@ */ private void assertTabStripFadeFullyVisible(boolean isLeft) { StripLayoutHelper strip = - TabStripUtils.getActiveStripLayoutHelper(mActivityTestRule.getActivity()); + TabStripUtils.getActiveStripLayoutHelper(sActivityTestRule.getActivity()); if (isLeft) { Assert.assertEquals("Left tab strip fade visibility is incorrect.", 1.f, strip.getLeftFadeOpacity(), 0); @@ -1137,7 +1140,7 @@ */ private void assertTabStripFadePartiallyVisible(boolean isLeft) { StripLayoutHelper strip = - TabStripUtils.getActiveStripLayoutHelper(mActivityTestRule.getActivity()); + TabStripUtils.getActiveStripLayoutHelper(sActivityTestRule.getActivity()); if (isLeft) { boolean isPartiallyVisible = strip.getLeftFadeOpacity() > 0.f && strip.getLeftFadeOpacity() < 1.f; @@ -1220,9 +1223,9 @@ */ private void assertWaitForKeyboardStatus(final boolean expectsShown) { CriteriaHelper.pollInstrumentationThread(() -> { - Criteria.checkThat(mActivityTestRule.getKeyboardDelegate().isKeyboardShowing( - mActivityTestRule.getActivity(), - mActivityTestRule.getActivity().getActivityTab().getView()), + Criteria.checkThat(sActivityTestRule.getKeyboardDelegate().isKeyboardShowing( + sActivityTestRule.getActivity(), + sActivityTestRule.getActivity().getActivityTab().getView()), Matchers.is(expectsShown)); }); }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/directactions/CloseTabDirectActionHandlerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/directactions/CloseTabDirectActionHandlerTest.java index f7fbcb87..0feb606 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/directactions/CloseTabDirectActionHandlerTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/directactions/CloseTabDirectActionHandlerTest.java
@@ -15,10 +15,12 @@ import org.hamcrest.Matchers; import org.junit.Before; +import org.junit.ClassRule; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; +import org.chromium.base.test.util.Batch; import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.Feature; import org.chromium.base.test.util.MinAndroidSdkLevel; @@ -28,6 +30,7 @@ import org.chromium.chrome.browser.tabmodel.TabModelSelector; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeTabbedActivityTestRule; +import org.chromium.chrome.test.batch.BlankCTATabInitialStateRule; import org.chromium.content_public.browser.test.util.TestThreadUtils; import java.util.ArrayList; @@ -37,9 +40,15 @@ @RunWith(ChromeJUnit4ClassRunner.class) @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) @MinAndroidSdkLevel(Build.VERSION_CODES.N) +@Batch(Batch.PER_CLASS) public class CloseTabDirectActionHandlerTest { + @ClassRule + public static ChromeTabbedActivityTestRule sActivityTestRule = + new ChromeTabbedActivityTestRule(); + @Rule - public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); + public BlankCTATabInitialStateRule mBlankCTATabInitialStateRule = + new BlankCTATabInitialStateRule(sActivityTestRule, false); private TabModelSelector mSelector; private CloseTabDirectActionHandler mHandler; @@ -47,11 +56,10 @@ @Before public void setUp() throws Exception { // Setup an activity with two blank tabs. - mActivityTestRule.startMainActivityOnBlankPage(); - mActivityTestRule.loadUrlInNewTab( + sActivityTestRule.loadUrlInNewTab( "about:blank", false /* incognito */, TabLaunchType.FROM_CHROME_UI); - mSelector = mActivityTestRule.getActivity().getTabModelSelector(); + mSelector = sActivityTestRule.getActivity().getTabModelSelector(); mHandler = new CloseTabDirectActionHandler(mSelector); }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/directactions/DirectActionsInActivityTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/directactions/DirectActionsInActivityTest.java index 4a70c67..9923aa57 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/directactions/DirectActionsInActivityTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/directactions/DirectActionsInActivityTest.java
@@ -22,6 +22,7 @@ import org.junit.runner.RunWith; import org.chromium.base.Callback; +import org.chromium.base.test.util.Batch; import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.Feature; import org.chromium.base.test.util.MetricsUtils.HistogramDelta; @@ -42,6 +43,7 @@ @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) @MinAndroidSdkLevel(Build.VERSION_CODES.N) @TargetApi(24) // For java.util.function.Consumer. +@Batch(Batch.PER_CLASS) public class DirectActionsInActivityTest { @Rule public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule();
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/directactions/MenuDirectActionHandlerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/directactions/MenuDirectActionHandlerTest.java index 8783671..79fb275b 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/directactions/MenuDirectActionHandlerTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/directactions/MenuDirectActionHandlerTest.java
@@ -18,10 +18,12 @@ import org.hamcrest.Matchers; import org.junit.Before; +import org.junit.ClassRule; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; +import org.chromium.base.test.util.Batch; import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.Criteria; import org.chromium.base.test.util.CriteriaHelper; @@ -33,6 +35,7 @@ import org.chromium.chrome.browser.tabmodel.TabModelSelector; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeTabbedActivityTestRule; +import org.chromium.chrome.test.batch.BlankCTATabInitialStateRule; import org.chromium.content_public.browser.test.util.TestThreadUtils; import java.util.ArrayList; @@ -44,9 +47,15 @@ @RunWith(ChromeJUnit4ClassRunner.class) @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) @MinAndroidSdkLevel(Build.VERSION_CODES.N) +@Batch(Batch.PER_CLASS) public class MenuDirectActionHandlerTest { + @ClassRule + public static ChromeTabbedActivityTestRule sActivityTestRule = + new ChromeTabbedActivityTestRule(); + @Rule - public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); + public BlankCTATabInitialStateRule mBlankCTATabInitialStateRule = + new BlankCTATabInitialStateRule(sActivityTestRule, false); private MenuDirectActionHandler mHandler; private ChromeActivity mActivity; @@ -54,8 +63,7 @@ @Before public void setUp() throws Exception { - mActivityTestRule.startMainActivityOnBlankPage(); - mActivity = mActivityTestRule.getActivity(); + mActivity = sActivityTestRule.getActivity(); mTabModelSelector = mActivity.getTabModelSelector(); mHandler = new MenuDirectActionHandler(mActivity, mTabModelSelector); }
diff --git a/chrome/app/resources/chromium_strings_am.xtb b/chrome/app/resources/chromium_strings_am.xtb index 0da0e62..a19be50 100644 --- a/chrome/app/resources/chromium_strings_am.xtb +++ b/chrome/app/resources/chromium_strings_am.xtb
@@ -257,6 +257,7 @@ <translation id="7937630085815544518">እንደ <ph name="USER_EMAIL_ADDRESS" /> ሆነው ወደ Chromium ገብተዋል። እባክዎ እንደገና ለመግባት ተመሳሳዩን መለያ ይጠቀሙ።</translation> <translation id="7975919845073681630">ይሄ ሁለተኛ የChromium ጭነት ነው፣ እና ነባሪ አሳሽዎ ማድረግ አይቻልም።</translation> <translation id="8013436988911883588">አንዴ Chromium መዳረሻ ከኖረው በኋላ ድር ጣቢያዎች እርስዎን መዳረሻ መጠየቅ ይችላሉ።</translation> +<translation id="8045118833343856403">የሚከተሉት መለያዎች በማናቸውም የChromium መገለጫዎች ውስጥ አልገቡም። አንድ መለያ በሌላ መገለጫ ውስጥ ለመጠቀም ከፈለጉ መጀመሪያ ያንን መገለጫ ያስወግዱት።</translation> <translation id="81770708095080097">ይህ ፋይል አደገኛ ስለሆነ Chromium አግዶታል።</translation> <translation id="8248265253516264921">አንድ ምስል ጠቃሚ መግለጫ ከሌለው Chromium ለእርስዎ አንድ ለማቅረብ ይሞክራል። ዝርዝር መግለጫዎችን ለመፍጠር፣ ምስሎች ወደ Google ይላካሉ። ይህን በማንኛውም ጊዜ በቅንብሮች ውስጥ ሊያጠፉት ይችላሉ።</translation> <translation id="8266560134891435528">እርስዎ በመለያ ስላልገቡ ስለሆኑ Chromium የይለፍ ቃላትዎን መፈተሽ አይችልም</translation>
diff --git a/chrome/app/resources/chromium_strings_ar.xtb b/chrome/app/resources/chromium_strings_ar.xtb index ee7a2428..bbfb83c 100644 --- a/chrome/app/resources/chromium_strings_ar.xtb +++ b/chrome/app/resources/chromium_strings_ar.xtb
@@ -256,6 +256,7 @@ <translation id="7937630085815544518">تم تسجيل دخولك إلى Chromium باعتبارك <ph name="USER_EMAIL_ADDRESS" />. يُرجى استخدام الحساب نفسه لتسجيل الدخول مرة أخرى.</translation> <translation id="7975919845073681630">هذا تثبيت ثانوي من Chromium، ولا يمكن جعله متصفحك التلقائي.</translation> <translation id="8013436988911883588">بعد حصول Chromium على إمكانية الوصول، ستتمكن المواقع الإلكترونية من مطالبتك بإمكانية الوصول.</translation> +<translation id="8045118833343856403">لم تسجّل الحسابات التالية الدخول إلى أي ملفات شخصية على Chromium. إذا كنت تريد استخدام حساب في ملف شخصي آخر، عليك إزالة هذا الملف الشخصي أولاً.</translation> <translation id="81770708095080097">هذا الملف ضار، لذلك فقد حظره Chromium.</translation> <translation id="8248265253516264921">في حال لم تتضمن صورة ما وصفًا مفيدًا، سيحاول Chromium توفير وصف لك. لإنشاء الأوصاف، سيتم إرسال الصور إلى Google. ويمكنك إيقاف هذه الميزة في الإعدادات في أي وقت.</translation> <translation id="8266560134891435528">يتعذّر على Chromium التحقّق من كلمات المرور لأنك لم تسجّل الدخول.</translation>
diff --git a/chrome/app/resources/chromium_strings_bg.xtb b/chrome/app/resources/chromium_strings_bg.xtb index f77046e..f80e93b 100644 --- a/chrome/app/resources/chromium_strings_bg.xtb +++ b/chrome/app/resources/chromium_strings_bg.xtb
@@ -249,6 +249,7 @@ <translation id="7937630085815544518">Бяхте влезли в Chromium като <ph name="USER_EMAIL_ADDRESS" />. Моля, използвайте същия профил, за да влезете отново.</translation> <translation id="7975919845073681630">Тази инсталация на Chromium е алтернативна и не може да се зададе като браузър по подразбиране.</translation> <translation id="8013436988911883588">След като Chromium получи достъп, уебсайтовете ще могат да искат достъп от вас.</translation> +<translation id="8045118833343856403">Следните профили не са част от потребителските профили в Chromium. Ако искате да използвате даден профил в друг потребителски профил, първо премахнете съответния потребителски профил.</translation> <translation id="81770708095080097">Chromium блокира този файл, тъй като е опасен.</translation> <translation id="8248265253516264921">Ако няма полезно описание за дадено изображение, Chromium ще се опита да предостави такова. За да бъдат създадени описания, съответните изображения се изпращат до Google. По всяко време можете да изключите тази функция от настройките.</translation> <translation id="8266560134891435528">Chromium не може да провери паролите ви, защото не сте влезли в профила си</translation>
diff --git a/chrome/app/resources/chromium_strings_bs.xtb b/chrome/app/resources/chromium_strings_bs.xtb index 3a54fc4..10a7b17 100644 --- a/chrome/app/resources/chromium_strings_bs.xtb +++ b/chrome/app/resources/chromium_strings_bs.xtb
@@ -258,6 +258,7 @@ <translation id="7937630085815544518">Bili ste prijavljeni na Chrome kao <ph name="USER_EMAIL_ADDRESS" />. Koristite isti račun da se ponovo prijavite.</translation> <translation id="7975919845073681630">Ovo je sekundarno instaliranje Chromiuma i stoga on ne može biti vaš zadani preglednik.</translation> <translation id="8013436988911883588">Kada Chromium dobije pristup, web lokacije će vam moći zatražiti pristup.</translation> +<translation id="8045118833343856403">Sljedeći računi nisu prijavljeni na Chromium profile. Ako želite koristiti račun na drugom profilu, prvo uklonite taj profil.</translation> <translation id="81770708095080097">Ovaj fajl je opasan pa ga je Chromium blokirao.</translation> <translation id="8248265253516264921">Ako slika ne sadrži koristan opis, Chromium će ga pokušati pružiti. Slike se šalju Googleu radi kreiranja opisa. To možete isključiti u postavkama kad god želite.</translation> <translation id="8266560134891435528">Chromium ne može provjeravati vaše lozinke jer niste prijavljeni</translation>
diff --git a/chrome/app/resources/chromium_strings_ca.xtb b/chrome/app/resources/chromium_strings_ca.xtb index 669e609..4d3ad9e 100644 --- a/chrome/app/resources/chromium_strings_ca.xtb +++ b/chrome/app/resources/chromium_strings_ca.xtb
@@ -255,6 +255,7 @@ <translation id="7937630085815544518">Teníeu la sessió iniciada a Chromium com a <ph name="USER_EMAIL_ADDRESS" />. Utilitzeu el mateix compte per tornar a iniciar-hi la sessió.</translation> <translation id="7975919845073681630">Aquesta és una instal·lació secundària de Chromium i no pot definir-se com a navegador predeterminat.</translation> <translation id="8013436988911883588">Un cop Chromium tingui accés, els llocs web et podran demanar accés.</translation> +<translation id="8045118833343856403">Els següents comptes no tenen la sessió iniciada en cap perfil de Chromium. Si vols utilitzar un compte en un altre perfil, primer has de suprimir aquest perfil.</translation> <translation id="81770708095080097">Chromium ha bloquejat aquest fitxer perquè és perillós.</translation> <translation id="8248265253516264921">Si una imatge no té una descripció útil, Chromium provarà d'oferir-te'n una. Per crear les descripcions, les imatges s'envien a Google. Pots desactivar aquesta funció en qualsevol moment a la configuració.</translation> <translation id="8266560134891435528">Chromium no pot comprovar les teves contrasenyes perquè no tens la sessió iniciada</translation>
diff --git a/chrome/app/resources/chromium_strings_da.xtb b/chrome/app/resources/chromium_strings_da.xtb index c5f89c1..3590cef 100644 --- a/chrome/app/resources/chromium_strings_da.xtb +++ b/chrome/app/resources/chromium_strings_da.xtb
@@ -256,6 +256,7 @@ <translation id="7937630085815544518">Du loggede ind på Chromium som <ph name="USER_EMAIL_ADDRESS" />. Brug den samme konto til at logge ind igen.</translation> <translation id="7975919845073681630">Dette er en sekundær installation af Chromium, og den kan ikke gøres til din standardbrowser.</translation> <translation id="8013436988911883588">Når Chromium har adgang, kan websites bede dig om adgang.</translation> +<translation id="8045118833343856403">Følgende konti er ikke logget ind på nogen Chromium-profiler. Hvis du vil bruge en konto på en anden profil, skal du først fjerne den pågældende profil.</translation> <translation id="81770708095080097">Denne fil er farlig, så Chromium har blokeret den.</translation> <translation id="8248265253516264921">Hvis et billede ikke har en brugbar beskrivelse, forsøger Chromium at angive en for dig. Billederne sendes til Google, så der kan oprettes beskrivelser. Du kan til enhver tid deaktivere denne funktion i indstillingerne.</translation> <translation id="8266560134891435528">Chromium kan ikke tjekke dine adgangskoder, da du ikke er logget ind</translation>
diff --git a/chrome/app/resources/chromium_strings_el.xtb b/chrome/app/resources/chromium_strings_el.xtb index d543a39..5140ea9 100644 --- a/chrome/app/resources/chromium_strings_el.xtb +++ b/chrome/app/resources/chromium_strings_el.xtb
@@ -256,6 +256,7 @@ <translation id="7937630085815544518">Συνδεθήκατε στο Chromium ως <ph name="USER_EMAIL_ADDRESS" />. Χρησιμοποιήστε τον ίδιο λογαριασμό για να συνδεθείτε ξανά.</translation> <translation id="7975919845073681630">Αυτή είναι μια δευτερεύουσα εγκατάσταση του Chromium και δεν μπορεί να γίνει το προεπιλεγμένο πρόγραμμα περιήγησης.</translation> <translation id="8013436988911883588">Όταν το Chromium αποκτήσει πρόσβαση, οι ιστότοποι θα μπορούν να σας ζητήσουν πρόσβαση.</translation> +<translation id="8045118833343856403">Οι παρακάτω λογαριασμοί δεν έχουν εγγραφεί σε προφίλ Chromium. Εάν θέλετε να χρησιμοποιήσετε έναν λογαριασμό σε άλλο προφίλ, αρχικά, καταργήστε εκείνο το προφίλ.</translation> <translation id="81770708095080097">Αυτό το αρχείο είναι επικίνδυνο και έχει αποκλειστεί από το Chromium.</translation> <translation id="8248265253516264921">Εάν μια εικόνα δεν έχει κάποια χρήσιμη περιγραφή, το Chromium θα προσπαθήσει να σας προσφέρει μια περιγραφή. Για τη δημιουργία περιγραφών, αποστέλλονται εικόνες στην Google. Μπορείτε να απενεργοποιήσετε αυτήν τη λειτουργία στις ρυθμίσεις οποιαδήποτε στιγμή.</translation> <translation id="8266560134891435528">Το Chromium δεν μπορεί να ελέγξει τους κωδικούς πρόσβασής σας επειδή δεν είστε συνδεδεμένοι.</translation>
diff --git a/chrome/app/resources/chromium_strings_en-GB.xtb b/chrome/app/resources/chromium_strings_en-GB.xtb index 0e7fa3d..17ff943 100644 --- a/chrome/app/resources/chromium_strings_en-GB.xtb +++ b/chrome/app/resources/chromium_strings_en-GB.xtb
@@ -257,6 +257,7 @@ <translation id="7937630085815544518">You were signed in to Chromium as <ph name="USER_EMAIL_ADDRESS" />. Please use the same account to sign in again.</translation> <translation id="7975919845073681630">This is a secondary installation of Chromium, and cannot be made your default browser.</translation> <translation id="8013436988911883588">Once Chromium has access, websites will be able to ask you for access.</translation> +<translation id="8045118833343856403">The following accounts are not signed into any Chromium profiles. If you want to use an account in another profile, remove that profile first.</translation> <translation id="81770708095080097">This file is dangerous, so Chromium has blocked it.</translation> <translation id="8248265253516264921">If an image doesn’t have a useful description, Chromium will try to provide one for you. To create descriptions, images are sent to Google. You can turn this off in settings at any time.</translation> <translation id="8266560134891435528">Chromium can't check your passwords because you're not signed in</translation>
diff --git a/chrome/app/resources/chromium_strings_es.xtb b/chrome/app/resources/chromium_strings_es.xtb index 8e262c6f..c7c1cbd 100644 --- a/chrome/app/resources/chromium_strings_es.xtb +++ b/chrome/app/resources/chromium_strings_es.xtb
@@ -258,6 +258,7 @@ <translation id="7937630085815544518">Habías iniciado sesión en Chromium como <ph name="USER_EMAIL_ADDRESS" />. Utiliza la misma cuenta para volver a iniciar sesión.</translation> <translation id="7975919845073681630">Esta instalación de Chromium es secundaria, por lo que no se puede establecer como navegador predeterminado.</translation> <translation id="8013436988911883588">Una vez que Chromium tenga acceso, los sitios web podrán solicitarlo también.</translation> +<translation id="8045118833343856403">Estas cuentas no han iniciado sesión en ningún perfil de Chromium. Si quieres usar una cuenta en otro perfil, quita ese perfil primero.</translation> <translation id="81770708095080097">Este archivo es peligroso, por lo que Chromium lo ha bloqueado.</translation> <translation id="8248265253516264921">Si una imagen no tiene ninguna descripción útil, Chromium intentará proporcionártela. Para crear las descripciones, las imágenes se envían a Google. Puedes desactivar esta opción cuando quieras desde la configuración.</translation> <translation id="8266560134891435528">Chromium no puede comprobar tus contraseñas porque no has iniciado sesión</translation>
diff --git a/chrome/app/resources/chromium_strings_et.xtb b/chrome/app/resources/chromium_strings_et.xtb index 1c1ab169..6a9f1f0 100644 --- a/chrome/app/resources/chromium_strings_et.xtb +++ b/chrome/app/resources/chromium_strings_et.xtb
@@ -255,6 +255,7 @@ <translation id="7937630085815544518">Olite Chromiumisse sisse logitud kasutajana <ph name="USER_EMAIL_ADDRESS" />. Kasutage uuesti sisselogimiseks sama kontot.</translation> <translation id="7975919845073681630">See on Chromiumi sekundaarne install ja seda ei saa määrata vaikebrauseriks.</translation> <translation id="8013436988911883588">Kui annate Chromiumile juurdepääsu, saavad veebisaidid küsida teilt juurdepääsuluba.</translation> +<translation id="8045118833343856403">Järgmised kontod pole ühelegi Chromiumi profiilile sisse logitud. Kui soovite kasutada teisel profiilil olevat kontot, eemaldage esmalt see profiil.</translation> <translation id="81770708095080097">Chromium blokeeris faili, kuna see on ohtlik.</translation> <translation id="8248265253516264921">Kui pildil puudub kasulik kirjeldus, üritab Chromium selle ise luua. Kirjelduste loomiseks saadetakse pildid Google'ile. Võite selle seadetes igal ajal välja lülitada.</translation> <translation id="8266560134891435528">Chromium ei saa teie paroole kontrollida, kuna te pole sisse logitud</translation>
diff --git a/chrome/app/resources/chromium_strings_fa.xtb b/chrome/app/resources/chromium_strings_fa.xtb index 3fde079..9fcf913 100644 --- a/chrome/app/resources/chromium_strings_fa.xtb +++ b/chrome/app/resources/chromium_strings_fa.xtb
@@ -254,6 +254,7 @@ <translation id="7937630085815544518">شما بعنوان <ph name="USER_EMAIL_ADDRESS" /> وارد سیستم Chromium شدهاید. لطفاً برای ورود به سیستم مجدد از همان حساب استفاده کنید.</translation> <translation id="7975919845073681630">این نصب ثانویه Chromium است و نمیتواند مرورگر پیشفرضتان شود.</translation> <translation id="8013436988911883588">وقتی Chromium دسترسی داشته باشد، وبسایتها میتوانند مجوز دسترسی درخواست کنند.</translation> +<translation id="8045118833343856403">حسابهای زیر به سیستم هیچکدام از نمایههای Chromium وارد نشدهاند. اگر میخواهید از حسابی در نمایهای دیگر استفاده کنید،ابتدا آن نمایه را بردارید.</translation> <translation id="81770708095080097">این فایل خطرناک است، بنابراین Chromium آن را مسدود کرده است.</translation> <translation id="8248265253516264921">اگر تصویری توضیح مفیدی نداشته باشد، Chromium توضیحی برای شما ارائه خواهد کرد. برای ایجاد توضیحات، تصاویر به Google ارسال میشود. هروقت خواستید میتوانید این گزینه را در تنظیمات خاموش کنید.</translation> <translation id="8266560134891435528">چون به سیستم وارد نشدهاید، Chromium نمیتواند گذرواژههایتان را بررسی کند</translation>
diff --git a/chrome/app/resources/chromium_strings_fr.xtb b/chrome/app/resources/chromium_strings_fr.xtb index 2c14671..065be356 100644 --- a/chrome/app/resources/chromium_strings_fr.xtb +++ b/chrome/app/resources/chromium_strings_fr.xtb
@@ -256,6 +256,7 @@ <translation id="7937630085815544518">Vous étiez connecté à Chromium en tant que <ph name="USER_EMAIL_ADDRESS" />. Veuillez utiliser le même compte pour vous reconnecter.</translation> <translation id="7975919845073681630">Ceci est une installation secondaire de Chromium. Vous ne pouvez pas le définir comme navigateur par défaut.</translation> <translation id="8013436988911883588">Une fois l'accès à une ressource accordé à Chromium, les sites Web sont également en mesure de vous demander l'accès.</translation> +<translation id="8045118833343856403">Les comptes suivants ne sont connectés à aucun profil Chromium. Si vous souhaitez utiliser un compte pour un autre profil, supprimez d'abord le profil.</translation> <translation id="81770708095080097">Chromium a bloqué ce fichier, car ce dernier est dangereux.</translation> <translation id="8248265253516264921">Si une image n'est pas accompagnée d'une description utile, Chromium essaiera de vous en proposer une. Pour nous permettre de créer des descriptions, les images sont envoyées à Google. Vous pouvez désactiver à tout moment cette option dans les paramètres.</translation> <translation id="8266560134891435528">Chromium ne peut pas vérifier vos mots de passe, car vous n'êtes pas connecté</translation>
diff --git a/chrome/app/resources/chromium_strings_hr.xtb b/chrome/app/resources/chromium_strings_hr.xtb index 0503efd..13bfe33 100644 --- a/chrome/app/resources/chromium_strings_hr.xtb +++ b/chrome/app/resources/chromium_strings_hr.xtb
@@ -256,6 +256,7 @@ <translation id="7937630085815544518">Bili ste prijavljeni na Chromium kao <ph name="USER_EMAIL_ADDRESS" />. Prijavite se ponovo istim računom.</translation> <translation id="7975919845073681630">Ovo je sekundarna instalacija Chromiuma, pa on ne može biti vaš zadani preglednik.</translation> <translation id="8013436988911883588">Kada Chromium dobije pristup, web-lokacije će vas moći tražiti pristup.</translation> +<translation id="8045118833343856403">Računi u nastavku nisu prijavljeni ni na jedan Chromium profil. Ako želite koristiti račun na drugom profilu, prvo uklonite taj profil.</translation> <translation id="81770708095080097">Datoteka je opasna i Chromium ju je blokirao.</translation> <translation id="8248265253516264921">Ako slika nema koristan opis, Chromium će ga pokušati pružiti. Da bi se izradili opisi, slike se šalju Googleu. To možete isključiti u bilo kojem trenutku u postavkama.</translation> <translation id="8266560134891435528">Chromium ne može provjeriti vaše zaporke jer niste prijavljeni</translation>
diff --git a/chrome/app/resources/chromium_strings_hu.xtb b/chrome/app/resources/chromium_strings_hu.xtb index c87a19e..e0a089b 100644 --- a/chrome/app/resources/chromium_strings_hu.xtb +++ b/chrome/app/resources/chromium_strings_hu.xtb
@@ -253,6 +253,7 @@ <translation id="7937630085815544518"><ph name="USER_EMAIL_ADDRESS" /> néven volt bejelentkezve a Chromiumba. Kérjük, ugyanazzal a fiókkal jelentkezzen be újra.</translation> <translation id="7975919845073681630">Ez a Chromium második telepítése, amelyet nem állíthat be az alapértelmezett böngészővé.</translation> <translation id="8013436988911883588">Miután hozzáférést biztosított a Chromiumnak, a webhelyek is hozzáférést kérhetnek.</translation> +<translation id="8045118833343856403">A következő fiókok nincsenek egyetlen Chromium-profilba sem bejelentkezve. Ha másik profilban szeretné használni az adott fiókot, előbb távolítsa el a szóban forgó profilt.</translation> <translation id="81770708095080097">Ez a fájl veszélyes, ezért a Chromium letiltotta.</translation> <translation id="8248265253516264921">Ha valamelyik kép nem rendelkezik hasznos leírással, akkor a Chromium igyekszik leírást adni róla. A Google automatikusan megkapja a leírások létrehozásához szükséges képeket. A funkciót a beállítások között bármikor kikapcsolhatja.</translation> <translation id="8266560134891435528">A Chromium nem tudja ellenőrizni az Ön jelszavait, mert nincs bejelentkezve</translation>
diff --git a/chrome/app/resources/chromium_strings_kk.xtb b/chrome/app/resources/chromium_strings_kk.xtb index 667da8f..a103fa9 100644 --- a/chrome/app/resources/chromium_strings_kk.xtb +++ b/chrome/app/resources/chromium_strings_kk.xtb
@@ -257,6 +257,7 @@ <translation id="7937630085815544518">Chromium жүйесіне <ph name="USER_EMAIL_ADDRESS" /> ретінде кірдіңіз. Қайта кіру үшін бірдей есептік жазбаны пайдаланыңыз.</translation> <translation id="7975919845073681630">Бұл – Chromium браузерінің қайта орнатылған нұсқасы және әдепкі браузер бола алмайды.</translation> <translation id="8013436988911883588">Chromium браузерінің кіру рұқсаты болса, веб-сайттар сізден кіру рұқсатын сұрайды.</translation> +<translation id="8045118833343856403">Мына есептік жазбалар бірде-бір Chromium профиліне кірмеген. Есептік жазбаны басқа профильде қолданғыңыз келсе, алдымен сол профильді өшіріп тастаңыз.</translation> <translation id="81770708095080097">Бұл файл қауіпті болғандықтан, Chromium оны бөгеді.</translation> <translation id="8248265253516264921">Егер суреттің пайдалы сипаттамасы болмаса, Chromium оны өзі ұсынып көреді. Сипаттамалар жасау үшін суреттер Google-ға жіберіледі. Бұл функцияны кез келген уақытта параметрлерден өшіріп қоюға болады.</translation> <translation id="8266560134891435528">Есептік жазбаға кірмегендіктен, Chromium сіздің құпия сөздеріңізді тексере алмайды.</translation>
diff --git a/chrome/app/resources/chromium_strings_ky.xtb b/chrome/app/resources/chromium_strings_ky.xtb index f9e52139..b4dc229 100644 --- a/chrome/app/resources/chromium_strings_ky.xtb +++ b/chrome/app/resources/chromium_strings_ky.xtb
@@ -258,6 +258,7 @@ <translation id="7937630085815544518">Chromium'га <ph name="USER_EMAIL_ADDRESS" /> катары кирдиңиз. Ушул аккаунт менен кайра кириңиз.</translation> <translation id="7975919845073681630">Бул Chromium'дун кошумча орнотулушу болгондуктан, аны демейки серепчиңиз катары тандай албайсыз.</translation> <translation id="8013436988911883588">Chromium'га уруксат берилгенден кийин вебсайттар уруксат сурай алышат.</translation> +<translation id="8045118833343856403">Төмөнкү аккаунттар Chromium профилдерине кирген жок. Эгер аккаунтту башка профилде колдонгуңуз келсе, адегенде ал профилди өчүрүңүз.</translation> <translation id="81770708095080097">Бул файл кооптуу, ошондуктан Chromium аны бөгөттөп койду.</translation> <translation id="8248265253516264921">Эгер сүрөттөрдүн түшүндүрмөсү жок болсо, Chromium аны түшүндүрүп берүүгө аракет кылат. Түшүндүрмөлөрдү даярдоо үчүн, сүрөттөр Google'га жөнөтүлөт. Аны жөндөөлөрдөн каалаган убакта өчүрүп койсоңуз болот.</translation> <translation id="8266560134891435528">Chromium сырсөздөрүңүздү текшере албайт, анткени аккаунтуңузга кирген жоксуз</translation>
diff --git a/chrome/app/resources/chromium_strings_pl.xtb b/chrome/app/resources/chromium_strings_pl.xtb index fdc1282..dbc3c98 100644 --- a/chrome/app/resources/chromium_strings_pl.xtb +++ b/chrome/app/resources/chromium_strings_pl.xtb
@@ -252,6 +252,7 @@ <translation id="7937630085815544518">Byłeś zalogowany w Chromium jako <ph name="USER_EMAIL_ADDRESS" />. Zaloguj się ponownie, korzystając z tego samego konta.</translation> <translation id="7975919845073681630">To jest druga instalacja Chromium. Nie można ustawić jej jako przeglądarki domyślnej.</translation> <translation id="8013436988911883588">Gdy Chromium będzie mieć dostęp, strony będą mogły prosić Cię o dostęp.</translation> +<translation id="8045118833343856403">Na te konta nie zalogowano się w żadnym profilu Chromium. Jeśli chcesz używać konta w innym profilu, najpierw go usuń.</translation> <translation id="81770708095080097">Ten plik jest niebezpieczny, dlatego został zablokowany przez Chromium.</translation> <translation id="8248265253516264921">Jeśli obraz nie ma przydatnego opisu, Chromium spróbuje go dla Ciebie stworzyć. W tym celu obrazy zostaną wysłane do Google. W każdej chwili możesz wyłączyć tę funkcję w ustawieniach.</translation> <translation id="8266560134891435528">Chromium nie może sprawdzić haseł, jeśli się nie zalogujesz</translation>
diff --git a/chrome/app/resources/chromium_strings_pt-BR.xtb b/chrome/app/resources/chromium_strings_pt-BR.xtb index 8201e0e..452cbfee 100644 --- a/chrome/app/resources/chromium_strings_pt-BR.xtb +++ b/chrome/app/resources/chromium_strings_pt-BR.xtb
@@ -249,6 +249,7 @@ <translation id="7937630085815544518">Você estava conectado ao Chromium como <ph name="USER_EMAIL_ADDRESS" />. Use a mesma conta para fazer login novamente.</translation> <translation id="7975919845073681630">Como esta é uma instalação secundária do Chromium, ele não pode se tornar seu navegador padrão.</translation> <translation id="8013436988911883588">Assim que o Chromium tiver acesso, os sites poderão solicitar acesso.</translation> +<translation id="8045118833343856403">As seguintes contas não estão conectadas a nenhum perfil do Chromium. Se você quiser usar uma conta em outro perfil, remova-o primeiro.</translation> <translation id="81770708095080097">Esse arquivo é perigoso, por isso ele foi bloqueado pelo Chromium.</translation> <translation id="8248265253516264921">Se uma imagem não tiver uma descrição útil, o Chromium tentará fornecer uma para você. As imagens serão enviadas ao Google para a criação de descrições. É possível desativar essa opção nas configurações a qualquer momento.</translation> <translation id="8266560134891435528">O Chromium não pode verificar suas senhas porque a conta não está conectada</translation>
diff --git a/chrome/app/resources/chromium_strings_ro.xtb b/chrome/app/resources/chromium_strings_ro.xtb index 18ff53b..2bad5d3 100644 --- a/chrome/app/resources/chromium_strings_ro.xtb +++ b/chrome/app/resources/chromium_strings_ro.xtb
@@ -255,6 +255,7 @@ <translation id="7937630085815544518">Ați fost conectat(ă) la Chromium ca <ph name="USER_EMAIL_ADDRESS" />. Utilizați același cont pentru a vă conecta din nou.</translation> <translation id="7975919845073681630">Aceasta este o instalare secundară a browserului Chromium și nu poate fi setat ca browser prestabilit.</translation> <translation id="8013436988911883588">Odată ce Chromium are acces, site-urile web îți vor putea solicita accesul.</translation> +<translation id="8045118833343856403">Următoarele conturi nu sunt conectate la niciun profil Chromium. Dacă vrei să folosești un cont într-un alt profil, mai întâi elimină profilul respectiv.</translation> <translation id="81770708095080097">Fișierul este periculos, așadar Chromium l-a blocat.</translation> <translation id="8248265253516264921">Dacă o imagine nu are o descriere utilă, Chromium va încerca să o completeze. Pentru a crea descrieri, imaginile sunt trimise la Google. Poți dezactiva această opțiune oricând din setări.</translation> <translation id="8266560134891435528">Chromium nu îți poate verifica parolele, deoarece nu te-ai conectat</translation>
diff --git a/chrome/app/resources/chromium_strings_sk.xtb b/chrome/app/resources/chromium_strings_sk.xtb index 2ab59dba..e973b3e 100644 --- a/chrome/app/resources/chromium_strings_sk.xtb +++ b/chrome/app/resources/chromium_strings_sk.xtb
@@ -257,6 +257,7 @@ <translation id="7937630085815544518">Do prehliadača Chromium ste boli prihlásený/-á ako <ph name="USER_EMAIL_ADDRESS" />. Ak sa chcete prihlásiť znova, použite rovnaký účet.</translation> <translation id="7975919845073681630">Toto je sekundárna inštalácia prehliadača Chromium – nemôže byť nastavený ako váš predvolený prehliadač.</translation> <translation id="8013436988911883588">Keď Chromium získa prístup, weby vás budú môcť žiadať o prístup.</translation> +<translation id="8045118833343856403">Nasledujúce účtu nie sú prihlásené do žiadneho profilu prehliadača Chromium. Ak chcete používať účet v inom profile, najprv daný profil odstráňte.</translation> <translation id="81770708095080097">Tento súbor je nebezpečný, a preto ho prehliadač Chromium zablokoval.</translation> <translation id="8248265253516264921">Ak obrázok nemá užitočný popis, Chromium sa vám ho pokúsi poskytnúť. Obrázky sa odosielajú Googlu, aby bolo možné vytvoriť popisy. Môžete to kedykoľvek vypnúť v nastaveniach.</translation> <translation id="8266560134891435528">Chromium nemôže skontrolovať heslá, pretože ste sa neprihlásili</translation>
diff --git a/chrome/app/resources/chromium_strings_sl.xtb b/chrome/app/resources/chromium_strings_sl.xtb index 26b900e..1050c88 100644 --- a/chrome/app/resources/chromium_strings_sl.xtb +++ b/chrome/app/resources/chromium_strings_sl.xtb
@@ -258,6 +258,7 @@ <translation id="7937630085815544518">V Chromium ste bili prijavljeni kot <ph name="USER_EMAIL_ADDRESS" />. Pri vnovični prijavi uporabite isti račun.</translation> <translation id="7975919845073681630">To je sekundarna namestitev Chromiuma in ga ni mogoče nastaviti kot privzeti brskalnik.</translation> <translation id="8013436988911883588">Ko bo imel Chromium dostop, vas bodo spletna mesta lahko pozvala k omogočanju dostopa.</translation> +<translation id="8045118833343856403">Naslednji računi niso prijavljeni v noben profil v Chromiumu. Če želite uporabiti račun v drugem profilu, najprej odstranite ta profil.</translation> <translation id="81770708095080097">Ta datoteka je nevarna, zato jo je Chromium blokiral.</translation> <translation id="8248265253516264921">Če slika nima koristnega opisa, ga bo Chromium poskušal zagotoviti. Opisi se ustvarijo tako, da se slike pošljejo Googlu. To lahko kadar koli izklopite v nastavitvah.</translation> <translation id="8266560134891435528">Chromium ne more preveriti gesel, ker niste prijavljeni</translation>
diff --git a/chrome/app/resources/chromium_strings_sr-Latn.xtb b/chrome/app/resources/chromium_strings_sr-Latn.xtb index 379c3b0..efac905 100644 --- a/chrome/app/resources/chromium_strings_sr-Latn.xtb +++ b/chrome/app/resources/chromium_strings_sr-Latn.xtb
@@ -258,6 +258,7 @@ <translation id="7937630085815544518">Bili ste prijavljeni na Chromium kao <ph name="USER_EMAIL_ADDRESS" />. Koristite isti nalog da biste se ponovo prijavili.</translation> <translation id="7975919845073681630">Ovo je sekundarna instalacija Chromium-a pa ne možete da ga podesite kao podrazumevani pregledač.</translation> <translation id="8013436988911883588">Kada Chromium dobije pristup, veb-sajtovi će moći da zatraže pristup.</translation> +<translation id="8045118833343856403">Sledeći nalozi nisu prijavljeni ni na jedan Chromium profil. Ako želite da koristite nalog na drugom profilu, uklonite prvo taj profil.</translation> <translation id="81770708095080097">Ova datoteka je opasna, pa ju je Chromium blokirao.</translation> <translation id="8248265253516264921">Ako slika nema koristan opis, Chromium će probati da vam ga pruži. Slike se šalju Google-u radi pravljenja opisa. To možete da isključite u podešavanjima u svakom trenutku.</translation> <translation id="8266560134891435528">Chromium ne može da vam proverava lozinke zato što niste prijavljeni</translation>
diff --git a/chrome/app/resources/chromium_strings_sr.xtb b/chrome/app/resources/chromium_strings_sr.xtb index b707d47..02ac85d7 100644 --- a/chrome/app/resources/chromium_strings_sr.xtb +++ b/chrome/app/resources/chromium_strings_sr.xtb
@@ -258,6 +258,7 @@ <translation id="7937630085815544518">Били сте пријављени на Chromium као <ph name="USER_EMAIL_ADDRESS" />. Користите исти налог да бисте се поново пријавили.</translation> <translation id="7975919845073681630">Ово је секундарна инсталација Chromium-а па не можете да га подесите као подразумевани прегледач.</translation> <translation id="8013436988911883588">Када Chromium добије приступ, веб-сајтови ће моћи да затраже приступ.</translation> +<translation id="8045118833343856403">Следећи налози нису пријављени ни на један Chromium профил. Ако желите да користите налог на другом профилу, уклоните прво тај профил.</translation> <translation id="81770708095080097">Ова датотека је опасна, па ју је Chromium блокирао.</translation> <translation id="8248265253516264921">Ако слика нема користан опис, Chromium ће пробати да вам га пружи. Слике се шаљу Google-у ради прављења описа. То можете да искључите у подешавањима у сваком тренутку.</translation> <translation id="8266560134891435528">Chromium не може да вам проверава лозинке зато што нисте пријављени</translation>
diff --git a/chrome/app/resources/chromium_strings_te.xtb b/chrome/app/resources/chromium_strings_te.xtb index 189f58f..e6c1783 100644 --- a/chrome/app/resources/chromium_strings_te.xtb +++ b/chrome/app/resources/chromium_strings_te.xtb
@@ -114,7 +114,7 @@ <translation id="4665829708273112819">హెచ్చరిక: Chromium మీ బ్రౌజింగ్ హిస్టరీను రికార్డ్ చేయకుండా ఎక్స్టెన్షన్లను నివారించలేదు. ఈ ఎక్స్టెన్షన్ను అజ్ఞాత మోడ్లో డిజేబుల్ చేయడానికి, ఈ ఆప్షన్ను రద్దు చేయండి.</translation> <translation id="4677944499843243528">ఈ ప్రొఫైల్ను మరొక కంప్యూటర్ (<ph name="HOST_NAME" />)లో మరో Chromium ప్రాసెస్ (<ph name="PROCESS_ID" />) ఉపయోగిస్తున్నట్లు కనిపిస్తోంది. Chromium ప్రొఫైల్ను లాక్ చేసినందున అది పాడవదు. ఈ ప్రొఫైల్ను వేరే ప్రాసెస్లు ఏవీ ఉపయోగించడం లేదని మీకు ఖచ్చితంగా తెలిస్తే, ప్రొఫైల్ను అన్లాక్ చేసి Chromiumను మళ్లీ ప్రారంభించవచ్చు.</translation> <translation id="469338717132742108">Chromium OS గురించి సహాయాన్ని పొందండి</translation> -<translation id="4708774505295300557">ఒకరు ఈ కంప్యూటర్లో మునుపు <ph name="ACCOUNT_EMAIL_LAST" /> లాగా Chromiumకు సైన్ ఇన్ చేశారు. దయచేసి మీ సమాచారాన్ని విడిగా ఉంచేందుకు కొత్త Chromium వినియోగదారును సృష్టించండి.</translation> +<translation id="4708774505295300557">ఒకరు ఈ కంప్యూటర్లో మునుపు <ph name="ACCOUNT_EMAIL_LAST" /> లాగా Chromiumకు సైన్ ఇన్ చేశారు. దయచేసి మీ సమాచారాన్ని విడిగా ఉంచేందుకు కొత్త Chromium వినియోగదారును క్రియేట్ చేయండి.</translation> <translation id="4746050847053251315">ఏదేమైనా Chromiumని మూసివేయాలా?</translation> <translation id="4748217263233248895">Chromiumకి సంబంధించిన ప్రత్యేక భద్రతా అప్డేట్ వర్తింపజేయబడింది. ఇప్పుడే పునఃప్రారంభించండి, మేము మీ ట్యాబ్లను పునరుద్ధరిస్తాము.</translation> <translation id="4750035648288509542">దాదాపుగా తాజాగా ఉంది! అప్డేట్ చేయడాన్ని పూర్తి చేయడానికి Chromiumను మళ్లీ ప్రారంభించండి. అజ్ఞాత విండోలు మళ్లీ తెరవబడవు.</translation>
diff --git a/chrome/app/resources/chromium_strings_uk.xtb b/chrome/app/resources/chromium_strings_uk.xtb index 1a6b213..4db1009 100644 --- a/chrome/app/resources/chromium_strings_uk.xtb +++ b/chrome/app/resources/chromium_strings_uk.xtb
@@ -256,6 +256,7 @@ <translation id="7937630085815544518">Ви ввійшли в Chromium як <ph name="USER_EMAIL_ADDRESS" />. Скористайтеся тим самим обліковим записом, щоб увійти знову.</translation> <translation id="7975919845073681630">Це додаткове встановлення Chromium. Його не можна зробити вашим веб-переглядачем за умовчанням.</translation> <translation id="8013436988911883588">Коли Chromium отримає доступ, веб-сайти зможуть надсилати вам запити на доступ.</translation> +<translation id="8045118833343856403">Користувачі зазначених облікових записів не ввійшли в профілі Chromium. Якщо ви хочете скористатись обліковим записом в іншому профілі, спершу вилучіть цей профіль.</translation> <translation id="81770708095080097">Цей файл небезпечний, тому Chromium заблокував його.</translation> <translation id="8248265253516264921">Якщо зображення не має корисного опису, Chromium спробує додати його. Для цього зображення надсилаються в Google. Ви можете будь-коли вимкнути це в налаштуваннях.</translation> <translation id="8266560134891435528">Chromium не може перевірити паролі, оскільки ви не ввійшли в обліковий запис</translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb index 04d7d22..bcde324 100644 --- a/chrome/app/resources/generated_resources_am.xtb +++ b/chrome/app/resources/generated_resources_am.xtb
@@ -159,6 +159,7 @@ <translation id="1165039591588034296">ስህተት</translation> <translation id="1166212789817575481">በቀኝ በኩል ያሉ ትሮችን ዝጋ</translation> <translation id="1166583374608765787">የግምገማ ስም ዝማኔ</translation> +<translation id="1166596238782048887"><ph name="TAB_TITLE" /> የዴስክ <ph name="DESK_TITLE" /> ነው</translation> <translation id="1168020859489941584">ለመከፈት የቀረው ጊዜ <ph name="TIME_REMAINING" />...</translation> <translation id="1170288591054440704">አንድ ጣቢያ በመሣሪያዎ ላይ የተጫኑ ቅርጸ-ቁምፊዎችን መጠቀም ሲፈልግ ይጠይቅ</translation> <translation id="1171135284592304528">ነገርየው በሚለወጥበት ጊዜ በቁልፍ ሰሌዳ ትኩረት አድምቅ</translation> @@ -618,6 +619,7 @@ <translation id="1640235262200048077"><ph name="IME_NAME" /> በ Linux መተግበሪያዎች ላይ እስካሁን አይሠራም</translation> <translation id="1640283014264083726">PKCS #1 MD4 ከRSA ምስጠራ ጋር</translation> <translation id="1641113438599504367">የጥንቃቄ አሰሳ</translation> +<translation id="1642492862748815878">ከ<ph name="DEVICE" /> እና <ph name="NUMBER_OF_DEVICES" /> ሌሎች የብሉቱዝ መሣሪያዎች ጋር ተገናኝቷል</translation> <translation id="1642494467033190216">ሌሎች የማረሚያ ባህሪያት ከመንቃታቸው በፊት የrootfs ጥበቃ መወገድ እና ዳግም መጀመር ያስፈልጋል።</translation> <translation id="1643072738649235303">የX9.62 ECDSA ፊርማ በSHA-1</translation> <translation id="1643921258693943800">በአቅራቢያ አጋራ ለመጠቀም፣ ብሉቱዝን እና Wi-Fiን ያብሩ</translation> @@ -1829,6 +1831,7 @@ <translation id="2885378588091291677">ተግባር መሪ</translation> <translation id="2885729872133513017">የአገልጋይ ምላሽን ምሥጠራ በመፍታት ጊዜ ችግር አጋጥሟል።</translation> <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation> +<translation id="288734198558082692"><ph name="DEVICE" /> እና <ph name="NUMBER_OF_DEVICES" /> ሌሎች</translation> <translation id="2889064240420137087">አገናኝ ክፈት በ...</translation> <translation id="2891922230654533301">ወደ <ph name="APP_NAME" /> ለመግባት መሣሪያዎን ይጠቀሙበት?</translation> <translation id="2893168226686371498">ነባሪ አሳሽ</translation> @@ -2763,6 +2766,7 @@ <translation id="3884152383786131369">በበርካታ ቋንቋዎች የሚገኝ የድር ይዘት ከዚህ ዝርዝር ላይ የመጀመሪያውን የሚደገፍ ቋንቋ ይጠቀማል። እነዚህ ምርጫዎች ከአሳሽዎ ቅንብሮች ጋር ይሰምራሉ። <ph name="BEGIN_LINK_LEARN_MORE" />የበለጠ ለመረዳት<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3885112598747515383">ዝማኔዎች በአስተዳዳሪዎ ይቀናበራሉ</translation> <translation id="3886446263141354045">ይህን ጣቢያ የመድረስ ጥያቄዎ ለ<ph name="NAME" /> ተልኳል</translation> +<translation id="3887022758415973389">የመሣሪያ ዝርዝር አሳይ</translation> <translation id="3888053818972567950"><ph name="WEB_DRIVE" /> ግንኙነት</translation> <translation id="3888550877729210209">ማስታወሻዎችን በ<ph name="LOCK_SCREEN_APP_NAME" /> በመውሰድ ላይ</translation> <translation id="3888586133700543064">ይህ መረጃ የረዳትዎን ችግር በተሻለ ሁኔታ እንድንረዳ ያግዘናል። እስከ 90 ቀኖች ድረስ የሚከማች ሲሆን መዳረሻ አግባብ ለሆኑ የምሕንድስና እና የግብረመልስ ቡድኖች የተገደበ ነው።</translation> @@ -3471,6 +3475,7 @@ <translation id="4662373422909645029">ቅጥያ ስም ቁጥሮችን ማካተት አይችልም</translation> <translation id="4662788913887017617">ይህን ዕልባት ለእርስዎ iPhone ያጋሩት</translation> <translation id="4663373278480897665">ካሜራ ተፈቅዷል</translation> +<translation id="4664289193573249666">በChrome OS ቅንብሮች ውስጥ ደህንነቱ የተጠበቀ ዲኤንኤስን ያቀናብሩ</translation> <translation id="4664482161435122549">PKCS #12 የመላክ ስህተት</translation> <translation id="4665014895760275686">አምራች</translation> <translation id="4665446389743427678">በ<ph name="SITE" /> የተከማቸ ሁሉም ውሂብ ይሰረዛል።</translation> @@ -6003,6 +6008,7 @@ <translation id="7478623944308207463">የእርስዎ መተግበሪያዎች እና ቅንብሮች በGoogle መለያዎ በገቡባቸው ሁሉም የChrome OS መሣሪያዎች ላይ ይሰምራሉ። ለአሳሽ ስምረት አማራጮች ወደ <ph name="LINK_BEGIN" />የChrome ቅንብሮች<ph name="LINK_END" /> ይሂዱ።</translation> <translation id="7478658909253570368">ጣቢያዎች ከተከታታይ ወደቦች ጋር እንዲገናኙ አይፍቀዱ</translation> <translation id="7479221278376295180">የማከማቻ አጠቃቀም አጠቃላይ እይታ</translation> +<translation id="747981547666531654"><ph name="FIRST_DEVICE" /> እና <ph name="SECOND_DEVICE" /> ተብለው ከተሰየሙ የብሉቱዝ መሣሪያዎች ጋር ተገናኝቷል</translation> <translation id="7481312909269577407">ወደ ፊት</translation> <translation id="7481358317100446445">ዝግጁ</translation> <translation id="748138892655239008">የሰርቲፊኬት መሰረታዊ እገዳዎች</translation> @@ -6055,6 +6061,7 @@ <translation id="7531771599742723865">መሣሪያ በስራ ላይ ነው</translation> <translation id="7531779363494549572">ወደ ቅንብሮች > መተግበሪያዎች እና ማሳወቂያዎች > ማሳወቂያዎች ይሂዱ።</translation> <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> ምላሽ እየሰጠ አይደለም። መተግበሪያውን ለመዝጋት «በግዳጅ ዝጋ»ን ይምረጡ።</translation> +<translation id="7535730537657706072">ማንነት የማያሳውቅ የአሰሳ ታሪክን ከመሣሪያዎ ለማጽዳት ሁሉንም ማንነት የማያሳውቁ ትሮች ይዝጉ</translation> <translation id="7535791657097741517">ነጣ ያለ ገጽታን አብራ</translation> <translation id="7537451260744431038">ጣቢያዎች የአሰሳዎን ተሞክሮ ለማሻሻል ኩኪዎችን መጠቀም አይችሉም፣ ለምሳሌ እርስዎ በመለያ እንደገቡ ማቆየት ወይም በግዢ ጋሪዎ ውስጥ ንጥሎችን ለማስታወስ</translation> <translation id="753769905878158714">በአድራሻ አሞሌ ላይ ለሚፈልጉት የሚፈልጉት የድር ጣቢያ ቁልፍ ቃሉን ያስገቡ። ከዚያም ለመቀጠል የቁልፍ ሰሌዳ አቋራጭ ይጠቀሙ።</translation> @@ -6677,6 +6684,7 @@ <translation id="8138217203226449454">የእርስዎን የፍለጋ አገልግሎት አቅራቢ ለመለወጥ ፈልገው ነው?</translation> <translation id="8138997515734480534"><ph name="VM_NAME" /> ሁኔታ</translation> <translation id="8139447493436036221">የGoogle Drive ፋይሎች</translation> +<translation id="8140070492745508800"><ph name="FIRST_DEVICE" />፣ <ph name="SECOND_DEVICE" /></translation> <translation id="8141584439523427891">በአማራጭ አሳሽ ውስጥ አሁን በመክፈት ላይ</translation> <translation id="8141725884565838206">የይለፍ ቃልዎችዎን ያስተዳድሩ</translation> <translation id="814204052173971714">{COUNT,plural, =1{አንድ ቪዲዮ}one{# ቪዲዮዎች}other{# ቪዲዮዎች}}</translation> @@ -7393,6 +7401,7 @@ <translation id="8909782404367982052">ምስሎችን በGoogle ሌንስ ለመፈለግ ይጎትቱ</translation> <translation id="8909833622202089127">ጣቢያ የእርስዎን አካባቢ እየተከታተለ ነው</translation> <translation id="8910222113987937043">በእርስዎ ዕልባቶች፣ ታሪክ፣ የይለፍ ቃላት እና ሌሎች ቅንብሮች ላይ የሚደረጉ ለውጦች ከአሁን በኋላ ከGoogle መለያዎ ጋር አይሰምሩም። ይሁንና፣ የእርስዎ ነባር ውሂብ በGoogle መለያዎ ላይ እንደተከማቸ የሚቆይ እና በ<ph name="BEGIN_LINK" />Google ዳሽቦርድ<ph name="END_LINK" /> ላይ መቀናበር የሚችል ነው።</translation> +<translation id="8910987510378294980">የመሣሪያ ዝርዝርን ደብቅ</translation> <translation id="8912362522468806198">የGoogle መለያ</translation> <translation id="8912793549644936705">ወጥር</translation> <translation id="8912810933860534797">ራስ-ቃኝን አንቃ</translation> @@ -7510,6 +7519,7 @@ <translation id="9033765790910064284">ለማንኛውም ቀጥል</translation> <translation id="9033857511263905942">&ለጥፍ</translation> <translation id="903480517321259405">ፒኑን እንደገና ይተይቡት</translation> +<translation id="9037054491984310631"><ph name="DEVICE" /> ከተብሎ ከተሰየመ የብሉቱዝ መሣሪያ ጋር ተገናኝቷል</translation> <translation id="9037640663275993951">መሣሪያ አይፈቀድም</translation> <translation id="9037818663270399707">የእርስዎ ግንኙነት ለሁሉም የአውታረ መረብ ትራፊክ የግል አይደለም</translation> <translation id="9037965129289936994">የመጀመሪያውን አሳይ</translation> @@ -7590,6 +7600,7 @@ <translation id="9112786533191410418"><ph name="FILE_NAME" /> አደገኛ ሊሆን ይችላል። ለመቃኘት ወደ Google ይላክ?</translation> <translation id="9112987648460918699">አግኝ…</translation> <translation id="9113240369465613386">ኢተጋማሽ ገጾች ብቻ</translation> +<translation id="9113469270512809735">በቅርብ ጊዜ የተዘጉ ንጥሎችን ይቀያይሩ</translation> <translation id="9114663181201435112">በቀላሉ በመለያ ይግቡ</translation> <translation id="9115675100829699941">&እልባቶች</translation> <translation id="9116465289595958864">መጨረሻ ላይ የተቀየሩ</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb index af600ec5..369fba4 100644 --- a/chrome/app/resources/generated_resources_ar.xtb +++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -159,6 +159,7 @@ <translation id="1165039591588034296">خطأ</translation> <translation id="1166212789817575481">إغلاق علامات التبويب على اليمين</translation> <translation id="1166583374608765787">مراجعة التعديل الذي تم إجراؤه على الاسم</translation> +<translation id="1166596238782048887">تنتمي علامة التبويب <ph name="TAB_TITLE" /> إلى سطح المكتب <ph name="DESK_TITLE" /></translation> <translation id="1168020859489941584">سيتمّ فتح الملفّ بعد <ph name="TIME_REMAINING" />...</translation> <translation id="1170288591054440704">طلب الإذن عند محاولة موقع إلكتروني استخدام الخطوط المثبّتة على جهازك</translation> <translation id="1171135284592304528">تمييز الكائن باستخدام تركيز لوحة المفاتيح عندما يتغير</translation> @@ -621,6 +622,7 @@ <translation id="1640235262200048077">لا يعمل <ph name="IME_NAME" /> على تطبيقات Linux بعد.</translation> <translation id="1640283014264083726">PKCS #1 MD4 مع ترميز RSA</translation> <translation id="1641113438599504367">التصفح الآمن</translation> +<translation id="1642492862748815878">تم الاتصال بالجهاز <ph name="DEVICE" /> و<ph name="NUMBER_OF_DEVICES" /> جهاز آخر يتضمّن بلوتوث.</translation> <translation id="1642494467033190216">مطلوب إزالة الحماية من rootfs وإعادة التشغيل قبل تفعيل ميزات التصحيح الأخرى.</translation> <translation id="1643072738649235303">توقيع X9.62 ECDSA باستخدام SHA-1</translation> <translation id="1643921258693943800">لاستخدام ميزة "المشاركة عن قرب"، يجب تفعيل البلوتوث وشبكة Wi-Fi.</translation> @@ -1825,6 +1827,7 @@ <translation id="2885378588091291677">إدارة المهام</translation> <translation id="2885729872133513017">حدثت مشكلة في فك رمز استجابة الخادم.</translation> <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation> +<translation id="288734198558082692"><ph name="DEVICE" /> و<ph name="NUMBER_OF_DEVICES" /> جهاز آخر</translation> <translation id="2889064240420137087">فتح الرابط باستخدام...</translation> <translation id="2891922230654533301">هل تريد استخدام جهازك لتسجيل الدخول إلى <ph name="APP_NAME" />؟</translation> <translation id="2893168226686371498">المتصفح التلقائي</translation> @@ -2760,6 +2763,7 @@ <translation id="3884152383786131369">سيستخدم محتوى الويب المتوفّر بلغات متعدّدة أول لغة معتمَدة من القائمة. وستتم مزامنة هذه الإعدادات المفضّلة مع إعدادات المتصفّح. <ph name="BEGIN_LINK_LEARN_MORE" />مزيد من المعلومات<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3885112598747515383">يتولّى مشرفك إدارة التحديثات.</translation> <translation id="3886446263141354045">تمّ إرسال طلبك للدخول إلى هذا الموقع إلى <ph name="NAME" /></translation> +<translation id="3887022758415973389">عرض قائمة الأجهزة</translation> <translation id="3888053818972567950">الربط بخدمة <ph name="WEB_DRIVE" /></translation> <translation id="3888550877729210209">تسجيل الملاحظات من خلال <ph name="LOCK_SCREEN_APP_NAME" /></translation> <translation id="3888586133700543064">تساعدنا هذه المعلومات في فهم مشكلتك على "مساعد Google" بشكل أفضل. ويتم تخزين هذه المعلومات لمدة تصل إلى 90 يومًا ويقتصر الوصول إليها على الفِرق المختصّة في الهندسة والتعامل مع ملاحظات المستخدمين.</translation> @@ -3467,6 +3471,7 @@ <translation id="4662373422909645029">يجب ألا يضم اللقب أرقامًا</translation> <translation id="4662788913887017617">مشاركة هذه الإشارة المرجعة مع جهاز iPhone</translation> <translation id="4663373278480897665">تم السماح باستخدام الكاميرا</translation> +<translation id="4664289193573249666">إدارة "نظام أسماء النطاقات" (DNS) الآمن من خلال إعدادات "نظام التشغيل Chrome"</translation> <translation id="4664482161435122549">خطأ في تصدير PKCS #12</translation> <translation id="4665014895760275686">جهة التصنيع</translation> <translation id="4665446389743427678">سيتم حذف جميع البيانات المُخزَّنة من خلال <ph name="SITE" />.</translation> @@ -5171,7 +5176,7 @@ <translation id="6562117348069327379">يمكنك تخزين سجلّات النظام في دليل "عمليات التنزيل".</translation> <translation id="656293578423618167">اسم الملف أو مساره طويل جدًا. يُرجى الحفظ باستخدام اسم أقصر أو في مكان آخر.</translation> <translation id="6563469144985748109">لم يوافق عليه مديرك حتى الآن</translation> -<translation id="6568283005472142698">البحث عن علامة تبويب</translation> +<translation id="6568283005472142698">البحث عن علامات تبويب</translation> <translation id="6569911211938664415">يتم حفظ كلمات المرور في حسابك (<ph name="ACCOUNT" />) على Google حتى تتمكَّن من استخدامها على أي جهاز.</translation> <translation id="6573497332121198392">تتعذَّر إزالة الاختصار.</translation> <translation id="657402800789773160">إ&عادة تحميل هذه الصفحة</translation> @@ -5999,6 +6004,7 @@ <translation id="7478623944308207463">ستتم مزامنة التطبيقات والإعدادات على جميع أجهزة "نظام التشغيل Chrome" التي سجّلت الدخول إليها باستخدام حسابك على Google. وللوصول إلى خيارات مزامنة المتصفّح، انتقِل إلى <ph name="LINK_BEGIN" />إعدادات Chrome<ph name="LINK_END" />.</translation> <translation id="7478658909253570368">عدم السماح للمواقع الإلكترونية بالاتصال بمنافذ تسلسلية</translation> <translation id="7479221278376295180">نظرة عامة على استخدام مساحة التخزين</translation> +<translation id="747981547666531654">تم الاتصال بالجهازين <ph name="FIRST_DEVICE" /> و<ph name="SECOND_DEVICE" /> اللذين يتضمّنان بلوتوث</translation> <translation id="7481312909269577407">إلى الأمام</translation> <translation id="7481358317100446445">جاهزة</translation> <translation id="748138892655239008">القيود الأساسية على الشهادة</translation> @@ -6051,6 +6057,7 @@ <translation id="7531771599742723865">الجهاز قيد الاستخدام</translation> <translation id="7531779363494549572">يُرجى الانتقال إلى "الإعدادات" > "التطبيقات والإشعارات" > "الإشعارات".</translation> <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> لا يستجيب. اختَر "فرض الإغلاق" لإغلاق التطبيق.</translation> +<translation id="7535730537657706072">لمحو سجل التصفّح في وضع التصفّح المتخفي على جهازك، عليك إغلاق كل علامات التبويب في وضع التصفُّح المتخفي.</translation> <translation id="7535791657097741517">تشغيل المظهر الفاتح</translation> <translation id="7537451260744431038">يمنع هذا الإجراء المواقع الإلكترونية من استخدام ملفات تعريف الارتباط لتحسين تجربة التصفُّح، مثل إبقائك مُسجِّلاً الدخول أو تذكُّر عناصر في سلة التسوق.</translation> <translation id="753769905878158714">في شريط العناوين، أدخِل الكلمة الرئيسية للموقع الإلكتروني الذي تريد البحث عنه. يمكنك بعد ذلك استخدام اختصارات لوحة المفاتيح للمتابعة.</translation> @@ -6668,6 +6675,7 @@ <translation id="8138217203226449454">هل كنت تقصد تغيير مُوفِّر خدمة البحث؟</translation> <translation id="8138997515734480534">حالة <ph name="VM_NAME" /></translation> <translation id="8139447493436036221">ملفات Google Drive</translation> +<translation id="8140070492745508800"><ph name="FIRST_DEVICE" /> و<ph name="SECOND_DEVICE" /></translation> <translation id="8141584439523427891">جارٍ الفتح في متصفِّح بديل الآن</translation> <translation id="8141725884565838206">إدارة كلمات المرور</translation> <translation id="814204052173971714">{COUNT,plural, =1{فيديو واحد}zero{# فيديو}two{فيديوهان}few{# فيديوهات}many{# فيديو}other{# فيديو}}</translation> @@ -7387,6 +7395,7 @@ <translation id="8909782404367982052">السحب للبحث عن الصور باستخدام "عدسة Google"</translation> <translation id="8909833622202089127">تتبّع الموقع الإلكتروني موقعك الجغرافي.</translation> <translation id="8910222113987937043">لن تتم بعد الآن مزامنة التغييرات التي تطرأ على الإشارات المرجعية والسجلّ وكلمات المرور والإعدادات الأخرى مع حسابك على Google، ولكن ستظل بياناتك الحالية مخزّنة في حسابك على Google ويمكن إدارتها في <ph name="BEGIN_LINK" />لوحة تحكّم Google<ph name="END_LINK" />.</translation> +<translation id="8910987510378294980">إخفاء قائمة الأجهزة</translation> <translation id="8912362522468806198">حساب Google</translation> <translation id="8912793549644936705">تمدد</translation> <translation id="8912810933860534797">تفعيل المسح التلقائي</translation> @@ -7504,6 +7513,7 @@ <translation id="9033765790910064284">متابعة على أي حال</translation> <translation id="9033857511263905942">ل&صق</translation> <translation id="903480517321259405">يُرجى كتابة رقم التعريف الشخصي مرّة أخرى</translation> +<translation id="9037054491984310631">تم الاتصال بالجهاز <ph name="DEVICE" /> الذي يتضمّن بلوتوث.</translation> <translation id="9037640663275993951">الجهاز غير مسموح به.</translation> <translation id="9037818663270399707">اتصالك بهذا الموقع الإلكتروني ليس خاصًا لجميع حركة بيانات الشبكة.</translation> <translation id="9037965129289936994">عرض الصفحة الأصلية</translation> @@ -7583,6 +7593,7 @@ <translation id="9112786533191410418">قد يكون الملف <ph name="FILE_NAME" /> خطيرًا. هل تريد إرسال الملف إلى Google لفحصه؟</translation> <translation id="9112987648460918699">بحث...</translation> <translation id="9113240369465613386">الصفحات الفردية فقط</translation> +<translation id="9113469270512809735">إخفاء/عرض العناصر المُغلَقة مؤخرًا</translation> <translation id="9114663181201435112">تسجيل الدخول بسهولة</translation> <translation id="9115675100829699941">إ&شارات مرجعية</translation> <translation id="9116465289595958864">آخر تعديل</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb index f75e5b4..162b59ab 100644 --- a/chrome/app/resources/generated_resources_bg.xtb +++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -161,6 +161,7 @@ <translation id="1165039591588034296">Грешка</translation> <translation id="1166212789817575481">Затваряне на разделите отдясно</translation> <translation id="1166583374608765787">Преглед на актуализацията на името</translation> +<translation id="1166596238782048887"><ph name="TAB_TITLE" /> принадлежи на работния кът <ph name="DESK_TITLE" /></translation> <translation id="1168020859489941584">Ще се отвори след <ph name="TIME_REMAINING" />...</translation> <translation id="1170288591054440704">Извеждане на запитване, когато сайт иска да използва шрифтовете, инсталирани на устройството ви</translation> <translation id="1171135284592304528">Открояване на елемента, върху който е фокусирана клавиатурата, когато той се промени</translation> @@ -617,6 +618,7 @@ <translation id="1640235262200048077"><ph name="IME_NAME" /> още не работи в приложения за Linux</translation> <translation id="1640283014264083726">PKCS 1 MD4 с RSA шифроване</translation> <translation id="1641113438599504367">Безопасно сърфиране</translation> +<translation id="1642492862748815878">Установена е връзка с(ъс) <ph name="DEVICE" /> и още <ph name="NUMBER_OF_DEVICES" /> устройства с Bluetooth</translation> <translation id="1642494467033190216">Преди активирането на останалите функции за отстраняване на грешки трябва да се премахне защитата на rootfs и да се рестартира.</translation> <translation id="1643072738649235303">Подпис по X9.62 ECDSA с SHA-1</translation> <translation id="1643921258693943800">За да използвате „Споделяне наблизо“, включете Bluetooth и Wi-Fi</translation> @@ -1831,6 +1833,7 @@ <translation id="2885378588091291677">Диспечер на задачите</translation> <translation id="2885729872133513017">Възникна проблем при декодирането на отговора от сървъра.</translation> <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation> +<translation id="288734198558082692"><ph name="DEVICE" /> и още <ph name="NUMBER_OF_DEVICES" /></translation> <translation id="2889064240420137087">Отваряне на връзката със...</translation> <translation id="2891922230654533301">Искате ли устройството ви да се използва за влизане в профила ви в(ъв) <ph name="APP_NAME" />?</translation> <translation id="2893168226686371498">Браузър по подразбиране</translation> @@ -2766,6 +2769,7 @@ <translation id="3884152383786131369">За показване на уеб съдържанието, което се предлага на няколко езика, ще се използва първият поддържан от този списък. Тези предпочитания се синхронизират с настройките на браузъра. <ph name="BEGIN_LINK_LEARN_MORE" />Научете повече<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3885112598747515383">Актуализациите се управляват от администратора ви</translation> <translation id="3886446263141354045">Заявката ви за достъп до този сайт бе изпратена до <ph name="NAME" /></translation> +<translation id="3887022758415973389">Показване на списъка с устройства</translation> <translation id="3888053818972567950">Връзка с(ъс) <ph name="WEB_DRIVE" /></translation> <translation id="3888550877729210209">Водене на бележки с/ъс <ph name="LOCK_SCREEN_APP_NAME" /></translation> <translation id="3888586133700543064">Тази информация ни помага да разберем по-добре проблема, който срещате с Асистент. Тя се съхранява до 90 дни и достъпът до нея е ограничен до съответните инженерни екипи и екипи по отзивите.</translation> @@ -3477,6 +3481,7 @@ <translation id="4662373422909645029">Не може да съдържа цифри</translation> <translation id="4662788913887017617">Споделете тази отметка със своя iPhone</translation> <translation id="4663373278480897665">Достъпът до камерата е разрешен</translation> +<translation id="4664289193573249666">Управление на опциите за сигурен DNS в настройките на Chrome OS</translation> <translation id="4664482161435122549">Грешка при експортиране на PKCS #12</translation> <translation id="4665014895760275686">Производител</translation> <translation id="4665446389743427678">Всички данни, съхранявани от <ph name="SITE" />, ще бъдат изтрити.</translation> @@ -6010,6 +6015,7 @@ <translation id="7478623944308207463">Приложенията и настройките ви ще се синхронизират с всички устройства с Chrome OS, в които сте влезли в профила си в Google. За да намерите опциите за синхронизиране на браузъра, отворете <ph name="LINK_BEGIN" />настройките на Chrome<ph name="LINK_END" />.</translation> <translation id="7478658909253570368">Да не се разрешава на сайтовете да се свързват със серийни портове</translation> <translation id="7479221278376295180">Общ преглед на използваното място в хранилището</translation> +<translation id="747981547666531654">Установена е връзка с устройства с Bluetooth на име <ph name="FIRST_DEVICE" /> и <ph name="SECOND_DEVICE" /></translation> <translation id="7481312909269577407">Напред</translation> <translation id="7481358317100446445">Готова</translation> <translation id="748138892655239008">Основни ограничения на сертификата</translation> @@ -6062,6 +6068,7 @@ <translation id="7531771599742723865">Устройството се използва</translation> <translation id="7531779363494549572">Отворете Настройки > „Приложения и известия“ > „Известия“.</translation> <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> не реагира. Изберете „Принудително затваряне“, за да затворите приложението.</translation> +<translation id="7535730537657706072">За да изчистите историята на сърфиране в режим „инкогнито“ на устройството си, затворете всички раздели</translation> <translation id="7535791657097741517">Включване на светлата тема</translation> <translation id="7537451260744431038">Сайтовете не могат да използват „бисквитки“ с цел по-добро сърфиране, например за да оставате в профила си или за да запомнят артикулите в пазарската ви кошница</translation> <translation id="753769905878158714">В адресната лента въведете ключовата дума за уебсайта, който искате да потърсите. След това използвайте клавишна комбинация, за да продължите.</translation> @@ -6679,6 +6686,7 @@ <translation id="8138217203226449454">Може би искахте да промените търсещата машина?</translation> <translation id="8138997515734480534">Състояние на <ph name="VM_NAME" /></translation> <translation id="8139447493436036221">Файлове в Google Диск</translation> +<translation id="8140070492745508800"><ph name="FIRST_DEVICE" />, <ph name="SECOND_DEVICE" /></translation> <translation id="8141584439523427891">Страницата се отваря в алтернативен браузър</translation> <translation id="8141725884565838206">Управление на паролите ви</translation> <translation id="814204052173971714">{COUNT,plural, =1{видеоклип}other{# видеоклипа}}</translation> @@ -7394,6 +7402,7 @@ <translation id="8909782404367982052">Преместете с плъзгане, за да търсите изображения с Google Обектив</translation> <translation id="8909833622202089127">Сайтът следи местоположението ви</translation> <translation id="8910222113987937043">Промените във вашите отметки, история, пароли и други настройки повече няма да се синхронизират с профила ви в Google. Съществуващите ви данни обаче ще продължат да се съхраняват в него. Можете да ги управлявате от <ph name="BEGIN_LINK" />Google Табло за управление<ph name="END_LINK" />.</translation> +<translation id="8910987510378294980">Скриване на списъка с устройства</translation> <translation id="8912362522468806198">Профил в Google</translation> <translation id="8912793549644936705">Разтегляне</translation> <translation id="8912810933860534797">Активиране на автоматичното сканиране</translation> @@ -7511,6 +7520,7 @@ <translation id="9033765790910064284">Напред въпреки това</translation> <translation id="9033857511263905942">&Поставяне</translation> <translation id="903480517321259405">Въведете ПИН кода отново</translation> +<translation id="9037054491984310631">Установена е връзка с устройство с Bluetooth на име <ph name="DEVICE" /></translation> <translation id="9037640663275993951">Устройството не е разрешено</translation> <translation id="9037818663270399707">Връзката ви не е частна за целия мрежов трафик</translation> <translation id="9037965129289936994">Показване на оригинала</translation> @@ -7591,6 +7601,7 @@ <translation id="9112786533191410418">Файлът „<ph name="FILE_NAME" />“ може да е опасен. Да се изпрати ли до Google за сканиране?</translation> <translation id="9112987648460918699">Търсене...</translation> <translation id="9113240369465613386">Само нечетните страници</translation> +<translation id="9113469270512809735">Превключване на наскоро затворените елементи</translation> <translation id="9114663181201435112">Лесно влизане в профила ви</translation> <translation id="9115675100829699941">&Отметки</translation> <translation id="9116465289595958864">Последна промяна</translation>
diff --git a/chrome/app/resources/generated_resources_bs.xtb b/chrome/app/resources/generated_resources_bs.xtb index 3ce3ade39..67ab805 100644 --- a/chrome/app/resources/generated_resources_bs.xtb +++ b/chrome/app/resources/generated_resources_bs.xtb
@@ -161,6 +161,7 @@ <translation id="1165039591588034296">Greška</translation> <translation id="1166212789817575481">Zatvorite kartice udesno</translation> <translation id="1166583374608765787">Pregledajte ažuriranje naziva</translation> +<translation id="1166596238782048887"><ph name="TAB_TITLE" /> pripada radnoj površini <ph name="DESK_TITLE" /></translation> <translation id="1168020859489941584">Otvara se za <ph name="TIME_REMAINING" />...</translation> <translation id="1170288591054440704">Traži odobrenje kada web lokacija želi koristiti fontove instalirane na uređaju</translation> <translation id="1171135284592304528">Istakni objekat fokusom tastature kada se promijeni</translation> @@ -622,6 +623,7 @@ <translation id="1640235262200048077"><ph name="IME_NAME" /> još uvijek ne radi u aplikacijama za Linux</translation> <translation id="1640283014264083726">PKCS #1 MD4 With RSA šifriranje</translation> <translation id="1641113438599504367">Sigurno pregledanje</translation> +<translation id="1642492862748815878">Povezano je na uređaj <ph name="DEVICE" /> i još <ph name="NUMBER_OF_DEVICES" /> Bluetooth uređaja</translation> <translation id="1642494467033190216">Prije nego omogućite ostale funkcije otklanjanja grešaka trebate ukloniti rootfs zaštitu i ponovo pokrenuti uređaj.</translation> <translation id="1643072738649235303">X9.62 ECDSA potpis uz SHA-1</translation> <translation id="1643921258693943800">Da koristite Dijeljenje u blizini, uključite Bluetooth i WiFi</translation> @@ -1833,6 +1835,7 @@ <translation id="2885378588091291677">Upravitelj zadataka</translation> <translation id="2885729872133513017">Došlo je do problema prilikom dekodiranja odgovora servera.</translation> <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation> +<translation id="288734198558082692"><ph name="DEVICE" /> i još <ph name="NUMBER_OF_DEVICES" /></translation> <translation id="2889064240420137087">Otvori link koristeći…</translation> <translation id="2891922230654533301">Želite li se svojim uređajem prijaviti u aplikaciju <ph name="APP_NAME" />?</translation> <translation id="2893168226686371498">Zadani preglednik</translation> @@ -2767,6 +2770,7 @@ <translation id="3884152383786131369">Sadržaj weba koji je dostupan na više jezika će koristiti prvi podržani jezik s liste. Ove postavke se sinhroniziraju s postavkama preglednika. <ph name="BEGIN_LINK_LEARN_MORE" />Saznajte više<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3885112598747515383">Ažuriranjima upravlja vaš administrator</translation> <translation id="3886446263141354045">Vaš zahtjev za pristup ovoj web lokaciji je poslan korisniku <ph name="NAME" /></translation> +<translation id="3887022758415973389">Prikaži listu uređaja</translation> <translation id="3888053818972567950">Veza s uslugom <ph name="WEB_DRIVE" /></translation> <translation id="3888550877729210209">Kreiranje bilježaka pomoću aplikacije <ph name="LOCK_SCREEN_APP_NAME" /></translation> <translation id="3888586133700543064">Ove informacije nam pomažu da bolje razumijemo problem s Asistentom. Pohranjuju se do 90 dana i pristup je ograničen na određene timove za inženjering i povratne informacije.</translation> @@ -3478,6 +3482,7 @@ <translation id="4662373422909645029">Nadimak ne može imati brojeve</translation> <translation id="4662788913887017617">Dijelite ovu oznaku putem svog iPhone uređaja</translation> <translation id="4663373278480897665">Kamera je dozvoljena</translation> +<translation id="4664289193573249666">Upravljajte sigurnim DNS-om u postavkama Chrome OS-a</translation> <translation id="4664482161435122549">Greška o izvozu PKCS #12</translation> <translation id="4665014895760275686">Proizvođač</translation> <translation id="4665446389743427678">Svi podaci koje pohrani web lokacija <ph name="SITE" /> će biti izbrisani.</translation> @@ -6010,6 +6015,7 @@ <translation id="7478623944308207463">Vaše aplikacije i postavke će se sinhronizirati na svim Chrome OS uređajima na kojima ste prijavljeni putem Google računa. Za opcije sinhronizacije preglednika idite na <ph name="LINK_BEGIN" />postavke Chromea<ph name="LINK_END" />.</translation> <translation id="7478658909253570368">Nemoj dozvoliti web lokacijama povezivanje sa serijskim priključcima</translation> <translation id="7479221278376295180">Pregled korištenja pohrane</translation> +<translation id="747981547666531654">Povezano s Bluetooth uređajima pod nazivom <ph name="FIRST_DEVICE" /> i <ph name="SECOND_DEVICE" /></translation> <translation id="7481312909269577407">Proslijedi</translation> <translation id="7481358317100446445">Spremno</translation> <translation id="748138892655239008">Osnovna ograničenja potvrde</translation> @@ -6062,6 +6068,7 @@ <translation id="7531771599742723865">Uređaj se koristi</translation> <translation id="7531779363494549572">Otvorite Postavke > Aplikacije i obavijesti > Obavijesti.</translation> <translation id="7532009420053991888">Aplikacija <ph name="LINUX_APP_NAME" /> ne reagira. Odaberite "Prisilno zatvori" da zatvorite aplikaciju.</translation> +<translation id="7535730537657706072">Da s uređaja obrišete historiju pregledanja u anonimnom načinu rada, zatvorite sve anonimne kartice</translation> <translation id="7535791657097741517">Uključi svijetlu temu</translation> <translation id="7537451260744431038">Web lokacije ne mogu koristiti kolačiće da poboljšaju vaše iskustvo pregledanja, naprimjer, da ostanete prijavljeni ili da stavke u kolicima za kupovinu ostanu sačuvane</translation> <translation id="753769905878158714">Na traci za adresu unesite ključnu riječ za web lokaciju koju želite pretraživati. Zatim, upotrijebite prečicu na tastaturi da nastavite.</translation> @@ -6679,6 +6686,7 @@ <translation id="8138217203226449454">Jeste li htjeli promijeniti pružaoca usluga pretraživanja?</translation> <translation id="8138997515734480534">Status: <ph name="VM_NAME" /></translation> <translation id="8139447493436036221">Fajlovi Google Diska</translation> +<translation id="8140070492745508800"><ph name="FIRST_DEVICE" />, <ph name="SECOND_DEVICE" /></translation> <translation id="8141584439523427891">Otvaranje u alternativnom pregledniku</translation> <translation id="8141725884565838206">Upravljanje lozinkama</translation> <translation id="814204052173971714">{COUNT,plural, =1{videozapis}one{# videozapis}few{# videozapisa}other{# videozapisa}}</translation> @@ -7396,6 +7404,7 @@ <translation id="8909782404367982052">Prevucite da pretražujete slike koristeći Google Objektiv</translation> <translation id="8909833622202089127">Web lokacija prati vašu lokaciju</translation> <translation id="8910222113987937043">Promjene vaših oznaka, historije, lozinki i drugih postavki neće se više sinhronizirati s vašim Google računom. Međutim, vaši postojeći podaci će ostati pohranjeni na vašem Google računu i njima možete upravljati na <ph name="BEGIN_LINK" />Google kontrolnoj tabli<ph name="END_LINK" />.</translation> +<translation id="8910987510378294980">Skrivanje liste uređaja</translation> <translation id="8912362522468806198">Google račun</translation> <translation id="8912793549644936705">Razvučeno</translation> <translation id="8912810933860534797">Omogući automatsko skeniranje</translation> @@ -7513,6 +7522,7 @@ <translation id="9033765790910064284">Ipak nastavi</translation> <translation id="9033857511263905942">Zalije&pi</translation> <translation id="903480517321259405">Ponovo napišite PIN</translation> +<translation id="9037054491984310631">Povezano s Bluetooth uređajem pod nazivom <ph name="DEVICE" /></translation> <translation id="9037640663275993951">Uređaj nije dozvoljen</translation> <translation id="9037818663270399707">Vaša veza nije privatna za sav mrežni saobraćaj</translation> <translation id="9037965129289936994">Prikaži original</translation> @@ -7593,6 +7603,7 @@ <translation id="9112786533191410418">Fajl <ph name="FILE_NAME" /> može biti opasan. Poslati Googleu radi skeniranja?</translation> <translation id="9112987648460918699">Pronađi...</translation> <translation id="9113240369465613386">Samo neparne stranice</translation> +<translation id="9113469270512809735">Uključi/isključi nedavno zatvorene stavke</translation> <translation id="9114663181201435112">Jednostavna prijava</translation> <translation id="9115675100829699941">&Oznake</translation> <translation id="9116465289595958864">Zadnja izmjena</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb index 31318c3..05eb4164 100644 --- a/chrome/app/resources/generated_resources_ca.xtb +++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -159,6 +159,7 @@ <translation id="1165039591588034296">Error</translation> <translation id="1166212789817575481">Tanca les pestanyes de la dreta</translation> <translation id="1166583374608765787">Revisa l'actualització del nom</translation> +<translation id="1166596238782048887"><ph name="TAB_TITLE" /> pertany a l'escriptori <ph name="DESK_TITLE" /></translation> <translation id="1168020859489941584">Obrint a <ph name="TIME_REMAINING" />...</translation> <translation id="1170288591054440704">Pregunta'm quan un lloc web vulgui utilitzar tipus de lletra instal·lats en aquest dispositiu</translation> <translation id="1171135284592304528">Ressalta l'objecte amb el focus del teclat quan canviï</translation> @@ -617,6 +618,7 @@ <translation id="1640235262200048077"><ph name="IME_NAME" /> encara no funciona en aplicacions per a Linux</translation> <translation id="1640283014264083726">PKCS #1 MD4 amb encriptació RSA</translation> <translation id="1641113438599504367">Navegació segura</translation> +<translation id="1642492862748815878">Connectat a <ph name="DEVICE" /> i <ph name="NUMBER_OF_DEVICES" /> dispositius Bluetooth més.</translation> <translation id="1642494467033190216">Abans d'activar altres funcions de depuració, heu d'eliminar la protecció del sistema de fitxers rootfs i reiniciar el sistema.</translation> <translation id="1643072738649235303">Signatura d'ECDSA X9.62 amb SHA-1</translation> <translation id="1643921258693943800">Per utilitzar Compartició Nearby, activa el Bluetooth i la Wi‑Fi</translation> @@ -1819,6 +1821,7 @@ <translation id="2885378588091291677">Gestor de tasques</translation> <translation id="2885729872133513017">S'ha produït un problema en descodificar la resposta del servidor.</translation> <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation> +<translation id="288734198558082692"><ph name="DEVICE" /> i <ph name="NUMBER_OF_DEVICES" /> més</translation> <translation id="2889064240420137087">Obre l'enllaç amb...</translation> <translation id="2891922230654533301">Vols utilitzar el teu dispositiu per iniciar la sessió a <ph name="APP_NAME" />?</translation> <translation id="2893168226686371498">Navegador predeterminat</translation> @@ -2753,6 +2756,7 @@ <translation id="3884152383786131369">El contingut web disponible en diversos idiomes utilitzarà el primer idioma admès d'aquesta llista. Aquestes preferències se sincronitzen amb les opcions de configuració del navegador. <ph name="BEGIN_LINK_LEARN_MORE" />Més informació<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3885112598747515383">El teu administrador gestiona les actualitzacions</translation> <translation id="3886446263141354045">La teva sol·licitud per accedir a aquest lloc s'ha enviat a <ph name="NAME" /></translation> +<translation id="3887022758415973389">Mostra la llista de dispositius</translation> <translation id="3888053818972567950">Connexió a <ph name="WEB_DRIVE" /></translation> <translation id="3888550877729210209">Escriu notes amb <ph name="LOCK_SCREEN_APP_NAME" /></translation> <translation id="3888586133700543064">Aquesta informació ens ajuda a entendre millor el problema que tens amb l'Assistent. S'emmagatzema durant 90 dies com a màxim i només hi poden accedir els equips corresponents d'enginyeria i suggeriments.</translation> @@ -3462,6 +3466,7 @@ <translation id="4662373422909645029">L'àlies no pot incloure nombres</translation> <translation id="4662788913887017617">Comparteix aquesta adreça d'interès amb el teu iPhone</translation> <translation id="4663373278480897665">La càmera es pot utilitzar</translation> +<translation id="4664289193573249666">Gestiona un DNS segur a la configuració de Chrome OS</translation> <translation id="4664482161435122549">Error d'exportació PKCS #12</translation> <translation id="4665014895760275686">Fabricant</translation> <translation id="4665446389743427678">Se suprimiran totes les dades emmagatzemades per <ph name="SITE" />.</translation> @@ -5996,6 +6001,7 @@ <translation id="7478623944308207463">Les teves aplicacions i opcions de configuració se sincronitzaran en tots els dispositius amb Chrome OS en què tinguis la sessió iniciada amb el teu Compte de Google. Per accedir a les opcions de sincronització del navegador, ves a la <ph name="LINK_BEGIN" />configuració de Chrome<ph name="LINK_END" />.</translation> <translation id="7478658909253570368">No permetis que els llocs web es connectin a ports en sèrie</translation> <translation id="7479221278376295180">Informació general sobre l'ús de l'emmagatzematge</translation> +<translation id="747981547666531654">Connectat a dispositius Bluetooth anomenats <ph name="FIRST_DEVICE" /> i <ph name="SECOND_DEVICE" /></translation> <translation id="7481312909269577407">Endavant</translation> <translation id="7481358317100446445">A punt</translation> <translation id="748138892655239008">Restriccions bàsiques de certificats</translation> @@ -6048,6 +6054,7 @@ <translation id="7531771599742723865">Dispositiu en ús</translation> <translation id="7531779363494549572">Ves a Configuració > Aplicacions i notificacions > Notificacions.</translation> <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> no respon. Selecciona "Força el tancament" per tancar l'aplicació.</translation> +<translation id="7535730537657706072">Per esborrar l'historial de navegació d'incògnit del dispositiu, tanca totes les pestanyes d'incògnit</translation> <translation id="7535791657097741517">Activa el tema clar</translation> <translation id="7537451260744431038">Els llocs web no poden fer servir galetes per millorar la teva experiència de navegació, per exemple, per mantenir la teva sessió iniciada o per recordar els elements que tens al carretó electrònic</translation> <translation id="753769905878158714">A la barra d'adreces, introdueix la paraula clau del lloc web que vulguis cercar. Després, utilitza una tecla de drecera per continuar.</translation> @@ -6665,6 +6672,7 @@ <translation id="8138217203226449454">Volies canviar el proveïdor de cerca?</translation> <translation id="8138997515734480534">Estat de la màquina virtual <ph name="VM_NAME" /></translation> <translation id="8139447493436036221">Fitxers de Google Drive</translation> +<translation id="8140070492745508800"><ph name="FIRST_DEVICE" />, <ph name="SECOND_DEVICE" /></translation> <translation id="8141584439523427891">S'està obrint en un navegador alternatiu</translation> <translation id="8141725884565838206">Gestiona les contrasenyes</translation> <translation id="814204052173971714">{COUNT,plural, =1{1 vídeo}other{# vídeos}}</translation> @@ -7381,6 +7389,7 @@ <translation id="8909782404367982052">Arrossega per cercar imatges amb Google Lens</translation> <translation id="8909833622202089127">El lloc web està fent un seguiment de la teva ubicació</translation> <translation id="8910222113987937043">Els canvis que es facin a les adreces d'interès, l'historial, les contrasenyes i altres opcions de configuració es deixaran de sincronitzar amb el Compte de Google. No obstant això, les dades actuals hi continuaran emmagatzemades i es podran gestionar al <ph name="BEGIN_LINK" />Tauler de control de Google<ph name="END_LINK" />.</translation> +<translation id="8910987510378294980">Amaga la llista de dispositius</translation> <translation id="8912362522468806198">Compte de Google</translation> <translation id="8912793549644936705">Amplia</translation> <translation id="8912810933860534797">Activa la cerca automàtica</translation> @@ -7498,6 +7507,7 @@ <translation id="9033765790910064284">Continua igualment</translation> <translation id="9033857511263905942">&Enganxa</translation> <translation id="903480517321259405">Torna a escriure el PIN</translation> +<translation id="9037054491984310631">Connectat a un dispositiu Bluetooth anomenat <ph name="DEVICE" /></translation> <translation id="9037640663275993951">El dispositiu no està permès</translation> <translation id="9037818663270399707">La teva connexió no és privada per a tot el trànsit de xarxa</translation> <translation id="9037965129289936994">Mostra l'original</translation> @@ -7578,6 +7588,7 @@ <translation id="9112786533191410418">El fitxer <ph name="FILE_NAME" /> pot ser perillós. Vols enviar-lo a Google perquè l'escanegi?</translation> <translation id="9112987648460918699">Cerca...</translation> <translation id="9113240369465613386">Només pàgines senars</translation> +<translation id="9113469270512809735">Commuta els elements tancats recentment</translation> <translation id="9114663181201435112">Inicia la sessió fàcilment</translation> <translation id="9115675100829699941">&Adreces d'interès</translation> <translation id="9116465289595958864">Darrera modificació</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb index 74ed554..8fdcce7 100644 --- a/chrome/app/resources/generated_resources_da.xtb +++ b/chrome/app/resources/generated_resources_da.xtb
@@ -161,6 +161,7 @@ <translation id="1165039591588034296">Fejl</translation> <translation id="1166212789817575481">Luk fanerne til højre</translation> <translation id="1166583374608765787">Gennemgå navneopdateringen</translation> +<translation id="1166596238782048887"><ph name="TAB_TITLE" /> tilhører skrivebordet <ph name="DESK_TITLE" /></translation> <translation id="1168020859489941584">Åbner om <ph name="TIME_REMAINING" />...</translation> <translation id="1170288591054440704">Spørg, når et website vil anvende skrifttyper, der er installeret på din enhed</translation> <translation id="1171135284592304528">Fremhæv elementet med tastaturfokus, når det ændres.</translation> @@ -621,6 +622,7 @@ <translation id="1640235262200048077"><ph name="IME_NAME" /> fungerer endnu ikke i Linux-apps</translation> <translation id="1640283014264083726">PKCS #1 MD4 med RSA-kryptering</translation> <translation id="1641113438599504367">Beskyttet browsing</translation> +<translation id="1642492862748815878">Der er oprettet forbindelse til <ph name="DEVICE" /> og <ph name="NUMBER_OF_DEVICES" /> andre Bluetooth-enheder</translation> <translation id="1642494467033190216">Fjernelse af rootfs-beskyttelse og efterfølgende genstart er påkrævet, før du aktiverer andre fejlretningsfunktioner.</translation> <translation id="1643072738649235303">X9.62 ECDSA-signatur med SHA-1</translation> <translation id="1643921258693943800">Aktivér Bluetooth eller Wi-Fi for at bruge Deling tæt på</translation> @@ -1836,6 +1838,7 @@ <translation id="2885378588091291677">Jobliste</translation> <translation id="2885729872133513017">Der opstod et problem under afkodningen af serversvaret.</translation> <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation> +<translation id="288734198558082692"><ph name="DEVICE" /> og <ph name="NUMBER_OF_DEVICES" /> andre</translation> <translation id="2889064240420137087">Åbn link med...</translation> <translation id="2891922230654533301">Vil du logge ind på <ph name="APP_NAME" /> med din enhed?</translation> <translation id="2893168226686371498">Standardbrowser</translation> @@ -2770,6 +2773,7 @@ <translation id="3884152383786131369">Webindhold, som er tilgængeligt på flere sprog, vises på det første understøttede sprog på denne liste. Disse præferencer synkroniseres med dine browserindstillinger. <ph name="BEGIN_LINK_LEARN_MORE" />Få flere oplysninger<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3885112598747515383">Opdateringer administreres af din administrator.</translation> <translation id="3886446263141354045">Din anmodning om adgang til dette website er blevet sendt til <ph name="NAME" />.</translation> +<translation id="3887022758415973389">Vis liste over enheder</translation> <translation id="3888053818972567950"><ph name="WEB_DRIVE" />-forbindelse</translation> <translation id="3888550877729210209">Notetagning med <ph name="LOCK_SCREEN_APP_NAME" /></translation> <translation id="3888586133700543064">Disse oplysninger hjælper os til bedre at forstå dit problem med Assistent. Oplysningerne opbevares i op til 90 dage, og adgangen til oplysningerne er begrænset til de relevante udvikler- og feedbackteams.</translation> @@ -3481,6 +3485,7 @@ <translation id="4662373422909645029">Kaldenavnet må ikke indeholde tal</translation> <translation id="4662788913887017617">Del dette bogmærke med din iPhone</translation> <translation id="4663373278480897665">Der er givet adgang til kameraet</translation> +<translation id="4664289193573249666">Administrer Sikkert DNS i indstillingerne for Chrome OS</translation> <translation id="4664482161435122549">PKCS #12-eksportfejl</translation> <translation id="4665014895760275686">Producent</translation> <translation id="4665446389743427678">Alle data, der gemmes af <ph name="SITE" />, slettes.</translation> @@ -6013,6 +6018,7 @@ <translation id="7478623944308207463">Dine apps og indstillinger synkroniseres på tværs af alle de Chrome OS-enheder, hvor du er logget ind med din Google-konto. Du kan se muligheder for synkronisering af browseren i <ph name="LINK_BEGIN" />indstillingerne for Chrome<ph name="LINK_END" />.</translation> <translation id="7478658909253570368">Tillad ikke, at websites opretter forbindelse til serieporte</translation> <translation id="7479221278376295180">Oversigt over brug af lagerplads</translation> +<translation id="747981547666531654">Der er oprettet forbindelse til Bluetooth-enhederne <ph name="FIRST_DEVICE" /> og <ph name="SECOND_DEVICE" /></translation> <translation id="7481312909269577407">Frem</translation> <translation id="7481358317100446445">Klar</translation> <translation id="748138892655239008">Grundlæggende begrænsninger for certifikat</translation> @@ -6065,6 +6071,7 @@ <translation id="7531771599742723865">Enheden er i brug</translation> <translation id="7531779363494549572">Gå til Indstillinger > Apps og notifikationer > Notifikationer.</translation> <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> svarer ikke. Vælg "Tving til at lukke" for at lukke appen.</translation> +<translation id="7535730537657706072">Luk alle inkognitofaner for at rydde browserhistorikken for inkognitovinduet fra din enhed</translation> <translation id="7535791657097741517">Aktivér Lyst tema</translation> <translation id="7537451260744431038">Websites kan ikke anvende cookies til at forbedre din browseroplevelse ved f.eks. at sørge for, at du forbliver logget ind, eller ved at huske varerne i din kurv</translation> <translation id="753769905878158714">På adresselinjen skal du angive søgeordet for det website, du vil søge efter. Brug derefter en tastaturgenvej for at fortsætte.</translation> @@ -6681,6 +6688,7 @@ <translation id="8138217203226449454">Ville du ændre din søgemaskine?</translation> <translation id="8138997515734480534">Status for <ph name="VM_NAME" /></translation> <translation id="8139447493436036221">Google Drev-filer</translation> +<translation id="8140070492745508800"><ph name="FIRST_DEVICE" />, <ph name="SECOND_DEVICE" /></translation> <translation id="8141584439523427891">Åbner i en alternativ browser nu</translation> <translation id="8141725884565838206">Administrer dine adgangskoder</translation> <translation id="814204052173971714">{COUNT,plural, =1{en video}one{# video}other{# videoer}}</translation> @@ -7398,6 +7406,7 @@ <translation id="8909782404367982052">Træk for at søge på billeder med Google Lens</translation> <translation id="8909833622202089127">Websitet sporer din placering</translation> <translation id="8910222113987937043">Ændringer af bogmærker, historik, adgangskoder og andre indstillinger synkroniseres ikke længere med din Google-konto. Dine eksisterende data er dog stadig gemt på din Google-konto og kan administreres i <ph name="BEGIN_LINK" />Google Kontrolpanel<ph name="END_LINK" />.</translation> +<translation id="8910987510378294980">Skjul liste over enheder</translation> <translation id="8912362522468806198">Google-konto</translation> <translation id="8912793549644936705">Stræk</translation> <translation id="8912810933860534797">Aktivér automatisk scanning</translation> @@ -7515,6 +7524,7 @@ <translation id="9033765790910064284">Fortsæt alligevel</translation> <translation id="9033857511263905942">&Indsæt</translation> <translation id="903480517321259405">Angiv pinkoden igen</translation> +<translation id="9037054491984310631">Der er oprettet forbindelse til Bluetooth-enheden <ph name="DEVICE" /></translation> <translation id="9037640663275993951">Enheden er ikke tilladt</translation> <translation id="9037818663270399707">Din forbindelse er ikke privat for al netværkstrafik</translation> <translation id="9037965129289936994">Vis oprindelig</translation> @@ -7595,6 +7605,7 @@ <translation id="9112786533191410418"><ph name="FILE_NAME" /> kan være skadelig. Vil du sende den til scanning hos Google?</translation> <translation id="9112987648460918699">Find...</translation> <translation id="9113240369465613386">Kun ulige sider</translation> +<translation id="9113469270512809735">Slå nyligt lukkede elementer til/fra</translation> <translation id="9114663181201435112">Log nemt ind</translation> <translation id="9115675100829699941">&Bogmærker</translation> <translation id="9116465289595958864">Sidst ændret</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb index b70a6521..7d8bcee1 100644 --- a/chrome/app/resources/generated_resources_de.xtb +++ b/chrome/app/resources/generated_resources_de.xtb
@@ -99,6 +99,7 @@ <translation id="1103523840287552314"><ph name="LANGUAGE" /> immer übersetzen</translation> <translation id="1108600514891325577">&Anhalten</translation> <translation id="1110155001042129815">Warten</translation> +<translation id="1111781754511998498">Projector</translation> <translation id="1112420131909513020">Tab im Hintergrund verwendet Bluetooth</translation> <translation id="1113892970288677790">Kunstwerke und Bilder auswählen</translation> <translation id="1114102982691049955"><ph name="PRINTER_MANUFACTURER" /> <ph name="PRINTER_MODEL" /> (USB)</translation> @@ -528,6 +529,7 @@ <translation id="156793199942386351">„<ph name="CURRENTKEY" />“ wurde bereits der Aktion „<ph name="ACTION" />“ zugewiesen. Drücken Sie zum <ph name="RESPONSE" /> eine beliebige Taste.</translation> <translation id="1567993339577891801">JavaScript-Konsole</translation> <translation id="1568323446248056064">Displayeinstellungen öffnen</translation> +<translation id="1570604804919108255">Stummschaltung von Benachrichtigungen aufheben</translation> <translation id="1571738973904005196">Tab <ph name="TAB_ORIGIN" /> ansehen</translation> <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (Gast)</translation> <translation id="1572266655485775982">WLAN-Aktivierung</translation> @@ -585,6 +587,7 @@ <translation id="1621485112342885423">Meine Einkaufswagen</translation> <translation id="1621729191093924223">Funktionen, die ein Mikrofon benötigen, funktionieren dann nicht</translation> <translation id="1621831347985899379"><ph name="DEVICE_TYPE" />-Daten werden gelöscht</translation> +<translation id="1621984899599015181">Freigabeoptionen werden von Ihrer Organisation verwaltet. Einige Elemente sind möglicherweise ausgeblendet.</translation> <translation id="1622054403950683339">WLAN löschen</translation> <translation id="1623132449929929218">Die Bilder sind momentan nicht verfügbar. Verbinden Sie sich noch einmal, um die Sammlungen anzusehen.</translation> <translation id="1623723619460186680">Reduzierung von blauem Licht</translation> @@ -822,6 +825,7 @@ <translation id="1850508293116537636">Im &Uhrzeigersinn drehen</translation> <translation id="1852141627593563189">Schädliche Software finden</translation> <translation id="1852799913675865625">Beim Versuch, die Datei <ph name="ERROR_TEXT" /> zu lesen, ist ein Fehler aufgetreten.</translation> +<translation id="1854049213067042715">Fahren Sie dort fort, wo Sie aufgehört haben. In den Einstellungen können Sie festlegen, dass Apps beim Start immer wiederhergestellt werden, oder die Wiederherstellung deaktivieren.</translation> <translation id="1854180393107901205">Übertragung beenden</translation> <translation id="1855079636134697549">Kamera ist eingeschaltet</translation> <translation id="1856715684130786728">Speicherort hinzufügen...</translation> @@ -950,6 +954,7 @@ <translation id="1989113344093894667">Inhalt kann nicht aufgenommen werden</translation> <translation id="1990046457226896323">Sprachdateien heruntergeladen</translation> <translation id="1990512225220753005">Keine Verknüpfungen auf dieser Seite anzeigen</translation> +<translation id="199191324030140441">„Bitte nicht stören“ deaktivieren</translation> <translation id="1992397118740194946">Nicht eingerichtet</translation> <translation id="1992924914582925289">Vom Gerät entfernen</translation> <translation id="1994173015038366702">Website-URL</translation> @@ -991,6 +996,7 @@ Wenn Sie die Family Link App auf Ihrem Gerät installieren, können Sie die Einstellungen dieses Kontos verwalten. Eine entsprechende Anleitung haben wir Ihnen per E-Mail gesendet.</translation> <translation id="2040460856718599782">Hoppla! Bei der Authentifizierung ist ein Fehler aufgetreten. Bitte überprüfen Sie Ihre Anmeldedaten und versuchen Sie es erneut.</translation> +<translation id="2040894699575719559">Standort blockiert</translation> <translation id="2042279886444479655">Aktive Profile</translation> <translation id="2044014337866019681">Bitte bestätigen Sie <ph name="ACCOUNT" />, um die Sitzung zu entsperren.</translation> <translation id="204497730941176055">Name der Microsoft-Zertifikatsvorlage</translation> @@ -1475,6 +1481,7 @@ <translation id="2527167509808613699">Jede Verbindungsart</translation> <translation id="2530166226437958497">Fehlerbehebung</translation> <translation id="2532589005999780174">Modus mit hohem Kontrast</translation> +<translation id="2533649878691950253">Diese Website darf nicht auf Ihren genauen Standort zugreifen, weil Sie das meist nicht erlauben</translation> <translation id="253434972992662860">&Anhalten</translation> <translation id="253557089021624350">Keepalive-Zahl</translation> <translation id="2535799430745250929">Kein Mobilfunknetz vorhanden</translation> @@ -1662,6 +1669,7 @@ <translation id="2738771556149464852">Nicht nach</translation> <translation id="2739191690716947896">Fehlerbehebung</translation> <translation id="2739240477418971307">Einstellungen für Zugänglichkeit ändern</translation> +<translation id="2739965161385757621">Einstellungen überprüfen</translation> <translation id="274029851662193272">Vertieft</translation> <translation id="2740531572673183784">Ok</translation> <translation id="2741713322780029189">Terminal zur Wiederherstellung öffnen</translation> @@ -1786,6 +1794,7 @@ <translation id="2864601841139725659">Profilbild festlegen</translation> <translation id="2865919525181940183">Screenshot der Programme, die sich momentan auf dem Bildschirm befinden</translation> <translation id="286674810810214575">Stromquellen werden überprüft…</translation> +<translation id="2866876751734765554">Überprüfung der Datenschutzeinstellungen</translation> <translation id="2867768963760577682">In angepinntem Tab öffnen</translation> <translation id="2868746137289129307">Diese Erweiterung ist veraltet und wurde aufgrund der Unternehmensrichtlinie deaktiviert. Die Erweiterung kann automatisch aktiviert werden, wenn eine neuere Version verfügbar ist.</translation> <translation id="2870560284913253234">Website</translation> @@ -2315,6 +2324,7 @@ <translation id="3446274660183028131">Bitte Parallels Desktop starten, um Windows zu installieren.</translation> <translation id="344630545793878684">Ihre Daten auf verschiedenen Websites lesen</translation> <translation id="3446650212859500694">Diese Datei enthält vertrauliche Inhalte</translation> +<translation id="3446827946208017735">Hier können Sie an einem Ort mehr über die wichtigsten Datenschutzeinstellungen erfahren und sie überprüfen</translation> <translation id="3448086340637592206">Google Chrome und Chrome OS – zusätzliche Nutzungsbedingungen</translation> <translation id="3448492834076427715">Konto aktualisieren</translation> <translation id="3449393517661170867">Neues Tab-Fenster</translation> @@ -3740,6 +3750,7 @@ <translation id="4996851818599058005">{NUM_VMS,plural, =0{Keine <ph name="VM_TYPE" />-VMs gefunden}=1{1 <ph name="VM_TYPE" />-VM gefunden: <ph name="VM_NAME_LIST" />}other{{NUM_VMS} <ph name="VM_TYPE" />-VMs gefunden: <ph name="VM_NAME_LIST" />}}</translation> <translation id="4997086284911172121">Keine Internetverbindung.</translation> <translation id="4998430619171209993">An</translation> +<translation id="4999804342505941663">„Bitte nicht stören“ aktivieren</translation> <translation id="5000922062037820727">Blockiert (empfohlen)</translation> <translation id="5005498671520578047">Passwort kopieren</translation> <translation id="5006218871145547804">Android-App-ADB für Crostini</translation> @@ -5064,6 +5075,7 @@ <translation id="6468485451923838994">Schriftarten</translation> <translation id="6468773105221177474"><ph name="FILE_COUNT" /> Dateien</translation> <translation id="6469557521904094793">Mobilfunknetz einschalten</translation> +<translation id="6470823736074966819">Benachrichtigungen stummschalten</translation> <translation id="6472893788822429178">Schaltfläche "Startseite" anzeigen</translation> <translation id="6474498546677193336">Die Aufhebung der Freigabe ist nicht möglich, weil eine Anwendung diesen Ordner verwendet. Die Freigabe des Ordners wird aufgehoben, wenn Linux das nächste Mal heruntergefahren wird.</translation> <translation id="6474884162850599008">Verbindung zu Google Drive-Konto aufheben</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb index 8d538d7a..fb96d5f 100644 --- a/chrome/app/resources/generated_resources_el.xtb +++ b/chrome/app/resources/generated_resources_el.xtb
@@ -161,6 +161,7 @@ <translation id="1165039591588034296">Σφάλμα</translation> <translation id="1166212789817575481">Κλείσιμο Καρτελών Δεξιά</translation> <translation id="1166583374608765787">Έλεγχος ενημέρωσης ονόματος</translation> +<translation id="1166596238782048887">Η καρτέλα <ph name="TAB_TITLE" /> ανήκει στο γραφείο <ph name="DESK_TITLE" /></translation> <translation id="1168020859489941584">Άνοιγμα σε <ph name="TIME_REMAINING" />...</translation> <translation id="1170288591054440704">Να γίνεται ερώτηση όταν ένας ιστότοπος θέλει να χρησιμοποιήσει γραμματοσειρές που είναι εγκατεστημένες στη συσκευή σας</translation> <translation id="1171135284592304528">Επισήμανση του αντικειμένου με εστίαση στο πληκτρολόγιο όταν αλλάζει</translation> @@ -620,6 +621,7 @@ <translation id="1640235262200048077">Το <ph name="IME_NAME" /> δεν λειτουργεί ακόμη σε εφαρμογές Linux.</translation> <translation id="1640283014264083726">PKCS #1 MD4 με κρυπτογράφηση RSA</translation> <translation id="1641113438599504367">Ασφαλής περιήγηση</translation> +<translation id="1642492862748815878">Πραγματοποιήθηκε σύνδεση στη συσκευή <ph name="DEVICE" /> και <ph name="NUMBER_OF_DEVICES" /> ακόμη συσκευές Bluetooth</translation> <translation id="1642494467033190216">Πριν από την ενεργοποίηση άλλων λειτουργιών εντοπισμού σφαλμάτων, απαιτείται κατάργηση της προστασίας rootfs και επανεκκίνηση.</translation> <translation id="1643072738649235303">Υπογραφή X9.62 ECDSA με SHA-1</translation> <translation id="1643921258693943800">Για να χρησιμοποιήσετε την Κοινοποίηση κοντά, ενεργοποιήστε το Bluetooth και το Wi-Fi</translation> @@ -1835,6 +1837,7 @@ <translation id="2885378588091291677">Διαχείριση εργασιών</translation> <translation id="2885729872133513017">Παρουσιάστηκε ένα πρόβλημα κατά την αποκωδικοποίηση απάντησης διακομιστή.</translation> <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation> +<translation id="288734198558082692"><ph name="DEVICE" /> και <ph name="NUMBER_OF_DEVICES" /> ακόμα</translation> <translation id="2889064240420137087">Άνοιγμα συνδέσμου με...</translation> <translation id="2891922230654533301">Χρήση της συσκευής σας για σύνδεση στην εφαρμογή <ph name="APP_NAME" />;</translation> <translation id="2893168226686371498">Προεπιλεγμένο πρόγραμμα περιήγησης</translation> @@ -2769,6 +2772,7 @@ <translation id="3884152383786131369">Το περιεχόμενο ιστού που είναι διαθέσιμο σε πολλές γλώσσες θα χρησιμοποιεί την πρώτη υποστηριζόμενη γλώσσα από αυτήν τη λίστα. Αυτές οι προτιμήσεις συγχρονίζονται με τις ρυθμίσεις του προγράμματος περιήγησης. <ph name="BEGIN_LINK_LEARN_MORE" />Μάθετε περισσότερα<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3885112598747515383">Η διαχείριση των ενημερώσεων πραγματοποιείται από τον διαχειριστή σας.</translation> <translation id="3886446263141354045">Το αίτημά σας για να αποκτήσετε πρόσβαση σε αυτόν τον ιστότοπο έχει σταλεί στον/η(ν) <ph name="NAME" /></translation> +<translation id="3887022758415973389">Εμφάνιση λίστας συσκευών</translation> <translation id="3888053818972567950">Σύνδεση <ph name="WEB_DRIVE" /></translation> <translation id="3888550877729210209">Λήψη σημειώσεων με την εφαρμογή <ph name="LOCK_SCREEN_APP_NAME" /></translation> <translation id="3888586133700543064">Αυτές οι πληροφορίες μας βοηθούν να κατανοήσουμε καλύτερα το ζήτημα που αντιμετωπίζετε με τον Βοηθό σας. Αποθηκεύεται για έως και 90 ημέρες και η πρόσβαση περιορίζεται στις κατάλληλες ομάδες μηχανικών και σχολίων.</translation> @@ -3480,6 +3484,7 @@ <translation id="4662373422909645029">Το ψευδών. δεν μπορεί να έχει αριθμούς</translation> <translation id="4662788913887017617">Μοιραστείτε αυτόν τον σελιδοδείκτη με το iPhone</translation> <translation id="4663373278480897665">Επιτρέπεται η κάμερα</translation> +<translation id="4664289193573249666">Διαχείριση ασφαλούς DNS στις ρυθμίσεις του Chrome OS</translation> <translation id="4664482161435122549">Σφάλμα εξαγωγής PKCS #12</translation> <translation id="4665014895760275686">Κατασκευαστής</translation> <translation id="4665446389743427678">Όλα τα δεδομένα που αποθηκεύονται από τον ιστότοπο <ph name="SITE" /> θα διαγραφούν.</translation> @@ -6013,6 +6018,7 @@ <translation id="7478623944308207463">Οι εφαρμογές και οι ρυθμίσεις σας θα συγχρονιστούν σε όλες τις συσκευές Chrome OS, στις οποίες έχετε συνδεθεί με τον Λογαριασμό σας Google. Για επιλογές συγχρονισμού προγράμματος περιήγησης, μεταβείτε στις <ph name="LINK_BEGIN" />Ρυθμίσεις Chrome<ph name="LINK_END" />.</translation> <translation id="7478658909253570368">Να μην επιτρέπεται στους ιστοτόπους να συνδέονται σε σειριακές θύρες</translation> <translation id="7479221278376295180">Επισκόπηση χρήσης αποθηκευτικού χώρου</translation> +<translation id="747981547666531654">Πραγματοποιήθηκε σύνδεση σε συσκευές Bluetooth με ονομασίες <ph name="FIRST_DEVICE" /> και <ph name="SECOND_DEVICE" /></translation> <translation id="7481312909269577407">Προώθηση</translation> <translation id="7481358317100446445">Έτοιμο</translation> <translation id="748138892655239008">Βασικοί περιορισμοί πιστοποιητικού</translation> @@ -6065,6 +6071,7 @@ <translation id="7531771599742723865">Η συσκευή χρησιμοποιείται</translation> <translation id="7531779363494549572">Μεταβείτε στις Ρυθμίσεις > Εφαρμογές και ειδοποιήσεις > Ειδοποιήσεις.</translation> <translation id="7532009420053991888">Η εφαρμογή <ph name="LINUX_APP_NAME" /> δεν αποκρίνεται. Για να κλείσετε την εφαρμογή, επιλέξτε Αναγκαστικό κλείσιμο.</translation> +<translation id="7535730537657706072">Για να διαγράψετε το ιστορικό ανώνυμης περιήγησης από τη συσκευή σας, κλείστε όλες τις καρτέλες ανώνυμης περιήγησης.</translation> <translation id="7535791657097741517">Ενεργοποίηση φωτεινού θέματος</translation> <translation id="7537451260744431038">Οι ιστότοποι δεν μπορούν να χρησιμοποιούν cookie για να βελτιώσουν την εμπειρία περιήγησής σας, για παράδειγμα, για να παραμείνετε συνδεδεμένοι ή να διατηρηθούν τα προϊόντα στο καλάθι αγορών σας.</translation> <translation id="753769905878158714">Στη γραμμή διευθύνσεων, εισαγάγετε τη λέξη-κλειδί για τον ιστότοπο που θέλετε να αναζητήσετε. Στη συνέχεια, χρησιμοποιήστε μια συντόμευση πληκτρολογίου για να συνεχίσετε.</translation> @@ -6682,6 +6689,7 @@ <translation id="8138217203226449454">Σκοπεύατε να αλλάξετε τον πάροχο αναζήτησής σας;</translation> <translation id="8138997515734480534">Κατάσταση <ph name="VM_NAME" /></translation> <translation id="8139447493436036221">Αρχεία Google Drive</translation> +<translation id="8140070492745508800"><ph name="FIRST_DEVICE" />, <ph name="SECOND_DEVICE" /></translation> <translation id="8141584439523427891">Άνοιγμα σε εναλλακτικό πρόγραμμα περιήγησης τώρα</translation> <translation id="8141725884565838206">Διαχείριση των κωδικών πρόσβασής σας</translation> <translation id="814204052173971714">{COUNT,plural, =1{ένα βίντεο}other{# βίντεο}}</translation> @@ -7395,6 +7403,7 @@ <translation id="8909782404367982052">Σύρετε για αναζήτηση εικόνων με το Google Lens</translation> <translation id="8909833622202089127">Ο ιστότοπος παρακολουθεί την τοποθεσία σας</translation> <translation id="8910222113987937043">Οι αλλαγές στους σελιδοδείκτες, το ιστορικό, τους κωδικούς πρόσβασης και άλλες ρυθμίσεις δεν θα συγχρονίζονται πλέον με τον Λογαριασμό σας Google. Ωστόσο, τα υπάρχοντα δεδομένα θα παραμείνουν αποθηκευμένα στον Λογαριασμό σας Google και η διαχείρισή τους μπορεί να γίνεται στον <ph name="BEGIN_LINK" />Πίνακα ελέγχου Google<ph name="END_LINK" />.</translation> +<translation id="8910987510378294980">Απόκρυψη λίστας συσκευών</translation> <translation id="8912362522468806198">Λογαριασμός Google</translation> <translation id="8912793549644936705">Επέκταση</translation> <translation id="8912810933860534797">Ενεργοποίηση αυτόματης σάρωσης</translation> @@ -7512,6 +7521,7 @@ <translation id="9033765790910064284">Συνέχεια</translation> <translation id="9033857511263905942">&Επικόλληση</translation> <translation id="903480517321259405">Πληκτρολογήστε ξανά το PIN</translation> +<translation id="9037054491984310631">Πραγματοποιήθηκε σύνδεση σε συσκευή Bluetooth με ονομασία <ph name="DEVICE" /></translation> <translation id="9037640663275993951">Η συσκευή δεν επιτρέπεται</translation> <translation id="9037818663270399707">Η σύνδεσή σας δεν είναι ιδιωτική για όλη την επισκεψιμότητα δικτύου.</translation> <translation id="9037965129289936994">Εμφάνιση πρωτοτύπου</translation> @@ -7592,6 +7602,7 @@ <translation id="9112786533191410418">Το αρχείο <ph name="FILE_NAME" /> μπορεί να είναι επικίνδυνο. Να σταλεί στην Google για σάρωση;</translation> <translation id="9112987648460918699">Εύρεση...</translation> <translation id="9113240369465613386">Μόνο μονές σελίδες</translation> +<translation id="9113469270512809735">Εναλλαγή στοιχείων που έκλεισαν πρόσφατα</translation> <translation id="9114663181201435112">Εύκολη σύνδεση</translation> <translation id="9115675100829699941">&Σελιδοδείκτες</translation> <translation id="9116465289595958864">Τελευταία τροποποίηση</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb index 20b88c1ce..ece9b6a6 100644 --- a/chrome/app/resources/generated_resources_en-GB.xtb +++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -161,6 +161,7 @@ <translation id="1165039591588034296">Error</translation> <translation id="1166212789817575481">Close tabs to the right</translation> <translation id="1166583374608765787">Review name update</translation> +<translation id="1166596238782048887"><ph name="TAB_TITLE" /> belongs to desk <ph name="DESK_TITLE" /></translation> <translation id="1168020859489941584">Opening in <ph name="TIME_REMAINING" />...</translation> <translation id="1170288591054440704">Ask when a site wants to use fonts installed on your device</translation> <translation id="1171135284592304528">Highlight the object with keyboard focus when it changes</translation> @@ -620,6 +621,7 @@ <translation id="1640235262200048077"><ph name="IME_NAME" /> doesn’t work in Linux apps yet</translation> <translation id="1640283014264083726">PKCS #1 MD4 With RSA Encryption</translation> <translation id="1641113438599504367">Safe Browsing</translation> +<translation id="1642492862748815878">Connected to <ph name="DEVICE" /> and <ph name="NUMBER_OF_DEVICES" /> other Bluetooth devices</translation> <translation id="1642494467033190216">A removal of rootfs protection and restart is required before enabling other debugging features.</translation> <translation id="1643072738649235303">X9.62 ECDSA Signature with SHA-1</translation> <translation id="1643921258693943800">To use Nearby Share, turn on Bluetooth and Wi-Fi</translation> @@ -1835,6 +1837,7 @@ <translation id="2885378588091291677">Task Manager</translation> <translation id="2885729872133513017">A problem occurred when decoding server response.</translation> <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation> +<translation id="288734198558082692"><ph name="DEVICE" /> and <ph name="NUMBER_OF_DEVICES" /> others</translation> <translation id="2889064240420137087">Open link with...</translation> <translation id="2891922230654533301">Use your device to sign in to <ph name="APP_NAME" />?</translation> <translation id="2893168226686371498">Default browser</translation> @@ -2769,6 +2772,7 @@ <translation id="3884152383786131369">Web content available in multiple languages will use the first supported language from this list. These preferences are synced with your browser settings. <ph name="BEGIN_LINK_LEARN_MORE" />Learn more<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3885112598747515383">Updates are managed by your administrator</translation> <translation id="3886446263141354045">Your request to access this site has been sent to <ph name="NAME" /></translation> +<translation id="3887022758415973389">Show device list</translation> <translation id="3888053818972567950"><ph name="WEB_DRIVE" /> connection</translation> <translation id="3888550877729210209">Taking notes with <ph name="LOCK_SCREEN_APP_NAME" /></translation> <translation id="3888586133700543064">This information helps us better understand your Assistant issue. It's stored for up to 90 days and access is restricted to appropriate engineering and feedback teams.</translation> @@ -3480,6 +3484,7 @@ <translation id="4662373422909645029">Nickname can’t include numbers</translation> <translation id="4662788913887017617">Share this bookmark with your iPhone</translation> <translation id="4663373278480897665">Camera allowed</translation> +<translation id="4664289193573249666">Manage secure DNS in Chrome OS settings</translation> <translation id="4664482161435122549">PKCS No.12 Export Error</translation> <translation id="4665014895760275686">Manufacturer</translation> <translation id="4665446389743427678">All data stored by <ph name="SITE" /> will be deleted.</translation> @@ -6012,6 +6017,7 @@ <translation id="7478623944308207463">Your apps and settings will sync across all Chrome OS devices where you are signed in with your Google Account. For browser sync options, go to <ph name="LINK_BEGIN" />Chrome settings<ph name="LINK_END" />.</translation> <translation id="7478658909253570368">Don't allow sites to connect to serial ports</translation> <translation id="7479221278376295180">Storage Usage Overview</translation> +<translation id="747981547666531654">Connected to Bluetooth devices named <ph name="FIRST_DEVICE" /> and <ph name="SECOND_DEVICE" /></translation> <translation id="7481312909269577407">Forward</translation> <translation id="7481358317100446445">Ready</translation> <translation id="748138892655239008">Certificate Basic Constraints</translation> @@ -6064,6 +6070,7 @@ <translation id="7531771599742723865">Device in use</translation> <translation id="7531779363494549572">Go to Settings > Apps & notifications > Notifications.</translation> <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> is not responding. Select 'Force close' to close the app.</translation> +<translation id="7535730537657706072">To clear Incognito browsing history from your device, close all incognito tabs</translation> <translation id="7535791657097741517">Turn Light theme on</translation> <translation id="7537451260744431038">Sites can't use cookies to improve your browsing experience, for example to keep you signed in or to remember items in your shopping basket</translation> <translation id="753769905878158714">In the address bar, enter the keyword for the website that you want to search. Then, use a keyboard shortcut to continue.</translation> @@ -6681,6 +6688,7 @@ <translation id="8138217203226449454">Did you mean to change your search provider?</translation> <translation id="8138997515734480534"><ph name="VM_NAME" /> status</translation> <translation id="8139447493436036221">Google Drive files</translation> +<translation id="8140070492745508800"><ph name="FIRST_DEVICE" />, <ph name="SECOND_DEVICE" /></translation> <translation id="8141584439523427891">Opening in alternative browser now</translation> <translation id="8141725884565838206">Manage your passwords</translation> <translation id="814204052173971714">{COUNT,plural, =1{a video}other{# videos}}</translation> @@ -7396,6 +7404,7 @@ <translation id="8909782404367982052">Drag to search images with Google Lens</translation> <translation id="8909833622202089127">Site is tracking your location</translation> <translation id="8910222113987937043">Changes to your bookmarks, history, passwords and other settings will no longer be synced to your Google Account. However, your existing data will remain stored in your Google Account and can be managed on <ph name="BEGIN_LINK" />Google Dashboard<ph name="END_LINK" />.</translation> +<translation id="8910987510378294980">Hide device list</translation> <translation id="8912362522468806198">Google Account</translation> <translation id="8912793549644936705">Stretch</translation> <translation id="8912810933860534797">Enable auto-scan</translation> @@ -7513,6 +7522,7 @@ <translation id="9033765790910064284">Continue anyway</translation> <translation id="9033857511263905942">&Paste</translation> <translation id="903480517321259405">Type the PIN again</translation> +<translation id="9037054491984310631">Connected to Bluetooth device named <ph name="DEVICE" /></translation> <translation id="9037640663275993951">Device is not allowed</translation> <translation id="9037818663270399707">Your connection is not private for all network traffic</translation> <translation id="9037965129289936994">Show Original</translation> @@ -7593,6 +7603,7 @@ <translation id="9112786533191410418"><ph name="FILE_NAME" /> may be dangerous. Send to Google for scanning?</translation> <translation id="9112987648460918699">Find...</translation> <translation id="9113240369465613386">Odd pages only</translation> +<translation id="9113469270512809735">Toggle recently closed items</translation> <translation id="9114663181201435112">Sign in easily</translation> <translation id="9115675100829699941">&Bookmarks</translation> <translation id="9116465289595958864">Last modified</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb index 4d94fd4e..8ece247 100644 --- a/chrome/app/resources/generated_resources_es.xtb +++ b/chrome/app/resources/generated_resources_es.xtb
@@ -159,6 +159,7 @@ <translation id="1165039591588034296">Error</translation> <translation id="1166212789817575481">Cerrar pestañas a la derecha</translation> <translation id="1166583374608765787">Revisa la actualización del nombre</translation> +<translation id="1166596238782048887"><ph name="TAB_TITLE" /> pertenece al escritorio <ph name="DESK_TITLE" /></translation> <translation id="1168020859489941584">Abriendo en <ph name="TIME_REMAINING" />...</translation> <translation id="1170288591054440704">Preguntar cuando un sitio web quiera usar fuentes instaladas en el dispositivo</translation> <translation id="1171135284592304528">Resaltar el objeto con el foco del teclado cuando cambie</translation> @@ -617,6 +618,7 @@ <translation id="1640235262200048077"><ph name="IME_NAME" /> aún no funciona en las aplicaciones de Linux</translation> <translation id="1640283014264083726">PKCS #1 MD4 con cifrado RSA</translation> <translation id="1641113438599504367">Navegación segura</translation> +<translation id="1642492862748815878">Conectado a <ph name="DEVICE" /> y a otros <ph name="NUMBER_OF_DEVICES" /> dispositivos Bluetooth</translation> <translation id="1642494467033190216">Para poder habilitar otras funciones de depuración, es necesario eliminar la protección de rootfs y reiniciar.</translation> <translation id="1643072738649235303">Firma X9.62 ECDSA con SHA-1</translation> <translation id="1643921258693943800">Para usar Compartir con Nearby, activa el Bluetooth y el Wi‑Fi</translation> @@ -1820,6 +1822,7 @@ <translation id="2885378588091291677">Administrador de tareas</translation> <translation id="2885729872133513017">No se ha podido decodificar la respuesta del servidor.</translation> <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation> +<translation id="288734198558082692"><ph name="DEVICE" /> y <ph name="NUMBER_OF_DEVICES" /> más</translation> <translation id="2889064240420137087">Abrir enlace con...</translation> <translation id="2891922230654533301">¿Usar tu dispositivo para iniciar sesión en <ph name="APP_NAME" />?</translation> <translation id="2893168226686371498">Navegador predeterminado</translation> @@ -2754,6 +2757,7 @@ <translation id="3884152383786131369">El contenido web que esté disponible en varios idiomas usará el primer idioma admitido de esta lista. Estas preferencias se sincronizan con la configuración de tu navegador. <ph name="BEGIN_LINK_LEARN_MORE" />Más información<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3885112598747515383">Las actualizaciones las gestiona tu administrador</translation> <translation id="3886446263141354045">Tu solicitud de acceso a este sitio web se ha enviado a <ph name="NAME" /></translation> +<translation id="3887022758415973389">Mostrar lista de dispositivos</translation> <translation id="3888053818972567950">Conexión a <ph name="WEB_DRIVE" /></translation> <translation id="3888550877729210209">Tomando notas con <ph name="LOCK_SCREEN_APP_NAME" /></translation> <translation id="3888586133700543064">Esta información nos ayudará a entender mejor tu problema con el Asistente. Se almacena durante un máximo de 90 días y solo podrán acceder a estos datos los equipos correspondientes de ingeniería y sugerencias.</translation> @@ -3463,6 +3467,7 @@ <translation id="4662373422909645029">El apodo no puede incluir números</translation> <translation id="4662788913887017617">Compartir este marcador con tu iPhone</translation> <translation id="4663373278480897665">Cámara permitida</translation> +<translation id="4664289193573249666">Gestionar DNS seguro en los ajustes de Chrome OS</translation> <translation id="4664482161435122549">Error de exportación de archivos PKCS #12</translation> <translation id="4665014895760275686">Fabricante</translation> <translation id="4665446389743427678">Se eliminarán todos los datos guardados por <ph name="SITE" />.</translation> @@ -5995,6 +6000,7 @@ <translation id="7478623944308207463">Tus aplicaciones y ajustes se sincronizarán en todos los dispositivos Chrome OS en los que hayas iniciado sesión con tu cuenta de Google. Para ver las opciones de sincronización del navegador, ve a la <ph name="LINK_BEGIN" />configuración de Chrome<ph name="LINK_END" />.</translation> <translation id="7478658909253570368">No permitir que los sitios se conecten a puertos serie</translation> <translation id="7479221278376295180">Resumen del uso de almacenamiento</translation> +<translation id="747981547666531654">Conectado a dispositivos Bluetooth llamados <ph name="FIRST_DEVICE" /> y <ph name="SECOND_DEVICE" /></translation> <translation id="7481312909269577407">Adelante</translation> <translation id="7481358317100446445">Lista</translation> <translation id="748138892655239008">Restricciones básicas del certificado</translation> @@ -6047,6 +6053,7 @@ <translation id="7531771599742723865">Dispositivo en uso</translation> <translation id="7531779363494549572">Accede a Ajustes > Aplicaciones y notificaciones > Notificaciones.</translation> <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> no responde. Selecciona "Forzar cierre" para cerrar la aplicación.</translation> +<translation id="7535730537657706072">Para borrar el historial de navegación de incógnito en tu dispositivo, cierra todas las pestañas de incógnito.</translation> <translation id="7535791657097741517">Activar tema claro</translation> <translation id="7537451260744431038">Los sitios no pueden usar cookies para mejorar tu experiencia de navegación, por ejemplo, para mantener tu sesión iniciada o recordar los artículos de tu carrito de la compra</translation> <translation id="753769905878158714">En la barra de direcciones, introduce la palabra clave del sitio web que quieres buscar. Después, usa una combinación de teclas para continuar.</translation> @@ -6664,6 +6671,7 @@ <translation id="8138217203226449454">¿Tal vez quieres cambiar tu proveedor de búsquedas?</translation> <translation id="8138997515734480534">Estado de <ph name="VM_NAME" /></translation> <translation id="8139447493436036221">Archivos de Google Drive</translation> +<translation id="8140070492745508800"><ph name="FIRST_DEVICE" />, <ph name="SECOND_DEVICE" /></translation> <translation id="8141584439523427891">Abriendo en un navegador alternativo</translation> <translation id="8141725884565838206">Administra tus contraseñas</translation> <translation id="814204052173971714">{COUNT,plural, =1{un vídeo}other{# vídeos}}</translation> @@ -7379,6 +7387,7 @@ <translation id="8909782404367982052">Seleccionar para buscar imágenes con Google Lens</translation> <translation id="8909833622202089127">El sitio web está registrando tu ubicación</translation> <translation id="8910222113987937043">Los cambios que realices en tus marcadores, tu historial, tus contraseñas y otros ajustes no se sincronizarán con tu cuenta de Google. Sin embargo, tus datos actuales permanecerán almacenados en esa cuenta y se podrán gestionar en el <ph name="BEGIN_LINK" />Panel de Control de Google<ph name="END_LINK" />.</translation> +<translation id="8910987510378294980">Ocultar lista de dispositivos</translation> <translation id="8912362522468806198">cuenta de Google</translation> <translation id="8912793549644936705">Expandir</translation> <translation id="8912810933860534797">Habilitar búsqueda automática</translation> @@ -7496,6 +7505,7 @@ <translation id="9033765790910064284">Continuar de todos modos</translation> <translation id="9033857511263905942">&Pegar</translation> <translation id="903480517321259405">Vuelve a escribir el PIN</translation> +<translation id="9037054491984310631">Conectado a un dispositivo Bluetooth llamado <ph name="DEVICE" /></translation> <translation id="9037640663275993951">El dispositivo no está permitido</translation> <translation id="9037818663270399707">Tu conexión no es privada para todo el tráfico de red</translation> <translation id="9037965129289936994">Mostrar original</translation> @@ -7576,6 +7586,7 @@ <translation id="9112786533191410418"><ph name="FILE_NAME" /> podría ser peligroso. ¿Enviar a Google para analizarlo?</translation> <translation id="9112987648460918699">Buscar...</translation> <translation id="9113240369465613386">Solo páginas impares</translation> +<translation id="9113469270512809735">Mostrar/Ocultar elementos cerrados recientemente</translation> <translation id="9114663181201435112">Iniciar sesión fácilmente</translation> <translation id="9115675100829699941">&Marcadores</translation> <translation id="9116465289595958864">Última modificación</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb index eb2ed8e..95c5991 100644 --- a/chrome/app/resources/generated_resources_et.xtb +++ b/chrome/app/resources/generated_resources_et.xtb
@@ -161,6 +161,7 @@ <translation id="1165039591588034296">Viga</translation> <translation id="1166212789817575481">Sulge vahelehed paremale</translation> <translation id="1166583374608765787">Vaadake nime värskendus üle</translation> +<translation id="1166596238782048887"><ph name="TAB_TITLE" /> kuulub töölauale <ph name="DESK_TITLE" /></translation> <translation id="1168020859489941584">Avamine asukohas <ph name="TIME_REMAINING" />...</translation> <translation id="1170288591054440704">Küsi, kui sait soovib seadmesse installitud fonte kasutada</translation> <translation id="1171135284592304528">Kui objekt muutub, tõstetakse see klaviatuuri fookusega esile</translation> @@ -620,6 +621,7 @@ <translation id="1640235262200048077"><ph name="IME_NAME" /> Linuxi rakendustega veel ei tööta</translation> <translation id="1640283014264083726">PKCS 1 MD4 koos RSA krüpteerimisega</translation> <translation id="1641113438599504367">Ohutu sirvimine</translation> +<translation id="1642492862748815878">Ühendatud seadmega <ph name="DEVICE" /> ja veel <ph name="NUMBER_OF_DEVICES" /> Bluetooth-seadmega</translation> <translation id="1642494467033190216">Enne muude silumisfunktsioonide lubamist tuleb eemaldada kaitse rootfs ja seade tuleb taaskäivitada.</translation> <translation id="1643072738649235303">X9.62 ECDSA allkiri SHA-1-ga</translation> <translation id="1643921258693943800">Läheduses jagamise kasutamiseks lülitage sisse Bluetooth ja WiFi</translation> @@ -1826,6 +1828,7 @@ <translation id="2885378588091291677">Tegumihaldur</translation> <translation id="2885729872133513017">Serveri vastuse dekodeerimisel ilmnes probleem.</translation> <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation> +<translation id="288734198558082692"><ph name="DEVICE" /> ja veel <ph name="NUMBER_OF_DEVICES" /></translation> <translation id="2889064240420137087">Lingi avamine rakendusega ...</translation> <translation id="2891922230654533301">Kas soovite rakendusse <ph name="APP_NAME" /> sisselogimiseks kasutada oma seadet?</translation> <translation id="2893168226686371498">Vaikebrauser</translation> @@ -2760,6 +2763,7 @@ <translation id="3884152383786131369">Mitmes keeles saadaval olev veebisisu esitatakse loendi esimeses toetatud keeles. Need eelistused sünkroonitakse teie brauseri seadetega. <ph name="BEGIN_LINK_LEARN_MORE" />Lisateave<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3885112598747515383">Värskendusi haldab teie administraator</translation> <translation id="3886446263141354045">Teie juurdepääsutaotlus sellele saidile saadeti kasutajale <ph name="NAME" /></translation> +<translation id="3887022758415973389">Kuva seadmete loend</translation> <translation id="3888053818972567950">Ühendus teenusega <ph name="WEB_DRIVE" /></translation> <translation id="3888550877729210209">Märkmete tegemine rakendusega <ph name="LOCK_SCREEN_APP_NAME" /></translation> <translation id="3888586133700543064">See teave aitab meil teie assistendiga seotud probleemi paremini mõista. See salvestakse kuni 90 päevaks ning sellele pääsevad juurde ainult asjakohased inseneri- ja tagasisidetiimid.</translation> @@ -3470,6 +3474,7 @@ <translation id="4662373422909645029">Hüüdnimes ei tohi olla numbreid</translation> <translation id="4662788913887017617">Jagage seda järjehoidjat oma iPhone'iga</translation> <translation id="4663373278480897665">Kaamera on lubatud</translation> +<translation id="4664289193573249666">Hallake turvalist DNS-i Chrome OS-i seadetes</translation> <translation id="4664482161435122549">PKCS #12 ekspordi viga</translation> <translation id="4665014895760275686">Tootja</translation> <translation id="4665446389743427678">Kõik saidi <ph name="SITE" /> salvestatud andmed kustutatakse.</translation> @@ -6002,6 +6007,7 @@ <translation id="7478623944308207463">Teie rakendused ja seaded sünkroonitakse kõigis Chrome OS-i seadmetes, kuhu olete oma Google'i kontoga sisse logitud. Brauseri sünkroonimisvalikute nägemiseks avage <ph name="LINK_BEGIN" />Chrome'i seaded<ph name="LINK_END" />.</translation> <translation id="7478658909253570368">Ära luba saitidel jadaportidega ühendust luua</translation> <translation id="7479221278376295180">Salvestusruumi kasutuse ülevaade</translation> +<translation id="747981547666531654">Ühendatud Bluetooth-seadmetega <ph name="FIRST_DEVICE" /> ja <ph name="SECOND_DEVICE" /></translation> <translation id="7481312909269577407">Edasta</translation> <translation id="7481358317100446445">Valmis</translation> <translation id="748138892655239008">Sertifikaadi põhipiirangud</translation> @@ -6054,6 +6060,7 @@ <translation id="7531771599742723865">Seade on kasutuses</translation> <translation id="7531779363494549572">Avage jaotis Seaded > Rakendused ja märguanded > Märguanded.</translation> <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> ei reageeri. Rakenduse sulgemiseks valige käsk „Sundpeata”.</translation> +<translation id="7535730537657706072">Inkognito režiimi sirvimisajaloo kustutamiseks seadmest sulgege kõik inkognito vahelehed</translation> <translation id="7535791657097741517">Heleda teema sisselülitamine</translation> <translation id="7537451260744431038">Saidid ei saa kasutada küpsisefaile teie sirvimiskogemuse täiustamiseks, näiteks selleks, et hoida teid sisselogituna või jätta meelde teie ostukorvis olevad esemed</translation> <translation id="753769905878158714">Sisestage aadressiribale otsitava veebisaidiga seotud märksõna. Seejärel kasutage jätkamiseks klaviatuuri otseteed.</translation> @@ -6671,6 +6678,7 @@ <translation id="8138217203226449454">Kas muutsite otsinguteenuse pakkujat tahtlikult?</translation> <translation id="8138997515734480534">Virtuaalmasina <ph name="VM_NAME" /> olek</translation> <translation id="8139447493436036221">Google Drive'i failid</translation> +<translation id="8140070492745508800"><ph name="FIRST_DEVICE" />, <ph name="SECOND_DEVICE" /></translation> <translation id="8141584439523427891">Avatakse kohe alternatiivses brauseris</translation> <translation id="8141725884565838206">Paroolide haldamine</translation> <translation id="814204052173971714">{COUNT,plural, =1{video}other{# videot}}</translation> @@ -7386,6 +7394,7 @@ <translation id="8909782404367982052">Pukseerige, et Google Lensi abil pilte otsida</translation> <translation id="8909833622202089127">Sait jälgib teie asukohta</translation> <translation id="8910222113987937043">Teie järjehoidjate, ajaloo, paroolide ja muude seadete muudatusi ei sünkroonita enam teie Google'i kontoga. Teie olemasolevad andmed jäävad aga teie Google'i kontole alles ja neid saab hallata <ph name="BEGIN_LINK" />Google'i juhtpaneelil<ph name="END_LINK" />.</translation> +<translation id="8910987510378294980">Peida seadmete loend</translation> <translation id="8912362522468806198">Google'i konto</translation> <translation id="8912793549644936705">Venitatud</translation> <translation id="8912810933860534797">Automaatse skannimise lubamine</translation> @@ -7503,6 +7512,7 @@ <translation id="9033765790910064284">Jätka ikkagi</translation> <translation id="9033857511263905942">&Kleebi</translation> <translation id="903480517321259405">Sisestage PIN-kood uuesti</translation> +<translation id="9037054491984310631">Ühendatud Bluetooth-seadmega <ph name="DEVICE" /></translation> <translation id="9037640663275993951">Seade ei ole lubatud</translation> <translation id="9037818663270399707">Teie ühendus ei ole kogu võrguliikluse jaoks privaatne</translation> <translation id="9037965129289936994">Kuva originaal</translation> @@ -7583,6 +7593,7 @@ <translation id="9112786533191410418"><ph name="FILE_NAME" /> võib olla ohtlik. Kas saata see skannimiseks Google'ile?</translation> <translation id="9112987648460918699">Otsi...</translation> <translation id="9113240369465613386">Ainult paarituarvulised lehed</translation> +<translation id="9113469270512809735">Kuva/peida hiljuti suletud üksused</translation> <translation id="9114663181201435112">Lihtne sisselogimine</translation> <translation id="9115675100829699941">&Järjehoidjad</translation> <translation id="9116465289595958864">Viimati muudetud</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb index d64374bb..205ed0f 100644 --- a/chrome/app/resources/generated_resources_fa.xtb +++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -161,6 +161,7 @@ <translation id="1165039591588034296">خطا</translation> <translation id="1166212789817575481">بستن برگهها به چپ</translation> <translation id="1166583374608765787">مرور بهروزرسانی نام</translation> +<translation id="1166596238782048887"><ph name="TAB_TITLE" /> به میزکار <ph name="DESK_TITLE" /> تعلق دارد</translation> <translation id="1168020859489941584">باز کردن با <ph name="TIME_REMAINING" />...</translation> <translation id="1170288591054440704">هروقت سایتی میخواهد از قلمهای نصبشده در دستگاه استفاده کند سؤال شود</translation> <translation id="1171135284592304528">برجسته کردن شیء با فوکوس صفحهکلید در صورت تغییر</translation> @@ -618,6 +619,7 @@ <translation id="1640235262200048077"><ph name="IME_NAME" /> هنوز در برنامههای Linux کار نمیکند</translation> <translation id="1640283014264083726">PKCS #1 MD4 با رمزگذاری RSA</translation> <translation id="1641113438599504367">مرور ایمن</translation> +<translation id="1642492862748815878">متصل به <ph name="DEVICE" /> و <ph name="NUMBER_OF_DEVICES" /> دستگاه بلوتوث دیگر</translation> <translation id="1642494467033190216">راهاندازی مجدد و برداشتن محافظت ویژگیهای ریشه قبل از فعال کردن ویژگیهای رفعاشکال دیگر لازم است.</translation> <translation id="1643072738649235303">امضای X9.62 ECDSA با SHA-1</translation> <translation id="1643921258693943800">برای استفاده از «همرسانی با اطراف»، بلوتوث و Wi-Fi را روشن کنید</translation> @@ -1832,6 +1834,7 @@ <translation id="2885378588091291677">مدیر فعالیتها</translation> <translation id="2885729872133513017">هنگام رمزگشایی پاسخ سرور، مشکلی پیش آمد.</translation> <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation> +<translation id="288734198558082692"><ph name="DEVICE" /> و <ph name="NUMBER_OF_DEVICES" /> مورد دیگر</translation> <translation id="2889064240420137087">بازکردن پیوند با...</translation> <translation id="2891922230654533301">برای وارد شدن به سیستم <ph name="APP_NAME" /> از دستگاهتان استفاده شود؟</translation> <translation id="2893168226686371498">مرورگر پیشفرض</translation> @@ -2766,6 +2769,7 @@ <translation id="3884152383786131369">محتوای وبی که به چند زبان دردسترس است از اولین زبان پشتیبانیشده در این فهرست استفاده خواهد کرد. این اولویتها با تنظیمات مرورگرتان همگامسازی میشود. <ph name="BEGIN_LINK_LEARN_MORE" />بیشتر بدانید<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3885112598747515383">بهروزرسانیها را سرپرستتان مدیریت میکند</translation> <translation id="3886446263141354045">درخواست شما برای دسترسی به این سایت برای <ph name="NAME" /> ارسال شده است</translation> +<translation id="3887022758415973389">نمایش فهرست دستگاهها</translation> <translation id="3888053818972567950">اتصال <ph name="WEB_DRIVE" /></translation> <translation id="3888550877729210209">یادداشتبرداری با <ph name="LOCK_SCREEN_APP_NAME" /></translation> <translation id="3888586133700543064">این اطلاعات به ما کمک میکند مشکل «دستیار» شما را بهتر تشخیص دهیم. این اطلاعات تا ۹۰ روز ذخیره میشود و دسترسی به آن به تیمهای مهندسی و بازخورد مربوطه محدود میشود.</translation> @@ -3477,6 +3481,7 @@ <translation id="4662373422909645029">نام مستعار نباید حاوی عدد باشد</translation> <translation id="4662788913887017617">این نشانک را با iPhone خود به اشتراک بگذارید</translation> <translation id="4663373278480897665">دوربین مجاز است</translation> +<translation id="4664289193573249666">مدیریت «ساناد امن» در تنظیمات Chrome OS</translation> <translation id="4664482161435122549">خطای صادر کردن PKCS #12</translation> <translation id="4665014895760275686">سازنده</translation> <translation id="4665446389743427678">همه دادههای ذخیرهشده توسط <ph name="SITE" /> حذف خواهد شد.</translation> @@ -6009,6 +6014,7 @@ <translation id="7478623944308207463">برنامهها و تنظیماتتان در همه دستگاههای «سیستمعامل Chrome» که با حساب Google خود در آنها به سیستم وارد شدهاید همگامسازی خواهد شد. برای گزینههای همگامسازی مرورگر، به <ph name="LINK_BEGIN" />تنظیمات Chrome<ph name="LINK_END" /> بروید.</translation> <translation id="7478658909253570368">به سایتها اجازه داده نشود به درگاههای سریال متصل شوند</translation> <translation id="7479221278376295180">نمای کلی استفاده از حافظه</translation> +<translation id="747981547666531654">متصل به دستگاههای بلوتوث با نام <ph name="FIRST_DEVICE" /> و <ph name="SECOND_DEVICE" /></translation> <translation id="7481312909269577407">ارسال کردن</translation> <translation id="7481358317100446445">آماده</translation> <translation id="748138892655239008">محدودیتهای اصلی گواهی</translation> @@ -6061,6 +6067,7 @@ <translation id="7531771599742723865">دستگاه درحال استفاده است</translation> <translation id="7531779363494549572">به «تنظیمات > برنامهها و اعلانها > اعلانها» بروید.</translation> <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> پاسخ نمیدهد. برای بستن برنامه، «بستن اجباری» را انتخاب کنید.</translation> +<translation id="7535730537657706072">برای پاک کردن سابقه مرور «حالت ناشناس» از دستگاه، همه «برگههای ناشناس» را ببندید</translation> <translation id="7535791657097741517">روشن کردن طرح زمینه روشن</translation> <translation id="7537451260744431038">سایتها نمیتوانند از کوکیها برای بهبود تجربه مرورتان استفاده کنند، مثلاً برای اینکه شما را درحالت واردشده به سیستم نگه دارند یا موارد موجود در سبد خریدتان را بهخاطر بسپارند</translation> <translation id="753769905878158714">در نوار نشانی، کلیدواژه مربوط به وبسایت موردنظر برای جستجو را وارد کنید. سپس برای ادامه دادن، از میانبر صفحه کلید استفاده کنید.</translation> @@ -6678,6 +6685,7 @@ <translation id="8138217203226449454">آیا میخواستید ارائهدهنده جستجو را تغییر دهید؟</translation> <translation id="8138997515734480534">وضعیت <ph name="VM_NAME" /></translation> <translation id="8139447493436036221">فایلهای Google Drive</translation> +<translation id="8140070492745508800"><ph name="FIRST_DEVICE" />،<ph name="SECOND_DEVICE" /></translation> <translation id="8141584439523427891">اکنون باز کردن در مرورگر جایگزین</translation> <translation id="8141725884565838206">مدیریت گذرواژههای شما</translation> <translation id="814204052173971714">{COUNT,plural, =1{یک ویدیو}one{# ویدیو}other{# ویدیو}}</translation> @@ -7394,6 +7402,7 @@ <translation id="8909782404367982052">کشیدن برای جستجوی تصاویر با «لنز Google»</translation> <translation id="8909833622202089127">سایت درحال ردیابی مکان شما است</translation> <translation id="8910222113987937043">تغییرات ایجادشده در نشانکها، سابقه، گذرواژهها و سایر تنظیمات شما با حساب Google شما دیگر همگامسازی نخواهد شد. بااینوجود دادههای قبلاً ذخیرهشده در حساب Google شما در آنجا میمانند و در <ph name="BEGIN_LINK" />داشبورد Google<ph name="END_LINK" /> میتوانید آنها را مدیریت کنید.</translation> +<translation id="8910987510378294980">پنهان کردن فهرست دستگاهها</translation> <translation id="8912362522468806198">حساب Google</translation> <translation id="8912793549644936705">گسترده کردن</translation> <translation id="8912810933860534797">فعال کردن اسکن خودکار</translation> @@ -7511,6 +7520,7 @@ <translation id="9033765790910064284">ادامه درهرصورت</translation> <translation id="9033857511263905942">&جایگذاری</translation> <translation id="903480517321259405">پین را دوباره تایپ کنید</translation> +<translation id="9037054491984310631">متصل به دستگاه بلوتوث با نام <ph name="DEVICE" /></translation> <translation id="9037640663275993951">دستگاه مجاز نیست</translation> <translation id="9037818663270399707">اتصال شما برای همه ترافیک شبکه خصوصی نیست</translation> <translation id="9037965129289936994">نمایش مورد اصلی</translation> @@ -7591,6 +7601,7 @@ <translation id="9112786533191410418"><ph name="FILE_NAME" /> ممکن است خطرناک باشد. برای اسکن کردن به Google ارسال شود؟</translation> <translation id="9112987648460918699">یافتن...</translation> <translation id="9113240369465613386">فقط صفحههای فرد</translation> +<translation id="9113469270512809735">پنهان/ نمایان کردن موارد اخیراً بستهشده</translation> <translation id="9114663181201435112">ورود به سیستم آسان</translation> <translation id="9115675100829699941">&نشانک ها</translation> <translation id="9116465289595958864">آخرین اصلاح</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb index 13a1b42..905972e5 100644 --- a/chrome/app/resources/generated_resources_fr.xtb +++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -159,6 +159,7 @@ <translation id="1165039591588034296">Erreur</translation> <translation id="1166212789817575481">Fermer les onglets sur la droite</translation> <translation id="1166583374608765787">Examiner la modification du nom</translation> +<translation id="1166596238782048887"><ph name="TAB_TITLE" /> fait partie du bureau <ph name="DESK_TITLE" /></translation> <translation id="1168020859489941584">Ouverture dans <ph name="TIME_REMAINING" />...</translation> <translation id="1170288591054440704">Vous demander lorsqu'un site souhaite utiliser des polices installées sur votre appareil</translation> <translation id="1171135284592304528">Mettre en surbrillance l'objet sélectionné au clavier lorsqu'il change</translation> @@ -618,6 +619,7 @@ <translation id="1640235262200048077"><ph name="IME_NAME" /> n'est pas compatible avec les applications Linux pour le moment</translation> <translation id="1640283014264083726">PKCS #1 MD4 avec chiffrement RSA</translation> <translation id="1641113438599504367">Navigation sécurisée</translation> +<translation id="1642492862748815878">Connecté à <ph name="DEVICE" /> et <ph name="NUMBER_OF_DEVICES" /> autres appareils Bluetooth</translation> <translation id="1642494467033190216">La suppression de la protection rootfs et un redémarrage s'avèrent nécessaires avant d'activer d'autres fonctionnalités de débogage.</translation> <translation id="1643072738649235303">Signature X9.62 ECDSA avec SHA-1</translation> <translation id="1643921258693943800">Pour utiliser le Partage à proximité, activez le Bluetooth et le Wi-Fi</translation> @@ -1821,6 +1823,7 @@ <translation id="2885378588091291677">Gestionnaire de tâches</translation> <translation id="2885729872133513017">Un problème est survenu lors du décodage de la réponse du serveur.</translation> <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation> +<translation id="288734198558082692"><ph name="DEVICE" /> et <ph name="NUMBER_OF_DEVICES" /> autres</translation> <translation id="2889064240420137087">Ouvrir le lien avec...</translation> <translation id="2891922230654533301">Utiliser cet appareil pour vous connecter à <ph name="APP_NAME" /> ?</translation> <translation id="2893168226686371498">Navigateur par défaut</translation> @@ -2755,6 +2758,7 @@ <translation id="3884152383786131369">Le contenu Web disponible dans plusieurs langues vous sera proposé dans la première langue disponible de cette liste. Ces préférences sont synchronisées avec les paramètres de votre navigateur. <ph name="BEGIN_LINK_LEARN_MORE" />En savoir plus<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3885112598747515383">Les mises à jour sont gérées par votre administrateur</translation> <translation id="3886446263141354045">Votre demande d'accès à ce site a bien été envoyée à <ph name="NAME" /></translation> +<translation id="3887022758415973389">Afficher la liste des appareils</translation> <translation id="3888053818972567950">Connexion <ph name="WEB_DRIVE" /></translation> <translation id="3888550877729210209">Prise de notes avec <ph name="LOCK_SCREEN_APP_NAME" /></translation> <translation id="3888586133700543064">Ces informations nous aident à mieux comprendre le problème que vous rencontrez avec l'Assistant. Elles sont conservées pendant 90 jours au maximum et ne peuvent être consultées que par nos ingénieurs et nos équipes responsables du traitement des commentaires.</translation> @@ -3465,6 +3469,7 @@ <translation id="4662373422909645029">Le pseudo ne doit pas contenir de chiffres</translation> <translation id="4662788913887017617">Partager ce favori avec votre iPhone</translation> <translation id="4663373278480897665">Caméra autorisée</translation> +<translation id="4664289193573249666">Gérer le DNS sécurisé dans les paramètres Chrome OS</translation> <translation id="4664482161435122549">Erreur d'exportation de fichier PKCS #12</translation> <translation id="4665014895760275686">Fabricant</translation> <translation id="4665446389743427678">Toutes les données stockées par <ph name="SITE" /> seront supprimées.</translation> @@ -5998,6 +6003,7 @@ <translation id="7478623944308207463">Vos applications et paramètres seront synchronisés sur tous les appareils Chrome OS où vous êtes connecté à votre compte Google. Pour voir les options de synchronisation du navigateur, accédez aux <ph name="LINK_BEGIN" />paramètres de Chrome<ph name="LINK_END" />.</translation> <translation id="7478658909253570368">Ne pas autoriser les sites à se connecter aux ports série</translation> <translation id="7479221278376295180">Aperçu de l'espace de stockage utilisé</translation> +<translation id="747981547666531654">Connecté aux appareils Bluetooth <ph name="FIRST_DEVICE" /> et <ph name="SECOND_DEVICE" /></translation> <translation id="7481312909269577407">Avancer</translation> <translation id="7481358317100446445">Prêt</translation> <translation id="748138892655239008">Contraintes de base du certificat</translation> @@ -6050,6 +6056,7 @@ <translation id="7531771599742723865">Appareil en cours d'utilisation</translation> <translation id="7531779363494549572">Accédez à Paramètres > Applications et notifications > Notifications.</translation> <translation id="7532009420053991888">L'application <ph name="LINUX_APP_NAME" /> ne répond pas. Sélectionnez "Forcer la fermeture" pour la fermer.</translation> +<translation id="7535730537657706072">Pour effacer l'historique de navigation privée sur votre appareil, fermez tous les onglets de navigation privée</translation> <translation id="7535791657097741517">Appliquer le thème clair</translation> <translation id="7537451260744431038">Les sites ne peuvent pas utiliser de cookies pour améliorer votre expérience de navigation, par exemple pour maintenir votre connexion ou mémoriser les articles de votre panier</translation> <translation id="753769905878158714">Dans la barre d'adresse, saisissez le mot clé associé au site Web que vous voulez trouver. Pour continuer, utilisez un raccourci clavier.</translation> @@ -6667,6 +6674,7 @@ <translation id="8138217203226449454">Vouliez-vous modifier votre moteur de recherche ?</translation> <translation id="8138997515734480534">État de <ph name="VM_NAME" /></translation> <translation id="8139447493436036221">fichiers Google Drive</translation> +<translation id="8140070492745508800"><ph name="FIRST_DEVICE" />, <ph name="SECOND_DEVICE" /></translation> <translation id="8141584439523427891">Ouverture dans le navigateur secondaire…</translation> <translation id="8141725884565838206">Gérer les mots de passe</translation> <translation id="814204052173971714">{COUNT,plural, =1{une vidéo}one{# vidéo}other{# vidéos}}</translation> @@ -7383,6 +7391,7 @@ <translation id="8909782404367982052">Sélectionner pour rechercher à l'aide d'images avec Google Lens</translation> <translation id="8909833622202089127">Le site vous localise</translation> <translation id="8910222113987937043">Les modifications apportées à vos favoris, à votre historique, à vos mots de passe et à d'autres paramètres ne seront plus synchronisées avec votre compte Google. Cependant, les données déjà stockées sur votre compte Google y seront conservées et pourront être gérées dans le <ph name="BEGIN_LINK" />Google Dashboard<ph name="END_LINK" />.</translation> +<translation id="8910987510378294980">Masquer la liste des appareils</translation> <translation id="8912362522468806198">Compte Google</translation> <translation id="8912793549644936705">Étirer</translation> <translation id="8912810933860534797">Activer la recherche automatique</translation> @@ -7500,6 +7509,7 @@ <translation id="9033765790910064284">Continuer</translation> <translation id="9033857511263905942">&Coller</translation> <translation id="903480517321259405">Saisir de nouveau le code</translation> +<translation id="9037054491984310631">Connecté à l'appareil Bluetooth <ph name="DEVICE" /></translation> <translation id="9037640663275993951">Appareil non autorisé</translation> <translation id="9037818663270399707">Votre connexion n'est pas privée pour l'ensemble du trafic réseau</translation> <translation id="9037965129289936994">Afficher l'original</translation> @@ -7580,6 +7590,7 @@ <translation id="9112786533191410418"><ph name="FILE_NAME" /> est peut-être dangereux. L'envoyer à Google pour analyse ?</translation> <translation id="9112987648460918699">Rechercher...</translation> <translation id="9113240369465613386">Pages impaires uniquement</translation> +<translation id="9113469270512809735">Afficher/Masquer les éléments fermés récemment</translation> <translation id="9114663181201435112">Connectez-vous en toute simplicité</translation> <translation id="9115675100829699941">&Favoris</translation> <translation id="9116465289595958864">Dernière modification</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb index f77fedc..40daa96 100644 --- a/chrome/app/resources/generated_resources_hi.xtb +++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -1500,7 +1500,7 @@ <translation id="2527167509808613699">किसी प्रकार का कनेक्शन</translation> <translation id="2530166226437958497">समस्या का हल</translation> <translation id="2532589005999780174">उच्च कंट्रास्ट मोड</translation> -<translation id="2533649878691950253">इस साइट को आपकी जगह की सटीक जानकारी जानने से रोक दिया गया. ऐसा इसलिए कि आम तौर पर आप इसकी अनुमति नहीं देते हैं</translation> +<translation id="2533649878691950253">इस साइट को आपकी जगह की सटीक जानकारी जानने से रोक दिया गया. ऐसा इसलिए किया गया, क्योंकि आप आम तौर पर इसकी अनुमति नहीं देते हैं</translation> <translation id="253434972992662860">&रोकें</translation> <translation id="253557089021624350">कीपअलाइव की गणना</translation> <translation id="2535799430745250929">कोई मोबाइल नेटवर्क मौजूद नहीं है</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb index 86d44a56..ceb595a4 100644 --- a/chrome/app/resources/generated_resources_hr.xtb +++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -159,6 +159,7 @@ <translation id="1165039591588034296">Pogreška</translation> <translation id="1166212789817575481">Zatvori kartice s desne strane</translation> <translation id="1166583374608765787">Pregled ažuriranja naziva</translation> +<translation id="1166596238782048887"><ph name="TAB_TITLE" /> pripada radnoj površini <ph name="DESK_TITLE" /></translation> <translation id="1168020859489941584">Otvaranje u <ph name="TIME_REMAINING" />...</translation> <translation id="1170288591054440704">Prikaži upit kada web-lokacija želi upotrebljavati fontove instalirane na vašem uređaju</translation> <translation id="1171135284592304528">Istaknite objekt fokusom na tipkovnici kada se promijeni</translation> @@ -618,6 +619,7 @@ <translation id="1640235262200048077"><ph name="IME_NAME" /> još uvijek ne funkcionira u Linux aplikacijama</translation> <translation id="1640283014264083726">PKCS br. 1 MD4 s RSA enkripcijom</translation> <translation id="1641113438599504367">Sigurno pregledavanje</translation> +<translation id="1642492862748815878">Povezano s uređajem <ph name="DEVICE" /> i još <ph name="NUMBER_OF_DEVICES" /> Bluetooth uređaja</translation> <translation id="1642494467033190216">Da biste omogućili ostale značajke za otklanjanje pogrešaka, morate ukloniti rootfs zaštitu i ponovo pokrenuti uređaj.</translation> <translation id="1643072738649235303">X9.62 ECDSA potpis uz SHA-1</translation> <translation id="1643921258693943800">Da biste koristili dijeljenje u blizini, uključite Bluetooth i Wi-Fi</translation> @@ -1822,6 +1824,7 @@ <translation id="2885378588091291677">Upravitelj zadataka</translation> <translation id="2885729872133513017">Pojavio se problem prilikom dekodiranja odgovora poslužitelja.</translation> <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation> +<translation id="288734198558082692"><ph name="DEVICE" /> i još <ph name="NUMBER_OF_DEVICES" /></translation> <translation id="2889064240420137087">Otvori vezu sa...</translation> <translation id="2891922230654533301">Upotrijebiti uređaj za prijavljivanje na <ph name="APP_NAME" />?</translation> <translation id="2893168226686371498">Zadani preglednik</translation> @@ -2756,6 +2759,7 @@ <translation id="3884152383786131369">Web-sadržaj dostupan na više jezika koristit će prvi podržani jezik s ovog popisa. Te se postavke sinkroniziraju s postavkama vašeg preglednika. <ph name="BEGIN_LINK_LEARN_MORE" />Saznajte više<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3885112598747515383">Ažuriranjima upravlja vaš administrator</translation> <translation id="3886446263141354045">Zahtjev za pristup toj web-lokaciji poslan je korisniku <ph name="NAME" /></translation> +<translation id="3887022758415973389">Prikaz popisa uređaja</translation> <translation id="3888053818972567950">Veza <ph name="WEB_DRIVE" /></translation> <translation id="3888550877729210209">Izrada bilježaka pomoću aplikacije <ph name="LOCK_SCREEN_APP_NAME" /></translation> <translation id="3888586133700543064">Ti nam podaci pomažu da bolje shvatimo vašu poteškoću s Asistentom. Pohranjuju se do 90 dana i pristup je ograničen na odgovarajuće timove za inženjerstvo i povratne informacije.</translation> @@ -3466,6 +3470,7 @@ <translation id="4662373422909645029">Nadimak ne smije sadržavati brojeve</translation> <translation id="4662788913887017617">Dijelite ovu oznaku sa svojim iPhoneom</translation> <translation id="4663373278480897665">Kamera je dopuštena</translation> +<translation id="4664289193573249666">Upravljanje sigurnim DNS-om u postavkama OS-a Chrome</translation> <translation id="4664482161435122549">Pogreška pri izvozu PKCS #12</translation> <translation id="4665014895760275686">Proizvođač</translation> <translation id="4665446389743427678">Izbrisat će se svi podaci koje je pohranila web-lokacija <ph name="SITE" />.</translation> @@ -5998,6 +6003,7 @@ <translation id="7478623944308207463">Vaše aplikacije i postavke sinkronizirat će se na svim uređajima s OS-om Chrome na kojima ste prijavljeni svojim Google računom. Za opcije sinkronizacije preglednika otvorite <ph name="LINK_BEGIN" />postavke Chromea<ph name="LINK_END" />.</translation> <translation id="7478658909253570368">Ne dopuštaj web-lokacijama povezivanje sa serijski spojenim priključcima</translation> <translation id="7479221278376295180">Pregled korištenja pohrane</translation> +<translation id="747981547666531654">Povezano s Bluetooth uređajima <ph name="FIRST_DEVICE" /> i <ph name="SECOND_DEVICE" /></translation> <translation id="7481312909269577407">Naprijed</translation> <translation id="7481358317100446445">Spremno</translation> <translation id="748138892655239008">Osnovno ograničenje certifikata</translation> @@ -6050,6 +6056,7 @@ <translation id="7531771599742723865">Uređaj je u upotrebi</translation> <translation id="7531779363494549572">Otvorite Postavke > Aplikacije i obavijesti > Obavijesti.</translation> <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> ne reagira. Odaberite "Prisilno zatvori" da biste zatvorili tu aplikaciju.</translation> +<translation id="7535730537657706072">Da biste izbrisali povijest anonimnog pregledavanja s uređaja, zatvorite sve anonimne kartice</translation> <translation id="7535791657097741517">Uključivanje svijetle teme</translation> <translation id="7537451260744431038">Web-lokacije ne mogu upotrebljavati kolačiće za poboljšanje vašeg doživljaja pregledavanja, primjerice da biste ostali prijavljeni ili da bi stavke u vašoj košarici ostale zapamćene</translation> <translation id="753769905878158714">U adresnu traku unesite ključnu riječ za web-lokaciju koju želite pretražiti. Zatim nastavite pomoću tipkovnog prečaca.</translation> @@ -6666,6 +6673,7 @@ <translation id="8138217203226449454">Jeste li htjeli promijeniti davatelja usluga pretraživanja?</translation> <translation id="8138997515734480534">Status VM-a <ph name="VM_NAME" /></translation> <translation id="8139447493436036221">Datoteke Google diska</translation> +<translation id="8140070492745508800"><ph name="FIRST_DEVICE" />, <ph name="SECOND_DEVICE" /></translation> <translation id="8141584439523427891">Otvaranje u zamjenskom pregledniku</translation> <translation id="8141725884565838206">Upravljanje zaporkama</translation> <translation id="814204052173971714">{COUNT,plural, =1{videozapis}one{# videozapis}few{# videozapisa}other{# videozapisa}}</translation> @@ -7383,6 +7391,7 @@ <translation id="8909782404367982052">Povucite da biste pretražili slike pomoću Google objektiva</translation> <translation id="8909833622202089127">Web-lokacija prati vašu lokaciju</translation> <translation id="8910222113987937043">Promjene vaših oznaka, povijesti, zaporki i drugih postavki više se neće sinkronizirati s vašim Google računom. No vaši podaci ostat će pohranjeni na vašem Google računu i možete upravljati njima na <ph name="BEGIN_LINK" />Google nadzornoj ploči<ph name="END_LINK" />.</translation> +<translation id="8910987510378294980">Sakrij popis uređaja</translation> <translation id="8912362522468806198">Google Račun</translation> <translation id="8912793549644936705">Rastegni</translation> <translation id="8912810933860534797">Omogući automatsko traženje</translation> @@ -7500,6 +7509,7 @@ <translation id="9033765790910064284">Ipak nastavi</translation> <translation id="9033857511263905942">&Zalijepi</translation> <translation id="903480517321259405">Ponovo unesite PIN</translation> +<translation id="9037054491984310631">Povezano s Bluetooth uređajem <ph name="DEVICE" /></translation> <translation id="9037640663275993951">Uređaj nije dopušten</translation> <translation id="9037818663270399707">Vaša veza nije privatna za sav mrežni promet</translation> <translation id="9037965129289936994">Prikaži izvornik</translation> @@ -7579,6 +7589,7 @@ <translation id="9112786533191410418">Datoteka <ph name="FILE_NAME" /> možda je opasna. Želite li je poslati Googleu na pregled?</translation> <translation id="9112987648460918699">Traži...</translation> <translation id="9113240369465613386">Samo neparne stranice</translation> +<translation id="9113469270512809735">Uključi/isključi nedavno zatvorene stavke</translation> <translation id="9114663181201435112">Jednostavna prijava</translation> <translation id="9115675100829699941">&Bookmarks (Oznake)</translation> <translation id="9116465289595958864">Zadnja izmjena</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb index 1ec1c78..ba53481 100644 --- a/chrome/app/resources/generated_resources_hu.xtb +++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -161,6 +161,7 @@ <translation id="1165039591588034296">Hiba</translation> <translation id="1166212789817575481">A jobbra eső lapok bezárása</translation> <translation id="1166583374608765787">Névvel módosításának áttekintése</translation> +<translation id="1166596238782048887">A(z) <ph name="TAB_TITLE" /> a következő számítógéphez tartozik: <ph name="DESK_TITLE" /></translation> <translation id="1168020859489941584">Megnyitás <ph name="TIME_REMAINING" /> múlva...</translation> <translation id="1170288591054440704">Kérdezzen rá, amikor egy webhely az eszközre telepített betűtípusokat szeretné használni</translation> <translation id="1171135284592304528">Az elem kiemelése a billentyűzetfókusszal, ha módosul</translation> @@ -620,6 +621,7 @@ <translation id="1640235262200048077">A(z) <ph name="IME_NAME" /> még nem használható Linux-alkalmazásokban</translation> <translation id="1640283014264083726">PKCS #1 MD4 RSA titkosítással</translation> <translation id="1641113438599504367">Biztonságos Böngészés</translation> +<translation id="1642492862748815878">Csatlakoztatva van a(z) <ph name="DEVICE" /> eszközhöz és <ph name="NUMBER_OF_DEVICES" /> másik Bluetooth-eszközhöz</translation> <translation id="1642494467033190216">A rootfs védelem eltávolítása és újraindítás szükséges a további hibakeresési funkciók engedélyezése előtt.</translation> <translation id="1643072738649235303">X9.62 ECDSA aláírás a következővel: SHA-1</translation> <translation id="1643921258693943800">A Közeli megosztás használatához kapcsolja be a Bluetootht és a Wi-Fi-t</translation> @@ -1833,6 +1835,7 @@ <translation id="2885378588091291677">Feladatkezelő</translation> <translation id="2885729872133513017">Hiba történt a szerverválasz dekódolása során.</translation> <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation> +<translation id="288734198558082692"><ph name="DEVICE" /> és további <ph name="NUMBER_OF_DEVICES" /></translation> <translation id="2889064240420137087">Link megnyitása...</translation> <translation id="2891922230654533301">Szeretne az eszközével bejelentkezni a(z) <ph name="APP_NAME" /> alkalmazásba?</translation> <translation id="2893168226686371498">Alapértelmezett böngésző</translation> @@ -2767,6 +2770,7 @@ <translation id="3884152383786131369">A több nyelven hozzáférhető webes tartalmak az ezen a listán szereplő első támogatott nyelvet használják majd. Ezeket a preferenciákat a rendszer szinkronizálja a böngésző beállításaival. <ph name="BEGIN_LINK_LEARN_MORE" />További információ<ph name="END_LINK_LEARN_MORE" />.</translation> <translation id="3885112598747515383">A frissítéseket a rendszergazdája kezeli</translation> <translation id="3886446263141354045">Webhely-hozzáférési kérelme elküldve a következő személynek: <ph name="NAME" /></translation> +<translation id="3887022758415973389">Eszközlista megjelenítése</translation> <translation id="3888053818972567950"><ph name="WEB_DRIVE" />-kapcsolat</translation> <translation id="3888550877729210209">Jegyzetek készítése a(z) <ph name="LOCK_SCREEN_APP_NAME" /> alkalmazással</translation> <translation id="3888586133700543064">Ezek az információk segítenek nekünk a Segéddel kapcsolatos probléma jobb megértésében. 90 napig tároljuk őket, mely során kizárólag a megfelelő mérnöki és ügyfélszolgálati csapatok férhetnek hozzájuk.</translation> @@ -3477,6 +3481,7 @@ <translation id="4662373422909645029">A névben nem lehet szám</translation> <translation id="4662788913887017617">Ossza meg ezt a könyvjelzőt iPhone eszközével</translation> <translation id="4663373278480897665">Kamera engedélyezve</translation> +<translation id="4664289193573249666">Biztonságos DNS kezelése a Chrome OS beállításai között</translation> <translation id="4664482161435122549">PKCS #12 exportálási hiba</translation> <translation id="4665014895760275686">Gyártó</translation> <translation id="4665446389743427678">A(z) <ph name="SITE" /> által tárolt összes adat törlődik.</translation> @@ -6011,6 +6016,7 @@ <translation id="7478623944308207463">Az Ön alkalmazásai és beállításai szinkronizálódnak minden olyan Chrome OS-eszközön, amelyen Google-fiókjával van bejelentkezve. A böngésző szinkronizálási beállításait a <ph name="LINK_BEGIN" />Chrome-beállításokban<ph name="LINK_END" /> találja.</translation> <translation id="7478658909253570368">A webhelyek nem csatlakozhatnak soros portokhoz</translation> <translation id="7479221278376295180">Tárhelyhasználat áttekintése</translation> +<translation id="747981547666531654">Csatlakoztatva van a(z) <ph name="FIRST_DEVICE" /> és a(z) <ph name="SECOND_DEVICE" /> nevű Bluetooth-eszközökhöz</translation> <translation id="7481312909269577407">Előre</translation> <translation id="7481358317100446445">Kész</translation> <translation id="748138892655239008">Tanúsítvány alapvető típusmegkötései</translation> @@ -6063,6 +6069,7 @@ <translation id="7531771599742723865">Az eszköz használatban van</translation> <translation id="7531779363494549572">Nyissa meg a Beállítások > Alkalmazások és értesítések > Értesítések menüpontot.</translation> <translation id="7532009420053991888">A(z) <ph name="LINUX_APP_NAME" /> nem válaszol. A bezárásához válassza a „Bezárás most” gombot.</translation> +<translation id="7535730537657706072">Az inkognitó mód böngészési előzményeinek az eszközről való törléséhez zárja be az összes inkognitó lapot</translation> <translation id="7535791657097741517">Világos téma bekapcsolása</translation> <translation id="7537451260744431038">A webhelyek nem használhatnak cookie-kat a böngészési élmény javítására például úgy, hogy bejelentkezve tartják Önt, illetve megjegyzik a kosarában lévő termékeket.</translation> <translation id="753769905878158714">Adja meg a címsávban a megkeresni kívánt webhelyhez tartozó kulcsszót. Majd a folytatáshoz használjon billentyűparancsot.</translation> @@ -6679,6 +6686,7 @@ <translation id="8138217203226449454">Szándékosan változtatta meg a keresési szolgáltatóját?</translation> <translation id="8138997515734480534"><ph name="VM_NAME" /> állapota</translation> <translation id="8139447493436036221">Google Drive-fájlok</translation> +<translation id="8140070492745508800"><ph name="FIRST_DEVICE" />, <ph name="SECOND_DEVICE" /></translation> <translation id="8141584439523427891">Megnyitás másik böngészőben most</translation> <translation id="8141725884565838206">Jelszavak kezelése</translation> <translation id="814204052173971714">{COUNT,plural, =1{egy videót}other{# videót}}</translation> @@ -7394,6 +7402,7 @@ <translation id="8909782404367982052">Húzás képek kereséséhez a Google Lens segítségével</translation> <translation id="8909833622202089127">A webhely nyomon követi a tartózkodási helyét</translation> <translation id="8910222113987937043">A könyvjelzők, előzmények, jelszavak és egyéb beállítások módosításai nem lesznek szinkronizálva Google-fiókjával. Meglévő adatait azonban továbbra is tárolni fogja Google-fiókja, és azokat a <ph name="BEGIN_LINK" />Google Irányítópulton<ph name="END_LINK" /> kezelheti.</translation> +<translation id="8910987510378294980">Eszközlista elrejtése</translation> <translation id="8912362522468806198">Google Fiókjába</translation> <translation id="8912793549644936705">Nyújtva</translation> <translation id="8912810933860534797">Automatikus keresés engedélyezése</translation> @@ -7511,6 +7520,7 @@ <translation id="9033765790910064284">Ennek ellenére folytatom</translation> <translation id="9033857511263905942">&Beillesztés</translation> <translation id="903480517321259405">Adja meg újra a PIN-kódot</translation> +<translation id="9037054491984310631">Csatlakoztatva van a(z) <ph name="DEVICE" /> nevű Bluetooth-eszközhöz</translation> <translation id="9037640663275993951">Nem engedélyezett eszköz</translation> <translation id="9037818663270399707">Az Ön kapcsolata nem privát az összes hálózati forgalomnál</translation> <translation id="9037965129289936994">Eredeti megjelenítése</translation> @@ -7591,6 +7601,7 @@ <translation id="9112786533191410418">A(z) <ph name="FILE_NAME" /> veszélyes lehet. Elküldi a Google-nak ellenőrzésre?</translation> <translation id="9112987648460918699">Keresés...</translation> <translation id="9113240369465613386">Csak páratlan oldalak</translation> +<translation id="9113469270512809735">Váltás a nemrégiben bezárt elemek között</translation> <translation id="9114663181201435112">Egyszerű bejelentkezés</translation> <translation id="9115675100829699941">&Könyvjelzők</translation> <translation id="9116465289595958864">Utoljára módosítva</translation>
diff --git a/chrome/app/resources/generated_resources_kk.xtb b/chrome/app/resources/generated_resources_kk.xtb index 64483c1..c0e7327c 100644 --- a/chrome/app/resources/generated_resources_kk.xtb +++ b/chrome/app/resources/generated_resources_kk.xtb
@@ -159,6 +159,7 @@ <translation id="1165039591588034296">Қате</translation> <translation id="1166212789817575481">Қойындыларды оң жаққа жабу</translation> <translation id="1166583374608765787">Өзгертілген атауды қарау</translation> +<translation id="1166596238782048887">"<ph name="TAB_TITLE" />" қойындысы "<ph name="DESK_TITLE" />" үстеліне тиесілі.</translation> <translation id="1168020859489941584"><ph name="TIME_REMAINING" /> ішінде ашылады…</translation> <translation id="1170288591054440704">Сайт құрылғыңызда орнатылған қаріптерді пайдаланғысы келгенде сұрау</translation> <translation id="1171135284592304528">Нысан өзгерген кезде оны пернетақта арқылы бөлектеу</translation> @@ -614,6 +615,7 @@ <translation id="1640235262200048077"><ph name="IME_NAME" /> әзірге Linux қолданбаларында жұмыс істемейді.</translation> <translation id="1640283014264083726">RSA шифрлауына ие PKCS #1 MD4</translation> <translation id="1641113438599504367">Қауіпсіз шолу</translation> +<translation id="1642492862748815878"><ph name="DEVICE" /> және тағы <ph name="NUMBER_OF_DEVICES" /> Bluetooth құрылғысына қосылды.</translation> <translation id="1642494467033190216">Басқа түзету мүмкіндтерін қосудан бұрын түпкі қорғанысты алып тастау және қайта іске қосу қажет.</translation> <translation id="1643072738649235303">X9.62 ECDSA, SHA-1 алгоритмімен қол қою</translation> <translation id="1643921258693943800">Nearby Share функциясын пайдалану үшін Bluetooth және Wi-Fi қосыңыз.</translation> @@ -1816,6 +1818,7 @@ <translation id="2885378588091291677">Тапсырмалар реттегіші</translation> <translation id="2885729872133513017">Сервер жауабының шифрын шешу барысында ақау орын алды.</translation> <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation> +<translation id="288734198558082692"><ph name="DEVICE" /> және тағы <ph name="NUMBER_OF_DEVICES" /> құрылғы</translation> <translation id="2889064240420137087">Сілтеме ашу әдісі…</translation> <translation id="2891922230654533301"><ph name="APP_NAME" /> кіру үшін құрылғыңызды пайдаланасыз ба?</translation> <translation id="2893168226686371498">Әдепкі браузер</translation> @@ -2750,6 +2753,7 @@ <translation id="3884152383786131369">Бірнеше тілдегі веб-мазмұн осы тізімдегі бірінші тілді пайдаланады. Бұл параметрлер браузер параметрлерімен синхрондалады. <ph name="BEGIN_LINK_LEARN_MORE" />Толығырақ<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3885112598747515383">Жаңартуларды әкімшіңіз басқарады.</translation> <translation id="3886446263141354045">Бұл сайтқа кіру сұрауыңыз <ph name="NAME" /> деген контактіге жіберілді</translation> +<translation id="3887022758415973389">Құрылғылар тізімін көрсету</translation> <translation id="3888053818972567950"><ph name="WEB_DRIVE" /> байланысы</translation> <translation id="3888550877729210209"><ph name="LOCK_SCREEN_APP_NAME" /> қолданбасымен жазбалар жазу</translation> <translation id="3888586133700543064">Бұл ақпарат Assistant ақауын жақсырақ түсінуімізге көмектеседі. Ол 90 күнге дейін сақталады және тиісті инженерлер мен кері байланыс ұжымына ғана қолжетімді болады.</translation> @@ -3460,6 +3464,7 @@ <translation id="4662373422909645029">Лақап атта сан болмауы керек</translation> <translation id="4662788913887017617">Осы бетбелгіні iPhone арқылы бөлісіңіз</translation> <translation id="4663373278480897665">Камераны пайдалануға рұқсат берілген</translation> +<translation id="4664289193573249666">Chrome OS параметрлерінде қауіпсіз DNS функциясын басқару</translation> <translation id="4664482161435122549">PKCS #12 экспорттау қатесі</translation> <translation id="4665014895760275686">Өндірушісі</translation> <translation id="4665446389743427678"><ph name="SITE" /> сайты сақтаған барлық деректер жойылады.</translation> @@ -5992,6 +5997,7 @@ <translation id="7478623944308207463">Қолданбаларыңыз бен параметрлеріңіз осы Google есептік жазбасымен кірген барлық Chrome OS құрылғыларында синхрондалады. Браузерді синхрондау опцияларын <ph name="LINK_BEGIN" />Chrome параметрлерінен<ph name="LINK_END" /> қараңыз.</translation> <translation id="7478658909253570368">Сайттардың тізбекті порттарға қосылуына рұқсат бермеу</translation> <translation id="7479221278376295180">Жад көлемін пайдалануды шолу</translation> +<translation id="747981547666531654">"<ph name="FIRST_DEVICE" />" және "<ph name="SECOND_DEVICE" />" деп аталатын Bluetooth құрылғыларына қосылды.</translation> <translation id="7481312909269577407">Басқаға жіберу</translation> <translation id="7481358317100446445">Дайын</translation> <translation id="748138892655239008">Сертификаттың негізгі шектеулері</translation> @@ -6044,6 +6050,7 @@ <translation id="7531771599742723865">Құрылғы қолданылып жатыр</translation> <translation id="7531779363494549572">"Параметрлер > Қолданбалар мен хабарландырулар > Хабарландырулар" тармағына өтіңіз.</translation> <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> жауап бермей жатыр. Оны жабу үшін "Қолмен жабу" опциясын таңдаңыз.</translation> +<translation id="7535730537657706072">Құрылғыдан инкогнито режиміндегі браузерді қолдану тарихын өшіру үшін барлық инкогнито қойындысын жабыңыз.</translation> <translation id="7535791657097741517">Жарық тақырыпты қосу</translation> <translation id="7537451260744431038">Сайттар шолуды жақсарту (мысалы, есептік жазбадан шығармау не сатып алу себетіңіздегі нәрселерді есте сақтау) үшін cookie файлдарын пайдалана алмайды.</translation> <translation id="753769905878158714">Мекенжай жолағында іздегіңіз келген веб-сайтқа қатысты кілтсөзді енгізіңіз. Содан кейін жалғастыру үшін пернелер тіркесімін қолданыңыз.</translation> @@ -6659,6 +6666,7 @@ <translation id="8138217203226449454">Іздеу провайдерін өзгерткіңіз келе ме?</translation> <translation id="8138997515734480534">"<ph name="VM_NAME" />" күйі</translation> <translation id="8139447493436036221">Google Drive файлдары</translation> +<translation id="8140070492745508800"><ph name="FIRST_DEVICE" />, <ph name="SECOND_DEVICE" /></translation> <translation id="8141584439523427891">Балама браузер ашылуда.</translation> <translation id="8141725884565838206">Құпия сөздеріңізді басқару</translation> <translation id="814204052173971714">{COUNT,plural, =1{бейне}other{# бейне}}</translation> @@ -7374,6 +7382,7 @@ <translation id="8909782404367982052">Google Lens арқылы кескіндер іздеу үшін сүйреу</translation> <translation id="8909833622202089127">Сайт орналасқан жеріңізді бақылауда</translation> <translation id="8910222113987937043">Бетбелгілерге, тарихқа, құпия сөздерге және басқа параметрлерге енгізілген өзгертулер бұдан әрі Google есептік жазбасымен синхрондалмайды. Алайда бұрыннан бар деректер Google есептік жазбасында сақталады және <ph name="BEGIN_LINK" />Google бақылау тақтасында<ph name="END_LINK" /> басқарылады.</translation> +<translation id="8910987510378294980">Құрылғылар тізімін жасыру</translation> <translation id="8912362522468806198">Google есептік жазбасы</translation> <translation id="8912793549644936705">Созу</translation> <translation id="8912810933860534797">Автоматты түрде іздеу функциясын қосу</translation> @@ -7491,6 +7500,7 @@ <translation id="9033765790910064284">Бәрібір жалғастыру</translation> <translation id="9033857511263905942">&Қою</translation> <translation id="903480517321259405">PIN кодын қайта теру</translation> +<translation id="9037054491984310631">"<ph name="DEVICE" />" деп аталатын Bluetooth құрылғысына қосылды.</translation> <translation id="9037640663275993951">Құрылғыға рұқсат берілмеген.</translation> <translation id="9037818663270399707">Барлық желі трафигі үшін жеке байланыс жасалмайды.</translation> <translation id="9037965129289936994">Түпнұсқаны көрсету</translation> @@ -7571,6 +7581,7 @@ <translation id="9112786533191410418"><ph name="FILE_NAME" /> қауіпті болуы мүмкін. Сканерлеу үшін Google-ға жіберу керек пе?</translation> <translation id="9112987648460918699">Табу…</translation> <translation id="9113240369465613386">Тек тақ беттер</translation> +<translation id="9113469270512809735">Жақында жабылған элементтерді ауыстыру</translation> <translation id="9114663181201435112">Жүйеге оңай кіру</translation> <translation id="9115675100829699941">&Бетбелгілер</translation> <translation id="9116465289595958864">Соңғы өзгертілген уақыты</translation>
diff --git a/chrome/app/resources/generated_resources_ky.xtb b/chrome/app/resources/generated_resources_ky.xtb index 7232f28..8a1d4abc 100644 --- a/chrome/app/resources/generated_resources_ky.xtb +++ b/chrome/app/resources/generated_resources_ky.xtb
@@ -161,6 +161,7 @@ <translation id="1165039591588034296">Ката</translation> <translation id="1166212789817575481">Өтмөктөрдү оңго карай жабуу</translation> <translation id="1166583374608765787">Аталышка киргизилген өзгөртүүнү карап көрүү</translation> +<translation id="1166596238782048887"><ph name="TAB_TITLE" /> төмөнкүгө таандык: <ph name="DESK_TITLE" /></translation> <translation id="1168020859489941584"><ph name="TIME_REMAINING" /> кийин ачылат…</translation> <translation id="1170288591054440704">Сайт түзмөгүңүзгө орнотулган ариптерди колдонордо уруксат суралсын</translation> <translation id="1171135284592304528">Объект өзгөргөндө ал баскычтоп фокусу менен баса белгиленсин</translation> @@ -620,6 +621,7 @@ <translation id="1640235262200048077"><ph name="IME_NAME" /> Linux колдонмолорунда азырынча иштебейт</translation> <translation id="1640283014264083726">PKCS #1 MD4 RSA шифрлөөсү менен</translation> <translation id="1641113438599504367">Коопсуз серептөө</translation> +<translation id="1642492862748815878"><ph name="DEVICE" /> жана дагы <ph name="NUMBER_OF_DEVICES" /> Bluetooth түзмөгүнө туташты</translation> <translation id="1642494467033190216">Башка мүчүлүштүктөрдү оңдоо өзгөчөлүктөрүн иштетүүдөн мурун, тамыр коргоосун алып салып, түзмөктү өчүрүп-күйгүзүшүңүз керек.</translation> <translation id="1643072738649235303">X9.62 ECDSA Колтамгасы SHA-1 менен</translation> <translation id="1643921258693943800">Nearby Share'ны колдонуу үчүн Bluetooth менен Wi-Fi'ды күйгүзүңүз</translation> @@ -1835,6 +1837,7 @@ <translation id="2885378588091291677">Тапшырмаларды башкаргыч</translation> <translation id="2885729872133513017">Сервердин жообунун шифрин чечмелеп жатканда ката кетти.</translation> <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation> +<translation id="288734198558082692"><ph name="DEVICE" /> жана дагы <ph name="NUMBER_OF_DEVICES" /></translation> <translation id="2889064240420137087">Шилтемени төмөнкү менен ачуу…</translation> <translation id="2891922230654533301"><ph name="APP_NAME" /> колдонмосуна түзмөгүңүздөн киресизби?</translation> <translation id="2893168226686371498">Демейки серепчи</translation> @@ -2769,6 +2772,7 @@ <translation id="3884152383786131369">Бир нече тилде жеткиликтүү болгон вебдеги мазмун бул тизмедеги колдоого алынган биринчи тилди колдонот. Бул параметрлер серепчиңиздин жөндөөлөрү менен шайкештирилет. <ph name="BEGIN_LINK_LEARN_MORE" />Кеңири маалымат<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3885112598747515383">Жаңыртууларды администраторуңуз башкарат</translation> <translation id="3886446263141354045">Бул сайтка кирүү өтүнүчүңүз <ph name="NAME" /> деген колдонуучуга жөнөтүлдү</translation> +<translation id="3887022758415973389">Түзмөктөрдүн тизмесин көрсөтүү</translation> <translation id="3888053818972567950">Туташуу: <ph name="WEB_DRIVE" /></translation> <translation id="3888550877729210209"><ph name="LOCK_SCREEN_APP_NAME" /> колдонмосунда жазылууда</translation> <translation id="3888586133700543064">Бул маалымат Жардамчыңызда келип чыккан маселени түшүнүүгө жардам берет. Ал 90 күн сакталып, тиешелүү инженердик жана пикир боюнча жамааттар тарабынан көзөмөлгө алынат.</translation> @@ -3480,6 +3484,7 @@ <translation id="4662373422909645029">Ылакап атта сан болбошу керек</translation> <translation id="4662788913887017617">Бул кыстарманы iPhone’уңуз менен бөлүшүңүз</translation> <translation id="4663373278480897665">Камераны колдонууга уруксат берилди</translation> +<translation id="4664289193573249666">Chrome OS жөндөөлөрүнөн Коопсуз DNS'ти башкаруу</translation> <translation id="4664482161435122549">PKCS #12 экспорт катасы</translation> <translation id="4665014895760275686">Өндүрүүчү</translation> <translation id="4665446389743427678"><ph name="SITE" /> сайтында сакталган бардык маалыматтар өчүрүлөт.</translation> @@ -6012,6 +6017,7 @@ <translation id="7478623944308207463">Колдонмолор менен жөндөөлөр Google аккаунтуңуз менен кирип турган бардык Chrome OS түзмөктөрүндө шайкештирилет. Серепчини шайкештирүү параметрлерин көрүү үчүн <ph name="LINK_BEGIN" />Chrome жөндөөлөрүнө<ph name="LINK_END" /> өтүңүз.</translation> <translation id="7478658909253570368">Сайттар ырааттуу портторго туташпасын</translation> <translation id="7479221278376295180">Сактагычтын колдонулушу жөнүндө жалпы маалымат</translation> +<translation id="747981547666531654"><ph name="FIRST_DEVICE" /> жана <ph name="SECOND_DEVICE" /> деп аталган Bluetooth түзмөктөрүнө туташты</translation> <translation id="7481312909269577407">Багыттоо</translation> <translation id="7481358317100446445">Даяр</translation> <translation id="748138892655239008">Тастыктаманын негизги чектөөлөрү</translation> @@ -6064,6 +6070,7 @@ <translation id="7531771599742723865">Түзмөк колдонулууда</translation> <translation id="7531779363494549572">Жөндөөлөр > Колдонмолор жана билдирмелер > Билдирмелер бөлүмүнө өтүңүз.</translation> <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> жооп бербей жатат. Аны жабуу үчүн "Мажбурлап токтотуу" баскычын басыңыз.</translation> +<translation id="7535730537657706072">Түзмөгүңүздөн жашыруун көрүлгөн вебсайттарды тазалоо үчүн бардык жашыруун өтмөктөрдү жабыңыз</translation> <translation id="7535791657097741517">Жарык теманы күйгүзүү</translation> <translation id="7537451260744431038">Серептөөнү ыңгайлаштыруу, мисалы, аккаунттан чыгарбоо же арабадагы сатып алган нерселериңизди эстеп калуу үчүн сайттар cookie файлдарын колдоно алышат</translation> <translation id="753769905878158714">Издегиңиз келген вебсайттын ачкыч сөзүн дарек тилкесине киргизиңиз. Андан соң, улантуу үчүн ыкчам баскычты колдонуңуз.</translation> @@ -6680,6 +6687,7 @@ <translation id="8138217203226449454">Издөө кызматын башкага өзгөртөйүн дедиңиз беле?</translation> <translation id="8138997515734480534"><ph name="VM_NAME" /> абалы</translation> <translation id="8139447493436036221">Google Drive файлдары</translation> +<translation id="8140070492745508800"><ph name="FIRST_DEVICE" />, <ph name="SECOND_DEVICE" /></translation> <translation id="8141584439523427891">Кошумча серепчи азыр ачылууда</translation> <translation id="8141725884565838206">Сырсөздөрүңүздү башкарыңыз</translation> <translation id="814204052173971714">{COUNT,plural, =1{видео}other{# видео}}</translation> @@ -7395,6 +7403,7 @@ <translation id="8909782404367982052">Сүрөттөрдү Google Lens менен издөө үчүн сүйрөңүз</translation> <translation id="8909833622202089127">Сайт кайда жүргөнүңүзгө көз салууда</translation> <translation id="8910222113987937043">Кыстармаларыңызга, таржымалыңызга, сырсөздөрүңүзгө жана башка жөндөөлөргө киргизилген өзгөрүүлөр Google Аккаунтуңуз менен шайкештирилбейт. Ал эми учурдагы дайын-даректериңиз Google Аккаунтуңузде сакталып кала берет жана аларды <ph name="BEGIN_LINK" />Google Жеке кеңсесинен<ph name="END_LINK" /> башкарса болот.</translation> +<translation id="8910987510378294980">Түзмөктөрдүн тизмесин жашыруу</translation> <translation id="8912362522468806198">Google аккаунту</translation> <translation id="8912793549644936705">Чоюу</translation> <translation id="8912810933860534797">Авто-скандоону иштетүү</translation> @@ -7512,6 +7521,7 @@ <translation id="9033765790910064284">Баары бир улантуу</translation> <translation id="9033857511263905942">&Чаптоо</translation> <translation id="903480517321259405">PIN кодду кайра териңиз</translation> +<translation id="9037054491984310631"><ph name="DEVICE" /> деп аталган Bluetooth түзмөгүнө туташты</translation> <translation id="9037640663275993951">Түзмөккө уруксат жок</translation> <translation id="9037818663270399707">Туташууңуз тармактагы трафик үчүн купуя эмес</translation> <translation id="9037965129289936994">Түпкү бетин көрсөтүү</translation> @@ -7592,6 +7602,7 @@ <translation id="9112786533191410418"><ph name="FILE_NAME" /> кооптуу болушу мүмкүн. Текшерүү үчүн Google'га жөнөтүлсүнбү?</translation> <translation id="9112987648460918699">Табуу…</translation> <translation id="9113240369465613386">Так сандагы барактар гана</translation> +<translation id="9113469270512809735">Жакында жабылган нерселерди өчүрүү/күйгүзүү</translation> <translation id="9114663181201435112">Аккаунтка оңой кирүү</translation> <translation id="9115675100829699941">&Кыстармалар</translation> <translation id="9116465289595958864">Акыркы жолу өзгөртүлгөн күнү</translation>
diff --git a/chrome/app/resources/generated_resources_pa.xtb b/chrome/app/resources/generated_resources_pa.xtb index 2f08e8f..641d5a89 100644 --- a/chrome/app/resources/generated_resources_pa.xtb +++ b/chrome/app/resources/generated_resources_pa.xtb
@@ -101,6 +101,7 @@ <translation id="1103523840287552314"><ph name="LANGUAGE" /> ਦਾ ਹਮੇਸ਼ਾਂ ਅਨੁਵਾਦ ਕਰੋ</translation> <translation id="1108600514891325577">&ਬੰਦ ਕਰੋ</translation> <translation id="1110155001042129815">ਠਹਿਰੋ</translation> +<translation id="1111781754511998498">ਪ੍ਰੋਜੈਕਟਰ</translation> <translation id="1112420131909513020">ਬੈਕਗ੍ਰਾਊਂਡ ਟੈਬ ਬਲੂਟੁੱਥ ਦੀ ਵਰਤੋਂ ਕਰ ਰਹੀ ਹੈ</translation> <translation id="1113892970288677790">ਚੁਣੇ ਗਏ ਆਰਟਵਰਕ ਅਤੇ ਚਿੱਤਰਾਂ ਦੀ ਚੋਣ ਕਰੋ</translation> <translation id="1114102982691049955"><ph name="PRINTER_MANUFACTURER" /> <ph name="PRINTER_MODEL" /> (USB)</translation> @@ -535,6 +536,7 @@ <translation id="156793199942386351">'<ph name="CURRENTKEY" />' ਨੂੰ ਪਹਿਲਾਂ ਹੀ '<ph name="ACTION" />' ਕਾਰਵਾਈ ਦੇ ਜ਼ਿੰਮੇ ਲਗਾ ਦਿੱਤਾ ਗਿਆ ਹੈ। <ph name="RESPONSE" /> ਲਈ ਕਿਸੇ ਵੀ ਕੁੰਜੀ ਨੂੰ ਦਬਾਓ।</translation> <translation id="1567993339577891801">JavaScript Console</translation> <translation id="1568323446248056064">ਡਿਸਪਲੇ ਡੀਵਾਈਸ ਸੈਟਿੰਗਾਂ ਖੋਲ੍ਹੋ</translation> +<translation id="1570604804919108255">ਸੂਚਨਾਵਾਂ ਨੂੰ ਅਣਮਿਊਟ ਕਰੋ</translation> <translation id="1571738973904005196">ਇਹ ਟੈਬ ਦੇਖੋ: <ph name="TAB_ORIGIN" /></translation> <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (ਮਹਿਮਾਨ)</translation> <translation id="1572266655485775982">ਵਾਈ-ਫਾਈ ਚਾਲੂ</translation> @@ -592,6 +594,7 @@ <translation id="1621485112342885423">ਤੁਹਾਡੇ ਕਾਰਟ</translation> <translation id="1621729191093924223">ਜਿਹੜੀਆਂ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਲਈ ਮਾਈਕ੍ਰੋਫ਼ੋਨ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ ਉਹ ਕੰਮ ਨਹੀਂ ਕਰਨਗੀਆਂ</translation> <translation id="1621831347985899379"><ph name="DEVICE_TYPE" /> ਡਾਟਾ ਮਿਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ</translation> +<translation id="1621984899599015181">ਸਾਂਝਾਕਰਨ ਦੇ ਵਿਕਲਪਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਤੁਹਾਡੀ ਸੰਸਥਾ ਵੱਲੋਂ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। ਸ਼ਾਇਦ ਕੁਝ ਆਈਟਮਾਂ ਲੁਕੀਆਂ ਹੋ ਸਕਦੀਆਂ ਹਨ।</translation> <translation id="1622054403950683339">ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕ ਛੱਡੋ</translation> <translation id="1623132449929929218">ਚਿੱਤਰ ਇਸ ਵੇਲੇ ਉਪਲਬਧ ਨਹੀਂ ਹਨ। ਵਾਲਪੇਪਰ ਸੰਗ੍ਰਹਿ ਦੇਖਣ ਲਈ ਕਿਰਪਾ ਕਰਕੇ ਇੰਟਰਨੈੱਟ ਨਾਲ ਮੁੜ-ਕਨੈਕਟ ਕਰੋ।</translation> <translation id="1623723619460186680">ਨੀਲੀ ਲਾਈਟ ਘਟਾਉਣਾ</translation> @@ -837,6 +840,7 @@ <translation id="1850508293116537636">&ਕਲੌਕਵਾਈਜ ਰੋਟੇਟ ਕਰੋ</translation> <translation id="1852141627593563189">ਹਾਨੀਕਾਰਕ ਸਾਫ਼ਟਵੇਅਰ ਲੱਭੋ</translation> <translation id="1852799913675865625">ਫਾਈਲ ਪੜ੍ਹਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਨ ਵੇਲੇ ਇੱਕ ਗੜਬੜ ਹੋਈ ਸੀ: <ph name="ERROR_TEXT" />.</translation> +<translation id="1854049213067042715">ਉੱਥੋਂ ਜਾਰੀ ਰੱਖੋ ਜਿੱਥੇ ਤੁਸੀਂ ਛੱਡਿਆ ਸੀ। ਤੁਸੀਂ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਜਾ ਕੇ ਐਪਾਂ ਨੂੰ ਹਮੇਸ਼ਾਂ ਸ਼ੁਰੂਆਤ 'ਤੇ ਮੁੜ-ਬਹਾਲ ਕਰਨ ਲਈ ਸੈੱਟ ਕਰ ਸਕਦੇ ਹੋ ਜਾਂ ਮੁੜ-ਬਹਾਲੀ ਨੂੰ ਬੰਦ ਕਰ ਸਕਦੇ ਹੋ।</translation> <translation id="1854180393107901205">ਕਾਸਟ ਕਰਨਾ ਰੋਕੋ</translation> <translation id="1855079636134697549">ਕੈਮਰਾ ਚਾਲੂ ਹੈ</translation> <translation id="1856715684130786728">ਨਿਰਧਾਰਿਤ ਸਥਾਨ ਜੋੜੋ...</translation> @@ -966,6 +970,7 @@ <translation id="1989113344093894667">ਸਮੱਗਰੀ ਨੂੰ ਕੈਪਚਰ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ</translation> <translation id="1990046457226896323">ਬੋਲੀ ਵਾਲੀਆਂ ਫ਼ਾਈਲਾਂ ਨੂੰ ਡਾਊਨਲੋਡ ਕੀਤਾ ਗਿਆ</translation> <translation id="1990512225220753005">ਇਸ ਪੰਨੇ 'ਤੇ ਸ਼ਾਰਟਕੱਟ ਨਾ ਦਿਖਾਓ</translation> +<translation id="199191324030140441">'ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ' ਨੂੰ ਬੰਦ ਕਰੋ</translation> <translation id="1992397118740194946">ਸੈੱਟ ਨਹੀਂ ਕੀਤਾ</translation> <translation id="1992924914582925289">ਡੀਵਾਈਸ ਤੋਂ ਹਟਾਓ</translation> <translation id="1994173015038366702">ਸਾਈਟ URL</translation> @@ -1007,6 +1012,7 @@ ਤੁਸੀਂ ਆਪਣੇ ਡੀਵਾਈਸ 'ਤੇ Family Link ਐਪ ਸਥਾਪਤ ਕਰਕੇ ਇਸ ਖਾਤੇ ਦੀਆਂ ਸੈਟਿੰਗਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰ ਸਕਦੇ ਹੋ। ਅਸੀਂ ਤੁਹਾਨੂੰ ਹਿਦਾਇਤਾਂ ਈਮੇਲ ਵਿੱਚ ਭੇਜੀਆਂ ਹਨ।</translation> <translation id="2040460856718599782">ਓਹੋ! ਤੁਹਾਡੇ ਪ੍ਰਮਾਣੀਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦੇ ਸਮੇਂ ਕੁਝ ਗਲਤ ਹੋ ਗਿਆ। ਕਿਰਪਾ ਕਰਕੇ ਆਪਣੇ ਸਾਈਨ-ਇਨ ਕ੍ਰੀਡੈਂਸ਼ੀਅਲਾਂ ਦੀ ਦੋਹਰੀ-ਜਾਂਚ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</translation> +<translation id="2040894699575719559">ਟਿਕਾਣਾ ਬਲਾਕ ਕੀਤਾ ਗਿਆ</translation> <translation id="2042279886444479655">ਕਿਰਿਆਸ਼ੀਲ ਪ੍ਰੋਫਾਈਲ</translation> <translation id="2044014337866019681">ਕਿਰਪਾ ਕਰਕੇ ਪੱਕਾ ਕਰੋ ਕਿ ਤੁਸੀਂ ਸੈਸ਼ਨ ਨੂੰ ਅਣਲਾਕ ਕਰਨ ਲਈ <ph name="ACCOUNT" /> ਦੀ ਪੁਸ਼ਟੀ ਕਰ ਰਹੇ ਹੋ।</translation> <translation id="204497730941176055">Microsoft ਪ੍ਰਮਾਣ-ਪੱਤਰ ਟੈਮਪਲੇਟ ਨਾਮ</translation> @@ -1494,6 +1500,7 @@ <translation id="2527167509808613699">ਕਿਸੇ ਵੀ ਪ੍ਰਕਾਰ ਦਾ ਕਨੈਕਸ਼ਨ</translation> <translation id="2530166226437958497">ਸਮੱਸਿਆ-ਨਿਪਟਾਰਾ</translation> <translation id="2532589005999780174">ਵੱਧ ਕੰਟ੍ਰਾਸਟ ਮੋਡ</translation> +<translation id="2533649878691950253">ਤੁਹਾਡੇ ਸਹੀ ਟਿਕਾਣੇ ਬਾਰੇ ਜਾਣਨ ਤੋਂ ਰੋਕਣ ਲਈ ਇਸ ਸਾਈਟ ਨੂੰ ਬਲਾਕ ਕੀਤਾ ਗਿਆ ਸੀ, ਕਿਉਂਕਿ ਤੁਸੀਂ ਆਮ ਤੌਰ 'ਤੇ ਇਸਦੀ ਆਗਿਆ ਨਹੀਂ ਦਿੰਦੇ</translation> <translation id="253434972992662860">&ਰੋਕੋੇ</translation> <translation id="253557089021624350">ਕੀਪਅਲਾਈਵ ਦੀ ਗਣਨਾ</translation> <translation id="2535799430745250929">ਕੋਈ ਸੈਲਿਊਲਰ ਨੈੱਟਵਰਕ ਮੌਜੂਦ ਨਹੀਂ ਹੈ</translation> @@ -1681,6 +1688,7 @@ <translation id="2738771556149464852">ਬਾਅਦ ਵਿੱਚ ਨਹੀਂ</translation> <translation id="2739191690716947896">ਡੀਬੱਗ</translation> <translation id="2739240477418971307">ਆਪਣੀਆਂ ਪਹੁੰਚਯੋਗਤਾ ਸੈਟਿੰਗਾਂ ਬਦਲੋ</translation> +<translation id="2739965161385757621">ਮੇਰੀਆਂ ਸੈਟਿੰਗਾਂ ਦੀ ਸਮੀਖਿਆ ਕਰੋ</translation> <translation id="274029851662193272">ਨਿਰਾਸ਼</translation> <translation id="2740531572673183784">ਠੀਕ</translation> <translation id="2741713322780029189">ਰਿਕਵਰੀ ਟਰਮੀਨਲ ਖੋਲ੍ਹੋ</translation> @@ -1805,6 +1813,7 @@ <translation id="2864601841139725659">ਆਪਣੇ ਪ੍ਰੋਫਾਈਲ ਤਸਵੀਰ ਦੀ ਸੈਟਿੰਗ ਕਰੋ</translation> <translation id="2865919525181940183">ਉਹਨਾਂ ਪ੍ਰੋਗਰਾਮਾਂ ਦਾ ਸਕ੍ਰੀਨਸ਼ਾਟ ਜੋ ਫਿਲਹਾਲ ਸਕ੍ਰੀਨ 'ਤੇ ਮੌਜੂਦ ਹਨ</translation> <translation id="286674810810214575">ਪਾਵਰ ਸਰੋਤਾਂ ਦੀ ਜਾਂਚ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ...</translation> +<translation id="2866876751734765554">ਪਰਦੇਦਾਰੀ ਸਮੀਖਿਆ</translation> <translation id="2867768963760577682">ਪਿੰਨ ਕੀਤੀ ਟੈਬ ਦੇ ਤੌਰ ਤੇ ਖੋਲ੍ਹੋ</translation> <translation id="2868746137289129307">ਇਹ ਐਕਸਟੈਂਸ਼ਨ ਪੁਰਾਣੀ ਹੈ ਅਤੇ ਐਂਟਰਪ੍ਰਾਈਜ ਨੀਤੀ ਵੱਲੋਂ ਬੰਦ ਕੀਤੀ ਗਈ ਹੈ। ਇਹ ਉਦੋਂ ਸਵੈਚਲਿਤ ਤੌਰ 'ਤੇ ਚਾਲੂ ਹੋ ਸਕਦੀ ਹੈ, ਜਦੋਂ ਕੋਈ ਨਵਾਂ ਵਰਜਨ ਉਪਲਬਧ ਹੁੰਦਾ ਹੈ।</translation> <translation id="2870560284913253234">ਸਾਈਟ</translation> @@ -2333,6 +2342,7 @@ <translation id="3446274660183028131">Windows ਨੂੰ ਸਥਾਪਤ ਕਰਨ ਲਈ ਕਿਰਪਾ ਕਰਕੇ Parallels Desktop ਨੂੰ ਲਾਂਚ ਕਰੋ।</translation> <translation id="344630545793878684">ਕੁਝ ਵੈਬਸਾਈਟਾਂ ਤੇ ਆਪਣਾ ਡਾਟਾ ਪੜ੍ਹੋ</translation> <translation id="3446650212859500694">ਇਸ ਫ਼ਾਈਲ ਵਿੱਚ ਸੰਵੇਦਨਸ਼ੀਲ ਸਮੱਗਰੀ ਹੈ</translation> +<translation id="3446827946208017735">ਇੱਕੋ ਹੀ ਥਾਂ 'ਤੇ ਪਰਦੇਦਾਰੀ ਸੰਬੰਧੀ ਸਭ ਤੋਂ ਗੰਭੀਰ ਸੈਟਿੰਗਾਂ ਨੂੰ ਸਮਝੋ ਅਤੇ ਉਨ੍ਹਾਂ ਦੀ ਸਮੀਖਿਆ ਕਰੋ</translation> <translation id="3448086340637592206">Google Chrome ਅਤੇ Chrome OS ਦੇ ਵਧੀਕ ਨਿਯਮ</translation> <translation id="3448492834076427715">ਖਾਤਾ ਅੱਪਡੇਟ ਕਰੋ</translation> <translation id="3449393517661170867">ਟੈਬ ਕੀਤੀ ਗਈ ਨਵੀਂ ਵਿੰਡੋ</translation> @@ -3761,6 +3771,7 @@ <translation id="4996851818599058005">{NUM_VMS,plural, =0{ਕੋਈ <ph name="VM_TYPE" /> VM ਨਹੀਂ ਮਿਲਿਆ}=1{1 <ph name="VM_TYPE" /> VM ਮਿਲਿਆ: <ph name="VM_NAME_LIST" />}other{{NUM_VMS} <ph name="VM_TYPE" /> VM ਮਿਲੇ: <ph name="VM_NAME_LIST" />}}</translation> <translation id="4997086284911172121">ਕੋਈ ਇੰਟਰਨੈੱਟ ਕਨੈਕਸ਼ਨ ਨਹੀਂ ਹੈ।</translation> <translation id="4998430619171209993">ਚਾਲੂ</translation> +<translation id="4999804342505941663">'ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ' ਨੂੰ ਚਾਲੂ ਕਰੋ</translation> <translation id="5000922062037820727">ਬਲੌਕ ਕੀਤੇ ( ਸਿਫ਼ਾਰਸ਼ ਕੀਤੇ)</translation> <translation id="5005498671520578047">ਪਾਸਵਰਡ ਕਾਪੀ ਕਰੋ</translation> <translation id="5006218871145547804">Crostini Android ਐਪ ADB</translation> @@ -5085,6 +5096,7 @@ <translation id="6468485451923838994">ਫੌਂਟ</translation> <translation id="6468773105221177474"><ph name="FILE_COUNT" /> ਫ਼ਾਈਲਾਂ</translation> <translation id="6469557521904094793">ਸੈਲਿਊਲਰ ਨੈੱਟਵਰਕ ਨੂੰ ਚਾਲੂ ਕਰੋ</translation> +<translation id="6470823736074966819">ਸੂਚਨਾਵਾਂ ਨੂੰ ਮਿਊਟ ਕਰੋ</translation> <translation id="6472893788822429178">ਹੋਮ ਬਟਨ ਦਿਖਾਓ</translation> <translation id="6474498546677193336">ਸਾਂਝਾਕਰਨ ਹਟਾਇਆ ਨਹੀਂ ਜਾ ਸਕਿਆ ਕਿਉਂਕਿ ਐਪਲੀਕੇਸ਼ਨ ਇਸ ਫੋਲਡਰ ਦੀ ਵਰਤੋਂ ਕਰ ਰਹੀ ਹੈ। ਅਗਲੀ ਵਾਰ Linux ਬੰਦ ਹੋਣ 'ਤੇ ਫੋਲਡਰ ਸਾਂਝਾ ਨਹੀਂ ਕੀਤਾ ਜਾਵੇਗਾ।</translation> <translation id="6474884162850599008">'Google ਡਰਾਈਵ' ਖਾਤੇ ਨੂੰ ਡਿਸਕਨੈਕਟ ਕਰੋ</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb index 37f0367..5315c83 100644 --- a/chrome/app/resources/generated_resources_pl.xtb +++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -159,6 +159,7 @@ <translation id="1165039591588034296">Błąd</translation> <translation id="1166212789817575481">Zamknij karty po prawej</translation> <translation id="1166583374608765787">Sprawdź zmienioną nazwę</translation> +<translation id="1166596238782048887"><ph name="TAB_TITLE" /> należy do biurka <ph name="DESK_TITLE" /></translation> <translation id="1168020859489941584">Otworzę za <ph name="TIME_REMAINING" />…</translation> <translation id="1170288591054440704">Pytaj, gdy strona chce używać czcionek zainstalowanych na urządzeniu</translation> <translation id="1171135284592304528">Gdy obiekt wybrany za pomocą klawiatury zmienia się, podświetlaj go</translation> @@ -619,6 +620,7 @@ <translation id="1640235262200048077">W aplikacjach na Linuksa <ph name="IME_NAME" /> jeszcze nie działa</translation> <translation id="1640283014264083726">PKCS #1, MD4 z szyfrowaniem RSA</translation> <translation id="1641113438599504367">Bezpieczne przeglądanie</translation> +<translation id="1642492862748815878">Połączono z urządzeniem <ph name="DEVICE" /> i <ph name="NUMBER_OF_DEVICES" /> innymi urządzeniami Bluetooth</translation> <translation id="1642494467033190216">Zanim włączysz inne funkcje debugowania, musisz wyłączyć zabezpieczenie rootfs i ponownie uruchomić urządzenie.</translation> <translation id="1643072738649235303">Podpis X9.62 ECDSA z SHA-1</translation> <translation id="1643921258693943800">Aby używać Udostępniania w pobliżu, włącz Bluetooth i Wi-Fi</translation> @@ -1817,6 +1819,7 @@ <translation id="2885378588091291677">Menedżer zadań</translation> <translation id="2885729872133513017">Podczas dekodowania odpowiedzi serwera wystąpił problem.</translation> <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation> +<translation id="288734198558082692"><ph name="DEVICE" /> i jeszcze <ph name="NUMBER_OF_DEVICES" /></translation> <translation id="2889064240420137087">Otwórz link przy użyciu...</translation> <translation id="2891922230654533301">Chcesz logować się na <ph name="APP_NAME" /> za pomocą tego urządzenia?</translation> <translation id="2893168226686371498">Domyślna przeglądarka</translation> @@ -2751,6 +2754,7 @@ <translation id="3884152383786131369">Treści internetowe dostępne w wielu językach będą wyświetlać się w pierwszym obsługiwanym języku z tej listy. Te ustawienia są zsynchronizowane z ustawieniami przeglądarki. <ph name="BEGIN_LINK_LEARN_MORE" />Więcej informacji<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3885112598747515383">Aktualizacjami zarządza Twój administrator</translation> <translation id="3886446263141354045">Twoja prośba o dostęp to tej strony została wysłana do: <ph name="NAME" /></translation> +<translation id="3887022758415973389">Pokaż listę urządzeń</translation> <translation id="3888053818972567950">Połączenie z usługą <ph name="WEB_DRIVE" /></translation> <translation id="3888550877729210209">Robienie notatek w aplikacji <ph name="LOCK_SCREEN_APP_NAME" /></translation> <translation id="3888586133700543064">Te informacje pomogą nam lepiej zrozumieć Twój problem z Asystentem. Są one przechowywane przez 90 dni, a dostęp do nich mają wyłącznie członkowie odpowiednich zespołów technicznych i pracownicy zajmujący się opiniami użytkowników.</translation> @@ -3461,6 +3465,7 @@ <translation id="4662373422909645029">Pseudonim tylko bez cyfr</translation> <translation id="4662788913887017617">Udostępnij tę zakładkę na iPhonie</translation> <translation id="4663373278480897665">Zezwolono na dostęp do kamery</translation> +<translation id="4664289193573249666">Zarządzaj bezpiecznym serwerem DNS w ustawieniach Chrome OS</translation> <translation id="4664482161435122549">Błąd eksportowania PKCS #12</translation> <translation id="4665014895760275686">Producent</translation> <translation id="4665446389743427678">Wszystkie dane przechowywane przez stronę <ph name="SITE" /> zostaną usunięte.</translation> @@ -5993,6 +5998,7 @@ <translation id="7478623944308207463">Twoje aplikacje i ustawienia będą synchronizować się na wszystkich urządzeniach z Chrome OS, na których zalogujesz się na swoje konto Google. Opcje synchronizacji przeglądarki znajdziesz w <ph name="LINK_BEGIN" />ustawieniach Chrome<ph name="LINK_END" />.</translation> <translation id="7478658909253570368">Nie zezwalaj witrynom na łączenie się z portami szeregowymi</translation> <translation id="7479221278376295180">Informacje o użyciu pamięci</translation> +<translation id="747981547666531654">Połączono z urządzeniami Bluetooth o nazwach <ph name="FIRST_DEVICE" /> i <ph name="SECOND_DEVICE" /></translation> <translation id="7481312909269577407">Dalej</translation> <translation id="7481358317100446445">Gotowa</translation> <translation id="748138892655239008">Podstawowe ograniczenia certyfikatu</translation> @@ -6045,6 +6051,7 @@ <translation id="7531771599742723865">Urządzenie jest w użyciu</translation> <translation id="7531779363494549572">Otwórz Ustawienia > Aplikacje i powiadomienia > Powiadomienia.</translation> <translation id="7532009420053991888">Aplikacja <ph name="LINUX_APP_NAME" /> nie odpowiada. Aby ją zamknąć, wybierz „Wymuś zamknięcie”.</translation> +<translation id="7535730537657706072">Aby usunąć z urządzenia historię przeglądania w trybie incognito, zamknij wszystkie karty incognito</translation> <translation id="7535791657097741517">Włącz jasny motyw</translation> <translation id="7537451260744431038">Strony nie mogą używać plików cookie dla Twojej wygody, by na przykład zapamiętać Twoje logowanie lub zawartość koszyka</translation> <translation id="753769905878158714">W pasku adresu wpisz słowo kluczowe powiązane z witryną, którą chcesz wyszukać. Aby kontynuować, użyj skrótu klawiszowego.</translation> @@ -6662,6 +6669,7 @@ <translation id="8138217203226449454">Czy chodziło o zmianę dostawcy wyszukiwania?</translation> <translation id="8138997515734480534">Stan maszyny wirtualnej <ph name="VM_NAME" /></translation> <translation id="8139447493436036221">Pliki na Dysku Google</translation> +<translation id="8140070492745508800"><ph name="FIRST_DEVICE" />, <ph name="SECOND_DEVICE" /></translation> <translation id="8141584439523427891">Otwieram teraz w alternatywnej przeglądarce</translation> <translation id="8141725884565838206">Zarządzaj hasłami</translation> <translation id="814204052173971714">{COUNT,plural, =1{film}few{# filmy}many{# filmów}other{# filmu}}</translation> @@ -7379,6 +7387,7 @@ <translation id="8909782404367982052">Przeciągnij, aby wyszukać informacje o obrazie za pomocą Obiektywu Google</translation> <translation id="8909833622202089127">Strona śledzi Twoją lokalizację</translation> <translation id="8910222113987937043">Twoje zakładki, historia, hasła i inne ustawienia nie będą już synchronizowane z kontem Google. Wcześniejsze dane pozostaną zapisane na koncie Google. Możesz nimi zarządzać w <ph name="BEGIN_LINK" />Panelu Google<ph name="END_LINK" />.</translation> +<translation id="8910987510378294980">Ukryj listę urządzeń</translation> <translation id="8912362522468806198">Konta Google</translation> <translation id="8912793549644936705">Rozciągnij</translation> <translation id="8912810933860534797">Włącz automatyczne skanowanie</translation> @@ -7496,6 +7505,7 @@ <translation id="9033765790910064284">Kontynuuj mimo to</translation> <translation id="9033857511263905942">&Wklej</translation> <translation id="903480517321259405">Ponownie wpisz kod PIN</translation> +<translation id="9037054491984310631">Połączono z urządzeniem Bluetooth o nazwie <ph name="DEVICE" /></translation> <translation id="9037640663275993951">Urządzenie nie zostało dopuszczone</translation> <translation id="9037818663270399707">Twoje połączenie nie jest prywatne w zakresie całego ruchu w sieci</translation> <translation id="9037965129289936994">Pokaż tekst oryginalny</translation> @@ -7573,6 +7583,7 @@ <translation id="9112786533191410418">Plik <ph name="FILE_NAME" /> może być niebezpieczny. Wysłać go do przeskanowania przez Google?</translation> <translation id="9112987648460918699">Znajdź...</translation> <translation id="9113240369465613386">Tylko strony nieparzyste</translation> +<translation id="9113469270512809735">Przełącz ostatnio zamknięte elementy</translation> <translation id="9114663181201435112">Łatwe logowanie</translation> <translation id="9115675100829699941">&Zakładki</translation> <translation id="9116465289595958864">Ostatnia modyfikacja</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb index 1cd35d49..abe0b0c 100644 --- a/chrome/app/resources/generated_resources_pt-BR.xtb +++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -161,6 +161,7 @@ <translation id="1165039591588034296">Erro</translation> <translation id="1166212789817575481">Fechar guias à direita</translation> <translation id="1166583374608765787">Revisar a atualização do nome</translation> +<translation id="1166596238782048887"><ph name="TAB_TITLE" /> pertence ao espaço de trabalho <ph name="DESK_TITLE" /></translation> <translation id="1168020859489941584">Abrindo em <ph name="TIME_REMAINING" />...</translation> <translation id="1170288591054440704">Perguntar quando um site quiser usar fontes instaladas no seu dispositivo</translation> <translation id="1171135284592304528">Destacar o objeto com o foco do teclado quando ele mudar</translation> @@ -621,6 +622,7 @@ <translation id="1640235262200048077">O <ph name="IME_NAME" /> ainda não funciona com aplicativos do Linux</translation> <translation id="1640283014264083726">PKCS #1 MD4 com criptografia RSA</translation> <translation id="1641113438599504367">Navegação segura</translation> +<translation id="1642492862748815878">Conectado a <ph name="DEVICE" /> e <ph name="NUMBER_OF_DEVICES" /> outros dispositivos Bluetooth</translation> <translation id="1642494467033190216">É necessário remover a proteção roofts e reiniciar antes de ativar outros recursos de depuração.</translation> <translation id="1643072738649235303">Assinatura X9.62 ECDSA com SHA-1</translation> <translation id="1643921258693943800">Para usar o Compartilhar por proximidade, ative o Bluetooth e o Wi-Fi</translation> @@ -1836,6 +1838,7 @@ <translation id="2885378588091291677">Gerenciador de tarefas</translation> <translation id="2885729872133513017">Ocorreu um problema ao decodificar a resposta do servidor.</translation> <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation> +<translation id="288734198558082692"><ph name="DEVICE" /> e mais <ph name="NUMBER_OF_DEVICES" /></translation> <translation id="2889064240420137087">Abrir link com...</translation> <translation id="2891922230654533301">Usar o dispositivo para fazer login em <ph name="APP_NAME" />?</translation> <translation id="2893168226686371498">Navegador padrão</translation> @@ -2771,6 +2774,7 @@ <translation id="3884152383786131369">Conteúdos da Web disponíveis em vários idiomas usarão o primeiro idioma compatível desta lista. Estas preferências são sincronizadas com as configurações do navegador. <ph name="BEGIN_LINK_LEARN_MORE" />Saiba mais<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3885112598747515383">As atualizações são gerenciadas pelo administrador</translation> <translation id="3886446263141354045">Sua solicitação para acessar este site foi enviada para <ph name="NAME" /></translation> +<translation id="3887022758415973389">Mostrar a lista de dispositivos</translation> <translation id="3888053818972567950">Conexão do <ph name="WEB_DRIVE" /></translation> <translation id="3888550877729210209">Tomando notas com <ph name="LOCK_SCREEN_APP_NAME" /></translation> <translation id="3888586133700543064">Estas informações nos ajudam a entender melhor o problema com o Google Assistente. Elas ficam armazenadas por até 90 dias, com acesso restrito às equipes adequadas de feedback e engenharia.</translation> @@ -3482,6 +3486,7 @@ <translation id="4662373422909645029">O apelido não pode ter números</translation> <translation id="4662788913887017617">Compartilhar esse favorito com seu iPhone</translation> <translation id="4663373278480897665">Câmera permitida</translation> +<translation id="4664289193573249666">Gerenciar o DNS seguro nas configurações do Chrome OS</translation> <translation id="4664482161435122549">Erro de exportação do PKCS #12</translation> <translation id="4665014895760275686">Fabricante</translation> <translation id="4665446389743427678">Todos os dados armazenados pelo site <ph name="SITE" /> serão excluídos.</translation> @@ -6015,6 +6020,7 @@ <translation id="7478623944308207463">Seus apps e suas configurações serão sincronizados em todos os dispositivos Chrome OS conectados à sua Conta do Google. Para ver as opções de sincronização do navegador, acesse as <ph name="LINK_BEGIN" />configurações do Chrome<ph name="LINK_END" />.</translation> <translation id="7478658909253570368">Não permitir que os sites se conectem a portas seriais</translation> <translation id="7479221278376295180">Visão geral do uso do armazenamento</translation> +<translation id="747981547666531654">Conectado aos dispositivos Bluetooth chamados <ph name="FIRST_DEVICE" /> e <ph name="SECOND_DEVICE" /></translation> <translation id="7481312909269577407">Avançar</translation> <translation id="7481358317100446445">Pronto</translation> <translation id="748138892655239008">Restrições básicas do certificado </translation> @@ -6067,6 +6073,7 @@ <translation id="7531771599742723865">Dispositivo em uso</translation> <translation id="7531779363494549572">Acesse Config. > Apps e notificações > Notificações.</translation> <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> não está respondendo. Selecione "Forçar fechamento" para fechar o app.</translation> +<translation id="7535730537657706072">Para limpar o histórico de navegação anônima do seu dispositivo, feche todas as guias anônimas</translation> <translation id="7535791657097741517">Ativar o tema claro</translation> <translation id="7537451260744431038">Os sites não podem usar cookies para melhorar sua experiência de navegação, como manter sua conta conectada ou se lembrar dos itens em um carrinho de compras</translation> <translation id="753769905878158714">Na barra de endereço, digite a palavra-chave do site que você quer pesquisar. Em seguida, use um atalho de teclado para continuar.</translation> @@ -6684,6 +6691,7 @@ <translation id="8138217203226449454">Você queria mudar seu provedor de pesquisa?</translation> <translation id="8138997515734480534">Status do <ph name="VM_NAME" /></translation> <translation id="8139447493436036221">Arquivos do Google Drive</translation> +<translation id="8140070492745508800"><ph name="FIRST_DEVICE" />, <ph name="SECOND_DEVICE" /></translation> <translation id="8141584439523427891">Abrindo em navegador alternativo agora</translation> <translation id="8141725884565838206">Gerenciar suas senhas</translation> <translation id="814204052173971714">{COUNT,plural, =1{um vídeo}one{# vídeo}other{# vídeos}}</translation> @@ -7400,6 +7408,7 @@ <translation id="8909782404367982052">Arrastar para pesquisar imagens usando o Google Lens</translation> <translation id="8909833622202089127">O site está rastreando seu local</translation> <translation id="8910222113987937043">As alterações feitas nos seus favoritos, histórico, senhas e outras configurações não serão mais sincronizadas com sua Conta do Google. No entanto, os dados já existentes permanecerão armazenados na sua conta e será possível gerenciá-los no <ph name="BEGIN_LINK" />Painel do Google<ph name="END_LINK" />.</translation> +<translation id="8910987510378294980">Ocultar lista de dispositivos</translation> <translation id="8912362522468806198">Conta do Google</translation> <translation id="8912793549644936705">Esticar</translation> <translation id="8912810933860534797">Ativar leitura automática</translation> @@ -7517,6 +7526,7 @@ <translation id="9033765790910064284">Continuar mesmo assim</translation> <translation id="9033857511263905942">&Colar</translation> <translation id="903480517321259405">Digite o PIN novamente</translation> +<translation id="9037054491984310631">Conectado ao dispositivo Bluetooth chamado <ph name="DEVICE" /></translation> <translation id="9037640663275993951">O dispositivo não é permitido</translation> <translation id="9037818663270399707">Sua conexão não é particular em todo o tráfego de rede</translation> <translation id="9037965129289936994">Mostrar original</translation> @@ -7597,6 +7607,7 @@ <translation id="9112786533191410418">O arquivo <ph name="FILE_NAME" /> pode ser perigoso. Enviar ao Google para verificação?</translation> <translation id="9112987648460918699">Buscar...</translation> <translation id="9113240369465613386">Somente páginas ímpares</translation> +<translation id="9113469270512809735">Alternar itens fechados recentemente</translation> <translation id="9114663181201435112">Fazer login de forma fácil</translation> <translation id="9115675100829699941">&Favoritos</translation> <translation id="9116465289595958864">Última modificação</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb index 08f2e154..be6f73e9f 100644 --- a/chrome/app/resources/generated_resources_ro.xtb +++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -159,6 +159,7 @@ <translation id="1165039591588034296">Eroare</translation> <translation id="1166212789817575481">Închide filele de la dreapta</translation> <translation id="1166583374608765787">Examinează actualizarea numelui</translation> +<translation id="1166596238782048887"><ph name="TAB_TITLE" /> aparține desktopului <ph name="DESK_TITLE" /></translation> <translation id="1168020859489941584">Se deschide în <ph name="TIME_REMAINING" />...</translation> <translation id="1170288591054440704">Întreabă-mă atunci când un site vrea să folosească fonturi instalate pe dispozitiv</translation> <translation id="1171135284592304528">Evidențiază obiectul focalizat de la tastatură când se schimbă</translation> @@ -618,6 +619,7 @@ <translation id="1640235262200048077"><ph name="IME_NAME" /> nu funcționează încă în aplicațiile Linux</translation> <translation id="1640283014264083726">PKCS # 1 MD4 cu criptare RSA</translation> <translation id="1641113438599504367">Navigare sigură</translation> +<translation id="1642492862748815878">Conectat la <ph name="DEVICE" /> și încă <ph name="NUMBER_OF_DEVICES" /> dispozitive Bluetooth</translation> <translation id="1642494467033190216">Înainte de activarea altor funcții de remediere a erorilor, trebuie să elimini protecția sistemului rootfs și să repornești.</translation> <translation id="1643072738649235303">Semnătură X9.62 ECDSA cu SHA-1</translation> <translation id="1643921258693943800">Pentru a folosi Trimiterea în apropiere, activează Bluetooth și Wi-Fi</translation> @@ -1821,6 +1823,7 @@ <translation id="2885378588091291677">Manager de activități</translation> <translation id="2885729872133513017">A apărut o problemă la decodarea răspunsului serverului.</translation> <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation> +<translation id="288734198558082692"><ph name="DEVICE" /> și încă <ph name="NUMBER_OF_DEVICES" /></translation> <translation id="2889064240420137087">Deschide linkul cu...</translation> <translation id="2891922230654533301">Folosești dispozitivul pentru a te conecta la <ph name="APP_NAME" />?</translation> <translation id="2893168226686371498">Browserul prestabilit</translation> @@ -2755,6 +2758,7 @@ <translation id="3884152383786131369">Conținutul web care este disponibil în mai multe limbi va folosi prima limbă acceptată din această listă. Aceste preferințe se sincronizează cu setările browserului. <ph name="BEGIN_LINK_LEARN_MORE" />Află mai multe<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3885112598747515383">Actualizările sunt gestionate de administrator</translation> <translation id="3886446263141354045">Solicitarea de a accesa acest site a fost trimisă către <ph name="NAME" /></translation> +<translation id="3887022758415973389">Afișează lista de dispozitive</translation> <translation id="3888053818972567950">Conexiune <ph name="WEB_DRIVE" /></translation> <translation id="3888550877729210209">Scriere de notițe cu <ph name="LOCK_SCREEN_APP_NAME" /></translation> <translation id="3888586133700543064">Aceste informații ne ajută să înțelegem mai bine problema cu Asistentul. Informațiile sunt stocate timp de cel mult 90 de zile, iar accesul la ele este restricționat la echipele de ingineri și de feedback adecvate.</translation> @@ -3465,6 +3469,7 @@ <translation id="4662373422909645029">Pseudonimele nu pot să includă cifre</translation> <translation id="4662788913887017617">Trimite marcajul pe iPhone</translation> <translation id="4663373278480897665">Camera foto este permisă</translation> +<translation id="4664289193573249666">Gestionează DNS-ul securizat în setările sistemului de operare Chrome</translation> <translation id="4664482161435122549">PKCS # 12 Eroare de export</translation> <translation id="4665014895760275686">Producător</translation> <translation id="4665446389743427678">Toate datele stocate de <ph name="SITE" /> vor fi șterse.</translation> @@ -5997,6 +6002,7 @@ <translation id="7478623944308207463">Aplicațiile și setările se vor sincroniza pe toate dispozitivele cu sistemul de operare Chrome pe care te-ai conectat folosind contul Google. Pentru opțiunile de sincronizare a browserului, accesează <ph name="LINK_BEGIN" />Setările Chrome<ph name="LINK_END" />.</translation> <translation id="7478658909253570368">Nu permite site-urilor să se conecteze la porturi seriale</translation> <translation id="7479221278376295180">Prezentare generală a utilizării spațiului de stocare</translation> +<translation id="747981547666531654">Conectat la dispozitivele Bluetooth denumite <ph name="FIRST_DEVICE" /> și <ph name="SECOND_DEVICE" /></translation> <translation id="7481312909269577407">Înainte</translation> <translation id="7481358317100446445">Gata</translation> <translation id="748138892655239008">Limitări de bază pentru certificate</translation> @@ -6049,6 +6055,7 @@ <translation id="7531771599742723865">Dispozitiv în uz</translation> <translation id="7531779363494549572">Accesează Setări > Aplicații și notificări > Notificări.</translation> <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> nu răspunde. Selectează „Închide forțat” pentru a închide aplicația.</translation> +<translation id="7535730537657706072">Pentru a șterge istoricul de navigare incognito de pe dispozitiv, închide toate filele incognito</translation> <translation id="7535791657097741517">Activează tema luminoasă</translation> <translation id="7537451260744431038">Site-urile nu pot folosi cookie-uri pentru a-ți îmbunătăți experiența de navigare, de exemplu, pentru a te menține conectat(ă) sau pentru a reține articolele din coșul de cumpărături</translation> <translation id="753769905878158714">În bara de adrese, introdu cuvântul cheie pentru site-ul pe care vrei să-l cauți. Apoi, folosește o comandă rapidă de la tastatură pentru a continua.</translation> @@ -6665,6 +6672,7 @@ <translation id="8138217203226449454">Ai vrut să schimbi furnizorul de căutare?</translation> <translation id="8138997515734480534">Starea <ph name="VM_NAME" /></translation> <translation id="8139447493436036221">Fișiere Google Drive</translation> +<translation id="8140070492745508800"><ph name="FIRST_DEVICE" />, <ph name="SECOND_DEVICE" /></translation> <translation id="8141584439523427891">Se deschide acum în browserul secundar</translation> <translation id="8141725884565838206">Gestionați parolele</translation> <translation id="814204052173971714">{COUNT,plural, =1{un videoclip}few{# videoclipuri}other{# de videoclipuri}}</translation> @@ -7381,6 +7389,7 @@ <translation id="8909782404367982052">Trage pentru a căuta imagini cu Google Lens</translation> <translation id="8909833622202089127">Site-ul îți urmărește locația</translation> <translation id="8910222113987937043">Modificările marcajelor, istoricului, parolelor sau ale altor setări nu vor mai fi sincronizate cu Contul Google. Totuși, datele existente vor rămâne stocate în Contul Google și pot fi gestionate din <ph name="BEGIN_LINK" />Tabloul de bord Google<ph name="END_LINK" />.</translation> +<translation id="8910987510378294980">Ascunde lista de dispozitive</translation> <translation id="8912362522468806198">Contul Google</translation> <translation id="8912793549644936705">Extins</translation> <translation id="8912810933860534797">Activează scanarea automată</translation> @@ -7498,6 +7507,7 @@ <translation id="9033765790910064284">Continuă oricum</translation> <translation id="9033857511263905942">&Inserați</translation> <translation id="903480517321259405">Introdu din nou codul PIN</translation> +<translation id="9037054491984310631">Conectat la dispozitivul Bluetooth denumit <ph name="DEVICE" /></translation> <translation id="9037640663275993951">Dispozitivul nu este permis</translation> <translation id="9037818663270399707">Conexiunea nu este privată pentru tot traficul de rețea</translation> <translation id="9037965129289936994">Afișează versiunea originală</translation> @@ -7577,6 +7587,7 @@ <translation id="9112786533191410418">Fișierul <ph name="FILE_NAME" /> poate fi periculos. Îl trimiți la Google pentru scanare?</translation> <translation id="9112987648460918699">Caută...</translation> <translation id="9113240369465613386">Numai paginile cu număr impar</translation> +<translation id="9113469270512809735">Activează / dezactivează elementele închise recent</translation> <translation id="9114663181201435112">Conectează-te cu ușurință</translation> <translation id="9115675100829699941">&Marcaje</translation> <translation id="9116465289595958864">Ultima modificare</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb index 03874a4..e155f60 100644 --- a/chrome/app/resources/generated_resources_sk.xtb +++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -159,6 +159,7 @@ <translation id="1165039591588034296">Chyba</translation> <translation id="1166212789817575481">Zatvoriť karty vpravo</translation> <translation id="1166583374608765787">Kontrola aktualizácie názvu</translation> +<translation id="1166596238782048887"><ph name="TAB_TITLE" /> patrí na plochu <ph name="DESK_TITLE" /></translation> <translation id="1168020859489941584">Čas do otvorenia: <ph name="TIME_REMAINING" /></translation> <translation id="1170288591054440704">Opýtať sa, keď chce web používať písma nainštalované vo vašom zariadení</translation> <translation id="1171135284592304528">Pri zmene zvýrazňovať objekt so zameraním klávesnice</translation> @@ -619,6 +620,7 @@ <translation id="1640235262200048077"><ph name="IME_NAME" /> v aplikáciách pre systém Linux ešte nefunguje</translation> <translation id="1640283014264083726">Štandard PKCS #1 MD4 so šifrovaním RSA</translation> <translation id="1641113438599504367">Bezpečné prehliadanie</translation> +<translation id="1642492862748815878">Pripojené k zariadeniu <ph name="DEVICE" /> a ďalším <ph name="NUMBER_OF_DEVICES" /> zariadeniam s rozhraním Bluetooth</translation> <translation id="1642494467033190216">Pred aktiváciou ďalších funkcií ladenia je potrebné odstrániť ochranu rootfs a reštartovať zariadenie.</translation> <translation id="1643072738649235303">Podpis X9.62 ECDSA s SHA-1</translation> <translation id="1643921258693943800">Ak chcete použiť Zdieľanie nablízku, zapnite Bluetooth a Wi-Fi</translation> @@ -1822,6 +1824,7 @@ <translation id="2885378588091291677">Správca úloh</translation> <translation id="2885729872133513017">Pri dešifrovaní odpovede servera sa vyskytol problém.</translation> <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation> +<translation id="288734198558082692"><ph name="DEVICE" /> a ďalšie (<ph name="NUMBER_OF_DEVICES" />)</translation> <translation id="2889064240420137087">Otvoriť odkaz pomocou...</translation> <translation id="2891922230654533301">Chcete sa pomocou svojho zariadenia prihlásiť do aplikácie <ph name="APP_NAME" />?</translation> <translation id="2893168226686371498">Predvolený prehliadač</translation> @@ -2756,6 +2759,7 @@ <translation id="3884152383786131369">Internetový obsah dostupný vo viacerých jazykoch použije prvý podporovaný jazyk z tohto zoznamu. Tieto predvoľby sú synchronizované s nastaveniami vášho prehliadača. <ph name="BEGIN_LINK_LEARN_MORE" />Ďalšie informácie<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3885112598747515383">Aktualizácie riadi váš správca</translation> <translation id="3886446263141354045">Vaša žiadosť o prístup na tento web sa odoslala správcovi <ph name="NAME" /></translation> +<translation id="3887022758415973389">Zobraziť zoznam zariadení</translation> <translation id="3888053818972567950">Pripojenie k službe <ph name="WEB_DRIVE" /></translation> <translation id="3888550877729210209">Písanie poznámok v aplikácii <ph name="LOCK_SCREEN_APP_NAME" /></translation> <translation id="3888586133700543064">Tieto informácie nám pomôžu lepšie pochopiť problém s vaším Asistentom. Budú uložené maximálne 90 dní a prístup k nim je obmedzený len na príslušné tímy zodpovedajúce za programovanie a spätnú väzbu.</translation> @@ -3466,6 +3470,7 @@ <translation id="4662373422909645029">Prezývka nemôže mať čísla</translation> <translation id="4662788913887017617">Zdieľajte túto záložku so zariadením iPhone</translation> <translation id="4663373278480897665">Kamera je povolená</translation> +<translation id="4664289193573249666">Správa zabezpečeného DNS v nastaveniach systému Chrome OS</translation> <translation id="4664482161435122549">Chyba exportovania súborov PKCS #12</translation> <translation id="4665014895760275686">Výrobca</translation> <translation id="4665446389743427678">Odstránia sa všetky údaje, ktoré uložil web <ph name="SITE" />.</translation> @@ -5998,6 +6003,7 @@ <translation id="7478623944308207463">Vaše aplikácie a nastavenia budú synchronizované vo všetkých zariadeniach so systémom Chrome OS, v ktorých ste sa prihlásili svojím účtom Google. Možnosti synchronizácie prehliadača nájdete v <ph name="LINK_BEGIN" />nastaveniach Chromu<ph name="LINK_END" />.</translation> <translation id="7478658909253570368">Nepovoliť webom pripájať sa k sériovým portom</translation> <translation id="7479221278376295180">Prehľad využitia úložiska</translation> +<translation id="747981547666531654">Pripojené k zariadeniam s rozhraním Bluetooth s názvami <ph name="FIRST_DEVICE" /> a <ph name="SECOND_DEVICE" /></translation> <translation id="7481312909269577407">Dopredu</translation> <translation id="7481358317100446445">Pripravené</translation> <translation id="748138892655239008">Základné obmedzenia certifikátu</translation> @@ -6050,6 +6056,7 @@ <translation id="7531771599742723865">Zariadenie sa používa</translation> <translation id="7531779363494549572">Prejdite do časti Nastavenia > Aplikácie a upozornenia > Upozornenia.</translation> <translation id="7532009420053991888">Aplikácia <ph name="LINUX_APP_NAME" /> nereaguje. Zavrite ju výberom možnosti Vynútiť zavretie.</translation> +<translation id="7535730537657706072">Ak chcete zo svojho zariadenia vymazať históriu prehliadania v režime inkognito, zavrite všetky karty inkognito</translation> <translation id="7535791657097741517">Zapnúť svetlý motív</translation> <translation id="7537451260744431038">Weby nemôžu pomocou súborov cookie zlepšovať vaše prostredie prehliadania, napríklad zabrániť odhláseniu alebo zapamätať si položky vo vašom nákupnom košíku</translation> <translation id="753769905878158714">V paneli s adresou zadajte kľúčové slovo zodpovedajúce webu, ktorý chcete hľadať. Potom pokračujte klávesovou skratkou.</translation> @@ -6666,6 +6673,7 @@ <translation id="8138217203226449454">Chcete zmeniť svojho poskytovateľa vyhľadávania?</translation> <translation id="8138997515734480534">Stav virtuálneho počítača <ph name="VM_NAME" /></translation> <translation id="8139447493436036221">Súbory na Disku Google</translation> +<translation id="8140070492745508800"><ph name="FIRST_DEVICE" />, <ph name="SECOND_DEVICE" /></translation> <translation id="8141584439523427891">Otvára sa alternatívny prehliadač</translation> <translation id="8141725884565838206">Správa hesiel</translation> <translation id="814204052173971714">{COUNT,plural, =1{video}few{# videá}many{# videos}other{# videí}}</translation> @@ -7383,6 +7391,7 @@ <translation id="8909782404367982052">Presunutím vyhľadávať obrázky pomocou funkcie Google Lens</translation> <translation id="8909833622202089127">Web sleduje vašu polohu</translation> <translation id="8910222113987937043">Záložky, história, heslá a ďalšie nastavenia sa už nebudú ďalej synchronizovať do vášho účtu Google. Vaše existujúce údaje však zostanú uložené v účte Google a môžete ich spravovať pomocou panela <ph name="BEGIN_LINK" />Google Dashboard<ph name="END_LINK" />.</translation> +<translation id="8910987510378294980">Skryť zoznam zariadení</translation> <translation id="8912362522468806198">účtu Google</translation> <translation id="8912793549644936705">Roztiahnuť</translation> <translation id="8912810933860534797">Aktivovať automatické prehľadávanie</translation> @@ -7500,6 +7509,7 @@ <translation id="9033765790910064284">Aj tak pokračovať</translation> <translation id="9033857511263905942">&Prilepiť</translation> <translation id="903480517321259405">Znova zadajte PIN</translation> +<translation id="9037054491984310631">Pripojené k zariadeniu s rozhraním Bluetooth s názvom <ph name="DEVICE" /></translation> <translation id="9037640663275993951">Zariadenie nie je povolené</translation> <translation id="9037818663270399707">Nie všetka sieťová premávka v rámci vášho pripojenia je súkromná</translation> <translation id="9037965129289936994">Zobraziť originál</translation> @@ -7580,6 +7590,7 @@ <translation id="9112786533191410418">Súbor <ph name="FILE_NAME" /> môže byť nebezpečný. Chcete ho odoslať Googlu na kontrolu?</translation> <translation id="9112987648460918699">Nájsť...</translation> <translation id="9113240369465613386">Iba nepárne strany</translation> +<translation id="9113469270512809735">Prepnúť nedávno zavreté položky</translation> <translation id="9114663181201435112">Jednoduché prihlásenie</translation> <translation id="9115675100829699941">&Záložky</translation> <translation id="9116465289595958864">Naposledy upravené</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb index 3330554..caa54e2 100644 --- a/chrome/app/resources/generated_resources_sl.xtb +++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -161,6 +161,7 @@ <translation id="1165039591588034296">Napaka</translation> <translation id="1166212789817575481">Zapri zavihke na desni</translation> <translation id="1166583374608765787">Pregled posodobitve imena</translation> +<translation id="1166596238782048887"><ph name="TAB_TITLE" /> pripada namizju <ph name="DESK_TITLE" /></translation> <translation id="1168020859489941584">Odpiranje čez <ph name="TIME_REMAINING" /> ...</translation> <translation id="1170288591054440704">Vprašaj, ko želi spletno mesto uporabiti pisave, nameščene v napravi</translation> <translation id="1171135284592304528">Označitev predmeta s fokusom na tipkovnici, ko se spremeni</translation> @@ -623,6 +624,7 @@ <translation id="1640235262200048077"><ph name="IME_NAME" /> še ne deluje v aplikacijah za Linux</translation> <translation id="1640283014264083726">PKCS #1 MD4 s šifriranjem RSA</translation> <translation id="1641113438599504367">Varno brskanje</translation> +<translation id="1642492862748815878">Povezano z napravo <ph name="DEVICE" /> in še toliko drugimi napravami Bluetooth: <ph name="NUMBER_OF_DEVICES" /></translation> <translation id="1642494467033190216">Pred omogočanjem drugih funkcij za odpravljanje napak je treba odstraniti zaščito rootfs in znova zagnati napravo.</translation> <translation id="1643072738649235303">Podpis X9.62 ECDSA z algoritmom SHA-1</translation> <translation id="1643921258693943800">Če želite uporabljati deljenje v bližini, vklopite Bluetooth in Wi-Fi</translation> @@ -1838,6 +1840,7 @@ <translation id="2885378588091291677">Upravitelj opravil</translation> <translation id="2885729872133513017">Pri dekodiranju odziva strežnika je prišlo do težave.</translation> <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation> +<translation id="288734198558082692"><ph name="DEVICE" /> in še <ph name="NUMBER_OF_DEVICES" /></translation> <translation id="2889064240420137087">Odpri povezavo z ...</translation> <translation id="2891922230654533301">Ali se želite z napravo prijaviti v aplikacijo <ph name="APP_NAME" />?</translation> <translation id="2893168226686371498">Privzeti brskalnik</translation> @@ -2772,6 +2775,7 @@ <translation id="3884152383786131369">Za spletno vsebino, ki je na voljo v več jezikih, bo uporabljen prvi podprti jezik s tega seznama. Te nastavitve se sinhronizirajo z nastavitvami brskalnika. <ph name="BEGIN_LINK_LEARN_MORE" />Več o tem<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3885112598747515383">Posodobitve upravlja skrbnik.</translation> <translation id="3886446263141354045">Vaša zahteva za dostop do tega mesta je poslana uporabniku <ph name="NAME" /></translation> +<translation id="3887022758415973389">Prikaz seznama naprav</translation> <translation id="3888053818972567950">Povezava s storitvijo <ph name="WEB_DRIVE" /></translation> <translation id="3888550877729210209">Ustvarjanje zapiskov z aplikacijo <ph name="LOCK_SCREEN_APP_NAME" /></translation> <translation id="3888586133700543064">S temi podatki si pomagamo pri razumevanju vaše težave s Pomočnikom. Shranjeni so do 90 dni in dostop je omogočen samo ustreznim skupinam inženirjev in skupinam za povratne informacije.</translation> @@ -3483,6 +3487,7 @@ <translation id="4662373422909645029">Vzdevek ne sme vsebovati številk</translation> <translation id="4662788913887017617">Deljenje tega zaznamka z iPhonom</translation> <translation id="4663373278480897665">Kamera je dovoljena</translation> +<translation id="4664289193573249666">Upravljanje varnega DNS-ja v nastavitvah sistema Chrome OS</translation> <translation id="4664482161435122549">Napaka pri izvozu PKCS #12</translation> <translation id="4665014895760275686">Proizvajalec</translation> <translation id="4665446389743427678">Vsi podatki, ki jih shrani <ph name="SITE" />, bodo izbrisani.</translation> @@ -6017,6 +6022,7 @@ <translation id="7478623944308207463">Vaše aplikacije in nastavitve se bodo sinhronizirale v vseh napravah s sistemom Chrome OS, v katerih ste prijavljeni z računom Google. Če vas zanimajo možnosti sinhronizacije brskalnika, odprite <ph name="LINK_BEGIN" />Chromove nastavitve<ph name="LINK_END" />.</translation> <translation id="7478658909253570368">Spletnim mestom ni dovoljeno povezovanje s serijskimi vrati.</translation> <translation id="7479221278376295180">Pregled uporabe shrambe</translation> +<translation id="747981547666531654">Povezano z napravama Bluetooth <ph name="FIRST_DEVICE" /> in <ph name="SECOND_DEVICE" /></translation> <translation id="7481312909269577407">Naprej</translation> <translation id="7481358317100446445">Pripravljeno</translation> <translation id="748138892655239008">Osnovne omejitve potrdila</translation> @@ -6069,6 +6075,7 @@ <translation id="7531771599742723865">Naprava je v uporabi</translation> <translation id="7531779363494549572">Odprite »Nastavitve > Aplikacije in obvestila > Obvestila«.</translation> <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> se ne odziva. Če želite zapreti aplikacijo, izberite »Vsili zapiranje«.</translation> +<translation id="7535730537657706072">Če želite izbrisati anonimno zgodovino brskanja iz naprave, zaprite vse anonimne zavihke.</translation> <translation id="7535791657097741517">Vklop svetle teme</translation> <translation id="7537451260744431038">Spletna mesta ne smejo uporabljati piškotkov za izboljšanje izkušnje brskanja, in sicer tako, da bi na primer poskrbeli, da bi ostali prijavljeni, ali bi si zapomnili izdelke v nakupovalnem vozičku.</translation> <translation id="753769905878158714">V naslovni vrstici vnesite ključno besedo za spletno mesto, po katerem želite iskati. Nato nadaljujte z bližnjično tipko.</translation> @@ -6686,6 +6693,7 @@ <translation id="8138217203226449454">Ali ste nameravali zamenjati ponudnika iskanja?</translation> <translation id="8138997515734480534">Stanje navideznega računalnika <ph name="VM_NAME" /></translation> <translation id="8139447493436036221">Datoteke v Googlu Drive</translation> +<translation id="8140070492745508800"><ph name="FIRST_DEVICE" />, <ph name="SECOND_DEVICE" /></translation> <translation id="8141584439523427891">Odpiranje v nadomestnem brskalniku</translation> <translation id="8141725884565838206">Upravljanje gesel</translation> <translation id="814204052173971714">{COUNT,plural, =1{videoposnetek}one{# videoposnetek}two{# videoposnetka}few{# videoposnetki}other{# videoposnetkov}}</translation> @@ -7404,6 +7412,7 @@ <translation id="8909782404367982052">Povleci za iskanje slik z Googlom Lens</translation> <translation id="8909833622202089127">Spletno mesto spremlja vašo lokacijo</translation> <translation id="8910222113987937043">Spremembe zaznamkov, zgodovine, gesel in drugih nastavitev se ne bodo več sinhronizirale z Google Računom. Vaši obstoječi podatki bodo kljub temu še naprej shranjeni v Google Računu in jih bo mogoče upravljati na <ph name="BEGIN_LINK" />Google Nadzorni plošči<ph name="END_LINK" />.</translation> +<translation id="8910987510378294980">Skrivanje seznama naprav</translation> <translation id="8912362522468806198">Račun Google</translation> <translation id="8912793549644936705">Raztegni</translation> <translation id="8912810933860534797">Omogočanje samodejnega iskanja</translation> @@ -7521,6 +7530,7 @@ <translation id="9033765790910064284">Vseeno nadaljuj</translation> <translation id="9033857511263905942">&Prilepi</translation> <translation id="903480517321259405">Znova vnesite kodo PIN</translation> +<translation id="9037054491984310631">Povezano z napravo Bluetooth <ph name="DEVICE" /></translation> <translation id="9037640663275993951">Naprava ni dovoljena.</translation> <translation id="9037818663270399707">Vaša povezava ni zasebna za ves omrežni promet</translation> <translation id="9037965129289936994">Pokaži izvirno besedilo</translation> @@ -7601,6 +7611,7 @@ <translation id="9112786533191410418">Datoteka <ph name="FILE_NAME" /> je morda nevarna. Jo želite poslati Googlu v pregled?</translation> <translation id="9112987648460918699">Iskanje ...</translation> <translation id="9113240369465613386">Samo lihe strani</translation> +<translation id="9113469270512809735">Preklopi nedavno zaprte elemente</translation> <translation id="9114663181201435112">Preprosta prijava</translation> <translation id="9115675100829699941">&Zaznamki</translation> <translation id="9116465289595958864">Nazadnje spremenjeno</translation>
diff --git a/chrome/app/resources/generated_resources_sr-Latn.xtb b/chrome/app/resources/generated_resources_sr-Latn.xtb index 5a9350b..1dc7ed33 100644 --- a/chrome/app/resources/generated_resources_sr-Latn.xtb +++ b/chrome/app/resources/generated_resources_sr-Latn.xtb
@@ -159,6 +159,7 @@ <translation id="1165039591588034296">Greška</translation> <translation id="1166212789817575481">Zatvori kartice sa desne strane</translation> <translation id="1166583374608765787">Pregledajte ažuriranje naziva</translation> +<translation id="1166596238782048887">Kartica <ph name="TAB_TITLE" /> pripada radnoj površini <ph name="DESK_TITLE" /></translation> <translation id="1168020859489941584">Otvaranje za <ph name="TIME_REMAINING" />...</translation> <translation id="1170288591054440704">Pitaj kada sajt želi da koristi fontove instalirane na uređaju</translation> <translation id="1171135284592304528">Istakni objekat pomoću fokusa tastature kada se promeni</translation> @@ -616,6 +617,7 @@ <translation id="1640235262200048077"><ph name="IME_NAME" /> još uvek ne radi u Linux aplikacijama</translation> <translation id="1640283014264083726">PKCS #1 MD4 sa RSA šifrovanjem</translation> <translation id="1641113438599504367">Bezbedno pregledanje</translation> +<translation id="1642492862748815878">Povezani ste sa uređajem <ph name="DEVICE" /> i još <ph name="NUMBER_OF_DEVICES" /> Bluetooth uređaja</translation> <translation id="1642494467033190216">Da biste omogućili druge funkcije za otklanjanje grešaka, morate da uklonite rootfs zaštitu i da restartujete uređaj.</translation> <translation id="1643072738649235303">Potpis X9.62 ECDSA putem SHA-1</translation> <translation id="1643921258693943800">Da biste koristili Deljenje u blizini, uključite Bluetooth i WiFi</translation> @@ -1819,6 +1821,7 @@ <translation id="2885378588091291677">Menadžer zadataka</translation> <translation id="2885729872133513017">Došlo je do problema pri dekodiranju odgovora servera.</translation> <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation> +<translation id="288734198558082692"><ph name="DEVICE" /> i još <ph name="NUMBER_OF_DEVICES" /></translation> <translation id="2889064240420137087">Otvori link koristeći...</translation> <translation id="2891922230654533301">Želite da koristite uređaj za prijavljivanje u aplikaciju <ph name="APP_NAME" />?</translation> <translation id="2893168226686371498">Podrazumevani pregledač</translation> @@ -2753,6 +2756,7 @@ <translation id="3884152383786131369">Veb-sadržaj koji je dostupan na više jezika koristi prvi podržani jezik sa ove liste. Ova podešavanja se sinhronizuju sa podešavanjima pregledača. <ph name="BEGIN_LINK_LEARN_MORE" />Saznajte više<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3885112598747515383">Administrator upravlja ažuriranjima</translation> <translation id="3886446263141354045">Zahtev za pristup ovom sajtu je poslat korisniku <ph name="NAME" /></translation> +<translation id="3887022758415973389">Pregledajte listu uređaja</translation> <translation id="3888053818972567950"><ph name="WEB_DRIVE" /> veza</translation> <translation id="3888550877729210209">Pravljenje beležaka pomoću aplikacije <ph name="LOCK_SCREEN_APP_NAME" /></translation> <translation id="3888586133700543064">Ove informacije nam pomažu da bolje razumemo problem koji imate sa Pomoćnikom. Čuvaju se najviše 90 dana, a pristup je ograničen na odgovarajuće timove za inženjering i povratne informacije.</translation> @@ -3463,6 +3467,7 @@ <translation id="4662373422909645029">Nadimak ne sme da sadrži brojeve</translation> <translation id="4662788913887017617">Delite ovaj obeleživač sa iPhone-om</translation> <translation id="4663373278480897665">Kamera je dozvoljena</translation> +<translation id="4664289193573249666">Upravljajte bezbednim DNS-om u podešavanjima Chrome OS-a</translation> <translation id="4664482161435122549">Greška pri izvozu PKCS #12 standarda</translation> <translation id="4665014895760275686">Proizvođač</translation> <translation id="4665446389743427678">Biće izbrisani svi podaci koje <ph name="SITE" /> čuva.</translation> @@ -5996,6 +6001,7 @@ <translation id="7478623944308207463">Aplikacije i podešavanja će se sinhronizovati na svim Chrome OS uređajima na kojima ste prijavljeni pomoću svog Google naloga. Opcije sinhronizacije pregledača pronađite u <ph name="LINK_BEGIN" />podešavanjima Chrome-a<ph name="LINK_END" />.</translation> <translation id="7478658909253570368">Ne dozvoljavaj sajtovima da se povezuju sa serijskim portovima</translation> <translation id="7479221278376295180">Pregled korišćenja memorijskog prostora</translation> +<translation id="747981547666531654">Povezani ste sa Bluetooth uređajima pod nazivom <ph name="FIRST_DEVICE" /> i <ph name="SECOND_DEVICE" /></translation> <translation id="7481312909269577407">Prosledi</translation> <translation id="7481358317100446445">Spremno</translation> <translation id="748138892655239008">Osnovna ograničenja sertifikata</translation> @@ -6048,6 +6054,7 @@ <translation id="7531771599742723865">Uređaj se koristi</translation> <translation id="7531779363494549572">Idite u Podešavanja > Aplikacije i obaveštenja > Obaveštenja.</translation> <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> ne reaguje. Izaberite „Prinudno zatvori“ da biste zatvorili aplikaciju.</translation> +<translation id="7535730537657706072">Da biste obrisali istoriju pregledanja bez arhiviranja sa uređaja, zatvorite sve kartice bez arhiviranja</translation> <translation id="7535791657097741517">Uključite svetlu temu</translation> <translation id="7537451260744431038">Sajtovi ne mogu da koriste kolačiće za poboljšanje doživljaja pregledanja, na primer, da biste ostali prijavljeni ili da bi stavke u vašoj korpi za kupovinu ostale sačuvane</translation> <translation id="753769905878158714">U traku za adresu unesite ključnu reč za veb-sajt koji želite da pretražite. Zatim koristite tastersku prečicu da biste nastavili.</translation> @@ -6664,6 +6671,7 @@ <translation id="8138217203226449454">Da li ste namerno promenili dobavljača pretrage?</translation> <translation id="8138997515734480534">Status virtuelne mašine <ph name="VM_NAME" /></translation> <translation id="8139447493436036221">Fajlovi na Google disku</translation> +<translation id="8140070492745508800"><ph name="FIRST_DEVICE" />, <ph name="SECOND_DEVICE" /></translation> <translation id="8141584439523427891">Sada se otvara u alternativnom pregledaču</translation> <translation id="8141725884565838206">Upravljajte lozinkama</translation> <translation id="814204052173971714">{COUNT,plural, =1{video}one{# video}few{# video snimka}other{# video snimaka}}</translation> @@ -7381,6 +7389,7 @@ <translation id="8909782404367982052">Prevlačenje radi pretrage slika pomoću Google objektiva</translation> <translation id="8909833622202089127">Sajt prati lokaciju</translation> <translation id="8910222113987937043">Promene obeleživača, istorije, lozinki i drugih podešavanja se više neće sinhronizovati sa Google nalogom. Međutim, postojeći podaci će se i dalje čuvati na Google nalogu i možete da upravljate njima na <ph name="BEGIN_LINK" />Google kontrolnoj tabli<ph name="END_LINK" />.</translation> +<translation id="8910987510378294980">Sakrijte listu uređaja</translation> <translation id="8912362522468806198">Google naloga</translation> <translation id="8912793549644936705">Rastegni</translation> <translation id="8912810933860534797">Omogući automatsko skeniranje</translation> @@ -7498,6 +7507,7 @@ <translation id="9033765790910064284">Ipak nastavi</translation> <translation id="9033857511263905942">&Nalepi</translation> <translation id="903480517321259405">Ponovo unesite PIN</translation> +<translation id="9037054491984310631">Povezani ste sa Bluetooth uređajem pod nazivom <ph name="DEVICE" /></translation> <translation id="9037640663275993951">Uređaj nije dozvoljen</translation> <translation id="9037818663270399707">Veza nije privatna za sav mrežni saobraćaj</translation> <translation id="9037965129289936994">Prikaži original</translation> @@ -7578,6 +7588,7 @@ <translation id="9112786533191410418">Fajl <ph name="FILE_NAME" /> je možda opasan. Želite da ga pošaljete Google-u na skeniranje?</translation> <translation id="9112987648460918699">Pronađi...</translation> <translation id="9113240369465613386">Samo stranice sa neparnim brojevima</translation> +<translation id="9113469270512809735">Uključi/isključi nedavno zatvorene stavke</translation> <translation id="9114663181201435112">Lako se prijavljujte</translation> <translation id="9115675100829699941">&Obeleživači</translation> <translation id="9116465289595958864">Poslednja izmena</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb index 7c4bef98..3469922 100644 --- a/chrome/app/resources/generated_resources_sr.xtb +++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -159,6 +159,7 @@ <translation id="1165039591588034296">Грешка</translation> <translation id="1166212789817575481">Затвори картице са десне стране</translation> <translation id="1166583374608765787">Прегледајте ажурирање назива</translation> +<translation id="1166596238782048887">Картица <ph name="TAB_TITLE" /> припада радној површини <ph name="DESK_TITLE" /></translation> <translation id="1168020859489941584">Отварање за <ph name="TIME_REMAINING" />...</translation> <translation id="1170288591054440704">Питај када сајт жели да користи фонтове инсталиране на уређају</translation> <translation id="1171135284592304528">Истакни објекат помоћу фокуса тастатуре када се промени</translation> @@ -616,6 +617,7 @@ <translation id="1640235262200048077"><ph name="IME_NAME" /> још увек не ради у Linux апликацијама</translation> <translation id="1640283014264083726">PKCS #1 MD4 са RSA шифровањем</translation> <translation id="1641113438599504367">Безбедно прегледање</translation> +<translation id="1642492862748815878">Повезани сте са уређајем <ph name="DEVICE" /> и још <ph name="NUMBER_OF_DEVICES" /> Bluetooth уређаја</translation> <translation id="1642494467033190216">Да бисте омогућили друге функције за отклањање грешака, морате да уклоните rootfs заштиту и да рестартујете уређај.</translation> <translation id="1643072738649235303">Потпис X9.62 ECDSA путем SHA-1</translation> <translation id="1643921258693943800">Да бисте користили Дељење у близини, укључите Bluetooth и WiFi</translation> @@ -1819,6 +1821,7 @@ <translation id="2885378588091291677">Менаџер задатака</translation> <translation id="2885729872133513017">Дошло је до проблема при декодирању одговора сервера.</translation> <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation> +<translation id="288734198558082692"><ph name="DEVICE" /> и још <ph name="NUMBER_OF_DEVICES" /></translation> <translation id="2889064240420137087">Отвори линк користећи...</translation> <translation id="2891922230654533301">Желите да користите уређај за пријављивање у апликацију <ph name="APP_NAME" />?</translation> <translation id="2893168226686371498">Подразумевани прегледач</translation> @@ -2753,6 +2756,7 @@ <translation id="3884152383786131369">Веб-садржај који је доступан на више језика користи први подржани језик са ове листе. Ова подешавања се синхронизују са подешавањима прегледача. <ph name="BEGIN_LINK_LEARN_MORE" />Сазнајте више<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3885112598747515383">Администратор управља ажурирањима</translation> <translation id="3886446263141354045">Захтев за приступ овом сајту је послат кориснику <ph name="NAME" /></translation> +<translation id="3887022758415973389">Прегледајте листу уређаја</translation> <translation id="3888053818972567950"><ph name="WEB_DRIVE" /> веза</translation> <translation id="3888550877729210209">Прављење бележака помоћу апликације <ph name="LOCK_SCREEN_APP_NAME" /></translation> <translation id="3888586133700543064">Ове информације нам помажу да боље разумемо проблем који имате са Помоћником. Чувају се највише 90 дана, а приступ је ограничен на одговарајуће тимове за инжењеринг и повратне информације.</translation> @@ -3463,6 +3467,7 @@ <translation id="4662373422909645029">Надимак не сме да садржи бројеве</translation> <translation id="4662788913887017617">Делите овај обележивач са iPhone-ом</translation> <translation id="4663373278480897665">Камера је дозвољена</translation> +<translation id="4664289193573249666">Управљајте безбедним DNS-ом у подешавањима Chrome ОС-а</translation> <translation id="4664482161435122549">Грешка при извозу PKCS #12 стандарда</translation> <translation id="4665014895760275686">Произвођач</translation> <translation id="4665446389743427678">Биће избрисани сви подаци које <ph name="SITE" /> чува.</translation> @@ -5996,6 +6001,7 @@ <translation id="7478623944308207463">Апликације и подешавања ће се синхронизовати на свим Chrome OS уређајима на којима сте пријављени помоћу свог Google налога. Опције синхронизације прегледача пронађите у <ph name="LINK_BEGIN" />подешавањима Chrome-а<ph name="LINK_END" />.</translation> <translation id="7478658909253570368">Не дозвољавај сајтовима да се повезују са серијским портовима</translation> <translation id="7479221278376295180">Преглед коришћења меморијског простора</translation> +<translation id="747981547666531654">Повезани сте са Bluetooth уређајима под називом <ph name="FIRST_DEVICE" /> и <ph name="SECOND_DEVICE" /></translation> <translation id="7481312909269577407">Проследи</translation> <translation id="7481358317100446445">Спремно</translation> <translation id="748138892655239008">Основна ограничења сертификата</translation> @@ -6048,6 +6054,7 @@ <translation id="7531771599742723865">Уређај се користи</translation> <translation id="7531779363494549572">Идите у Подешавања > Апликације и обавештења > Обавештења.</translation> <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> не реагује. Изаберите „Принудно затвори“ да бисте затворили апликацију.</translation> +<translation id="7535730537657706072">Да бисте обрисали историју прегледања без архивирања са уређаја, затворите све картице без архивирања</translation> <translation id="7535791657097741517">Укључите светлу тему</translation> <translation id="7537451260744431038">Сајтови не могу да користе колачиће за побољшање доживљаја прегледања, на пример, да бисте остали пријављени или да би ставке у вашој корпи за куповину остале сачуване</translation> <translation id="753769905878158714">У траку за адресу унесите кључну реч за веб-сајт који желите да претражите. Затим користите тастерску пречицу да бисте наставили.</translation> @@ -6664,6 +6671,7 @@ <translation id="8138217203226449454">Да ли сте намерно променили добављача претраге?</translation> <translation id="8138997515734480534">Статус виртуелне машине <ph name="VM_NAME" /></translation> <translation id="8139447493436036221">Фајлови на Google диску</translation> +<translation id="8140070492745508800"><ph name="FIRST_DEVICE" />, <ph name="SECOND_DEVICE" /></translation> <translation id="8141584439523427891">Сада се отвара у алтернативном прегледачу</translation> <translation id="8141725884565838206">Управљајте лозинкама</translation> <translation id="814204052173971714">{COUNT,plural, =1{видео}one{# видео}few{# видео снимка}other{# видео снимака}}</translation> @@ -7381,6 +7389,7 @@ <translation id="8909782404367982052">Превлачење ради претраге слика помоћу Google објектива</translation> <translation id="8909833622202089127">Сајт прати локацију</translation> <translation id="8910222113987937043">Промене обележивача, историје, лозинки и других подешавања се више неће синхронизовати са Google налогом. Међутим, постојећи подаци ће се и даље чувати на Google налогу и можете да управљате њима на <ph name="BEGIN_LINK" />Google контролној табли<ph name="END_LINK" />.</translation> +<translation id="8910987510378294980">Сакријте листу уређаја</translation> <translation id="8912362522468806198">Google налога</translation> <translation id="8912793549644936705">Растегни</translation> <translation id="8912810933860534797">Омогући аутоматско скенирање</translation> @@ -7498,6 +7507,7 @@ <translation id="9033765790910064284">Ипак настави</translation> <translation id="9033857511263905942">&Налепи</translation> <translation id="903480517321259405">Поново унесите PIN</translation> +<translation id="9037054491984310631">Повезани сте са Bluetooth уређајем под називом <ph name="DEVICE" /></translation> <translation id="9037640663275993951">Уређај није дозвољен</translation> <translation id="9037818663270399707">Веза није приватна за сав мрежни саобраћај</translation> <translation id="9037965129289936994">Прикажи оригинал</translation> @@ -7578,6 +7588,7 @@ <translation id="9112786533191410418">Фајл <ph name="FILE_NAME" /> је можда опасан. Желите да га пошаљете Google-у на скенирање?</translation> <translation id="9112987648460918699">Пронађи...</translation> <translation id="9113240369465613386">Само странице са непарним бројевима</translation> +<translation id="9113469270512809735">Укључи/искључи недавно затворене ставке</translation> <translation id="9114663181201435112">Лако се пријављујте</translation> <translation id="9115675100829699941">&Обележивачи</translation> <translation id="9116465289595958864">Последња измена</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb index 59b57b8e..2fbf362 100644 --- a/chrome/app/resources/generated_resources_ta.xtb +++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -101,6 +101,7 @@ <translation id="1103523840287552314">எப்போதும் இந்த மொழியை மொழிபெயர் <ph name="LANGUAGE" /></translation> <translation id="1108600514891325577">&Stop</translation> <translation id="1110155001042129815">காத்திருங்கள்</translation> +<translation id="1111781754511998498">Projector</translation> <translation id="1112420131909513020">பின்னணித் தாவல் புளூடூத்தைப் பயன்படுத்துகிறது</translation> <translation id="1113892970288677790">தேர்ந்தெடுக்கப்பட்ட கலைப்படைப்புகளையும் படங்களையும் தேர்வுசெய்க</translation> <translation id="1114102982691049955"><ph name="PRINTER_MANUFACTURER" /> <ph name="PRINTER_MODEL" /> (USB)</translation> @@ -534,6 +535,7 @@ <translation id="156793199942386351">'<ph name="CURRENTKEY" />' பட்டன் ஏற்கெனவே '<ph name="ACTION" />' செயலுக்கு ஒதுக்கப்பட்டுள்ளது. <ph name="RESPONSE" /> ஏதேனும் ஒரு பட்டனை அழுத்தவும்.</translation> <translation id="1567993339577891801">JavaScript கன்சோல்</translation> <translation id="1568323446248056064">திரை அமைப்புகளைத் திற</translation> +<translation id="1570604804919108255">அறிவிப்புகளை ஒலி இயக்குதல்</translation> <translation id="1571738973904005196">இந்தப் பிரிவைக் காட்டு: <ph name="TAB_ORIGIN" /></translation> <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (கெஸ்ட்)</translation> <translation id="1572266655485775982">வைஃபையை இயக்கு</translation> @@ -591,6 +593,7 @@ <translation id="1621485112342885423">உங்கள் கார்ட்டுகள்</translation> <translation id="1621729191093924223">மைக்ரோஃபோனின் உதவியுடன் இயங்கும் அம்சங்கள் செயல்படாது</translation> <translation id="1621831347985899379"><ph name="DEVICE_TYPE" /> தரவு அகற்றப்படும்</translation> +<translation id="1621984899599015181">பகிர்வதற்கான விருப்பங்களை உங்கள் நிறுவனம் நிர்வகிக்கிறது. சில விருப்பங்கள் மறைக்கப்பட்டிருக்கலாம்.</translation> <translation id="1622054403950683339">வைஃபை நெட்வொர்க்கை மறந்துவிடு</translation> <translation id="1623132449929929218">படங்கள் தற்போது கிடைக்கவில்லை. வால்பேப்பர் தொகுப்புகளைப் பார்க்க, இணையத்துடன் மீண்டும் இணைக்கவும்.</translation> <translation id="1623723619460186680">நீலநிற வெளிச்சத்தைக் குறைத்தல்</translation> @@ -836,6 +839,7 @@ <translation id="1850508293116537636">&வலஞ்சுழியாகச் சுற்று</translation> <translation id="1852141627593563189">தீங்கிழைக்கும் மென்பொருளைக் கண்டறிக</translation> <translation id="1852799913675865625">கோப்பு <ph name="ERROR_TEXT" /> ஐப் படிக்க முயற்சிக்கும்போது பிழை ஏற்பட்டது.</translation> +<translation id="1854049213067042715">விட்ட இடத்திலிருந்து தொடங்கலாம். தொடங்கும்போதே ஆப்ஸ் மீட்டெடுக்கப்படும் வகையில் அமைக்கலாம் அல்லது மீட்டெடுப்பதை அமைப்புகளுக்குச் சென்று முடக்கலாம்.</translation> <translation id="1854180393107901205">அனுப்புவதை நிறுத்து</translation> <translation id="1855079636134697549">கேமரா இயக்கப்பட்டுள்ளது</translation> <translation id="1856715684130786728">இடத்தைச் சேர்...</translation> @@ -965,6 +969,7 @@ <translation id="1989113344093894667">உள்ளடக்கத்தைப் படமெடுக்க முடியவில்லை</translation> <translation id="1990046457226896323">உடனடி வசனத்தின் கோப்புகள் பதிவிறக்கப்பட்டன</translation> <translation id="1990512225220753005">இந்தப் பக்கத்தில் ஷார்ட்கட்களைக் காண்பிக்க வேண்டாம்</translation> +<translation id="199191324030140441">'தொந்தரவு செய்ய வேண்டாம்' அம்சத்தை முடக்குதல்</translation> <translation id="1992397118740194946">அமைக்கப்படவில்லை</translation> <translation id="1992924914582925289">சாதனத்திலிருந்து அகற்று</translation> <translation id="1994173015038366702">தள URL</translation> @@ -1006,6 +1011,7 @@ உங்கள் சாதனத்தில் Family Link ஆப்ஸை நிறுவுவதன் மூலம் இந்தக் கணக்கின் அமைப்புகளை நீங்கள் நிர்வகிக்க முடியும். மின்னஞ்சலில் இதற்கான வழிமுறைகளை அனுப்பியுள்ளோம்.</translation> <translation id="2040460856718599782">அச்சச்சோ! உங்களை அங்கீகரிக்க முயற்சிக்கும்போது ஏதோ தவறு நடந்துவிட்டது. உங்கள் உள்நுழைவு நற்சான்றிதழ்களை இருமுறை சரிபார்த்து மீண்டும் முயற்சி செய்க.</translation> +<translation id="2040894699575719559">இருப்பிடத் தகவலுக்கான அணுகல் தடுக்கப்பட்டுள்ளது</translation> <translation id="2042279886444479655">செயலில் உள்ள சுயவிவரங்கள்</translation> <translation id="2044014337866019681">சாதனத்தை அன்லாக் செய்ய, <ph name="ACCOUNT" /> கணக்கைச் சரிபார்த்திருப்பதை உறுதிசெய்துகொள்ளவும்.</translation> <translation id="204497730941176055">Microsoft சான்றிதழ் டெம்பிளேட் பெயர்</translation> @@ -1493,6 +1499,7 @@ <translation id="2527167509808613699">எந்த வகையான இணைப்பும்</translation> <translation id="2530166226437958497">பிழையறிந்து திருத்துதல்</translation> <translation id="2532589005999780174">அதிக ஒளி மாறுபாட்டுப் பயன்முறை</translation> +<translation id="2533649878691950253">இருப்பிடத் தகவலுக்கான அணுகலைப் பொதுவாகவே நீங்கள் அனுமதிப்பதில்லை என்பதால் உங்களின் துல்லியமான இருப்பிடத்தை இந்தத் தளம் பெறுவது தடுக்கப்பட்டுள்ளது</translation> <translation id="253434972992662860">&இடைநிறுத்து</translation> <translation id="253557089021624350">கீப்அலைவ் கவுண்ட்</translation> <translation id="2535799430745250929">செல்லுலார் நெட்வொர்க் எதுவுமில்லை</translation> @@ -1680,6 +1687,7 @@ <translation id="2738771556149464852">இதன்பிறகு அல்ல</translation> <translation id="2739191690716947896">பிழைத்திருத்து</translation> <translation id="2739240477418971307">உங்கள் அணுகல்தன்மை அமைப்புகளை மாற்றலாம்</translation> +<translation id="2739965161385757621">எனது அமைப்புகளைக் காட்டு</translation> <translation id="274029851662193272">டிப்ரஸ்டு</translation> <translation id="2740531572673183784">சரி</translation> <translation id="2741713322780029189">மீட்பு டெர்மினலைத் திற</translation> @@ -1804,6 +1812,7 @@ <translation id="2864601841139725659">சுயவிவரப் படத்தை அமைக்கவும்</translation> <translation id="2865919525181940183">தற்சமயம் திரையிலுள்ள நிரல்களின் ஸ்கிரீன்ஷாட்</translation> <translation id="286674810810214575">பவர் மூலங்களை சரிபார்க்கிறது...</translation> +<translation id="2866876751734765554">தனியுரிமை அமைப்புகளைச் சரிபாருங்கள்</translation> <translation id="2867768963760577682">பொருத்திய தாவலாகத் திற</translation> <translation id="2868746137289129307">இந்த நீட்டிப்பு காலாவதியானது, நிறுவனக் கொள்கையால் முடக்கப்பட்டுள்ளது. புதிய பதிப்புக் கிடைக்கும் போது தானாகவே இயக்கப்பட வாய்ப்புள்ளது.</translation> <translation id="2870560284913253234">தளம்</translation> @@ -2333,6 +2342,7 @@ <translation id="3446274660183028131">Windowsஸை நிறுவ, Parallels Desktopபைத் துவக்கவும்.</translation> <translation id="344630545793878684">பல இணையதளங்களில் உங்கள் தரவைப் படித்தல்</translation> <translation id="3446650212859500694">இந்தக் கோப்பு பாதுகாக்கவேண்டிய உள்ளடக்கத்தைக் கொண்டுள்ளது</translation> +<translation id="3446827946208017735">மிக முக்கியமான தனியுரிமை அமைப்புகளை ஒரே இடத்தில் இருந்தே பார்க்கலாம் மாற்றலாம்</translation> <translation id="3448086340637592206">Google Chrome & Chrome OSஸின் கூடுதல் விதிமுறைகள்</translation> <translation id="3448492834076427715">கணக்கைப் புதுப்பி</translation> <translation id="3449393517661170867">புதிய தாவலாக்கப்பட்ட சாளரம்</translation> @@ -3761,6 +3771,7 @@ <translation id="4996851818599058005">{NUM_VMS,plural, =0{<ph name="VM_TYPE" /> VMகள் எதுவும் இல்லை}=1{ஒரு <ph name="VM_TYPE" /> VM உள்ளது: <ph name="VM_NAME_LIST" />}other{{NUM_VMS} <ph name="VM_TYPE" /> VMகள் உள்ளன: <ph name="VM_NAME_LIST" />}}</translation> <translation id="4997086284911172121">இணைய இணைப்பு இல்லை.</translation> <translation id="4998430619171209993">ஆன் செய்யப்பட்டுள்ளது</translation> +<translation id="4999804342505941663">‘தொந்தரவு செய்ய வேண்டாம்’ அம்சத்தை இயக்குதல்</translation> <translation id="5000922062037820727">தடுக்கப்பட்டது (பரிந்துரைத்தது)</translation> <translation id="5005498671520578047">கடவுச்சொல்லை நகலெடு</translation> <translation id="5006218871145547804">Crostini Android ஆப்ஸ் ADB</translation> @@ -5086,6 +5097,7 @@ <translation id="6468485451923838994">எழுத்துருக்கள்</translation> <translation id="6468773105221177474"><ph name="FILE_COUNT" /> கோப்புகள்</translation> <translation id="6469557521904094793">செல்லுலார் நெட்வொர்க்கை இயக்கு</translation> +<translation id="6470823736074966819">அறிவிப்புகளை ஒலியடக்குதல்</translation> <translation id="6472893788822429178">முகப்பு பொத்தானைக் காண்பி</translation> <translation id="6474498546677193336">ஓர் ஆப்ஸ் இந்தக் கோப்புறையைப் பயன்படுத்திக் கொண்டிருப்பதால் பகிர்வை நீக்க இயலவில்லை. இந்தக் கோப்புறை அடுத்த முறை Linux நிறுத்தப்படும்போது பகிர்வு நீக்கப்படும்.</translation> <translation id="6474884162850599008">Google இயக்ககக் கணக்கின் இணைப்பைத் துண்டிக்கவும்</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb index cd25a91d..006b7f1 100644 --- a/chrome/app/resources/generated_resources_te.xtb +++ b/chrome/app/resources/generated_resources_te.xtb
@@ -19,7 +19,7 @@ <translation id="1012794136286421601">మీ డాక్స్, షీట్లు, స్లయిడ్లు మరియు డ్రాయింగ్ల ఫైళ్లు సమకాలీకరించబడుతున్నాయి. వీటిని ఆన్లైన్ లేదా ఆఫ్లైన్లో యాక్సెస్ చేయడానికి Google డిస్క్ యాప్ని తెరవండి.</translation> <translation id="1012876632442809908">USB-C పరికరం (ముందువైపు పోర్ట్)</translation> <translation id="1015041505466489552">TrackPoint</translation> -<translation id="1015318665228971643">ఫోల్డర్ పేరును సవరించండి</translation> +<translation id="1015318665228971643">ఫోల్డర్ పేరును ఎడిట్ చేయండి</translation> <translation id="1015578595646638936">{NUM_DAYS,plural, =1{<ph name="DEVICE_TYPE" />ని అప్డేట్ చేయడానికి చివరి రోజు}other{<ph name="DEVICE_TYPE" />ని {NUM_DAYS} రోజులలోపు అప్డేట్ చేయండి}}</translation> <translation id="1016566241875885511">అదనపు సమాచారం (ఐచ్ఛికం)</translation> <translation id="1017280919048282932">నిఘంటువులో &జోడించు</translation> @@ -123,7 +123,7 @@ <translation id="1125550662859510761"><ph name="WIDTH" /> x <ph name="HEIGHT" /> ఉన్నట్టుంది (అసలైనది)</translation> <translation id="1126809382673880764">ప్రమాదకరమైన వెబ్సైట్లు, డౌన్లోడ్లు మరియు ఎక్స్టెన్షన్ల నుండి మిమ్మల్ని రక్షించదు. Gmail, Search వంటి ఇతర Google సర్వీస్లలో, సురక్షిత బ్రౌజింగ్ అందుబాటులో ఉన్న చోట మీరు ఇప్పటికీ రక్షణను పొందుతారు.</translation> <translation id="1128109161498068552">MIDI పరికరాలను యాక్సెస్ చేయడం కోసం సిస్టమ్ విశిష్ట మెసేజ్లను ఉపయోగించడానికి ఏ సైట్లను అనుమతించవద్దు</translation> -<translation id="1128591060186966949">శోధన ఇంజిన్ను సవరించండి</translation> +<translation id="1128591060186966949">శోధన ఇంజిన్ను ఎడిట్ చేయండి</translation> <translation id="1129850422003387628">యాప్లను మేనేజ్ చేయండి</translation> <translation id="113050636487300043">ప్రొఫైల్ల మధ్య తేడా కనిపించేలా పేరు, రంగు రూపాన్ని ఎంచుకోండి</translation> <translation id="1130589222747246278"><ph name="WINDOW_TITLE" /> - <ph name="GROUP_NAME" /> గ్రూప్లో భాగం</translation> @@ -174,7 +174,7 @@ <translation id="1176471985365269981">మీ పరికరంలోని ఫైళ్లు లేదా ఫోల్డర్లను ఎడిట్ చేయడానికి అనుమతించబడలేదు</translation> <translation id="1177863135347784049">అనుకూల</translation> <translation id="1178581264944972037">పాజ్ చేయి</translation> -<translation id="117916940443676133">మీ 'సెక్యూరిటీ కీ'కి పిన్ రక్షణ లేదు. సైన్-ఇన్ డేటాను నిర్వహించడానికి, ముందు పిన్ను సృష్టించండి.</translation> +<translation id="117916940443676133">మీ 'సెక్యూరిటీ కీ'కి పిన్ రక్షణ లేదు. సైన్-ఇన్ డేటాను నిర్వహించడానికి, ముందు పిన్ను క్రియేట్ చేయండి.</translation> <translation id="1181037720776840403">తీసివేయి</translation> <translation id="1183237619868651138">స్థానిక కాష్లో <ph name="EXTERNAL_CRX_FILE" />ను ఇన్స్టాల్ చేయడం సాధ్యపడదు.</translation> <translation id="1185924365081634987">మీరు ఈ నెట్వర్క్ ఎర్రర్ను పరిష్కరించడానికి <ph name="GUEST_SIGNIN_LINK_START" />అతిథిగా బ్రౌజ్ చేయడాన్ని<ph name="GUEST_SIGNIN_LINK_END" /> కూడా ప్రయత్నించవచ్చు.</translation> @@ -512,7 +512,7 @@ <translation id="1541346352678737112">నెట్వర్క్ ఏదీ కనుగొనబడలేదు</translation> <translation id="1542514202066550870">ఈ ట్యాబ్ హెడ్సెట్ ద్వారా VR కంటెంట్ని ప్రదర్శిస్తోంది.</translation> <translation id="1543284117603151572">Edge నుండి దిగుమతి చేసినవి</translation> -<translation id="1545177026077493356">స్వయంచాలక కియోస్క్ మోడ్</translation> +<translation id="1545177026077493356">ఆటోమేటిక్ కియోస్క్ మోడ్</translation> <translation id="1545749641540134597">QR కోడ్ను స్కాన్ చేయండి</translation> <translation id="1545775234664667895">"<ph name="THEME_NAME" />" థీమ్ వ్యవస్థాపించబడింది.</translation> <translation id="1546280085599573572">ఈ ఎక్స్టెన్షన్ మీరు హోమ్ బటన్ను క్లిక్ చేసినప్పుడు చూపబడే పేజీని మార్చింది.</translation> @@ -1033,7 +1033,7 @@ <translation id="2059913712424898428">సమయ మండలి</translation> <translation id="2060375639911876205">eSIM ప్రొఫైల్ను తీసివేయండి</translation> <translation id="2062354623176996748">అజ్ఞాత విండోతో మీ బ్రౌజింగ్ హిస్టరీని సేవ్ చేయకుండా వెబ్ను ఉపయోగించండి</translation> -<translation id="2065405795449409761">Chrome స్వయంచాలక పరీక్ష సాఫ్ట్వేర్ ద్వారా నియంత్రించబడుతోంది.</translation> +<translation id="2065405795449409761">Chrome ఆటోమేటిక్ పరీక్ష సాఫ్ట్వేర్ ద్వారా నియంత్రించబడుతోంది.</translation> <translation id="2071393345806050157">స్థానిక లాగ్ ఫైల్ లేదు.</translation> <translation id="2071692954027939183">మీరు సాధారణంగా వాటిని అనుమతించనందున నోటిఫికేషన్లు ఆటోమేటిక్గా బ్లాక్ చేయబడ్డాయి</translation> <translation id="2073148037220830746">{NUM_EXTENSIONS,plural, =1{ఎక్స్టెన్షన్ను ఇన్స్టాల్ చేయడానికి క్లిక్ చేయండి}other{ఈ ఎక్స్టెన్షన్లను ఇన్స్టాల్ చేయడానికి క్లిక్ చేయండి}}</translation> @@ -1121,7 +1121,7 @@ <translation id="2151576029659734873">చెల్లని టాబ్ సూచిక ఎంటర్ చేయబడింది.</translation> <translation id="2152281589789213846">మీ ప్రొఫైల్కు ప్రింటర్లను జోడించండి</translation> <translation id="2152882202543497059"><ph name="NUMBER" /> ఫోటోలు</translation> -<translation id="2154484045852737596">కార్డ్ను సవరించండి</translation> +<translation id="2154484045852737596">కార్డ్ను ఎడిట్ చేయండి</translation> <translation id="2154710561487035718">URLను కాపీ చేయి</translation> <translation id="2155772377859296191"><ph name="WIDTH" /> x <ph name="HEIGHT" /> ఉన్నట్టుంది</translation> <translation id="2156294658807918600">సర్వీస్ వర్కర్: <ph name="SCRIPT_URL" /></translation> @@ -1557,7 +1557,7 @@ <translation id="2606454609872547359">వద్దు, ChromeVox లేకుండా కొనసాగించు</translation> <translation id="2606568927909309675">ఇంగ్లీష్ ఆడియో, వీడియో కోసం క్యాప్షన్లను ఆటోమేటిక్గా క్రియేట్ చేస్తుంది. ఆడియో, క్యాప్షన్లు ఎప్పటికీ మీ పరికరంలోనే ఉంటాయి.</translation> <translation id="2607101320794533334">విషయం పబ్లిక్ కీ సమాచారం</translation> -<translation id="2609896558069604090">సత్వరమార్గాలను సృష్టించండి...</translation> +<translation id="2609896558069604090">సత్వరమార్గాలను క్రియేట్ చేయండి...</translation> <translation id="2609980095400624569">కనెక్షన్ను ఏర్పాటు చేయడం సాధ్యపడలేదు</translation> <translation id="2610157865375787051">నిద్రావస్థ</translation> <translation id="2610260699262139870">&సాధారణ పరిమాణం</translation> @@ -1722,7 +1722,7 @@ <translation id="2772936498786524345">స్నీకీ</translation> <translation id="2773288106548584039">లెగసీ బ్రౌజర్ మద్దతు</translation> <translation id="2773802008104670137">ఈ రకమైన ఫైల్ మీ కంప్యూటర్కు హాని కలిగించవచ్చు.</translation> -<translation id="2775104091073479743">వేలిముద్రలను సవరించండి</translation> +<translation id="2775104091073479743">వేలిముద్రలను ఎడిట్ చేయండి</translation> <translation id="2781692009645368755">Google Pay</translation> <translation id="2782104745158847185">Linux అప్లికేషన్ను ఇన్స్టాల్ చేయడంలో ఎర్రర్</translation> <translation id="2783298271312924866">డౌన్లోడ్ చేయబడింది</translation> @@ -1866,7 +1866,7 @@ <translation id="2916745397441987255">ఎక్స్టెన్షన్లను వెతకండి</translation> <translation id="2918484644467055090">ఈ పరికరాన్ని మీ ఖాతా చెందిన సంస్థకు ఎన్రోల్ చేయడం సాధ్యపడదు, ఎందుకంటే నిర్వహణ కోసం పరికరం వేరే సంస్థ ద్వారా మార్క్ చేయబడింది.</translation> <translation id="2920852127376356161">ప్రోటోకాల్లను హ్యాండిల్ చేయడానికి అనుమతించబడలేదు</translation> -<translation id="2921081876747860777">దయచేసి మీ స్థానిక డేటాను రక్షించడానికి పాస్వర్డ్ను సృష్టించండి.</translation> +<translation id="2921081876747860777">దయచేసి మీ స్థానిక డేటాను రక్షించడానికి పాస్వర్డ్ను క్రియేట్ చేయండి.</translation> <translation id="2923006468155067296">మీ <ph name="DEVICE_TYPE" /> ఇప్పుడు లాక్ చేయబడింది. మీ స్మార్ట్ కార్డ్ను ఇన్సర్ట్ చేసి ఉంచమని <ph name="DOMAIN" /> మిమ్మల్ని కోరుతుంది.</translation> <translation id="2923234477033317484">ఈ ఖాతాను తీసివేయి</translation> @@ -2165,7 +2165,7 @@ <translation id="3265459715026181080">విండో ముసివేయి</translation> <translation id="3266022278425892773">Linux డెవలప్మెంట్ ఎన్విరాన్మెంట్</translation> <translation id="3266274118485960573">భద్రతా తనిఖీ రన్ అవుతోంది.</translation> -<translation id="3267726687589094446">బహుళ ఫైళ్ల స్వయంచాలక డౌన్లోడ్లకు అనుమతిని కొనసాగించు</translation> +<translation id="3267726687589094446">బహుళ ఫైళ్ల ఆటోమేటిక్ డౌన్లోడ్లకు అనుమతిని కొనసాగించు</translation> <translation id="3268451620468152448">ఓపెన్ టాబ్లు</translation> <translation id="3269069891205016797">మీరు సైన్ అవుట్ చేసినప్పుడు పరికరం నుండి మీ సమాచారం తీసివేయబడుతుంది.</translation> <translation id="3269093882174072735">చిత్రాన్ని లోడ్ చేయి</translation> @@ -3015,7 +3015,7 @@ <translation id="413915106327509564"><ph name="WINDOW_TITLE" /> - HID పరికరం కనెక్ట్ చేయబడింది</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">మెరుగైన నాణ్యత గల వీడియోను పొందండి మరియు బ్యాటరీ జీవితకాలాన్ని పెంపొందించండి. వీడియో మీ ప్రసార అనుకూల స్క్రీన్లో మాత్రమే ప్లే అవుతుంది.</translation> +<translation id="4144218403971135344">మెరుగైన క్వాలిటీ గల వీడియోను పొందండి మరియు బ్యాటరీ జీవితకాలాన్ని పెంపొందించండి. వీడియో మీ ప్రసార అనుకూల స్క్రీన్లో మాత్రమే ప్లే అవుతుంది.</translation> <translation id="4146026355784316281">ఎల్లప్పుడూ సిస్టమ్ వ్యూయర్తో తెరువు</translation> <translation id="4146785383423576110">రీసెట్ చేసి హానికరమైన వాటిని తీసివేయండి</translation> <translation id="4147897805161313378">Google ఫోటోలు</translation> @@ -3056,7 +3056,7 @@ <translation id="4208390505124702064"><ph name="SITE_NAME" />లో వెతకండి</translation> <translation id="4209092469652827314">పెద్దది</translation> <translation id="4209251085232852247">ఆఫ్ చేయబడింది</translation> -<translation id="4209464433672152343">ముద్రించడం కోసం పత్రాలను సిద్ధం చేయడానికి అవి <ph name="BEGIN_LINK_HELP" />Googleకు పంపబడతాయి<ph name="END_LINK_HELP" />. <ph name="BEGIN_LINK_DASHBOARD" />Google క్లౌడ్ ప్రింట్ డాష్బోర్డ్<ph name="END_LINK_DASHBOARD" />లో మీ ప్రింటర్లు, ప్రింటర్ చరిత్రను చూడండి. సవరించండి. నిర్వహించండి.</translation> +<translation id="4209464433672152343">ముద్రించడం కోసం పత్రాలను సిద్ధం చేయడానికి అవి <ph name="BEGIN_LINK_HELP" />Googleకు పంపబడతాయి<ph name="END_LINK_HELP" />. <ph name="BEGIN_LINK_DASHBOARD" />Google క్లౌడ్ ప్రింట్ డాష్బోర్డ్<ph name="END_LINK_DASHBOARD" />లో మీ ప్రింటర్లు, ప్రింటర్ చరిత్రను చూడండి. ఎడిట్ చేయండి. నిర్వహించండి.</translation> <translation id="4210048056321123003">వర్చువల్ మెషిన్ను డౌన్లోడ్ చేస్తోంది</translation> <translation id="421182450098841253"> &బుక్మార్క్ల బార్ను చూపు</translation> <translation id="4211851069413100178">వినియోగం & విశ్లేషణల డేటాను పంపండి. సమస్య విశ్లేషణ, పరికరం, యాప్ వినియోగ డేటాను Googleకి ఆటోమేటిక్గా పంపడం ద్వారా మీ Android అనుభవాన్ని మెరుగుపరచడంలో సహాయపడండి. ఇది సిస్టమ్, యాప్ స్థిరత్వానికి, అలాగే ఇతర మెరుగుదలలకు సహాయపడుతుంది. కొంత సముదాయ డేటా కూడా Google యాప్లకు, అలాగే Android డెవలపర్ల లాంటి భాగస్వాములకు సహాయపడుతుంది. ఈ <ph name="BEGIN_LINK1" />సెట్టింగ్<ph name="END_LINK1" />ని యజమాని అమలు చేశారు. ఈ పరికరానికి సంబంధించిన విశ్లేషణ, వినియోగ డేటాను Googleకి పంపేలా యజమాని ఎంచుకోవచ్చు. మీ అదనపు వెబ్ & యాప్ కార్యకలాపం సెట్టింగ్ను ఆన్ చేసినట్లయితే, ఈ డేటా మీ Google ఖాతాలో సేవ్ చేయబడవచ్చు. <ph name="BEGIN_LINK2" />మరింత తెలుసుకోండి<ph name="END_LINK2" /></translation> @@ -3209,7 +3209,7 @@ <translation id="4389091756366370506">వినియోగదారు <ph name="VALUE" /></translation> <translation id="4390396490617716185"><ph name="FIRST_SWITCH" />, <ph name="SECOND_SWITCH" />, <ph name="THIRD_SWITCH" />, మరో <ph name="NUMBER_OF_OTHER_SWITCHES" /> స్విచ్లు</translation> <translation id="439266289085815679">బ్లూటూత్ కాన్ఫిగరేషన్ <ph name="USER_EMAIL" /> ద్వారా నియంత్రించబడుతుంది.</translation> -<translation id="4392896746540753732">కాన్ఫిగరేషన్ ఫైల్ను సవరించండి</translation> +<translation id="4392896746540753732">కాన్ఫిగరేషన్ ఫైల్ను ఎడిట్ చేయండి</translation> <translation id="4394049700291259645">నిలిపివేయి</translation> <translation id="4396956294839002702">{COUNT,plural, =0{అన్నింటినీ &తెరువు}=1{బుక్మార్క్ను &తెరువు}other{అన్నింటినీ ({COUNT}) &తెరువు}}</translation> <translation id="439817266247065935">మీ పరికరాన్ని సరిగ్గా షట్ డౌన్ చేయలేదు. Linux యాప్లను ఉపయోగించడానికి Linuxను రీస్టార్ట్ చేయండి.</translation> @@ -3403,7 +3403,7 @@ <translation id="4581774856936278355">Linuxని పునరుద్ధరిస్తున్నప్పుడు ఎర్రర్ ఏర్పడింది</translation> <translation id="4582297591746054421">మీరు కాపీ చేసిన టెక్స్ట్ యొక్క ఫార్మాటింగ్ను అలాగే ఉంచడం వంటి ఫీచర్ల కోసం సాధారణంగా సైట్లు మీ క్లిప్బోర్డ్ను చదువుతాయి</translation> <translation id="4582563038311694664">అన్ని సెట్టింగ్లను రీసెట్ చేయి</translation> -<translation id="4585793705637313973">పేజీని సవరించండి</translation> +<translation id="4585793705637313973">పేజీని ఎడిట్ చేయండి</translation> <translation id="4586275095964870617"><ph name="URL" />ని ప్రత్యామ్నాయ బ్రౌజర్లో తెరవడం సాధ్యపడదు. దయచేసి మీ సిస్టమ్ నిర్వాహకుడిని సంప్రదించండి.</translation> <translation id="4587645918878093912">ఈ రోజుల్లో, వెబ్సైట్లు సంబంధిత యాడ్లను చూపించడం, అలాగే సైట్ పనితీరును కొలవడం వంటి ముఖ్యమైన సర్వీస్ల కోసం థర్డ్-పార్టీ కుక్కీల వంటి అనేక టెక్నాలజీలపై ఆధారపడుతున్నాయి.</translation> <translation id="4589713469967853491">లాగ్స్, విజయవంతంగా 'డౌన్లోడ్స్' డైరెక్టరీలోకి చేర్చబడ్డాయి.</translation> @@ -3747,7 +3747,7 @@ <translation id="496888482094675990">మీరు Google డిస్క్, బాహ్య నిల్వ లేదా మీ Chrome OS పరికరంలో సేవ్ చేసిన ఫైళ్లకు ఫైల్స్ యాప్, శీఘ్ర యాక్సెస్ను అందిస్తుంది.</translation> <translation id="4971412780836297815">పూర్తవగానే తెరువు</translation> <translation id="4971735654804503942">ప్రమాదకరమైన వెబ్సైట్లు, డౌన్లోడ్లు, ఎక్స్టెన్షన్ల నుండి మరింత వేగవంతమైన, క్రియాశీలమైన రక్షణ. పాస్వర్డ్ ఉల్లంఘనల గురించి మిమ్మల్ని హెచ్చరిస్తుంది. బ్రౌజింగ్ డేటాను Googleకు పంపాల్సి ఉంటుంది.</translation> -<translation id="4972129977812092092">ప్రింటర్ను సవరించండి</translation> +<translation id="4972129977812092092">ప్రింటర్ను ఎడిట్ చేయండి</translation> <translation id="4972164225939028131">పాస్వర్డ్ తప్పు</translation> <translation id="4972737347717125191">వర్చువల్ రియాలిటీ పరికరాలు, డేటాను ఉపయోగించడానికి సైట్లు అడగగలవు</translation> <translation id="4973307593867026061">ప్రింటర్లను జోడించు</translation> @@ -3810,7 +3810,7 @@ <translation id="5047421709274785093">చలనం మరియు కాంతి సర్దుబాటు సెన్సార్లను ఉపయోగించకుండా సైట్లను బ్లాక్ చేయి</translation> <translation id="5050330054928994520">TTS</translation> <translation id="5051836348807686060">మీరు ఎంచుకున్న భాషలకు స్పెల్చెక్ మద్దతు లేదు</translation> -<translation id="5052499409147950210">సైట్ను సవరించండి</translation> +<translation id="5052499409147950210">సైట్ను ఎడిట్ చేయండి</translation> <translation id="505347685865235222">పేరు లేని గ్రూప్ - <ph name="GROUP_CONTENT_STRING" /></translation> <translation id="5053962746715621840">Google Lensతో ఇమేజ్ను సెర్చ్ చేయండి</translation> <translation id="5056950756634735043">కంటైనర్కు కనెక్ట్ చేస్తోంది</translation> @@ -4844,7 +4844,7 @@ <translation id="6208521041562685716">మొబైల్ డేటా యాక్టివేట్ చేయబడుతోంది</translation> <translation id="6208725777148613371"><ph name="WEB_DRIVE" />లో సేవ్ చేయడం సాధ్యం కాలేదు - <ph name="INTERRUPT_REASON" /></translation> <translation id="6209838773933913227">కాంపొనెంట్ అప్డేట్ అవుతోంది</translation> -<translation id="6209908325007204267">మీ పరికరంలో Chrome ఎంటర్ప్రైజ్ అప్గ్రేడ్ ఉంది, కానీ మీ యూజర్నేమ్ ఏ ఎంటర్ప్రైజ్ ఖాతాకు అనుబంధించబడి లేదు. వేరొక పరికరంలో g.co/ChromeEnterpriseAccountను సందర్శించడం ద్వారా దయచేసి ఒక ఎంటర్ప్రైజ్ ఖాతాను సృష్టించండి.</translation> +<translation id="6209908325007204267">మీ పరికరంలో Chrome ఎంటర్ప్రైజ్ అప్గ్రేడ్ ఉంది, కానీ మీ యూజర్నేమ్ ఏ ఎంటర్ప్రైజ్ ఖాతాకు అనుబంధించబడి లేదు. వేరొక పరికరంలో g.co/ChromeEnterpriseAccountను సందర్శించడం ద్వారా దయచేసి ఒక ఎంటర్ప్రైజ్ ఖాతాను క్రియేట్ చేయండి.</translation> <translation id="621172521139737651">{COUNT,plural, =0{అన్నింటినీ కొత్త ట్యాబ్ గ్రూప్లో తెరవండి}=1{కొత్త ట్యాబ్ గ్రూప్లో తెరవండి}other{అన్నింటినీ ({COUNT}) కొత్త ట్యాబ్ గ్రూప్లో తెరవండి}}</translation> <translation id="6212039847102026977">అధునాతన నెట్వర్క్ లక్షణాలను చూపు</translation> <translation id="6212168817037875041">ప్రదర్శనను ఆఫ్ చేయండి</translation> @@ -4910,7 +4910,7 @@ <translation id="6270770586500173387"><ph name="BEGIN_LINK1" />సిస్టమ్, యాప్ సమాచారాన్ని<ph name="END_LINK1" /> మరియు <ph name="BEGIN_LINK2" />గణాంకాలను<ph name="END_LINK2" /> పంపు</translation> <translation id="6271348838875430303">కరెక్షన్ను తీసివేశారు</translation> <translation id="6272643420381259437">ప్లగ్ఇన్ను డౌన్లోడ్ చేస్తున్నప్పుడు ఎర్రర్ (<ph name="ERROR" />) ఏర్పడింది</translation> -<translation id="6273677812470008672">నాణ్యత</translation> +<translation id="6273677812470008672">క్వాలిటీ</translation> <translation id="6275846828483490454">గోప్యతా పరిరక్షణ టెక్నాలజీల సెట్ అనేది ఓపెన్ వెబ్ను సంరక్షించడానికి కొనసాగిస్తున్న కార్యక్రమం, ఇది ట్రాకింగ్ విధానాల నుండి మిమ్మల్ని రక్షించడంలో సహాయపడుతుంది.</translation> <translation id="6276210637549544171"><ph name="PROXY_SERVER" /> ప్రాక్సీ కోసం యూజర్నేమ్ మరియు పాస్వర్డ్ అవసరం.</translation> <translation id="6277105963844135994">నెట్వర్క్ సమయం ముగిసింది</translation> @@ -4966,7 +4966,7 @@ <translation id="6321407676395378991">స్క్రీన్ సేవర్ ఆన్ చేయి</translation> <translation id="6322370287306604163">వేలిముద్ర సహాయంతో మరింత వేగంగా అన్లాక్ చేయండి</translation> <translation id="6322653941595359182">మీ Chromebook నుండి వచన మెసేజ్లను పంపండి మరియు స్వీకరించండి</translation> -<translation id="6324916366299863871">షార్ట్కట్ను సవరించండి</translation> +<translation id="6324916366299863871">షార్ట్కట్ను ఎడిట్ చేయండి</translation> <translation id="6325191661371220117">ఆటో-లాంఛ్ను నిలిపివేయి</translation> <translation id="6326175484149238433">Chrome నుండి తీసివేయండి</translation> <translation id="6326855256003666642">సక్రియ కార్యాచరణల గణన</translation> @@ -5139,7 +5139,7 @@ <ph name="EVENT_NAME" /></translation> <translation id="6519689855001245063">అర్హతను చెక్ చేస్తోంది</translation> <translation id="6520876759015997832"><ph name="LIST_SIZE" /> శోధన ఫలితం <ph name="LIST_POSITION" />: <ph name="SEARCH_RESULT_TEXT" />. విభాగానికి నావిగేట్ చేయడానికి ఎంటర్ నొక్కండి.</translation> -<translation id="6521214596282732365">సైట్లు సాధారణంగా మీ ఫాంట్లను ఉపయోగించుకుంటాయి, తద్వారా ఆన్లైన్ డిజైన్, గ్రాఫిక్స్ టూల్స్తో మీరు అధిక నాణ్యత గల కంటెంట్ను క్రియేట్ చేయవచ్చు</translation> +<translation id="6521214596282732365">సైట్లు సాధారణంగా మీ ఫాంట్లను ఉపయోగించుకుంటాయి, తద్వారా ఆన్లైన్ డిజైన్, గ్రాఫిక్స్ టూల్స్తో మీరు అధిక క్వాలిటీ గల కంటెంట్ను క్రియేట్ చేయవచ్చు</translation> <translation id="652492607360843641">మీరు <ph name="NETWORK_TYPE" /> నెట్వర్క్కు కనెక్ట్ చేయబడ్డారు.</translation> <translation id="6527303717912515753">భాగస్వామ్యం చేయి</translation> <translation id="6528179044667508675">అంతరాయం వద్దు</translation> @@ -5675,7 +5675,7 @@ <translation id="7098389117866926363">USB-C పరికరం (వెనుక భాగంలో ఎడమ పోర్ట్)</translation> <translation id="7098447629416471489">సేవ్ చేసిన ఇతర శోధన ఇంజిన్లు ఇక్కడ కనిపిస్తాయి</translation> <translation id="7099337801055912064">పెద్ద PPDని లోడ్ చేయడం సాధ్యం కాదు. గరిష్ట పరిమాణం 250 kB.</translation> -<translation id="7102687220333134671">స్వయంచాలక అప్డేట్లు ఆన్ చేయబడ్డాయి</translation> +<translation id="7102687220333134671">ఆటోమేటిక్ అప్డేట్లు ఆన్ చేయబడ్డాయి</translation> <translation id="7102832101143475489">అభ్యర్థన సమయం ముగిసింది</translation> <translation id="710640343305609397">నెట్వర్క్ సెట్టింగ్లను తెరవండి</translation> <translation id="7108338896283013870">దాచిపెట్టు</translation> @@ -5773,7 +5773,7 @@ <translation id="7222204278952406003">మీ డిఫాల్ట్ బ్రౌజర్గా Chrome సెట్ చేయబడింది</translation> <translation id="7222232353993864120">ఇమెయిల్ చిరునామా</translation> <translation id="7225179976675429563">నెట్వర్క్ రకం లేదు</translation> -<translation id="7228479291753472782">వెబ్సైట్లు భౌగోళికస్థానం, మైక్రోఫోన్, కెమెరా మొదలైనటువంటి లక్షణాలను ఉపయోగించవచ్చా లేదా అనేది పేర్కొనే సెట్టింగ్లను సవరించండి</translation> +<translation id="7228479291753472782">వెబ్సైట్లు భౌగోళికస్థానం, మైక్రోఫోన్, కెమెరా మొదలైనటువంటి లక్షణాలను ఉపయోగించవచ్చా లేదా అనేది పేర్కొనే సెట్టింగ్లను ఎడిట్ చేయండి</translation> <translation id="7228523857728654909">స్క్రీన్ లాక్ మరియు సైన్ ఇన్</translation> <translation id="7230222852462421043">&విండోను రీస్టోర్ చేయండి</translation> <translation id="7230787553283372882">మీ వచన పరిమాణాన్ని అనుకూలీకరించండి</translation> @@ -5876,7 +5876,7 @@ <translation id="7347751611463936647">ఈ ఎక్స్టెన్షన్ను ఉపయోగించడానికి, "<ph name="EXTENSION_KEYWORD" />", తర్వాత TAB, ఆపై మీ ఆదేశం లేదా శోధనను టైప్ చేయండి.</translation> <translation id="7347943691222276892"><ph name="SUBPAGE_TITLE" /> నుండి దూరంగా నావిగేట్ చేయడానికి క్లిక్ చేయండి.</translation> <translation id="7348093485538360975">ఆన్-స్క్రీన్ కీబోర్డ్</translation> -<translation id="7349010927677336670">వీడియో ప్రసార నాణ్యత</translation> +<translation id="7349010927677336670">వీడియో ప్రసార క్వాలిటీ</translation> <translation id="7352651011704765696">ఏదో తప్పు జరిగింది</translation> <translation id="7353261921908507769">మీ కాంటాక్ట్లు సమీపంలో ఉన్నప్పుడు వారు మీతో షేర్ చేయగలరు. మీరు అంగీకరించే వరకు బదిలీలు ప్రారంభం కావు.</translation> <translation id="735361434055555355">Linuxను ఇన్స్టాల్ చేస్తోంది...</translation> @@ -6182,7 +6182,7 @@ <translation id="7650677314924139716">ప్రస్తుతం డేటా వినియోగం Wi-Fi ద్వారా మాత్రమే జరిగేలా సెట్ చేయబడి ఉంది</translation> <translation id="7650920359639954963">ఎనేబుల్ చేయబడలేదు: <ph name="REASON" /></translation> <translation id="765293928828334535">ఈ వెబ్సైట్ నుండి యాప్లు, ఎక్స్టెన్షన్లు మరియు వినియోగదారు స్క్రిప్ట్లు జోడించబడవు</translation> -<translation id="7652954539215530680">పిన్ను సృష్టించండి</translation> +<translation id="7652954539215530680">పిన్ను క్రియేట్ చేయండి</translation> <translation id="7654941827281939388">ఈ ఖాతా ఇప్పటికే ఈ కంప్యూటర్లో ఉపయోగించబడుతోంది.</translation> <translation id="7655411746932645568">సీరియల్ పోర్ట్లకు కనెక్ట్ చేయడానికి సైట్లు అడగవచ్చు</translation> <translation id="7657218410916651670">మీరు సైన్ ఇన్ చేసినప్పుడు, <ph name="BEGIN_LINK_GOOGLE" />ఇతర రకాల యాక్టివిటీ<ph name="END_LINK_GOOGLE" /> మీ Google ఖాతాలో సేవ్ చేయబడవచ్చు. మీరు వాటిని ఎప్పుడైనా తొలగించవచ్చు.</translation> @@ -6751,7 +6751,7 @@ <translation id="8214489666383623925">ఫైల్ను తెరువు...</translation> <translation id="8215129063232901118">మీ ఫోన్ సామర్థ్యాలను <ph name="DEVICE_TYPE" /> నుండి యాక్సెస్ చేయండి</translation> <translation id="8216351761227087153">చూడండి</translation> -<translation id="8217399928341212914">బహుళ ఫైళ్ల యొక్క స్వయంచాలక డౌన్లోడ్లను బ్లాక్ చేయడాన్ని కొనసాగించు</translation> +<translation id="8217399928341212914">బహుళ ఫైళ్ల యొక్క ఆటోమేటిక్ డౌన్లోడ్లను బ్లాక్ చేయడాన్ని కొనసాగించు</translation> <translation id="8221491193165283816">మీరు సాధారణంగా నోటిఫికేషన్లను బ్లాక్ చేస్తుంటారు. ఈ సైట్ నుండి నోటిఫికేషన్లను పొందాలంటే, ఇక్కడ క్లిక్ చేయండి.</translation> <translation id="822347941086490485">HID పరికరాలను కనుగొంటోంది...</translation> <translation id="8225265270453771718">అప్లికేషన్ విండోను షేర్ చేయండి</translation> @@ -6782,7 +6782,7 @@ <translation id="8249615410597138718">మీ పరికరాలకు పంపండి</translation> <translation id="8249672078237421304">మీరు చదివే భాషలో లేని పేజీలను అనువదించే సౌలభ్యం</translation> <translation id="8251441930213048644">ఇప్పుడు రిఫ్రెష్ చేయి</translation> -<translation id="8251578425305135684">సూక్ష్మచిత్రం తొలగించబడింది.</translation> +<translation id="8251578425305135684">థంబ్నెయిల్ తొలగించబడింది.</translation> <translation id="825238165904109940">ఎల్లప్పుడూ పూర్తి URLలను చూపించు</translation> <translation id="8252569384384439529">అప్లోడ్ చేస్తోంది...</translation> <translation id="8253198102038551905">నెట్వర్క్ లక్షణాలను పొందడానికి '+' క్లిక్ చేయండి</translation> @@ -6829,7 +6829,7 @@ <translation id="8294431847097064396">సోర్స్</translation> <translation id="8298429963694909221">మీరు మీ <ph name="DEVICE_TYPE" />లో మీ ఫోన్ నుండి ఇప్పుడు నోటిఫికేషన్లను పొందగలరు. మీ <ph name="DEVICE_TYPE" />లో నోటిఫికేషన్లను విస్మరించడం వలన అవి మీ ఫోన్లో కూడా విస్మరించబడతాయి. మీ ఫోన్ సమీపంలోనే ఉండి, అలాగే అందులో బ్లూటూత్, Wi-Fi ఆన్ చేయబడి ఉన్నాయని నిర్ధారించుకోండి.</translation> <translation id="8299319456683969623">మీరు ప్రస్తుతం ఆఫ్లైన్లో ఉన్నారు.</translation> -<translation id="8300011035382349091">ఈ ట్యాబ్కు సేవ్ చేసిన బుక్మార్క్ను సవరించండి</translation> +<translation id="8300011035382349091">ఈ ట్యాబ్కు సేవ్ చేసిన బుక్మార్క్ను ఎడిట్ చేయండి</translation> <translation id="8300374739238450534">మిడ్నైట్ బ్లూ</translation> <translation id="8303616404642252802">{COUNT,plural, =1{అడ్రస్}other{# అడ్రస్లు}}</translation> <translation id="8304383784961451596">ఈ పరికరాన్ని ఉపయోగించడానికి మీకు అనుమతిలేదు. సైన్ ఇన్ అనుమతి కోసం దయచేసి అడ్మినిస్ట్రేటర్ను కాంటాక్ట్ చేయండి లేదా Family Link ద్వారా పర్యవేక్షించబడే Google ఖాతాతో సైన్ ఇన్ చేయండి.</translation> @@ -6994,7 +6994,7 @@ <translation id="850382998924680137">నేడు చూశారు</translation> <translation id="8507227974644337342">స్క్రీన్ రిజల్యూషన్</translation> <translation id="850875081535031620">హానికరమైన సాఫ్ట్వేర్ కనుగొనబడలేదు</translation> -<translation id="8509177919508253835">సెక్యూరిటీ కీలు రీసెట్ చేసి, పిన్లను సృష్టించండి</translation> +<translation id="8509177919508253835">సెక్యూరిటీ కీలు రీసెట్ చేసి, పిన్లను క్రియేట్ చేయండి</translation> <translation id="8509646642152301857">స్పెల్ చెక్ తనిఖీ నిఘంటువును డౌన్లోడ్ చేయడం విఫలమైంది.</translation> <translation id="8509967119010808787">మీ ట్యాబ్లను సెర్చ్ చేయడానికి, ఇక్కడ క్లిక్ చేయండి</translation> <translation id="8512396579636492893">{COUNT,plural, =0{బలహీనమైన పాస్వర్డ్లు ఏవీ కనుగొనబడలేదు}=1{{COUNT} బలహీనమైన పాస్వర్డ్ కనుగొనబడింది}other{{COUNT} బలహీనమైన పాస్వర్డ్లు కనుగొనబడ్డాయి}}</translation> @@ -7131,7 +7131,7 @@ <translation id="8662811608048051533">చాలా సైట్ల నుండి మిమ్మల్ని సైన్ అవుట్ చేస్తుంది.</translation> <translation id="8662911384982557515">మీ హోమ్ పేజీని దీనికి మార్చండి: <ph name="HOME_PAGE" /></translation> <translation id="8662978096466608964">వాల్పేపర్ను Chrome సెట్ చేయలేదు.</translation> -<translation id="8663099077749055505"><ph name="HOST" />లో ఎల్లప్పుడూ బహుళ స్వయంచాలక డౌన్లోడ్లను బ్లాక్ చేయి</translation> +<translation id="8663099077749055505"><ph name="HOST" />లో ఎల్లప్పుడూ బహుళ ఆటోమేటిక్ డౌన్లోడ్లను బ్లాక్ చేయి</translation> <translation id="8664389313780386848">పేజీ మూలాన్ని &వీక్షించండి</translation> <translation id="8665180165765946056">బ్యాకప్ పూర్తయింది</translation> <translation id="866611985033792019">ఇమెయిల్ వినియోగదారులను గుర్తించడానికి ఈ ప్రమాణపత్రాన్ని విశ్వసిస్తుంది</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb index c6c33840..3b84498 100644 --- a/chrome/app/resources/generated_resources_uk.xtb +++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -161,6 +161,7 @@ <translation id="1165039591588034296">Помилка</translation> <translation id="1166212789817575481">Закрити вкладки праворуч</translation> <translation id="1166583374608765787">Перевірте змінену назву</translation> +<translation id="1166596238782048887">"<ph name="TAB_TITLE" />" – це вкладка з робочого столу "<ph name="DESK_TITLE" />"</translation> <translation id="1168020859489941584">Відкриття через <ph name="TIME_REMAINING" />...</translation> <translation id="1170288591054440704">Запитувати, коли сайт хоче використовувати шрифти, установлені на пристрої</translation> <translation id="1171135284592304528">Виділяти вибраний на клавіатурі об’єкт, коли він змінюється</translation> @@ -623,6 +624,7 @@ <translation id="1640235262200048077">Додатки Linux ще не підтримують клавіатуру <ph name="IME_NAME" /></translation> <translation id="1640283014264083726">PKCS #1 MD4 із шифруванням RSA</translation> <translation id="1641113438599504367">Безпечний перегляд</translation> +<translation id="1642492862748815878">Підключено до "<ph name="DEVICE" />" і ще стількох пристроїв із Bluetooth: <ph name="NUMBER_OF_DEVICES" /></translation> <translation id="1642494467033190216">Перш ніж увімкнути інші функції налагодження, потрібно видалити захист rootfs і перезавантажити пристрій.</translation> <translation id="1643072738649235303">Алгоритм ECDSA X9.62 з підписом SHA-1</translation> <translation id="1643921258693943800">Щоб скористатися функцією "Передавання поблизу", увімкніть Bluetooth і Wi-Fi</translation> @@ -1838,6 +1840,7 @@ <translation id="2885378588091291677">Диспетчер завдань</translation> <translation id="2885729872133513017">Під час декодування відповіді сервера виникла проблема.</translation> <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation> +<translation id="288734198558082692">"<ph name="DEVICE" />" і ще <ph name="NUMBER_OF_DEVICES" /></translation> <translation id="2889064240420137087">Відкрити посилання за допомогою...</translation> <translation id="2891922230654533301">Увійти в додаток <ph name="APP_NAME" /> за допомогою пристрою?</translation> <translation id="2893168226686371498">Веб-переглядач за умовчанням</translation> @@ -2772,6 +2775,7 @@ <translation id="3884152383786131369">Для веб-контенту, доступного багатьма мовами, використовуватиметься перший доступний варіант зі списку нижче. Ці параметри синхронізуються з налаштуваннями веб-переглядача. <ph name="BEGIN_LINK_LEARN_MORE" />Докладніше<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3885112598747515383">Оновленнями керує адміністратор</translation> <translation id="3886446263141354045">Запит на доступ до цього сайту надіслано користувачу <ph name="NAME" /></translation> +<translation id="3887022758415973389">Показати список пристроїв</translation> <translation id="3888053818972567950">Підключення до сервісу <ph name="WEB_DRIVE" /></translation> <translation id="3888550877729210209">Створення нотаток за допомогою додатка <ph name="LOCK_SCREEN_APP_NAME" /></translation> <translation id="3888586133700543064">Ця інформація допоможе нам краще зрозуміти проблему з Асистентом. Дані зберігаються впродовж 90 днів і доступні лише відповідним командам розробників та спеціалістів із відгуків.</translation> @@ -3483,6 +3487,7 @@ <translation id="4662373422909645029">Не можна додавати цифри</translation> <translation id="4662788913887017617">Надішліть цю закладку на iPhone</translation> <translation id="4663373278480897665">Дозволено використовувати камеру</translation> +<translation id="4664289193573249666">Керувати захищеним DNS-сервером у налаштуваннях ОС Chrome</translation> <translation id="4664482161435122549">Помилка експортування PKCS #12</translation> <translation id="4665014895760275686">Виробник</translation> <translation id="4665446389743427678">Усі дані, збережені сайтом <ph name="SITE" /> буде видалено.</translation> @@ -6015,6 +6020,7 @@ <translation id="7478623944308207463">Ваші додатки й налаштування буде синхронізовано на всіх пристроях з ОС Chrome, де ви ввійшли в обліковий запис Google. Щоб переглянути параметри синхронізації веб-переглядача, відкрийте <ph name="LINK_BEGIN" />налаштування Chrome<ph name="LINK_END" />.</translation> <translation id="7478658909253570368">Заборонити сайтам підключатися до пристроїв із послідовними портами</translation> <translation id="7479221278376295180">Огляд використання пам'яті</translation> +<translation id="747981547666531654">Підключено до пристроїв із Bluetooth "<ph name="FIRST_DEVICE" />" і "<ph name="SECOND_DEVICE" />"</translation> <translation id="7481312909269577407">Переслати</translation> <translation id="7481358317100446445">Готова</translation> <translation id="748138892655239008">Базові обмеження сертифіката</translation> @@ -6067,6 +6073,7 @@ <translation id="7531771599742723865">Пристрій використовується</translation> <translation id="7531779363494549572">Перейдіть у меню "Налаштування" > "Додатки та сповіщення" > "Сповіщення".</translation> <translation id="7532009420053991888">Додаток <ph name="LINUX_APP_NAME" /> не відповідає. Щоб закрити його, виберіть опцію "Примусово закрити".</translation> +<translation id="7535730537657706072">Щоб видалити історію веб-перегляду в анонімному режимі з пристрою, закрийте всі анонімні вкладки</translation> <translation id="7535791657097741517">Увімкнути світлу тему</translation> <translation id="7537451260744431038">Сайти не можуть використовувати файли cookie, щоб покращувати веб-перегляд, наприклад не виходити з облікового запису чи запам'ятовувати товари в кошику для покупок</translation> <translation id="753769905878158714">В адресному рядку введіть ключове слово для веб-сайту, який потрібно знайти. Потім скористайтеся комбінацією клавіш.</translation> @@ -6684,6 +6691,7 @@ <translation id="8138217203226449454">Ви хотіли змінити пошукову систему?</translation> <translation id="8138997515734480534">Статус віртуальної машини <ph name="VM_NAME" /></translation> <translation id="8139447493436036221">Файли з Google Диска</translation> +<translation id="8140070492745508800">"<ph name="FIRST_DEVICE" />", "<ph name="SECOND_DEVICE" />"</translation> <translation id="8141584439523427891">Відкривання в альтернативному веб-переглядачі</translation> <translation id="8141725884565838206">Керування паролями</translation> <translation id="814204052173971714">{COUNT,plural, =1{відео}one{# відео}few{# відео}many{# відео}other{# відео}}</translation> @@ -7402,6 +7410,7 @@ <translation id="8909782404367982052">Перетягувати зображення для пошуку через Google Об’єктив</translation> <translation id="8909833622202089127">Сайт відстежує місцезнаходження</translation> <translation id="8910222113987937043">Зміни в закладках, історії, паролях та інших налаштуваннях більше не синхронізуватимуться з вашим обліковим записом Google. Дані, які зберігаються в обліковому записі Google, не буде видалено. Ними можна керувати на <ph name="BEGIN_LINK" />Інформаційній панелі Google<ph name="END_LINK" />.</translation> +<translation id="8910987510378294980">Сховати список пристроїв</translation> <translation id="8912362522468806198">Обліковий запис Google</translation> <translation id="8912793549644936705">Розтягнути</translation> <translation id="8912810933860534797">Увімкнути автоматичне сканування</translation> @@ -7519,6 +7528,7 @@ <translation id="9033765790910064284">Усе одно продовжити</translation> <translation id="9033857511263905942">&Вставити</translation> <translation id="903480517321259405">Введіть PIN-код ще раз</translation> +<translation id="9037054491984310631">Підключено до пристрою з Bluetooth "<ph name="DEVICE" />"</translation> <translation id="9037640663275993951">Пристрій заборонений</translation> <translation id="9037818663270399707">З'єднання неконфіденційне в усьому мережевому трафіку</translation> <translation id="9037965129289936994">Показати оригінал</translation> @@ -7599,6 +7609,7 @@ <translation id="9112786533191410418">Файл <ph name="FILE_NAME" /> може бути небезпечним. Надіслати його компанії Google на перевірку?</translation> <translation id="9112987648460918699">Знайти...</translation> <translation id="9113240369465613386">Лише непарні сторінки</translation> +<translation id="9113469270512809735">Показати або сховати нещодавно закриті елементи</translation> <translation id="9114663181201435112">Простий вхід</translation> <translation id="9115675100829699941">&Закладки</translation> <translation id="9116465289595958864">Востаннє змінені</translation>
diff --git a/chrome/app/resources/google_chrome_strings_am.xtb b/chrome/app/resources/google_chrome_strings_am.xtb index 26537a1b..cb99bd7 100644 --- a/chrome/app/resources/google_chrome_strings_am.xtb +++ b/chrome/app/resources/google_chrome_strings_am.xtb
@@ -277,6 +277,7 @@ <translation id="8008534537613507642">Chromeን ዳግም ጫነው</translation> <translation id="8013993649590906847">አንድ ምስል ጠቃሚ መግለጫ ከሌለው Chrome ለእርስዎ አንድ ለማቅረብ ይሞክራል። ዝርዝር መግለጫዎችን ለመፍጠር፣ ምስሎች ወደ Google ይላካሉ።</translation> <translation id="8129812357326543296">ስለ &Google Chrome</translation> +<translation id="822971176939352383">የሚከተሉት መለያዎች በማናቸውም የChrome መገለጫዎች ውስጥ አልገቡም። አንድ መለያ በሌላ መገለጫ ውስጥ ለመጠቀም ከፈለጉ መጀመሪያ ያንን መገለጫ ያስወግዱት።</translation> <translation id="8255190535488645436">Google Chrome ካሜራዎን እና ማይክሮፎንዎን እየተጠቀመ ነው።</translation> <translation id="8286862437124483331">Google Chrome የይለፍ ቃሎችን ለማሳየት እየሞከረ ነው። ይህንን ለመፍቀድ የእርስዎን Windows የይለፍ ቃል ይተይቡ።</translation> <translation id="828798499196665338">የእርስዎ ወላጅ ለChrome «የጣቢያዎች፣ መተግበሪያዎች እና ቅጥያዎች ፈቃዶች»ን አጥፍተዋል። ይህን <ph name="EXTENSION_TYPE_PARAMETER" /> ማንቃት አይፈቀድም።</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ar.xtb b/chrome/app/resources/google_chrome_strings_ar.xtb index ef65eaf..83d53269 100644 --- a/chrome/app/resources/google_chrome_strings_ar.xtb +++ b/chrome/app/resources/google_chrome_strings_ar.xtb
@@ -274,6 +274,7 @@ <translation id="8008534537613507642">إعادة تثبيت Chrome</translation> <translation id="8013993649590906847">في حال لم تتضمن صورة ما وصفًا مفيدًا، سيحاول Chrome توفير وصف لك. لإنشاء الأوصاف، سيتم إرسال الصور إلى Google.</translation> <translation id="8129812357326543296">&حول Google Chrome</translation> +<translation id="822971176939352383">لم تسجّل الحسابات التالية الدخول إلى أي ملفات شخصية على Chrome. إذا كنت تريد استخدام حساب في ملف شخصي آخر، عليك إزالة هذا الملف الشخصي أولاً.</translation> <translation id="8255190535488645436">يستخدم Google Chrome الكاميرا والميكروفون.</translation> <translation id="8286862437124483331">يحاول Google Chrome عرض كلمات المرور. اكتب كلمة مرور Windows للسماح بذلك.</translation> <translation id="828798499196665338">أوقفَ أحد والدَيك "أذونات المواقع الإلكترونية والتطبيقات والإضافات" لمتصفِّح Chrome. ولا يمكن تفعيل <ph name="EXTENSION_TYPE_PARAMETER" />.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_bg.xtb b/chrome/app/resources/google_chrome_strings_bg.xtb index 9a22d910..d730ae8f 100644 --- a/chrome/app/resources/google_chrome_strings_bg.xtb +++ b/chrome/app/resources/google_chrome_strings_bg.xtb
@@ -271,6 +271,7 @@ <translation id="8008534537613507642">Повторно инсталиране на Chrome</translation> <translation id="8013993649590906847">Ако няма полезно описание за дадено изображение, Chrome ще се опита да предостави такова. За да бъдат създадени описания, съответните изображения се изпращат до Google.</translation> <translation id="8129812357326543296">Всичко за &Google Chrome</translation> +<translation id="822971176939352383">Следните профили не са част от потребителските профили в Chrome. Ако искате да използвате даден профил в друг потребителски профил, първо премахнете съответния потребителски профил.</translation> <translation id="8255190535488645436">Google Chrome използва камерата и микрофона ви.</translation> <translation id="8286862437124483331">Google Chrome опитва да покаже паролите. За да разрешите това, въведете паролата си за Windows.</translation> <translation id="828798499196665338">Някой от родителите ви е изключил разрешенията за сайтове, приложения и разширения за Chrome. Активирането на <ph name="EXTENSION_TYPE_PARAMETER" /> не е разрешено.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_bs.xtb b/chrome/app/resources/google_chrome_strings_bs.xtb index fcc7c1e..8f05c92 100644 --- a/chrome/app/resources/google_chrome_strings_bs.xtb +++ b/chrome/app/resources/google_chrome_strings_bs.xtb
@@ -276,6 +276,7 @@ <translation id="8008534537613507642">Ponovo instaliraj Chrome</translation> <translation id="8013993649590906847">Ako slika ne sadrži koristan opis, Chrome će ga pokušati pružiti. Slike se šalju Googleu radi kreiranja opisa.</translation> <translation id="8129812357326543296">O &Google Chromeu</translation> +<translation id="822971176939352383">Sljedeći računi nisu prijavljeni na Chrome profile. Ako želite koristiti račun na drugom profilu, prvo uklonite taj profil.</translation> <translation id="8255190535488645436">Google Chrome koristi vašu kameru i mikrofon.</translation> <translation id="8286862437124483331">Google Chrome pokušava prikazati lozinke. Unesite svoju lozinku za Windows da ovo omogućite.</translation> <translation id="828798499196665338">Tvoj roditelj je isključio "Odobrenja za web lokacije, aplikacije i ekstenzije" za Chrome. Omogućavanje ove stavke (<ph name="EXTENSION_TYPE_PARAMETER" />) nije dozvoljeno.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ca.xtb b/chrome/app/resources/google_chrome_strings_ca.xtb index 6ba802d..65c61f8 100644 --- a/chrome/app/resources/google_chrome_strings_ca.xtb +++ b/chrome/app/resources/google_chrome_strings_ca.xtb
@@ -269,6 +269,7 @@ <translation id="8008534537613507642">Torna a instal·lar Chrome</translation> <translation id="8013993649590906847">Si una imatge no té una descripció útil, Chrome provarà d'oferir-te'n una. Per crear les descripcions, les imatges s'envien a Google.</translation> <translation id="8129812357326543296">Quant a &Google Chrome</translation> +<translation id="822971176939352383">Els següents comptes no tenen la sessió iniciada en cap perfil de Chrome. Si vols utilitzar un compte en un altre perfil, primer has de suprimir aquest perfil.</translation> <translation id="8255190535488645436">Google Chrome està utilitzant la càmera i el micròfon.</translation> <translation id="8286862437124483331">Google Chrome està provant de mostrar contrasenyes. Escriviu la vostra contrasenya de Windows per permetre-ho.</translation> <translation id="828798499196665338">Els teus pares han desactivat Permisos per a llocs web, aplicacions i extensions en relació amb Chrome. No es permet activar aquesta <ph name="EXTENSION_TYPE_PARAMETER" />.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_da.xtb b/chrome/app/resources/google_chrome_strings_da.xtb index 1e068724..e685157 100644 --- a/chrome/app/resources/google_chrome_strings_da.xtb +++ b/chrome/app/resources/google_chrome_strings_da.xtb
@@ -270,6 +270,7 @@ <translation id="8008534537613507642">Geninstaller Chrome</translation> <translation id="8013993649590906847">Hvis et billede ikke har en brugbar beskrivelse, forsøger Chrome at angive en for dig. Billederne sendes til Google, så der kan oprettes beskrivelser.</translation> <translation id="8129812357326543296">Om &Google Chrome</translation> +<translation id="822971176939352383">Følgende konti er ikke logget ind på nogen Chrome-profiler. Hvis du vil bruge en konto på en anden profil, skal du først fjerne den pågældende profil.</translation> <translation id="8255190535488645436">Google Chrome bruger dit kamera og din mikrofon.</translation> <translation id="8286862437124483331">Google Chrome forsøger at vise adgangskoder. Angiv din Windows-adgangskode for at tillade dette.</translation> <translation id="828798499196665338">Din forælder har deaktiveret "Tilladelser til websites, apps og udvidelser" for Chrome. Det er ikke tilladt at aktivere denne <ph name="EXTENSION_TYPE_PARAMETER" />.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_el.xtb b/chrome/app/resources/google_chrome_strings_el.xtb index e75a4b6..45035add 100644 --- a/chrome/app/resources/google_chrome_strings_el.xtb +++ b/chrome/app/resources/google_chrome_strings_el.xtb
@@ -274,6 +274,7 @@ <translation id="8008534537613507642">Επανεγκατάσταση του Chrome</translation> <translation id="8013993649590906847">Εάν μια εικόνα δεν έχει κάποια χρήσιμη περιγραφή, το Chrome θα προσπαθήσει να σας προσφέρει μια περιγραφή. Για τη δημιουργία περιγραφών, αποστέλλονται εικόνες στην Google.</translation> <translation id="8129812357326543296">Σχετικά με &το Google Chrome</translation> +<translation id="822971176939352383">Οι παρακάτω λογαριασμοί δεν έχουν εγγραφεί σε προφίλ Chrome. Εάν θέλετε να χρησιμοποιήσετε έναν λογαριασμό σε άλλο προφίλ, αρχικά, καταργήστε εκείνο το προφίλ.</translation> <translation id="8255190535488645436">Το Google Chrome χρησιμοποιεί την κάμερα και το μικρόφωνό σας.</translation> <translation id="8286862437124483331">Το Google Chrome προσπαθεί να εμφανίσει τους κωδικούς πρόσβασης. Πληκτρολογήστε τον κωδικό πρόσβασής σας Windows για να το επιτρέψετε αυτό.</translation> <translation id="828798499196665338">Ο γονέας σου απενεργοποίησε την επιλογή "Άδειες για ιστοτόπους, εφαρμογές και επεκτάσεις" για το Chrome. Η ενεργοποίηση του στοιχείου <ph name="EXTENSION_TYPE_PARAMETER" /> δεν επιτρέπεται.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_en-GB.xtb b/chrome/app/resources/google_chrome_strings_en-GB.xtb index 88cccce..1cf8c7cf 100644 --- a/chrome/app/resources/google_chrome_strings_en-GB.xtb +++ b/chrome/app/resources/google_chrome_strings_en-GB.xtb
@@ -277,6 +277,7 @@ <translation id="8008534537613507642">Reinstall Chrome</translation> <translation id="8013993649590906847">If an image doesn’t have a useful description, Chrome will try to provide one for you. To create descriptions, images are sent to Google.</translation> <translation id="8129812357326543296">About &Google Chrome</translation> +<translation id="822971176939352383">The following accounts are not signed into any Chrome profiles. If you want to use an account in another profile, remove that profile first.</translation> <translation id="8255190535488645436">Google Chrome is using your camera and microphone.</translation> <translation id="8286862437124483331">Google Chrome is trying to show passwords. Type your Windows password to allow this.</translation> <translation id="828798499196665338">Your parent has turned off 'Permissions for sites, apps and extensions' for Chrome. Enabling this <ph name="EXTENSION_TYPE_PARAMETER" /> is not allowed.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_es.xtb b/chrome/app/resources/google_chrome_strings_es.xtb index 06b8647..24660eb 100644 --- a/chrome/app/resources/google_chrome_strings_es.xtb +++ b/chrome/app/resources/google_chrome_strings_es.xtb
@@ -278,6 +278,7 @@ <translation id="8008534537613507642">Reinstalar Chrome</translation> <translation id="8013993649590906847">Si una imagen no tiene ninguna descripción útil, Chrome intentará proporcionártela. Para crear las descripciones, las imágenes se envían a Google.</translation> <translation id="8129812357326543296">Información de &Google Chrome</translation> +<translation id="822971176939352383">Estas cuentas no han iniciado sesión en ningún perfil de Chrome. Si quieres usar una cuenta en otro perfil, quita ese perfil primero.</translation> <translation id="8255190535488645436">Google Chrome está utilizando la cámara y el micrófono.</translation> <translation id="8286862437124483331">Google Chrome está intentando mostrar contraseñas. Para permitirlo, escribe tu contraseña de Windows.</translation> <translation id="828798499196665338">Tus padres han desactivado "Permisos de sitios, aplicaciones y extensiones" en Chrome. No se permite habilitar <ph name="EXTENSION_TYPE_PARAMETER" />.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_et.xtb b/chrome/app/resources/google_chrome_strings_et.xtb index f7a3edb..ec81d396 100644 --- a/chrome/app/resources/google_chrome_strings_et.xtb +++ b/chrome/app/resources/google_chrome_strings_et.xtb
@@ -273,6 +273,7 @@ <translation id="8008534537613507642">Installi Chrome uuesti</translation> <translation id="8013993649590906847">Kui pildil puudub kasulik kirjeldus, üritab Chrome selle ise luua. Kirjelduste loomiseks saadetakse pildid Google'ile.</translation> <translation id="8129812357326543296">Teave &Google Chrome'i kohta</translation> +<translation id="822971176939352383">Järgmised kontod pole ühelegi Chrome'i profiilile sisse logitud. Kui soovite kasutada teisel profiilil olevat kontot, eemaldage esmalt see profiil.</translation> <translation id="8255190535488645436">Google Chrome kasutab kaamerat ja mikrofoni.</translation> <translation id="8286862437124483331">Google Chrome proovib kuvada paroole. Selle lubamiseks sisestage Windowsi parool.</translation> <translation id="828798499196665338">Sinu vanem lülitas valiku „Saitide, rakenduste ja laienduste load” Chrome'i puhul välja. Laienduse <ph name="EXTENSION_TYPE_PARAMETER" /> lubamine on keelatud.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fa.xtb b/chrome/app/resources/google_chrome_strings_fa.xtb index 2f188d4..b675241 100644 --- a/chrome/app/resources/google_chrome_strings_fa.xtb +++ b/chrome/app/resources/google_chrome_strings_fa.xtb
@@ -270,6 +270,7 @@ <translation id="8008534537613507642">نصب مجدد Chrome</translation> <translation id="8013993649590906847">اگر تصویری توضیح مفیدی نداشته باشد، Chrome توضیحی برای شما ارائه خواهد کرد. برای ایجاد توضیحات، تصاویر به Google ارسال میشود.</translation> <translation id="8129812357326543296">درباره &Google Chrome</translation> +<translation id="822971176939352383">حسابهای زیر به سیستم هیچکدام از نمایههای Chrome وارد نشدهاند. اگر میخواهید از حسابی در نمایهای دیگر استفاده کنید،ابتدا آن نمایه را بردارید.</translation> <translation id="8255190535488645436">Google Chrome درحال استفاده از دوربین و میکروفون شما است.</translation> <translation id="8286862437124483331">Google Chrome در حال تلاش برای نشان دادن گذرواژههاست. برای اجازه به این کار، گذرواژه Windows خود را تایپ کنید.</translation> <translation id="828798499196665338">ولیتان «اجازههای مربوط به سایتها، برنامهها، و افزونهها» را برای Chrome خاموش کرده است. فعال کردن این <ph name="EXTENSION_TYPE_PARAMETER" /> مجاز نیست.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fr.xtb b/chrome/app/resources/google_chrome_strings_fr.xtb index 033b803..335b48b8 100644 --- a/chrome/app/resources/google_chrome_strings_fr.xtb +++ b/chrome/app/resources/google_chrome_strings_fr.xtb
@@ -276,6 +276,7 @@ <translation id="8008534537613507642">Réinstaller Chrome</translation> <translation id="8013993649590906847">Si une image n'est pas accompagnée d'une description utile, Chrome essaiera de vous en proposer une. Pour nous permettre de créer des descriptions, les images sont envoyées à Google.</translation> <translation id="8129812357326543296">À propos de &Google Chrome</translation> +<translation id="822971176939352383">Les comptes suivants ne sont connectés à aucun profil Chrome. Si vous souhaitez utiliser un compte pour un autre profil, supprimez d'abord le profil.</translation> <translation id="8255190535488645436">Votre webcam et votre micro sont en cours d'utilisation dans Google Chrome.</translation> <translation id="8286862437124483331">Google Chrome tente d'afficher les mots de passe. Pour autoriser cette action, saisissez votre mot de passe Windows.</translation> <translation id="828798499196665338">Ton parent a désactivé l'option "Autorisations des sites, applications et extensions" pour Chrome. Tu ne peux pas activer cette <ph name="EXTENSION_TYPE_PARAMETER" />.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_hr.xtb b/chrome/app/resources/google_chrome_strings_hr.xtb index 6a164aa..2effe27d 100644 --- a/chrome/app/resources/google_chrome_strings_hr.xtb +++ b/chrome/app/resources/google_chrome_strings_hr.xtb
@@ -270,6 +270,7 @@ <translation id="8008534537613507642">Ponovo instaliraj Chrome</translation> <translation id="8013993649590906847">Ako slika nema koristan opis, Chrome će ga pokušati pružiti. Da bi se izradili opisi, slike se šalju Googleu.</translation> <translation id="8129812357326543296">O programu Google Chrome</translation> +<translation id="822971176939352383">Računi u nastavku nisu prijavljeni ni na jedan Chrome profil. Ako želite koristiti račun na drugom profilu, prvo uklonite taj profil.</translation> <translation id="8255190535488645436">Google Chrome upotrebljava vašu kameru i mikrofon.</translation> <translation id="8286862437124483331">Google Chrome pokušava prikazati zaporke. Upišite svoju zaporku za Windows da biste to dopustili.</translation> <translation id="828798499196665338">Tvoj je roditelj isključio "Dopuštenja za web-lokacije, aplikacije i proširenja" za Chrome. Nije dopušteno omogućiti <ph name="EXTENSION_TYPE_PARAMETER" />.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_hu.xtb b/chrome/app/resources/google_chrome_strings_hu.xtb index e76b17da..89f5e3e4 100644 --- a/chrome/app/resources/google_chrome_strings_hu.xtb +++ b/chrome/app/resources/google_chrome_strings_hu.xtb
@@ -269,6 +269,7 @@ <translation id="8008534537613507642">A Chrome újratelepítése</translation> <translation id="8013993649590906847">Ha valamelyik kép nem rendelkezik hasznos leírással, akkor a Chrome igyekszik leírást adni róla. A Google automatikusan megkapja a leírások létrehozásához szükséges képeket.</translation> <translation id="8129812357326543296">A &Google Chrome névjegye</translation> +<translation id="822971176939352383">A következő fiókok nincsenek egyetlen Chrome-profilba sem bejelentkezve. Ha másik profilban szeretné használni az adott fiókot, előbb távolítsa el a szóban forgó profilt.</translation> <translation id="8255190535488645436">A Google Chrome használja a kamerát és a mikrofont.</translation> <translation id="8286862437124483331">A Google Chrome megkísérli megjeleníteni a jelszavakat. Ennek engedélyezéséhez írja be Windows-jelszavát.</translation> <translation id="828798499196665338">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(z) <ph name="EXTENSION_TYPE_PARAMETER" /> nem engedélyezhető.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_kk.xtb b/chrome/app/resources/google_chrome_strings_kk.xtb index 146b4736..0748bac 100644 --- a/chrome/app/resources/google_chrome_strings_kk.xtb +++ b/chrome/app/resources/google_chrome_strings_kk.xtb
@@ -277,6 +277,7 @@ <translation id="8008534537613507642">Chrome қайта орнату</translation> <translation id="8013993649590906847">Егер суреттің пайдалы сипаттамасы болмаса, Chrome оны өзі ұсынып көреді. Сипаттамалар жасау үшін суреттер Google-ға жіберіледі.</translation> <translation id="8129812357326543296">Google Chrome туралы ақпарат</translation> +<translation id="822971176939352383">Мына есептік жазбалар бірде-бір Chrome профиліне кірмеген. Есептік жазбаны басқа профильде қолданғыңыз келсе, алдымен сол профильді өшіріп тастаңыз.</translation> <translation id="8255190535488645436">Google Chrome камераңыз бен микрофоныңызды пайдалануда.</translation> <translation id="8286862437124483331">Google Chrome құпия сөздерді көрсетпек. Бұған рұқсат беру үшін Windows құпия сөзіңізді теріңіз.</translation> <translation id="828798499196665338">Ата-анаңыз Chrome браузері үшін "Сайттар, қолданбалар және кеңейтімдер бойынша рұқсаттар" параметрін өшірді. <ph name="EXTENSION_TYPE_PARAMETER" /> кеңейтімін іске қосуға болмайды.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ky.xtb b/chrome/app/resources/google_chrome_strings_ky.xtb index b32bd255..d29a29c 100644 --- a/chrome/app/resources/google_chrome_strings_ky.xtb +++ b/chrome/app/resources/google_chrome_strings_ky.xtb
@@ -278,6 +278,7 @@ <translation id="8008534537613507642">Chrome'ду кайра орнотуу</translation> <translation id="8013993649590906847">Эгер сүрөттөрдүн түшүндүрмөсү жок болсо, Chrome аны түшүндүрүп берүүгө аракет кылат. Түшүндүрмөлөрдү даярдоо үчүн, сүрөттөр Google'га жөнөтүлөт.</translation> <translation id="8129812357326543296">&Google Chrome жөнүндө</translation> +<translation id="822971176939352383">Төмөнкү аккаунттар Chrome профилдерине кирген жок. Эгер аккаунтту башка профилде колдонгуңуз келсе, адегенде ал профилди өчүрүңүз.</translation> <translation id="8255190535488645436">Google Chrome камераңыз менен микрофонуңузду колдонуп жатат.</translation> <translation id="8286862437124483331">Google Chrome сырсөздөрдү көрсөткөнгө аракет кылып жатат. Ага уруксат берүү үчүн Windows сырсөзүңүздү териңиз.</translation> <translation id="828798499196665338">Ата-энеңиз Chrome үчүн "Сайттарга, колдонмолорго жана кеңейтүүлөргө уруксаттарды" өчүрүп койгон. Бул <ph name="EXTENSION_TYPE_PARAMETER" /> кеңейтүүсүн иштетүүгө болбойт.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_pl.xtb b/chrome/app/resources/google_chrome_strings_pl.xtb index 027ca60..a943f27 100644 --- a/chrome/app/resources/google_chrome_strings_pl.xtb +++ b/chrome/app/resources/google_chrome_strings_pl.xtb
@@ -267,6 +267,7 @@ <translation id="8008534537613507642">Ponownie zainstaluj Chrome</translation> <translation id="8013993649590906847">Jeśli obraz nie ma przydatnego opisu, Chrome spróbuje go dla Ciebie stworzyć. W tym celu obrazy zostaną wysłane do Google.</translation> <translation id="8129812357326543296">&Google Chrome – informacje</translation> +<translation id="822971176939352383">Na te konta nie zalogowano się w żadnym profilu Chrome. Jeśli chcesz używać konta w innym profilu, najpierw go usuń.</translation> <translation id="8255190535488645436">Google Chrome używa Twojej kamery i mikrofonu.</translation> <translation id="8286862437124483331">Google Chrome próbuje pokazać hasła. Podaj swoje hasło do Windows, by na to zezwolić.</translation> <translation id="828798499196665338">Rodzic wyłączył „Uprawnienia stron, aplikacji i rozszerzeń” dla Chrome. Włączenie elementu <ph name="EXTENSION_TYPE_PARAMETER" /> jest niedozwolone.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_pt-BR.xtb b/chrome/app/resources/google_chrome_strings_pt-BR.xtb index 765e5d6..72bde62 100644 --- a/chrome/app/resources/google_chrome_strings_pt-BR.xtb +++ b/chrome/app/resources/google_chrome_strings_pt-BR.xtb
@@ -269,6 +269,7 @@ <translation id="8008534537613507642">Reinstalar o Google Chrome</translation> <translation id="8013993649590906847">Se uma imagem não tiver uma descrição útil, o Chrome tentará fornecer uma para você. As imagens serão enviadas ao Google para a criação de descrições.</translation> <translation id="8129812357326543296">Sobre o Google Chrome</translation> +<translation id="822971176939352383">As seguintes contas não estão conectadas a nenhum perfil do Chrome. Se você quiser usar uma conta em outro perfil, remova-o primeiro.</translation> <translation id="8255190535488645436">O Google Chrome está usando sua câmera e seu microfone.</translation> <translation id="8286862437124483331">O Google Chrome está tentando mostrar senhas. Digite sua senha do Windows para permitir isso.</translation> <translation id="828798499196665338">Seu pai/mãe desativou "Permissões para sites, apps e extensões" no Chrome. Não é permitido ativar <ph name="EXTENSION_TYPE_PARAMETER" />.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ro.xtb b/chrome/app/resources/google_chrome_strings_ro.xtb index fa8c1544..6bdde9d5 100644 --- a/chrome/app/resources/google_chrome_strings_ro.xtb +++ b/chrome/app/resources/google_chrome_strings_ro.xtb
@@ -269,6 +269,7 @@ <translation id="8008534537613507642">Reinstalați Chrome</translation> <translation id="8013993649590906847">Dacă o imagine nu are o descriere utilă, Chrome va încerca să o completeze. Pentru a crea descrieri, imaginile sunt trimise la Google.</translation> <translation id="8129812357326543296">Despre &Google Chrome</translation> +<translation id="822971176939352383">Următoarele conturi nu sunt conectate la niciun profil Chrome. Dacă vrei să folosești un cont într-un alt profil, mai întâi elimină profilul respectiv.</translation> <translation id="8255190535488645436">Google Chrome utilizează camera foto și microfonul.</translation> <translation id="8286862437124483331">Google Chrome încearcă să afișeze parolele. Pentru a permite acest lucru, introduceți parola pentru Windows.</translation> <translation id="828798499196665338">Părintele tău a dezactivat opțiunea „Permisiuni pentru site-uri, aplicații și extensii” în Chrome. Activarea acestei <ph name="EXTENSION_TYPE_PARAMETER" /> nu este permisă.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sk.xtb b/chrome/app/resources/google_chrome_strings_sk.xtb index 0884629..fed1364 100644 --- a/chrome/app/resources/google_chrome_strings_sk.xtb +++ b/chrome/app/resources/google_chrome_strings_sk.xtb
@@ -275,6 +275,7 @@ <translation id="8008534537613507642">Preinštalovať prehliadač Chrome</translation> <translation id="8013993649590906847">Ak obrázok nemá užitočný popis, Chrome sa vám ho pokúsi poskytnúť. Obrázky sa odosielajú Googlu, aby bolo možné vytvoriť popisy.</translation> <translation id="8129812357326543296">Informácie o prehliadači &Google Chrome</translation> +<translation id="822971176939352383">Nasledujúce účty nie sú prihlásené do žiadneho profilu Chromu. Ak chcete používať účet v inom profile, najprv daný profil odstráňte.</translation> <translation id="8255190535488645436">Google Chrome používa vašu kameru a mikrofón.</translation> <translation id="8286862437124483331">Prehliadač Google Chrome sa pokúša zobraziť heslá. Ak to chcete povoliť, zadajte svoje heslo systému Windows.</translation> <translation id="828798499196665338">Tvoj rodič vypol „Povolenia pre weby, aplikácie a rozšírenia“ v Chrome. Povolenie tohto rozšírenia (<ph name="EXTENSION_TYPE_PARAMETER" />) je zakázané.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sl.xtb b/chrome/app/resources/google_chrome_strings_sl.xtb index cf942cd6..a9b6fce0 100644 --- a/chrome/app/resources/google_chrome_strings_sl.xtb +++ b/chrome/app/resources/google_chrome_strings_sl.xtb
@@ -278,6 +278,7 @@ <translation id="8008534537613507642">Vnovična namestitev Chroma</translation> <translation id="8013993649590906847">Če slika nima koristnega opisa, ga bo Chrome poskušal zagotoviti. Opisi se ustvarijo tako, da se slike pošljejo Googlu.</translation> <translation id="8129812357326543296">O &Google Chromu</translation> +<translation id="822971176939352383">Naslednji računi niso prijavljeni v noben profil v Chromu. Če želite uporabiti račun v drugem profilu, najprej odstranite ta profil.</translation> <translation id="8255190535488645436">Google Chrome uporablja vašo kamero in mikrofon.</translation> <translation id="8286862437124483331">Google Chrome poskuša prikazati gesla. Če želite omogočiti to, vnesite geslo za Windows.</translation> <translation id="828798499196665338">Tvoj starš je izklopil »Dovoljenja za spletna mesta, aplikacije in razširitve« za Chrome. Omogočanje tega ni dovoljeno: <ph name="EXTENSION_TYPE_PARAMETER" />.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sr-Latn.xtb b/chrome/app/resources/google_chrome_strings_sr-Latn.xtb index 3b41925..0efbbd81 100644 --- a/chrome/app/resources/google_chrome_strings_sr-Latn.xtb +++ b/chrome/app/resources/google_chrome_strings_sr-Latn.xtb
@@ -278,6 +278,7 @@ <translation id="8008534537613507642">Ponovo instaliraj Chrome</translation> <translation id="8013993649590906847">Ako slika nema koristan opis, Chrome će probati da vam ga pruži. Slike se šalju Google-u radi pravljenja opisa.</translation> <translation id="8129812357326543296">O &Google Chrome-u</translation> +<translation id="822971176939352383">Sledeći nalozi nisu prijavljeni ni na jedan Chrome profil. Ako želite da koristite nalog na drugom profilu, uklonite prvo taj profil.</translation> <translation id="8255190535488645436">Google Chrome koristi kameru i mikrofon.</translation> <translation id="8286862437124483331">Google Chrome pokušava da prikaže lozinke. Unesite lozinku za Windows da biste to omogućili.</translation> <translation id="828798499196665338">Roditelj je isključio „Dozvole za sajtove, aplikacije i dodatke“ za Chrome. Omogućavanje ove stavke (<ph name="EXTENSION_TYPE_PARAMETER" />) nije dozvoljeno.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sr.xtb b/chrome/app/resources/google_chrome_strings_sr.xtb index bd0bd19..22cc380f 100644 --- a/chrome/app/resources/google_chrome_strings_sr.xtb +++ b/chrome/app/resources/google_chrome_strings_sr.xtb
@@ -278,6 +278,7 @@ <translation id="8008534537613507642">Поново инсталирај Chrome</translation> <translation id="8013993649590906847">Ако слика нема користан опис, Chrome ће пробати да вам га пружи. Слике се шаљу Google-у ради прављења описа.</translation> <translation id="8129812357326543296">О &Google Chrome-у</translation> +<translation id="822971176939352383">Следећи налози нису пријављени ни на један Chrome профил. Ако желите да користите налог на другом профилу, уклоните прво тај профил.</translation> <translation id="8255190535488645436">Google Chrome користи камеру и микрофон.</translation> <translation id="8286862437124483331">Google Chrome покушава да прикаже лозинке. Унесите лозинку за Windows да бисте то омогућили.</translation> <translation id="828798499196665338">Родитељ је искључио „Дозволе за сајтове, апликације и додатке“ за Chrome. Омогућавање ове ставке (<ph name="EXTENSION_TYPE_PARAMETER" />) није дозвољено.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_te.xtb b/chrome/app/resources/google_chrome_strings_te.xtb index f93208db..581ab64 100644 --- a/chrome/app/resources/google_chrome_strings_te.xtb +++ b/chrome/app/resources/google_chrome_strings_te.xtb
@@ -262,7 +262,7 @@ <translation id="7808348361785373670">Chrome నుండి తీసివేయి...</translation> <translation id="7825851276765848807">నిర్దిష్టంగా తెలియని ఎర్రర్ కారణంగా ఇన్స్టలేషన్ విఫలమైంది. దయచేసి Google Chromeను మళ్లీ డౌన్లోడ్ చేయండి.</translation> <translation id="7890208801193284374">మీరు కంప్యూటర్ను షేర్ చేస్తే, స్నేహితులు, కుటుంబ సభ్యులు విడివిడిగా బ్రౌజ్ చేయవచ్చు. Chromeను వారికి నచ్చిన రీతిలో సెటప్ చేసుకోవచ్చు.</translation> -<translation id="7896673875602241923">మునుపు ఒకరు ఈ కంప్యూటర్లో Chromeకు <ph name="ACCOUNT_EMAIL_LAST" /> లాగా సైన్ ఇన్ చేశారు. దయచేసి మీ సమాచారాన్ని విడిగా ఉంచడానికి కొత్త Chrome వినియోగదారును సృష్టించండి.</translation> +<translation id="7896673875602241923">మునుపు ఒకరు ఈ కంప్యూటర్లో Chromeకు <ph name="ACCOUNT_EMAIL_LAST" /> లాగా సైన్ ఇన్ చేశారు. దయచేసి మీ సమాచారాన్ని విడిగా ఉంచడానికి కొత్త Chrome వినియోగదారును క్రియేట్ చేయండి.</translation> <translation id="7917876797003313048">మీరు సైన్ ఇన్ చేసిన Google ఖాతాలను మీరు మేనేజ్ చేయవచ్చు. Chrome బ్రౌజర్, Play స్టోర్, Gmail, ఇంకా మరిన్నింటి కోసం మీ Google ఖాతాలు ఉపయోగించబడతాయి. ఫ్యామిలీ మెంబర్ వంటి వారి కోసం మీరు ఖాతాను జోడించాలనుకుంటే, బదులుగా కొత్త వ్యక్తిని మీ <ph name="DEVICE_TYPE" />కు జోడించండి. <ph name="LINK_BEGIN" />మరింత తెలుసుకోండి<ph name="LINK_END" /></translation> <translation id="7930071585467473040">పాస్వర్డ్లను కాపీ చేయడానికి Google Chrome ప్రయత్నిస్తోంది.</translation> <translation id="7962410387636238736">Windows XP మరియు Windows Vistaలకు ఇప్పుడు మద్దతు లేనందున ఈ కంప్యూటర్ ఇకపై Google Chrome అప్డేట్లను స్వీకరించదు</translation>
diff --git a/chrome/app/resources/google_chrome_strings_uk.xtb b/chrome/app/resources/google_chrome_strings_uk.xtb index 0147a2047..1d78145 100644 --- a/chrome/app/resources/google_chrome_strings_uk.xtb +++ b/chrome/app/resources/google_chrome_strings_uk.xtb
@@ -270,6 +270,7 @@ <translation id="8008534537613507642">Перевстановити Chrome</translation> <translation id="8013993649590906847">Якщо зображення не має корисного опису, Chrome спробує додати його. Для цього зображення надсилаються в Google.</translation> <translation id="8129812357326543296">Про &Google Chrome</translation> +<translation id="822971176939352383">Користувачі зазначених облікових записів не ввійшли в профілі Chrome. Якщо ви хочете скористатись обліковим записом в іншому профілі, спершу вилучіть цей профіль.</translation> <translation id="8255190535488645436">Google Chrome використовує вашу камеру та мікрофон.</translation> <translation id="8286862437124483331">Google Chrome намагається показати паролі. Щоб дозволити, введіть свій пароль Windows.</translation> <translation id="828798499196665338">Хтось із твоїх батьків вимкнув "Дозволи для сайтів, додатків і розширень" у Chrome. Вмикати це <ph name="EXTENSION_TYPE_PARAMETER" /> заборонено.</translation>
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index 71c43b91..19623ab8 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -2578,6 +2578,14 @@ base::size(kContinuousSearchPermanentDismissal), nullptr}, {"with double-row chips", kContinuousSearchDoubleRowChip, base::size(kContinuousSearchDoubleRowChip), nullptr}}; + +const FeatureEntry::FeatureParam kReadLaterUseRootBookmarkAsDefault[] = { + {"use_root_bookmark_as_default", "true"}}; + +const FeatureEntry::FeatureVariation kReadLaterVariations[] = { + {"(use root bookmark as default)", kReadLaterUseRootBookmarkAsDefault, + base::size(kReadLaterUseRootBookmarkAsDefault), nullptr}}; + #endif // defined(OS_ANDROID) // RECORDING USER METRICS FOR FLAGS: @@ -3379,6 +3387,9 @@ feature_engagement::kIPHDemoMode, feature_engagement::kIPHDemoModeChoiceVariations, "IPH_DemoMode")}, + {"in-product-help-snooze", flag_descriptions::kInProductHelpSnoozeName, + flag_descriptions::kInProductHelpSnoozeDescription, kOsAll, + FEATURE_VALUE_TYPE(feature_engagement::kIPHSnooze)}, {"disable-threaded-scrolling", flag_descriptions::kThreadedScrollingName, flag_descriptions::kThreadedScrollingDescription, kOsAll, SINGLE_DISABLE_VALUE_TYPE(blink::switches::kDisableThreadedScrolling)}, @@ -4569,9 +4580,17 @@ FEATURE_VALUE_TYPE(features::kQuickSettingsPWANotifications)}, #endif // BUILDFLAG(IS_CHROMEOS_ASH) +#ifdef OS_ANDROID {flag_descriptions::kReadLaterFlagId, flag_descriptions::kReadLaterName, - flag_descriptions::kReadLaterDescription, kOsDesktop | kOsAndroid, + flag_descriptions::kReadLaterDescription, kOsAndroid, + FEATURE_WITH_PARAMS_VALUE_TYPE(reading_list::switches::kReadLater, + kReadLaterVariations, + flag_descriptions::kReadLaterName)}, +#else + {flag_descriptions::kReadLaterFlagId, flag_descriptions::kReadLaterName, + flag_descriptions::kReadLaterDescription, kOsDesktop, FEATURE_VALUE_TYPE(reading_list::switches::kReadLater)}, +#endif {"read-later-new-badge-promo", flag_descriptions::kReadLaterNewBadgePromoName, @@ -5224,6 +5243,11 @@ {"enable-quick-answers-v2", flag_descriptions::kEnableQuickAnswersV2Name, flag_descriptions::kEnableQuickAnswersV2Description, kOsCrOS, FEATURE_VALUE_TYPE(chromeos::features::kQuickAnswersV2)}, + + {"disable-quick-answers-v2-translation", + flag_descriptions::kDisableQuickAnswersV2TranslationName, + flag_descriptions::kDisableQuickAnswersV2TranslationDescription, kOsCrOS, + FEATURE_VALUE_TYPE(chromeos::features::kDisableQuickAnswersV2Translation)}, #endif // BUILDFLAG(IS_CHROMEOS_ASH) #if defined(OS_ANDROID)
diff --git a/chrome/browser/ash/accessibility/spoken_feedback_browsertest.cc b/chrome/browser/ash/accessibility/spoken_feedback_browsertest.cc index e2855526..181005e 100644 --- a/chrome/browser/ash/accessibility/spoken_feedback_browsertest.cc +++ b/chrome/browser/ash/accessibility/spoken_feedback_browsertest.cc
@@ -14,6 +14,7 @@ #include "ash/public/cpp/accessibility_controller.h" #include "ash/public/cpp/event_rewriter_controller.h" #include "ash/public/cpp/screen_backlight.h" +#include "ash/public/cpp/shelf_item_delegate.h" #include "ash/public/cpp/shelf_model.h" #include "ash/public/cpp/test/shell_test_api.h" #include "ash/root_window_controller.h" @@ -69,6 +70,17 @@ namespace ash { namespace { +class TestShelfItemDelegate : public ShelfItemDelegate { + public: + explicit TestShelfItemDelegate(const ShelfID& shelf_id) + : ShelfItemDelegate(shelf_id) {} + void ExecuteCommand(bool from_context_menu, + int64_t command_id, + int32_t event_flags, + int64_t display_id) override {} + void Close() override {} +}; + const double kExpectedPhoneticSpeechAndHintDelayMS = 1000; } // namespace @@ -533,7 +545,8 @@ item.id = ShelfID("TestApp"); item.title = u"TestAppTitle"; item.type = ShelfItemType::TYPE_APP; - ShelfModel::Get()->Add(item); + ShelfModel::Get()->Add(item, + std::make_unique<TestShelfItemDelegate>(item.id)); // Set the notification badge to be shown for the test app. ShelfModel::Get()->UpdateItemNotification("TestApp", /*has_badge=*/true); @@ -587,7 +600,8 @@ item.title = u"TestAppTitle"; item.type = ShelfItemType::TYPE_APP; item.app_status = AppStatus::kPaused; - ShelfModel::Get()->Add(item); + ShelfModel::Get()->Add(item, + std::make_unique<TestShelfItemDelegate>(item.id)); // Focus on the shelf. sm_.Call( @@ -637,7 +651,8 @@ item.title = u"TestAppTitle"; item.type = ShelfItemType::TYPE_APP; item.app_status = AppStatus::kBlocked; - ShelfModel::Get()->Add(item); + ShelfModel::Get()->Add(item, + std::make_unique<TestShelfItemDelegate>(item.id)); // Focus on the shelf. sm_.Call(
diff --git a/chrome/browser/ash/crosapi/BUILD.gn b/chrome/browser/ash/crosapi/BUILD.gn index f8cb87c..100352a4 100644 --- a/chrome/browser/ash/crosapi/BUILD.gn +++ b/chrome/browser/ash/crosapi/BUILD.gn
@@ -151,6 +151,7 @@ "//remoting/host/chromeos:remoting_service", "//services/device/wake_lock/power_save_blocker", "//services/video_capture/public/cpp:cpp", + "//services/video_capture/public/mojom", "//ui/message_center", "//ui/message_center/public/cpp", "//ui/shell_dialogs",
diff --git a/chrome/browser/ash/crosapi/video_capture_device_factory_ash.cc b/chrome/browser/ash/crosapi/video_capture_device_factory_ash.cc index 7678d55..1fe71ea 100644 --- a/chrome/browser/ash/crosapi/video_capture_device_factory_ash.cc +++ b/chrome/browser/ash/crosapi/video_capture_device_factory_ash.cc
@@ -12,6 +12,7 @@ #include "base/notreached.h" #include "chrome/browser/ash/crosapi/video_capture_device_ash.h" #include "content/public/browser/video_capture_service.h" +#include "services/video_capture/public/mojom/video_capture_service.mojom.h" namespace crosapi {
diff --git a/chrome/browser/ash/login/screens/sync_consent_browsertest.cc b/chrome/browser/ash/login/screens/sync_consent_browsertest.cc index f0ce942..7d48e1f 100644 --- a/chrome/browser/ash/login/screens/sync_consent_browsertest.cc +++ b/chrome/browser/ash/login/screens/sync_consent_browsertest.cc
@@ -182,10 +182,7 @@ } ReplaceExitCallback(); - - // Set up screen to be shown. GetSyncConsentScreen()->SetProfileSyncDisabledByPolicyForTesting(false); - GetSyncConsentScreen()->SetProfileSyncEngineInitializedForTesting(true); } void TearDownOnMainThread() override { @@ -199,12 +196,6 @@ OobeBaseTest::TearDownOnMainThread(); } - void SetUpCommandLine(base::CommandLine* command_line) override { - command_line->AppendSwitch( - ::chromeos::switches::kOobeTriggerSyncTimeoutForTests); - OobeBaseTest::SetUpCommandLine(command_line); - } - void SwitchLanguage(const std::string& language) { WelcomeScreen* welcome_screen = WizardController::default_controller()->GetScreen<WelcomeScreen>(); @@ -216,8 +207,6 @@ void WaitForScreenShown() { OobeScreenWaiter(SyncConsentScreenView::kScreenId).Wait(); - // This is needed to refresh the screen based on minor mode signal. - GetSyncConsentScreen()->Show(/*wizard_context*/ nullptr); } void ReplaceExitCallback() { @@ -227,17 +216,23 @@ &SyncConsentTest::HandleScreenExit, base::Unretained(this))); } - void LoginToSyncConsentScreen() { + void LoginAsNewRegularUser() { login_manager_mixin_.LoginAsNewRegularUser(); OobeScreenExitWaiter(GetFirstSigninScreen()).Wait(); // No need to explicitly show the screen as it is the first one after login. + } + + void LoginToSyncConsentScreen() { + LoginAsNewRegularUser(); SetIsMinorUser(is_minor_user_); + GetSyncConsentScreen()->SetProfileSyncEngineInitializedForTesting(true); + GetSyncConsentScreen()->OnStateChanged(nullptr); } void LoginToSyncConsentScreenWithUnknownCapability() { - login_manager_mixin_.LoginAsNewRegularUser(); - OobeScreenExitWaiter(GetFirstSigninScreen()).Wait(); - // No need to explicitly show the screen as it is the first one after login. + LoginAsNewRegularUser(); + GetSyncConsentScreen()->SetProfileSyncEngineInitializedForTesting(true); + GetSyncConsentScreen()->OnStateChanged(nullptr); } protected: @@ -345,16 +340,6 @@ EXPECT_TRUE(settings->IsSyncEverythingEnabled()); } -IN_PROC_BROWSER_TEST_F(SyncConsentTest, SyncEngineInitializationTimeout) { - GetSyncConsentScreen()->SetProfileSyncEngineInitializedForTesting(false); - auto syncWaiter = test::OobeJS().CreateVisibilityWaiter(true, {kSyncConsent}); - auto overviewDialogWaiter = - test::OobeJS().CreateVisibilityWaiter(true, {kOverviewDialog}); - LoginToSyncConsentScreen(); - syncWaiter->Wait(); - overviewDialogWaiter->Wait(); -} - // Tests of the consent recorder with SyncConsentOptional disabled. The // SyncConsentOptional suite below has its own consent recorder tests. class SyncConsentRecorderTest : public SyncConsentTest { @@ -859,6 +844,13 @@ histogram_tester_.ExpectUniqueSample( "OOBE.SyncConsentScreen.Behavior", SyncConsentScreen::SyncScreenBehavior::kShow, 1); + histogram_tester_.ExpectUniqueSample( + "OOBE.SyncConsentScreen.IsCapabilityKnown", true, 1); + histogram_tester_.ExpectUniqueSample("OOBE.SyncConsentScreen.IsMinorUser", + true, 1); + histogram_tester_.ExpectUniqueSample( + "OOBE.SyncConsentScreen.UserChoice", + SyncConsentScreenHandler::UserChoice::kAccepted, 1); histogram_tester_.ExpectUniqueSample("OOBE.SyncConsentScreen.SyncEnabled", true, 1); } @@ -910,6 +902,13 @@ histogram_tester_.ExpectUniqueSample( "OOBE.SyncConsentScreen.Behavior", SyncConsentScreen::SyncScreenBehavior::kShow, 1); + histogram_tester_.ExpectUniqueSample( + "OOBE.SyncConsentScreen.IsCapabilityKnown", true, 1); + histogram_tester_.ExpectUniqueSample("OOBE.SyncConsentScreen.IsMinorUser", + true, 1); + histogram_tester_.ExpectUniqueSample( + "OOBE.SyncConsentScreen.UserChoice", + SyncConsentScreenHandler::UserChoice::kDeclined, 1); histogram_tester_.ExpectUniqueSample("OOBE.SyncConsentScreen.SyncEnabled", false, 1); } @@ -944,6 +943,31 @@ test::OobeJS().ExpectVisiblePath(kOverviewDialog); test::OobeJS().ExpectVisiblePath(kNonSplitSettingsDeclineButton); test::OobeJS().ExpectHiddenPath(kReviewSettingsCheckBox); + + histogram_tester_.ExpectUniqueSample( + "OOBE.SyncConsentScreen.IsCapabilityKnown", false, 1); + histogram_tester_.ExpectUniqueSample("OOBE.SyncConsentScreen.IsMinorUser", + true, 1); +} + +class SyncConsentTimeoutTest : public SyncConsentTest { + public: + void SetUpCommandLine(base::CommandLine* command_line) override { + command_line->AppendSwitch( + ::chromeos::switches::kOobeTriggerSyncTimeoutForTests); + SyncConsentTest::SetUpCommandLine(command_line); + } +}; + +IN_PROC_BROWSER_TEST_F(SyncConsentTimeoutTest, + SyncEngineInitializationTimeout) { + auto syncWaiter = test::OobeJS().CreateVisibilityWaiter(true, {kSyncConsent}); + auto overviewDialogWaiter = + test::OobeJS().CreateVisibilityWaiter(true, {kOverviewDialog}); + LoginAsNewRegularUser(); + WaitForScreenShown(); + syncWaiter->Wait(); + overviewDialogWaiter->Wait(); } } // namespace
diff --git a/chrome/browser/ash/login/screens/sync_consent_screen.cc b/chrome/browser/ash/login/screens/sync_consent_screen.cc index 8cac02d..5f84d24 100644 --- a/chrome/browser/ash/login/screens/sync_consent_screen.cc +++ b/chrome/browser/ash/login/screens/sync_consent_screen.cc
@@ -69,8 +69,11 @@ std::string gaia_id = user->GetAccountId().GetGaiaId(); const AccountInfo account_info = identity_manager->FindExtendedAccountInfoByGaiaId(gaia_id); - return account_info.capabilities.can_offer_extended_chrome_sync_promos() != - signin::Tribool::kTrue; + auto capability = + account_info.capabilities.can_offer_extended_chrome_sync_promos(); + base::UmaHistogramBoolean("OOBE.SyncConsentScreen.IsCapabilityKnown", + capability != signin::Tribool::kUnknown); + return capability != signin::Tribool::kTrue; } base::TimeDelta GetWaitTimeout() { @@ -182,8 +185,10 @@ timeout_waiter_.Start(FROM_HERE, GetWaitTimeout(), base::BindOnce(&SyncConsentScreen::OnTimeout, weak_factory_.GetWeakPtr())); + start_time_ = base::TimeTicks::Now(); + } else { + PrepareScreenBasedOnCapability(); } - PrepareScreenBasedOnCapability(); // Show the entire screen. // If SyncScreenBehavior is show, this should show the sync consent screen. // If SyncScreenBehavior is unknown, this should show the loading throbber. @@ -212,6 +217,10 @@ RecordUmaReviewFollowingSetup(review_sync); RecordConsent(opted_in ? CONSENT_GIVEN : CONSENT_NOT_GIVEN, consent_description, consent_confirmation); + base::UmaHistogramEnumeration( + "OOBE.SyncConsentScreen.UserChoice", + opted_in ? SyncConsentScreenHandler::UserChoice::kAccepted + : SyncConsentScreenHandler::UserChoice::kDeclined); profile_->GetPrefs()->SetBoolean(::prefs::kShowSyncSettingsOnSessionStart, review_sync); SetSyncEverythingEnabled(opted_in); @@ -375,6 +384,10 @@ view_->SetThrobberVisible(false /*visible*/); GetSyncService(profile_)->RemoveObserver(this); timeout_waiter_.AbandonAndStop(); + base::UmaHistogramCustomTimes("OOBE.SyncConsentScreen.LoadingTime", + base::TimeTicks::Now() - start_time_, + base::TimeDelta::FromMilliseconds(1), + base::TimeDelta::FromSeconds(10), 50); } else { MaybeEnableSyncForSkip(); Finish(Result::NEXT); @@ -425,6 +438,8 @@ void SyncConsentScreen::PrepareScreenBasedOnCapability() { bool is_minor_mode = IsMinorMode(profile_, user_); + base::UmaHistogramBoolean("OOBE.SyncConsentScreen.IsMinorUser", + is_minor_mode); // Turn on "sync everything" toggle for non-minor users; turn off all data // types for minor users. SetSyncEverythingEnabled(!is_minor_mode);
diff --git a/chrome/browser/ash/login/screens/sync_consent_screen.h b/chrome/browser/ash/login/screens/sync_consent_screen.h index aeb589e..e5e6f681 100644 --- a/chrome/browser/ash/login/screens/sync_consent_screen.h +++ b/chrome/browser/ash/login/screens/sync_consent_screen.h
@@ -181,6 +181,9 @@ base::OneShotTimer timeout_waiter_; bool is_timed_out_ = false; + // The time when sync consent screen starts loading. + base::TimeTicks start_time_; + absl::optional<bool> test_sync_disabled_by_policy_; absl::optional<bool> test_sync_engine_initialized_;
diff --git a/chrome/browser/autofill/credit_card_accessory_controller_impl.cc b/chrome/browser/autofill/credit_card_accessory_controller_impl.cc index 05880ce..2da6faa 100644 --- a/chrome/browser/autofill/credit_card_accessory_controller_impl.cc +++ b/chrome/browser/autofill/credit_card_accessory_controller_impl.cc
@@ -32,6 +32,13 @@ namespace { +GURL GetCardArtUrl(const CreditCard& card) { + return card.record_type() == CreditCard::MASKED_SERVER_CARD && + card.virtual_card_enrollment_state() == CreditCard::ENROLLED + ? card.card_art_url() + : GURL(); +} + std::u16string GetTitle(bool has_suggestions) { return l10n_util::GetStringUTF16( has_suggestions ? IDS_MANUAL_FILLING_CREDIT_CARD_SHEET_TITLE @@ -71,7 +78,7 @@ UserInfo TranslateCard(const CreditCard* data, bool enabled) { DCHECK(data); - UserInfo user_info(data->network()); + UserInfo user_info(data->network(), GetCardArtUrl(*data)); std::u16string obfuscated_number = data->CardIdentifierStringForManualFilling(); @@ -90,7 +97,7 @@ DCHECK(data); const CreditCard& card = data->card; - UserInfo user_info(card.network()); + UserInfo user_info(card.network(), GetCardArtUrl(card)); std::u16string card_number = card.GetRawInfo(autofill::CREDIT_CARD_NUMBER); user_info.add_field(AccessorySheetField( card.FullDigitsForDisplay(), card_number, card_number,
diff --git a/chrome/browser/autofill/credit_card_accessory_controller_impl_unittest.cc b/chrome/browser/autofill/credit_card_accessory_controller_impl_unittest.cc index 1e9f6c7a..1b0a0890 100644 --- a/chrome/browser/autofill/credit_card_accessory_controller_impl_unittest.cc +++ b/chrome/browser/autofill/credit_card_accessory_controller_impl_unittest.cc
@@ -490,7 +490,7 @@ autofill::AccessorySheetData result(autofill::AccessoryTabType::CREDIT_CARDS, std::u16string()); - EXPECT_CALL(mock_mf_controller_, RefreshSuggestions(_)) + EXPECT_CALL(mock_mf_controller_, RefreshSuggestions) .WillOnce(SaveArg<0>(&result)); ASSERT_TRUE(controller()); controller()->RefreshSuggestions(); @@ -527,4 +527,51 @@ .Build()); } +TEST_F(CreditCardAccessoryControllerTest, VirtualCreditCardWithCardArtUrl) { + // Add a masked card to PersonalDataManager. + autofill::CreditCard masked_card = test::GetMaskedServerCard(); + masked_card.set_card_art_url(GURL("http://www.example.com/image.png")); + masked_card.set_virtual_card_enrollment_state(CreditCard::ENROLLED); + data_manager_.AddCreditCard(masked_card); + + autofill::AccessorySheetData result(autofill::AccessoryTabType::CREDIT_CARDS, + std::u16string()); + EXPECT_CALL(mock_mf_controller_, RefreshSuggestions) + .WillOnce(SaveArg<0>(&result)); + ASSERT_TRUE(controller()); + controller()->RefreshSuggestions(); + + EXPECT_EQ(result, controller()->GetSheetData()); + // Verify that a virtual card is inserted before the actual masked card. + std::u16string virtual_card_label = + u"Virtual card " + masked_card.ObfuscatedLastFourDigits(); + EXPECT_EQ( + result, + CreditCardAccessorySheetDataBuilder() + .AddUserInfo(kMasterCard, UserInfo::IsPslMatch(false), + GURL("http://www.example.com/image.png")) + .AppendField(virtual_card_label, /*text_to_fill*/ std::u16string(), + virtual_card_label, masked_card.guid() + "_vcn", + /*is_obfuscated=*/false, + /*selectable=*/true) + .AppendSimpleField(masked_card.Expiration2DigitMonthAsString()) + .AppendSimpleField(masked_card.Expiration4DigitYearAsString()) + .AppendSimpleField( + masked_card.GetRawInfo(autofill::CREDIT_CARD_NAME_FULL)) + .AppendSimpleField(std::u16string()) + .AddUserInfo(kMasterCard) + .AppendField(masked_card.ObfuscatedLastFourDigits(), + /*text_to_fill*/ std::u16string(), + masked_card.ObfuscatedLastFourDigits(), + masked_card.guid(), + /*is_obfuscated=*/false, + /*selectable=*/true) + .AppendSimpleField(masked_card.Expiration2DigitMonthAsString()) + .AppendSimpleField(masked_card.Expiration4DigitYearAsString()) + .AppendSimpleField( + masked_card.GetRawInfo(autofill::CREDIT_CARD_NAME_FULL)) + .AppendSimpleField(std::u16string()) + .Build()); +} + } // namespace autofill
diff --git a/chrome/browser/browser_resources.grd b/chrome/browser/browser_resources.grd index 9f31b3f..fc62f6b6 100644 --- a/chrome/browser/browser_resources.grd +++ b/chrome/browser/browser_resources.grd
@@ -387,6 +387,7 @@ </if> <if expr="not is_android"> <include name="IDR_DESKTOP_SHARING_HUB_PB" file="${root_gen_dir}\chrome\browser\share\core\resources\desktop_sharing_hub.pb" use_base_dir="false" type="BINDATA" compress="gzip" /> + <include name="IDR_IMAGE_EDITOR_HTML" file="resources\image_editor\image_editor.html" type="BINDATA" /> </if> </includes> </release>
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc index af2c065..69b31dd 100644 --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc
@@ -1354,6 +1354,27 @@ return browser_shutdown::HasShutdownStarted(); } +content::StoragePartitionId +ChromeContentBrowserClient::GetStoragePartitionIdForSite( + content::BrowserContext* browser_context, + const GURL& site) { + // The partition ID for webview guest processes is the string value of its + // SiteInstance URL - "chrome-guest://app_id/persist?partition". + if (site.SchemeIs(content::kGuestScheme)) + return content::StoragePartitionId( + site.spec(), GetStoragePartitionConfigForSite(browser_context, site)); +#if BUILDFLAG(ENABLE_EXTENSIONS) + // The partition ID for extensions with isolated storage is treated similarly + // to the above. + else if (extensions::util::IsExtensionSiteWithIsolatedStorage( + site, browser_context)) + return content::StoragePartitionId( + site.spec(), GetStoragePartitionConfigForSite(browser_context, site)); +#endif + + return content::StoragePartitionId(browser_context); +} + content::StoragePartitionConfig ChromeContentBrowserClient::GetStoragePartitionConfigForSite( content::BrowserContext* browser_context, @@ -1364,8 +1385,6 @@ content::StoragePartitionConfig::CreateDefault(browser_context); #if BUILDFLAG(ENABLE_EXTENSIONS) - // The partition ID for webview guest processes is the string value of its - // SiteInstance URL - "chrome-guest://app_id/persist?partition". if (extensions::WebViewGuest::GetGuestPartitionConfigForSite( browser_context, site, &storage_partition_config)) { return storage_partition_config;
diff --git a/chrome/browser/chrome_content_browser_client.h b/chrome/browser/chrome_content_browser_client.h index 21266ef..06a8264 100644 --- a/chrome/browser/chrome_content_browser_client.h +++ b/chrome/browser/chrome_content_browser_client.h
@@ -132,6 +132,9 @@ base::OnceClosure task) override; bool IsBrowserStartupComplete() override; void SetBrowserStartupIsCompleteForTesting() override; + content::StoragePartitionId GetStoragePartitionIdForSite( + content::BrowserContext* browser_context, + const GURL& site) override; bool IsShuttingDown() override; content::StoragePartitionConfig GetStoragePartitionConfigForSite( content::BrowserContext* browser_context,
diff --git a/chrome/browser/chromeos/printing/history/print_job_database.h b/chrome/browser/chromeos/printing/history/print_job_database.h index c720c9a..1a4ab74 100644 --- a/chrome/browser/chromeos/printing/history/print_job_database.h +++ b/chrome/browser/chromeos/printing/history/print_job_database.h
@@ -37,23 +37,33 @@ virtual ~PrintJobDatabase() = default; // Initializes this database asynchronously. + // Note that the callback will be called only after the call returned. It may + // also still be called after PrintJobDatabase was destructed. virtual void Initialize(InitializeCallback callback) = 0; // Returns whether the database is initialized. virtual bool IsInitialized() = 0; // Saves given print job in the storage. + // Note that the callback will be called only after the call returned. It may + // also still be called after PrintJobDatabase was destructed. virtual void SavePrintJob(const printing::proto::PrintJobInfo& print_job_info, SavePrintJobCallback callback) = 0; // Removes the print jobs associated with given |ids| from the storage. + // Note that the callback will be called only after the call returned. It may + // also still be called after PrintJobDatabase was destructed. virtual void DeletePrintJobs(const std::vector<std::string>& ids, DeletePrintJobsCallback callback) = 0; // Removes all the print jobs from the storage. + // Note that the callback will be called only after the call returned. It may + // also still be called after PrintJobDatabase was destructed. virtual void Clear(DeletePrintJobsCallback callback) = 0; // Retrieves all print jobs from the storage. + // Note that the callback will be called only after the call returned. It may + // also still be called after PrintJobDatabase was destructed. virtual void GetPrintJobs(GetPrintJobsCallback callback) = 0; };
diff --git a/chrome/browser/chromeos/printing/history/print_job_history_service_impl.cc b/chrome/browser/chromeos/printing/history/print_job_history_service_impl.cc index 99d4a8d..a321e8b 100644 --- a/chrome/browser/chromeos/printing/history/print_job_history_service_impl.cc +++ b/chrome/browser/chromeos/printing/history/print_job_history_service_impl.cc
@@ -26,7 +26,7 @@ print_job_manager_->AddObserver(this); print_job_database_->Initialize( base::BindOnce(&PrintJobHistoryServiceImpl::OnPrintJobDatabaseInitialized, - base::Unretained(this))); + weak_ptr_factory_.GetWeakPtr())); } PrintJobHistoryServiceImpl::~PrintJobHistoryServiceImpl() { @@ -38,12 +38,20 @@ PrintJobDatabase::GetPrintJobsCallback callback) { print_job_history_cleaner_.CleanUp( base::BindOnce(&PrintJobHistoryServiceImpl::OnPrintJobsCleanedUp, - base::Unretained(this), std::move(callback))); + weak_ptr_factory_.GetWeakPtr(), std::move(callback))); } void PrintJobHistoryServiceImpl::DeleteAllPrintJobs( PrintJobDatabase::DeletePrintJobsCallback callback) { - print_job_database_->Clear(std::move(callback)); + print_job_database_->Clear( + base::BindOnce(&PrintJobHistoryServiceImpl::OnClearDone, + weak_ptr_factory_.GetWeakPtr(), std::move(callback))); +} + +void PrintJobHistoryServiceImpl::OnClearDone( + PrintJobDatabase::DeletePrintJobsCallback callback, + bool success) { + std::move(callback).Run(success); } void PrintJobHistoryServiceImpl::OnPrintJobDone( @@ -76,7 +84,7 @@ print_job_database_->SavePrintJob( print_job_info, base::BindOnce(&PrintJobHistoryServiceImpl::OnPrintJobSaved, - base::Unretained(this), print_job_info)); + weak_ptr_factory_.GetWeakPtr(), print_job_info)); } void PrintJobHistoryServiceImpl::OnPrintJobDatabaseInitialized(bool success) { @@ -94,7 +102,16 @@ void PrintJobHistoryServiceImpl::OnPrintJobsCleanedUp( PrintJobDatabase::GetPrintJobsCallback callback) { - print_job_database_->GetPrintJobs(std::move(callback)); + print_job_database_->GetPrintJobs( + base::BindOnce(&PrintJobHistoryServiceImpl::OnGetPrintJobsDone, + weak_ptr_factory_.GetWeakPtr(), std::move(callback))); +} + +void PrintJobHistoryServiceImpl::OnGetPrintJobsDone( + PrintJobDatabase::GetPrintJobsCallback callback, + bool success, + std::vector<printing::proto::PrintJobInfo> entries) { + std::move(callback).Run(success, entries); } } // namespace chromeos
diff --git a/chrome/browser/chromeos/printing/history/print_job_history_service_impl.h b/chrome/browser/chromeos/printing/history/print_job_history_service_impl.h index ab1da3c7..c145018f 100644 --- a/chrome/browser/chromeos/printing/history/print_job_history_service_impl.h +++ b/chrome/browser/chromeos/printing/history/print_job_history_service_impl.h
@@ -47,11 +47,24 @@ void OnPrintJobSaved(const printing::proto::PrintJobInfo& print_job_info, bool success); + // Helper function to make sure that callback is only called as long as + // this class instance still lives. + void OnClearDone(PrintJobDatabase::DeletePrintJobsCallback callback, + bool success); + void OnPrintJobsCleanedUp(PrintJobDatabase::GetPrintJobsCallback callback); + // Helper function to make sure that callback is only called as long as + // this class instance still lives. + void OnGetPrintJobsDone(PrintJobDatabase::GetPrintJobsCallback callback, + bool success, + std::vector<printing::proto::PrintJobInfo> entries); std::unique_ptr<PrintJobDatabase> print_job_database_; CupsPrintJobManager* print_job_manager_; PrintJobHistoryCleaner print_job_history_cleaner_; + // Used for avoiding that callbacks are called after the class was + // destroyed already. + base::WeakPtrFactory<PrintJobHistoryServiceImpl> weak_ptr_factory_{this}; DISALLOW_COPY_AND_ASSIGN(PrintJobHistoryServiceImpl); };
diff --git a/chrome/browser/download/download_browsertest.cc b/chrome/browser/download/download_browsertest.cc index a14bad4..4985bc5 100644 --- a/chrome/browser/download/download_browsertest.cc +++ b/chrome/browser/download/download_browsertest.cc
@@ -24,6 +24,7 @@ #include "base/files/file_util.h" #include "base/files/scoped_temp_dir.h" #include "base/guid.h" +#include "base/macros.h" #include "base/memory/ref_counted.h" #include "base/path_service.h" #include "base/run_loop.h" @@ -1752,8 +1753,8 @@ content::test::PrerenderHostObserver host_observer(*web_contents, host_id); // Try to start the download via Javascript in the prerendered page. - ASSERT_EQ(true, content::EvalJs( - prerender_helper()->GetPrerenderedMainFrameHost(host_id), + ignore_result( + content::ExecJs(prerender_helper()->GetPrerenderedMainFrameHost(host_id), "startDownload();")); // Navigations aren't allowed on prerendered pages.
diff --git a/chrome/browser/enterprise/util/managed_browser_utils.cc b/chrome/browser/enterprise/util/managed_browser_utils.cc index dc2821bc..54e3d59 100644 --- a/chrome/browser/enterprise/util/managed_browser_utils.cc +++ b/chrome/browser/enterprise/util/managed_browser_utils.cc
@@ -11,6 +11,9 @@ #include "chrome/browser/policy/chrome_browser_policy_connector.h" #include "chrome/browser/policy/profile_policy_connector.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/profiles/profile_attributes_entry.h" +#include "chrome/browser/profiles/profile_attributes_storage.h" +#include "chrome/browser/profiles/profile_manager.h" #include "components/certificate_matching/certificate_principal_pattern.h" #include "components/content_settings/core/browser/host_content_settings_map.h" #include "components/content_settings/core/common/pref_names.h" @@ -146,6 +149,40 @@ registry->RegisterListPref(prefs::kManagedAutoSelectCertificateForUrls); } +void SetUserAcceptedAccountManagement(Profile* profile, bool accepted) { + // Some tests do not have a profile manager. + if (!g_browser_process->profile_manager()) + return; + ProfileManager* profile_manager = g_browser_process->profile_manager(); + ProfileAttributesEntry* entry = + profile_manager->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile->GetPath()); + if (entry) + entry->SetUserAcceptedAccountManagement(accepted); +} + +bool UserAcceptedAccountManagement(Profile* profile) { + // Some tests do not have a profile manager. + if (!g_browser_process->profile_manager()) + return false; + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile->GetPath()); + return entry && entry->UserAcceptedAccountManagement(); +} + +bool ProfileCanBeManaged(Profile* profile) { + // Some tests do not have a profile manager. + if (!g_browser_process->profile_manager()) + return false; + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile->GetPath()); + return entry && entry->CanBeManaged(); +} + } // namespace enterprise_util } // namespace chrome
diff --git a/chrome/browser/enterprise/util/managed_browser_utils.h b/chrome/browser/enterprise/util/managed_browser_utils.h index 3b81d62..81e42e6 100644 --- a/chrome/browser/enterprise/util/managed_browser_utils.h +++ b/chrome/browser/enterprise/util/managed_browser_utils.h
@@ -39,6 +39,18 @@ void RegisterLocalStatePrefs(PrefRegistrySimple* registry); +// Sets attribute entry 'user_accepted_account_management' of `profile` to +// `accepted`. +void SetUserAcceptedAccountManagement(Profile* profile, bool accepted); + +// Returns true is the user has accepted account management through the +// enterprise account confirmation dialog. +bool UserAcceptedAccountManagement(Profile* profile); + +// Returns true if the user has consented to sync or has accepted account +// management through the enterprise account confirmation dialog. +bool ProfileCanBeManaged(Profile* profile); + } // namespace enterprise_util } // namespace chrome
diff --git a/chrome/browser/extensions/api/scripting/scripting_api.cc b/chrome/browser/extensions/api/scripting/scripting_api.cc index ba78e3b..6121e96 100644 --- a/chrome/browser/extensions/api/scripting/scripting_api.cc +++ b/chrome/browser/extensions/api/scripting/scripting_api.cc
@@ -7,6 +7,7 @@ #include <algorithm> #include "base/check.h" +#include "base/containers/contains.h" #include "base/json/json_writer.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h"
diff --git a/chrome/browser/extensions/extension_util.cc b/chrome/browser/extensions/extension_util.cc index 1dbb665..32dd1d8 100644 --- a/chrome/browser/extensions/extension_util.cc +++ b/chrome/browser/extensions/extension_util.cc
@@ -77,6 +77,16 @@ } // namespace +bool IsExtensionSiteWithIsolatedStorage(const GURL& site_url, + content::BrowserContext* context) { + if (!site_url.SchemeIs(extensions::kExtensionScheme)) + return false; + + // The host in an extension site URL is the extension_id. + DCHECK(site_url.has_host()); + return HasIsolatedStorage(site_url.host(), context); +} + bool HasIsolatedStorage(const std::string& extension_id, content::BrowserContext* context) { const Extension* extension =
diff --git a/chrome/browser/extensions/extension_util.h b/chrome/browser/extensions/extension_util.h index f9d4ea19..35f4dcb 100644 --- a/chrome/browser/extensions/extension_util.h +++ b/chrome/browser/extensions/extension_util.h
@@ -26,6 +26,8 @@ class ImageSkia; } +class GURL; + class Profile; namespace extensions { @@ -34,6 +36,13 @@ namespace util { +// Returns true if the site URL corresponds to an extension or app which +// has isolated storage. This can be either because it is an app that +// requested this in its manifest, or because it is a policy-installed app or +// extension running on the Chrome OS sign-in profile. +bool IsExtensionSiteWithIsolatedStorage(const GURL& site_url, + content::BrowserContext* context); + // Returns true if the extension associated with |extension_id| has isolated // storage. This can be either because it is an app that requested this in its // manifest, or because it is a policy-installed app or extension running on
diff --git a/chrome/browser/extensions/tab_helper.h b/chrome/browser/extensions/tab_helper.h index 45ffcf3f..d30bb22 100644 --- a/chrome/browser/extensions/tab_helper.h +++ b/chrome/browser/extensions/tab_helper.h
@@ -16,7 +16,6 @@ #include "chrome/browser/extensions/active_tab_permission_granter.h" #include "chrome/common/extensions/webstore_install_result.h" #include "content/public/browser/web_contents_observer.h" -#include "content/public/browser/web_contents_receiver_set.h" #include "content/public/browser/web_contents_user_data.h" #include "extensions/browser/api/declarative_net_request/web_contents_helper.h" #include "extensions/browser/extension_function_dispatcher.h"
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json index 0413942..d3fcd6c 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json
@@ -1118,6 +1118,11 @@ "expiry_milestone": 100 }, { + "name": "disable-quick-answers-v2-translation", + "owners": [ "croissant-eng" ], + "expiry_milestone": 100 + }, + { "name": "disable-threaded-scrolling", "owners": [ "bokan", "input-dev" ], // This flag is a useful debugging control when investigating scrolling @@ -3355,6 +3360,11 @@ "expiry_milestone": -1 }, { + "name": "in-product-help-snooze", + "owners": [ "shaktisahu", "haileywang" ], + "expiry_milestone": 99 + }, + { "name": "incognito-brand-consistency-for-android", "owners": [ "sideyilmaz", "rhalavati", "chrome-incognito@google.com" ], "expiry_milestone": 95
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index 2fce40e..dacf17c 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -1455,6 +1455,10 @@ const char kInProductHelpDemoModeChoiceDescription[] = "Selects the In-Product Help demo mode."; +const char kInProductHelpSnoozeName[] = "In-Product Help Snooze"; +const char kInProductHelpSnoozeDescription[] = + "Enables the snooze button on In-Product Help."; + const char kInstalledAppsInCbdName[] = "Installed Apps in Clear Browsing Data"; const char kInstalledAppsInCbdDescription[] = "Adds the installed apps warning dialog to the clear browsing data flow " @@ -4396,6 +4400,11 @@ const char kEnableQuickAnswersV2Description[] = "Enable Quick Answers V2 features."; +const char kDisableQuickAnswersV2TranslationName[] = + "Disable Quick Answers Translation"; +const char kDisableQuickAnswersV2TranslationDescription[] = + "Disable translation services of the Quick Answers."; + const char kTrimOnMemoryPressureName[] = "Trim Working Set on memory pressure"; const char kTrimOnMemoryPressureDescription[] = "Trim Working Set periodically on memory pressure";
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index 882c050..fb96591 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -838,6 +838,9 @@ extern const char kInProductHelpDemoModeChoiceName[]; extern const char kInProductHelpDemoModeChoiceDescription[]; +extern const char kInProductHelpSnoozeName[]; +extern const char kInProductHelpSnoozeDescription[]; + extern const char kInstalledAppsInCbdName[]; extern const char kInstalledAppsInCbdDescription[]; @@ -2510,6 +2513,9 @@ extern const char kEnableQuickAnswersV2Name[]; extern const char kEnableQuickAnswersV2Description[]; +extern const char kDisableQuickAnswersV2TranslationName[]; +extern const char kDisableQuickAnswersV2TranslationDescription[]; + extern const char kESimPolicyName[]; extern const char kESimPolicyDescription[];
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc index cb614b7..17bffaa7 100644 --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -131,6 +131,7 @@ &features::kIncognitoNtpRevamp, &feature_engagement::kIPHHomepagePromoCardFeature, &feature_engagement::kIPHNewTabPageHomeButtonFeature, + &feature_engagement::kIPHSnooze, &feature_engagement::kIPHTabSwitcherButtonFeature, &feed::kFeedInteractiveRefresh, &feed::kInterestFeedContentSuggestions,
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java index 6397eeb9..8d5d45f 100644 --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
@@ -490,6 +490,7 @@ public static final String SHOW_TRUSTED_PUBLISHER_URL = "ShowTrustedPublisherURL"; public static final String SMART_SUGGESTION_FOR_LARGE_DOWNLOADS = "SmartSuggestionForLargeDownloads"; + public static final String SNOOZABLE_IPH = "IPH_Snooze"; public static final String SPANNABLE_INLINE_AUTOCOMPLETE = "SpannableInlineAutocomplete"; public static final String SPLIT_CACHE_BY_NETWORK_ISOLATION_KEY = "SplitCacheByNetworkIsolationKey";
diff --git a/chrome/browser/lacros/account_manager/profile_account_manager.cc b/chrome/browser/lacros/account_manager/profile_account_manager.cc index 5da43fd..f762af5 100644 --- a/chrome/browser/lacros/account_manager/profile_account_manager.cc +++ b/chrome/browser/lacros/account_manager/profile_account_manager.cc
@@ -4,5 +4,82 @@ #include "chrome/browser/lacros/account_manager/profile_account_manager.h" -ProfileAccountManager::ProfileAccountManager() = default; +#include <string> + +#include "base/check.h" +#include "base/notreached.h" +#include "chrome/browser/account_manager_facade_factory.h" +#include "components/account_manager_core/account_manager_facade.h" +#include "google_apis/gaia/oauth2_access_token_fetcher.h" + +ProfileAccountManager::ProfileAccountManager(const base::FilePath& profile_path) + : profile_path_(profile_path) {} + ProfileAccountManager::~ProfileAccountManager() = default; + +void ProfileAccountManager::AddObserver(Observer* observer) { + observers_.AddObserver(observer); + // TODO(https://crbug.com/1226045): Go through AccountProfileMapper instead. + GetSystemAccountManager()->AddObserver(observer); +} + +void ProfileAccountManager::RemoveObserver(Observer* observer) { + observers_.RemoveObserver(observer); + // TODO(https://crbug.com/1226045): Go through AccountProfileMapper instead. + GetSystemAccountManager()->RemoveObserver(observer); +} + +void ProfileAccountManager::Shutdown() { + DCHECK(observers_.empty()); +} + +void ProfileAccountManager::GetAccounts( + base::OnceCallback<void(const std::vector<account_manager::Account>&)> + callback) { + DCHECK(!callback.is_null()); + GetSystemAccountManager()->GetAccounts(std::move(callback)); +} + +void ProfileAccountManager::GetPersistentErrorForAccount( + const account_manager::AccountKey& account, + base::OnceCallback<void(const GoogleServiceAuthError&)> callback) { + DCHECK(!callback.is_null()); + return GetSystemAccountManager()->GetPersistentErrorForAccount( + account, std::move(callback)); +} + +void ProfileAccountManager::ShowAddAccountDialog( + const AccountAdditionSource& source) { + NOTREACHED(); +} + +void ProfileAccountManager::ShowAddAccountDialog( + const AccountAdditionSource& source, + base::OnceCallback< + void(const account_manager::AccountAdditionResult& result)> callback) { + NOTREACHED(); +} + +void ProfileAccountManager::ShowReauthAccountDialog( + const AccountAdditionSource& source, + const std::string& email) { + NOTREACHED(); +} + +void ProfileAccountManager::ShowManageAccountsSettings() { + NOTREACHED(); +} + +std::unique_ptr<OAuth2AccessTokenFetcher> +ProfileAccountManager::CreateAccessTokenFetcher( + const account_manager::AccountKey& account, + const std::string& oauth_consumer_name, + OAuth2AccessTokenConsumer* consumer) { + return GetSystemAccountManager()->CreateAccessTokenFetcher( + account, oauth_consumer_name, consumer); +} + +account_manager::AccountManagerFacade* +ProfileAccountManager::GetSystemAccountManager() const { + return GetAccountManagerFacade(profile_path_.value()); +}
diff --git a/chrome/browser/lacros/account_manager/profile_account_manager.h b/chrome/browser/lacros/account_manager/profile_account_manager.h index 07a12f57..cab0db3 100644 --- a/chrome/browser/lacros/account_manager/profile_account_manager.h +++ b/chrome/browser/lacros/account_manager/profile_account_manager.h
@@ -5,15 +5,72 @@ #ifndef CHROME_BROWSER_LACROS_ACCOUNT_MANAGER_PROFILE_ACCOUNT_MANAGER_H_ #define CHROME_BROWSER_LACROS_ACCOUNT_MANAGER_PROFILE_ACCOUNT_MANAGER_H_ +#include "base/files/file_path.h" +#include "base/observer_list.h" +#include "components/account_manager_core/account.h" +#include "components/account_manager_core/account_addition_result.h" +#include "components/account_manager_core/account_manager_facade.h" #include "components/keyed_service/core/keyed_service.h" -class ProfileAccountManager : public KeyedService { +// This is a profile-scoped implementation of AccountManagerFacade, intended to +// be used by the identity manager. Accounts update generally follow the path: +// +// AccountManagerFacadeImpl +// | +// V +// AccountProfileMapper +// | +// V +// ProfileAccountManager +// | +// V +// IdentityManager +// +// The ProfileAccountManager is not intended to have much logic and mostly +// forwards calls to the AccountProfileMapper. +class ProfileAccountManager : public KeyedService, + public account_manager::AccountManagerFacade { public: - ProfileAccountManager(); + explicit ProfileAccountManager(const base::FilePath& profile_path); ~ProfileAccountManager() override; ProfileAccountManager(const ProfileAccountManager&) = delete; ProfileAccountManager& operator=(const ProfileAccountManager&) = delete; + + // KeyedService: + void Shutdown() override; + + // account_manager::AccountManagerFacade: + void AddObserver(Observer* observer) override; + void RemoveObserver(Observer* observer) override; + void GetAccounts( + base::OnceCallback<void(const std::vector<account_manager::Account>&)> + callback) override; + void GetPersistentErrorForAccount( + const account_manager::AccountKey& account, + base::OnceCallback<void(const GoogleServiceAuthError&)> callback) + override; + void ShowAddAccountDialog(const AccountAdditionSource& source) override; + void ShowAddAccountDialog( + const AccountAdditionSource& source, + base::OnceCallback<void(const account_manager::AccountAdditionResult& + result)> callback) override; + void ShowReauthAccountDialog(const AccountAdditionSource& source, + const std::string& email) override; + void ShowManageAccountsSettings() override; + std::unique_ptr<OAuth2AccessTokenFetcher> CreateAccessTokenFetcher( + const account_manager::AccountKey& account, + const std::string& oauth_consumer_name, + OAuth2AccessTokenConsumer* consumer) override; + + private: + // Returns the `AccountManagerFacade` for the whole browser, managing accounts + // across all profiles. + account_manager::AccountManagerFacade* GetSystemAccountManager() const; + + const base::FilePath profile_path_; + base::ObserverList<account_manager::AccountManagerFacade::Observer> + observers_; }; #endif // CHROME_BROWSER_LACROS_ACCOUNT_MANAGER_PROFILE_ACCOUNT_MANAGER_H_
diff --git a/chrome/browser/lacros/account_manager/profile_account_manager_factory.cc b/chrome/browser/lacros/account_manager/profile_account_manager_factory.cc index 3b315650..4cf96aff 100644 --- a/chrome/browser/lacros/account_manager/profile_account_manager_factory.cc +++ b/chrome/browser/lacros/account_manager/profile_account_manager_factory.cc
@@ -33,5 +33,5 @@ KeyedService* ProfileAccountManagerFactory::BuildServiceInstanceFor( content::BrowserContext* context) const { - return new ProfileAccountManager(); + return new ProfileAccountManager(/*profile_path=*/context->GetPath()); }
diff --git a/chrome/browser/lens/java/src/org/chromium/chrome/browser/lens/LensEntryPoint.java b/chrome/browser/lens/java/src/org/chromium/chrome/browser/lens/LensEntryPoint.java index d9009bb..a725913 100644 --- a/chrome/browser/lens/java/src/org/chromium/chrome/browser/lens/LensEntryPoint.java +++ b/chrome/browser/lens/java/src/org/chromium/chrome/browser/lens/LensEntryPoint.java
@@ -8,7 +8,7 @@ @IntDef({LensEntryPoint.CONTEXT_MENU_SEARCH_MENU_ITEM, LensEntryPoint.CONTEXT_MENU_SHOP_MENU_ITEM, LensEntryPoint.CONTEXT_MENU_CHIP, LensEntryPoint.OMNIBOX, LensEntryPoint.NEW_TAB_PAGE, - LensEntryPoint.TASKS_SURFACE}) + LensEntryPoint.TASKS_SURFACE, LensEntryPoint.QUICK_ACTION_SEARCH_WIDGET}) public @interface LensEntryPoint { int CONTEXT_MENU_SEARCH_MENU_ITEM = 0; int CONTEXT_MENU_SHOP_MENU_ITEM = 1; @@ -16,4 +16,5 @@ int OMNIBOX = 3; int NEW_TAB_PAGE = 4; int TASKS_SURFACE = 5; -} \ No newline at end of file + int QUICK_ACTION_SEARCH_WIDGET = 6; +}
diff --git a/chrome/browser/lens/java/src/org/chromium/chrome/browser/lens/LensFeature.java b/chrome/browser/lens/java/src/org/chromium/chrome/browser/lens/LensFeature.java index 6e860c20..59ecc1c 100644 --- a/chrome/browser/lens/java/src/org/chromium/chrome/browser/lens/LensFeature.java +++ b/chrome/browser/lens/java/src/org/chromium/chrome/browser/lens/LensFeature.java
@@ -6,33 +6,11 @@ import org.chromium.chrome.browser.flags.BooleanCachedFieldTrialParameter; import org.chromium.chrome.browser.flags.ChromeFeatureList; -import org.chromium.chrome.browser.flags.StringCachedFieldTrialParameter; /** * A helper class contains cached Lens feature flags and params. */ public class LensFeature { - private static final String DISABLE_ON_INCOGNITO_PARAM_NAME = "disableOnIncognito"; - public static final BooleanCachedFieldTrialParameter - DISABLE_LENS_CAMERA_ASSISTED_SEARCH_ON_INCOGNITO = new BooleanCachedFieldTrialParameter( - ChromeFeatureList.LENS_CAMERA_ASSISTED_SEARCH, DISABLE_ON_INCOGNITO_PARAM_NAME, - true); - - private static final String ENABLE_LENS_CAMERA_ASSISTED_SEARCH_ON_LOW_END_DEVICE_PARAM_NAME = - "enableCameraAssistedSearchOnLowEndDevice"; - public static final BooleanCachedFieldTrialParameter - ENABLE_LENS_CAMERA_ASSISTED_SEARCH_ON_LOW_END_DEVICE = - new BooleanCachedFieldTrialParameter( - ChromeFeatureList.LENS_CAMERA_ASSISTED_SEARCH, - ENABLE_LENS_CAMERA_ASSISTED_SEARCH_ON_LOW_END_DEVICE_PARAM_NAME, false); - - private static final String MIN_AGSA_VERSION_LENS_CAMERA_ASSISTED_SEARCH_PARAM_NAME = - "minAgsaVersionForLensCameraAssistedSearch"; - public static final StringCachedFieldTrialParameter - MIN_AGSA_VERSION_LENS_CAMERA_ASSISTED_SEARCH = new StringCachedFieldTrialParameter( - ChromeFeatureList.LENS_CAMERA_ASSISTED_SEARCH, - MIN_AGSA_VERSION_LENS_CAMERA_ASSISTED_SEARCH_PARAM_NAME, "12.13"); - private static final String SEARCH_BOX_START_VARIANT_LENS_CAMERA_ASSISTED_SEARCH_PARAM_NAME = "searchBoxStartVariantForLensCameraAssistedSearch"; public static final BooleanCachedFieldTrialParameter @@ -40,21 +18,4 @@ new BooleanCachedFieldTrialParameter( ChromeFeatureList.LENS_CAMERA_ASSISTED_SEARCH, SEARCH_BOX_START_VARIANT_LENS_CAMERA_ASSISTED_SEARCH_PARAM_NAME, false); - - private static final String ENABLE_LENS_CAMERA_ASSISTED_SEARCH_ON_TABLET_PARAM_NAME = - "enableCameraAssistedSearchOnTablet"; - public static final BooleanCachedFieldTrialParameter - ENABLE_LENS_CAMERA_ASSISTED_SEARCH_ON_TABLET = new BooleanCachedFieldTrialParameter( - ChromeFeatureList.LENS_CAMERA_ASSISTED_SEARCH, - ENABLE_LENS_CAMERA_ASSISTED_SEARCH_ON_TABLET_PARAM_NAME, false); - - private static final String SKIP_AGSA_VERSION_CHECK_PARAM_NAME = "skipAgsaVersionCheck"; - public static final BooleanCachedFieldTrialParameter SKIP_AGSA_VERSION_CHECK = - new BooleanCachedFieldTrialParameter(ChromeFeatureList.LENS_CAMERA_ASSISTED_SEARCH, - SKIP_AGSA_VERSION_CHECK_PARAM_NAME, false); - private static final String SKIP_LENS_ELIGIBILITY_CHECKS_PARAM_NAME = - "skipLensEligibilityChecks"; - public static final BooleanCachedFieldTrialParameter SKIP_LENS_ELIGIBILITY_CHECKS = - new BooleanCachedFieldTrialParameter(ChromeFeatureList.LENS_CAMERA_ASSISTED_SEARCH, - SKIP_LENS_ELIGIBILITY_CHECKS_PARAM_NAME, false); }
diff --git a/chrome/browser/lens/java/src/org/chromium/chrome/browser/lens/LensMetrics.java b/chrome/browser/lens/java/src/org/chromium/chrome/browser/lens/LensMetrics.java index 26e69c0..8947cb1 100644 --- a/chrome/browser/lens/java/src/org/chromium/chrome/browser/lens/LensMetrics.java +++ b/chrome/browser/lens/java/src/org/chromium/chrome/browser/lens/LensMetrics.java
@@ -70,6 +70,8 @@ case LensEntryPoint.CONTEXT_MENU_SEARCH_MENU_ITEM: case LensEntryPoint.CONTEXT_MENU_SHOP_MENU_ITEM: return "ContextMenu.LensSupportStatus"; + case LensEntryPoint.QUICK_ACTION_SEARCH_WIDGET: + return "Lens.QuickActionSearchWidget.LensSupportStatus"; case LensEntryPoint.CONTEXT_MENU_CHIP: default: assert false : "Method not implemented.";
diff --git a/chrome/browser/media/webrtc/tab_desktop_media_list_unittest.cc b/chrome/browser/media/webrtc/tab_desktop_media_list_unittest.cc index 3fc2158..69edc51 100644 --- a/chrome/browser/media/webrtc/tab_desktop_media_list_unittest.cc +++ b/chrome/browser/media/webrtc/tab_desktop_media_list_unittest.cc
@@ -11,13 +11,16 @@ #include "base/files/file_util.h" #include "base/files/scoped_temp_dir.h" #include "base/location.h" +#include "base/memory/scoped_refptr.h" #include "base/run_loop.h" #include "base/single_thread_task_runner.h" #include "base/strings/utf_string_conversions.h" +#include "base/test/gmock_callback_support.h" #include "base/threading/thread_task_runner_handle.h" #include "build/chromeos_buildflags.h" #include "chrome/browser/media/webrtc/desktop_media_list.h" #include "chrome/browser/profiles/profile_manager.h" +#include "chrome/browser/ui/apps/chrome_app_delegate.h" #include "chrome/browser/ui/browser_list.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/test/base/fake_profile_manager.h" @@ -32,7 +35,13 @@ #include "content/public/test/browser_task_environment.h" #include "content/public/test/navigation_simulator.h" #include "content/public/test/test_renderer_host.h" +#include "content/public/test/test_utils.h" #include "content/public/test/web_contents_tester.h" +#include "extensions/browser/app_window/app_window.h" +#include "extensions/browser/app_window/app_window_registry.h" +#include "extensions/browser/app_window/test_app_window_contents.h" +#include "extensions/common/extension_builder.h" +#include "extensions/common/value_builder.h" #include "testing/gmock/include/gmock/gmock.h" #if BUILDFLAG(IS_CHROMEOS_ASH) @@ -99,18 +108,58 @@ FROM_HERE, base::RunLoop::QuitCurrentWhenIdleClosureDeprecated()); } +// This is a helper class to abstract away some of the details of creating and +// managing the life-cycle of an AppWindow +class TestAppWindow : public content::WebContentsObserver { + public: + TestAppWindow(const TestAppWindow&) = delete; + TestAppWindow& operator=(const TestAppWindow&) = delete; + + TestAppWindow(Profile* profile, + const extensions::Extension* extension, + std::unique_ptr<content::WebContents> contents) { + window_ = new extensions::AppWindow( + profile, new ChromeAppDelegate(profile, false), extension); + window_->SetAppWindowContentsForTesting( + std::make_unique<extensions::TestAppWindowContents>( + std::move(contents))); + + extensions::AppWindowRegistry::Get(profile)->AddAppWindow(window_); + Observe(window_->web_contents()); + } + + ~TestAppWindow() override { Close(); } + + void Close() { + if (!window_) + return; + + content::WebContentsDestroyedWatcher destroyed_watcher( + window_->web_contents()); + window_->OnNativeClose(); + destroyed_watcher.Wait(); + + EXPECT_FALSE(window_); + } + + void WebContentsDestroyed() override { window_ = nullptr; } + + private: + extensions::AppWindow* window_; +}; + class TabDesktopMediaListTest : public testing::Test { protected: TabDesktopMediaListTest() : local_state_(TestingBrowserProcess::GetGlobal()) {} - void AddWebcontents(int favicon_greyscale) { - TabStripModel* tab_strip_model = browser_->tab_strip_model(); - ASSERT_TRUE(tab_strip_model); + std::unique_ptr<content::WebContents> CreateWebContents( + int favicon_greyscale) { std::unique_ptr<WebContents> contents( content::WebContentsTester::CreateTestWebContents( profile_, content::SiteInstance::Create(profile_))); - ASSERT_TRUE(contents); + if (!contents) + return nullptr; WebContentsTester::For(contents.get()) ->SetLastActiveTime(base::TimeTicks::Now()); @@ -131,10 +180,39 @@ CreateGrayscaleImage(gfx::Size(10, 10), favicon_greyscale); entry->GetFavicon() = favicon_info; + return contents; + } + + void AddWebcontents(int favicon_greyscale) { + TabStripModel* tab_strip_model = browser_->tab_strip_model(); + ASSERT_TRUE(tab_strip_model); + auto contents = CreateWebContents(favicon_greyscale); + ASSERT_TRUE(contents); manually_added_web_contents_.push_back(contents.get()); tab_strip_model->AppendWebContents(std::move(contents), true); } + const extensions::Extension* BuildOrGetExtension() { + if (!extension_) { + extension_ = + extensions::ExtensionBuilder() + .SetManifest(extensions::DictionaryBuilder() + .Set("name", "TabListUnitTest Extension") + .Set("version", "1.0") + .Set("manifest_version", 2) + .Build()) + .Build(); + } + return extension_.get(); + } + + void AddAppWindow() { + auto app_window = std::make_unique<TestAppWindow>( + profile_, BuildOrGetExtension(), CreateWebContents(10)); + + manually_added_app_windows_.push_back(std::move(app_window)); + } + void SetUp() override { rvh_test_enabler_ = std::make_unique<content::RenderViewHostTestEnabler>(); // Create a new temporary directory, and store the path. @@ -173,6 +251,7 @@ tab_strip_model->GetIndexOfWebContents(contents)); } manually_added_web_contents_.clear(); + manually_added_app_windows_.clear(); browser_.reset(); TestingBrowserProcess::GetGlobal()->SetProfileManager(nullptr); @@ -240,9 +319,12 @@ MockObserver observer_; std::unique_ptr<TabDesktopMediaList> list_; std::vector<WebContents*> manually_added_web_contents_; + std::vector<std::unique_ptr<TestAppWindow>> manually_added_app_windows_; content::BrowserTaskEnvironment task_environment_; + scoped_refptr<const extensions::Extension> extension_; + #if BUILDFLAG(IS_CHROMEOS_ASH) ash::ScopedCrosSettingsTestHelper cros_settings_test_helper_; ash::ScopedTestUserManager test_user_manager_; @@ -266,6 +348,25 @@ list_.reset(); } +TEST_F(TabDesktopMediaListTest, AddAppWindow) { + InitializeAndVerify(); + + AddAppWindow(); + + base::RunLoop loop; + // Note that unlike adding a tab, our AppWindow that we add is only + // initialized enough to show up in the list; it doesn't have a favicon driver + // which would be needed to extract the favicon from it. + EXPECT_CALL(observer_, OnSourceAdded(list_.get(), 0)) + .WillOnce( + testing::DoAll(CheckListSize(list_.get(), kDefaultSourceCount + 1), + base::test::RunClosure(loop.QuitClosure()))); + + loop.Run(); + + list_.reset(); +} + TEST_F(TabDesktopMediaListTest, RemoveTab) { InitializeAndVerify();
diff --git a/chrome/browser/optimization_guide/android/optimization_guide_tab_url_provider_android.cc b/chrome/browser/optimization_guide/android/optimization_guide_tab_url_provider_android.cc index d808c47d..3f99a88 100644 --- a/chrome/browser/optimization_guide/android/optimization_guide_tab_url_provider_android.cc +++ b/chrome/browser/optimization_guide/android/optimization_guide_tab_url_provider_android.cc
@@ -15,26 +15,59 @@ OptimizationGuideTabUrlProviderAndroid::OptimizationGuideTabUrlProviderAndroid( Profile* profile) - : OptimizationGuideTabUrlProvider(profile) {} + : profile_(profile) {} OptimizationGuideTabUrlProviderAndroid:: ~OptimizationGuideTabUrlProviderAndroid() = default; -const std::vector<content::WebContents*> -OptimizationGuideTabUrlProviderAndroid::GetAllWebContentsForProfile( - Profile* profile) { - std::vector<content::WebContents*> web_contents_list; +const std::vector<GURL> +OptimizationGuideTabUrlProviderAndroid::GetUrlsOfActiveTabs( + const base::TimeDelta& duration_since_last_shown) { + std::vector<std::pair<GURL, absl::optional<base::TimeTicks>>> + urls_and_active_time; for (const TabModel* tab_model : TabModelList::models()) { - if (tab_model->GetProfile() != profile) + if (tab_model->GetProfile() != profile_) continue; int tab_count = tab_model->GetTabCount(); for (int i = 0; i < tab_count; i++) { content::WebContents* web_contents = tab_model->GetWebContentsAt(i); - if (web_contents) - web_contents_list.push_back(web_contents); + if (web_contents) { + if ((base::TimeTicks::Now() - web_contents->GetLastActiveTime()) < + duration_since_last_shown) { + urls_and_active_time.push_back( + std::make_pair(web_contents->GetLastCommittedURL(), + web_contents->GetLastActiveTime())); + } + continue; + } + + // Fall back to the tab if there isn't a WebContents created for the tab. + TabAndroid* tab = tab_model->GetTabAt(i); + if (tab) { + // Just push back the URL even though we have no idea if it was shown + // before. TabAndroid does not expose the last active time. + urls_and_active_time.push_back( + std::make_pair(tab->GetURL(), absl::nullopt)); + } } } - return web_contents_list; + // Sort by descending active time. + std::sort(urls_and_active_time.begin(), urls_and_active_time.end(), + [](const std::pair<GURL, absl::optional<base::TimeTicks>>& a, + const std::pair<GURL, absl::optional<base::TimeTicks>>& b) { + if (a.second && b.second) + return *a.second > *b.second; + // If b.second has a value, then put that in front. Otherwise, + // leave the same order. + return !b.second.has_value(); + }); + + std::vector<GURL> urls; + urls.reserve(urls_and_active_time.size()); + for (const auto& url_and_active_time : urls_and_active_time) { + urls.emplace_back(url_and_active_time.first); + } + return urls; } } // namespace android
diff --git a/chrome/browser/optimization_guide/android/optimization_guide_tab_url_provider_android.h b/chrome/browser/optimization_guide/android/optimization_guide_tab_url_provider_android.h index 7c9cc87..1291bebd 100644 --- a/chrome/browser/optimization_guide/android/optimization_guide_tab_url_provider_android.h +++ b/chrome/browser/optimization_guide/android/optimization_guide_tab_url_provider_android.h
@@ -5,7 +5,9 @@ #ifndef CHROME_BROWSER_OPTIMIZATION_GUIDE_ANDROID_OPTIMIZATION_GUIDE_TAB_URL_PROVIDER_ANDROID_H_ #define CHROME_BROWSER_OPTIMIZATION_GUIDE_ANDROID_OPTIMIZATION_GUIDE_TAB_URL_PROVIDER_ANDROID_H_ -#include "chrome/browser/optimization_guide/optimization_guide_tab_url_provider.h" +#include "components/optimization_guide/core/tab_url_provider.h" + +class Profile; namespace optimization_guide { namespace android { @@ -13,15 +15,18 @@ // Implementation of OptimizationGuideTabUrlProvider that gets URLs from Android // browser windows. class OptimizationGuideTabUrlProviderAndroid - : public OptimizationGuideTabUrlProvider { + : public optimization_guide::TabUrlProvider { public: explicit OptimizationGuideTabUrlProviderAndroid(Profile* profile); ~OptimizationGuideTabUrlProviderAndroid() override; + // optimization_guide::TabUrlProvider: + const std::vector<GURL> GetUrlsOfActiveTabs( + const base::TimeDelta& duration_since_last_shown) override; + private: - // OptimizationGuideTabUrlProvider: - const std::vector<content::WebContents*> GetAllWebContentsForProfile( - Profile* profile) override; + // The profile associated with this tab URL provider. + Profile* profile_; }; } // namespace android
diff --git a/chrome/browser/optimization_guide/android/optimization_guide_tab_url_provider_android_unittest.cc b/chrome/browser/optimization_guide/android/optimization_guide_tab_url_provider_android_unittest.cc index a3beed0..83eb729 100644 --- a/chrome/browser/optimization_guide/android/optimization_guide_tab_url_provider_android_unittest.cc +++ b/chrome/browser/optimization_guide/android/optimization_guide_tab_url_provider_android_unittest.cc
@@ -99,6 +99,8 @@ content::WebContentsTester* web_contents_tester = content::WebContentsTester::For(web_contents.get()); web_contents_tester->SetLastCommittedURL(GURL("https://example.com/a")); + web_contents_tester->SetLastActiveTime(base::TimeTicks::Now() - + base::TimeDelta::FromDays(3)); std::unique_ptr<content::WebContents> web_contents2 = content::WebContentsTester::CreateTestWebContents( browser_context(), content::SiteInstance::Create(browser_context())); @@ -116,7 +118,7 @@ base::TimeDelta::FromDays(100)); stale_web_contents_tester->SetLastCommittedURL(GURL("https://stale.com")); FakeTabModel tab_model(profile(), {web_contents.get(), web_contents2.get(), - stale_web_contents.get()}); + stale_web_contents.get(), nullptr}); TabModelList::AddTabModel(&tab_model); std::unique_ptr<content::WebContents> otr_web_contents = @@ -132,8 +134,8 @@ std::vector<GURL> urls = tab_url_provider()->GetUrlsOfActiveTabs(base::TimeDelta::FromDays(90)); - EXPECT_THAT(urls, ElementsAre(GURL("https://example.com/a"), - GURL("https://example.com/b"))); + EXPECT_THAT(urls, ElementsAre(GURL("https://example.com/b"), + GURL("https://example.com/a"))); } } // namespace
diff --git a/chrome/browser/permissions/prediction_based_permission_ui_selector.cc b/chrome/browser/permissions/prediction_based_permission_ui_selector.cc index 2ee255f..7936a0e 100644 --- a/chrome/browser/permissions/prediction_based_permission_ui_selector.cc +++ b/chrome/browser/permissions/prediction_based_permission_ui_selector.cc
@@ -144,7 +144,8 @@ bool PredictionBasedPermissionUiSelector::IsPermissionRequestSupported( permissions::RequestType request_type) { - return request_type == permissions::RequestType::kNotifications; + return request_type == permissions::RequestType::kNotifications || + request_type == permissions::RequestType::kGeolocation; } absl::optional<permissions::PermissionUmaUtil::PredictionGrantLikelihood> @@ -163,8 +164,7 @@ auto* action_history = PermissionActionsHistory::GetForProfile(profile_); - auto actions = action_history->GetHistory( - cutoff, permissions::RequestType::kNotifications); + auto actions = action_history->GetHistory(cutoff, request->request_type()); FillInActionCounts(&features.requested_permission_counts, actions); actions = action_history->GetHistory(cutoff); @@ -216,6 +216,12 @@ base::FeatureList::IsEnabled(features::kPermissionPredictions); hold_back_chance = features::kPermissionPredictionsHoldbackChance.Get(); break; + case permissions::RequestType::kGeolocation: + is_permissions_predictions_enabled = base::FeatureList::IsEnabled( + features::kPermissionGeolocationPredictions); + hold_back_chance = + features::kPermissionGeolocationPredictionsHoldbackChance.Get(); + break; default: NOTREACHED(); } @@ -226,8 +232,19 @@ hold_back_chance && base::RandDouble() < hold_back_chance; // Only recording the hold back UMA histogram if the request was actually // eligible for an assisted prompt - base::UmaHistogramBoolean("Permissions.PredictionService.Request", - !should_hold_back); + switch (request_type) { + case permissions::RequestType::kNotifications: + base::UmaHistogramBoolean("Permissions.PredictionService.Request", + !should_hold_back); + break; + case permissions::RequestType::kGeolocation: + base::UmaHistogramBoolean( + "Permissions.PredictionService.GeolocationRequest", + !should_hold_back); + break; + default: + NOTREACHED(); + } return !should_hold_back; }
diff --git a/chrome/browser/permissions/prediction_based_permission_ui_selector_unittest.cc b/chrome/browser/permissions/prediction_based_permission_ui_selector_unittest.cc index 187b1d9d..fec4c407 100644 --- a/chrome/browser/permissions/prediction_based_permission_ui_selector_unittest.cc +++ b/chrome/browser/permissions/prediction_based_permission_ui_selector_unittest.cc
@@ -28,7 +28,8 @@ void SetUp() override { feature_list_.InitWithFeatures( - {features::kQuietNotificationPrompts, features::kPermissionPredictions}, + {features::kQuietNotificationPrompts, features::kPermissionPredictions, + features::kPermissionGeolocationPredictions}, {}); safe_browsing::SetSafeBrowsingState( @@ -37,8 +38,7 @@ } void RecordHistoryActions(size_t action_count, - permissions::RequestType request_type = - permissions::RequestType::kNotifications) { + permissions::RequestType request_type) { while (action_count--) { PermissionActionsHistory::GetForProfile(profile())->RecordAction( permissions::PermissionAction::DENIED, request_type); @@ -48,13 +48,13 @@ TestingProfile* profile() { return testing_profile_.get(); } Decision SelectUiToUseAndGetDecision( - PredictionBasedPermissionUiSelector* selector) { + PredictionBasedPermissionUiSelector* selector, + permissions::RequestType request_type) { absl::optional<Decision> actual_decision; base::RunLoop run_loop; permissions::MockPermissionRequest request( - permissions::RequestType::kNotifications, - permissions::PermissionRequestGestureType::GESTURE); + request_type, permissions::PermissionRequestGestureType::GESTURE); selector->SelectUiToUse( &request, base::BindLambdaForTesting([&](const Decision& decision) { @@ -87,7 +87,8 @@ {"very-likely", Decision::UseNormalUiAndShowNoWarning()}, }; - RecordHistoryActions(4 /* action_count */); + RecordHistoryActions(/*action_count=*/4, + permissions::RequestType::kNotifications); for (const auto& test : kTests) { base::test::ScopedCommandLine scoped_command_line; @@ -96,7 +97,8 @@ PredictionBasedPermissionUiSelector prediction_selector(profile()); - Decision decision = SelectUiToUseAndGetDecision(&prediction_selector); + Decision decision = SelectUiToUseAndGetDecision( + &prediction_selector, permissions::RequestType::kNotifications); EXPECT_EQ(test.expected_decision.quiet_ui_reason, decision.quiet_ui_reason); EXPECT_EQ(test.expected_decision.warning_reason, decision.warning_reason); @@ -113,20 +115,36 @@ // Requests that have 0-3 previous permission prompts will return "normal" // without making a prediction service request. for (size_t request_id = 0; request_id < 4; ++request_id) { - Decision decision = SelectUiToUseAndGetDecision(&prediction_selector); + Decision notification_decision = SelectUiToUseAndGetDecision( + &prediction_selector, permissions::RequestType::kNotifications); - EXPECT_EQ(Decision::UseNormalUi(), decision.quiet_ui_reason); + Decision geolocation_decision = SelectUiToUseAndGetDecision( + &prediction_selector, permissions::RequestType::kGeolocation); - RecordHistoryActions(1 /* action_count */); + EXPECT_EQ(Decision::UseNormalUi(), notification_decision.quiet_ui_reason); + EXPECT_EQ(Decision::UseNormalUi(), geolocation_decision.quiet_ui_reason); + + RecordHistoryActions(/*action_count=*/1, + permissions::RequestType::kNotifications); + RecordHistoryActions(/*action_count=*/1, + permissions::RequestType::kGeolocation); } // Since there are 4 previous prompts, the prediction service request will be // made and will return a "kPredictedVeryUnlikelyGrant" quiet reason. - Decision decision = SelectUiToUseAndGetDecision(&prediction_selector); + Decision notification_decision = SelectUiToUseAndGetDecision( + &prediction_selector, permissions::RequestType::kNotifications); + + Decision geolocation_decision = SelectUiToUseAndGetDecision( + &prediction_selector, permissions::RequestType::kGeolocation); EXPECT_EQ(PredictionBasedPermissionUiSelector::QuietUiReason:: kPredictedVeryUnlikelyGrant, - decision.quiet_ui_reason); + notification_decision.quiet_ui_reason); + + EXPECT_EQ(PredictionBasedPermissionUiSelector::QuietUiReason:: + kPredictedVeryUnlikelyGrant, + geolocation_decision.quiet_ui_reason); } TEST_F(PredictionBasedPermissionUiSelectorTest, @@ -137,30 +155,63 @@ PredictionBasedPermissionUiSelector prediction_selector(profile()); // Set up history to need one more prompt before we actually send requests. - RecordHistoryActions(3 /* action_count */); + RecordHistoryActions(/*action_count=*/3, + permissions::RequestType::kNotifications); + RecordHistoryActions(/*action_count=*/3, + permissions::RequestType::kGeolocation); - Decision decision = SelectUiToUseAndGetDecision(&prediction_selector); - EXPECT_EQ(Decision::UseNormalUi(), decision.quiet_ui_reason); + Decision notification_decision = SelectUiToUseAndGetDecision( + &prediction_selector, permissions::RequestType::kNotifications); + + Decision geolocation_decision = SelectUiToUseAndGetDecision( + &prediction_selector, permissions::RequestType::kGeolocation); + + EXPECT_EQ(Decision::UseNormalUi(), notification_decision.quiet_ui_reason); + EXPECT_EQ(Decision::UseNormalUi(), geolocation_decision.quiet_ui_reason); // Record a bunch of history actions for other request types. - RecordHistoryActions(2 /* action_count */, + RecordHistoryActions(/*action_count=*/2, permissions::RequestType::kCameraStream); - RecordHistoryActions(1 /* action_count */, + RecordHistoryActions(/*action_count=*/1, permissions::RequestType::kClipboard); - RecordHistoryActions(5 /* action_count */, - permissions::RequestType::kGeolocation); - RecordHistoryActions(10 /* action_count */, + RecordHistoryActions(/*action_count=*/10, permissions::RequestType::kMidiSysex); // Should still not send requests. - decision = SelectUiToUseAndGetDecision(&prediction_selector); - EXPECT_EQ(Decision::UseNormalUi(), decision.quiet_ui_reason); + notification_decision = SelectUiToUseAndGetDecision( + &prediction_selector, permissions::RequestType::kNotifications); + EXPECT_EQ(Decision::UseNormalUi(), notification_decision.quiet_ui_reason); + + geolocation_decision = SelectUiToUseAndGetDecision( + &prediction_selector, permissions::RequestType::kNotifications); + EXPECT_EQ(Decision::UseNormalUi(), geolocation_decision.quiet_ui_reason); // Record one more notification prompt, now it should send requests. - RecordHistoryActions(1); - decision = SelectUiToUseAndGetDecision(&prediction_selector); + RecordHistoryActions(1, permissions::RequestType::kNotifications); + notification_decision = SelectUiToUseAndGetDecision( + &prediction_selector, permissions::RequestType::kNotifications); EXPECT_EQ(PredictionBasedPermissionUiSelector::QuietUiReason:: kPredictedVeryUnlikelyGrant, - decision.quiet_ui_reason); + notification_decision.quiet_ui_reason); + + // Geolocation still has too few actions. + geolocation_decision = SelectUiToUseAndGetDecision( + &prediction_selector, permissions::RequestType::kGeolocation); + EXPECT_EQ(Decision::UseNormalUi(), geolocation_decision.quiet_ui_reason); + + // Now both notifications and geolocation send requests. + RecordHistoryActions(1, permissions::RequestType::kGeolocation); + + notification_decision = SelectUiToUseAndGetDecision( + &prediction_selector, permissions::RequestType::kNotifications); + EXPECT_EQ(PredictionBasedPermissionUiSelector::QuietUiReason:: + kPredictedVeryUnlikelyGrant, + notification_decision.quiet_ui_reason); + + geolocation_decision = SelectUiToUseAndGetDecision( + &prediction_selector, permissions::RequestType::kGeolocation); + EXPECT_EQ(PredictionBasedPermissionUiSelector::QuietUiReason:: + kPredictedVeryUnlikelyGrant, + geolocation_decision.quiet_ui_reason); }
diff --git a/chrome/browser/policy/cloud/user_policy_signin_service.cc b/chrome/browser/policy/cloud/user_policy_signin_service.cc index bddcf11d..ce9e0dc 100644 --- a/chrome/browser/policy/cloud/user_policy_signin_service.cc +++ b/chrome/browser/policy/cloud/user_policy_signin_service.cc
@@ -16,6 +16,7 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/signin/account_id_from_account_info.h" +#include "chrome/browser/signin/signin_features.h" #include "chrome/browser/signin/signin_util.h" #include "chrome/common/pref_names.h" #include "components/policy/core/common/cloud/cloud_policy_client_registration_helper.h" @@ -51,13 +52,12 @@ // happens in the background after PKS initialization - so this service // should always be created before the oauth token is available. DCHECK(!CanApplyPoliciesForSignedInUser(/*check_for_refresh_token=*/true)); - - profile_pref_change_registrar_.Init(profile->GetPrefs()); - profile_pref_change_registrar_.Add( - prefs::kUserAcceptedAccountManagement, - base::BindRepeating( - &UserPolicySigninService::OnAccountManagementPrefChange, - base::Unretained(this))); + // Some tests don't have a profile manager. + if (base::FeatureList::IsEnabled(kAccountPoliciesLoadedWithoutSync) && + g_browser_process->profile_manager()) { + observed_profile_.Observe( + &g_browser_process->profile_manager()->GetProfileAttributesStorage()); + } } UserPolicySigninService::~UserPolicySigninService() { @@ -68,6 +68,7 @@ // in the destructor because we want to shutdown the registration helper // before UserCloudPolicyManager shuts down the CloudPolicyClient. registration_helper_.reset(); + observed_profile_.Reset(); UserPolicySigninServiceBase::PrepareForUserCloudPolicyManagerShutdown(); } @@ -155,7 +156,7 @@ return; } - profile_pref_change_registrar_.RemoveAll(); + observed_profile_.Reset(); InitializeForSignedInUser( AccountIdFromAccountInfo( @@ -165,11 +166,6 @@ ->GetURLLoaderFactoryForBrowserProcess()); } -void UserPolicySigninService::OnAccountManagementPrefChange() { - if (CanApplyPoliciesForSignedInUser(/*check_for_refresh_token=*/true)) - TryInitializeForSignedInUser(); -} - void UserPolicySigninService::InitializeUserCloudPolicyManager( const AccountId& account_id, std::unique_ptr<CloudPolicyClient> client) { @@ -187,6 +183,12 @@ UserPolicySigninServiceBase::ShutdownUserCloudPolicyManager(); } +void UserPolicySigninService::OnProfileUserManagementAcceptanceChanged( + const base::FilePath& profile_path) { + if (CanApplyPoliciesForSignedInUser(/*check_for_refresh_token=*/true)) + TryInitializeForSignedInUser(); +} + void UserPolicySigninService::OnCloudPolicyServiceInitializationCompleted() { UserCloudPolicyManager* manager = policy_manager(); DCHECK(manager->core()->service()->IsInitializationComplete());
diff --git a/chrome/browser/policy/cloud/user_policy_signin_service.h b/chrome/browser/policy/cloud/user_policy_signin_service.h index 74e4058c..6bbb7c2 100644 --- a/chrome/browser/policy/cloud/user_policy_signin_service.h +++ b/chrome/browser/policy/cloud/user_policy_signin_service.h
@@ -10,7 +10,9 @@ #include "base/compiler_specific.h" #include "base/memory/ref_counted.h" +#include "base/scoped_observation.h" #include "chrome/browser/policy/cloud/user_policy_signin_service_base.h" +#include "chrome/browser/profiles/profile_attributes_storage.h" #include "components/prefs/pref_change_registrar.h" #include "components/signin/public/identity_manager/identity_manager.h" @@ -27,7 +29,8 @@ // A specialization of the UserPolicySigninServiceBase for the desktop // platforms (Windows, Mac and Linux). -class UserPolicySigninService : public UserPolicySigninServiceBase { +class UserPolicySigninService : public UserPolicySigninServiceBase, + public ProfileAttributesStorage::Observer { public: // Creates a UserPolicySigninService associated with the passed // |policy_manager| and |identity_manager|. @@ -66,6 +69,9 @@ // the manager must be shutdown manually. void ShutdownUserCloudPolicyManager() override; + void OnProfileUserManagementAcceptanceChanged( + const base::FilePath& profile_path) override; + protected: // UserPolicySigninServiceBase implementation: void InitializeUserCloudPolicyManager( @@ -88,9 +94,6 @@ // cloud policy. void ProhibitSignoutIfNeeded(); - // Called when the value of the `profile.account_management` pref changes. - void OnAccountManagementPrefChange(); - // Helper method that attempts calls |InitializeForSignedInUser| only if // |policy_manager| is not-nul. Expects that there is a refresh token for // the primary account. @@ -101,7 +104,9 @@ PolicyRegistrationCallback callback); std::unique_ptr<CloudPolicyClientRegistrationHelper> registration_helper_; - PrefChangeRegistrar profile_pref_change_registrar_; + base::ScopedObservation<ProfileAttributesStorage, + ProfileAttributesStorage::Observer> + observed_profile_{this}; }; } // namespace policy
diff --git a/chrome/browser/policy/cloud/user_policy_signin_service_base.cc b/chrome/browser/policy/cloud/user_policy_signin_service_base.cc index d338d6d..4fcf14183 100644 --- a/chrome/browser/policy/cloud/user_policy_signin_service_base.cc +++ b/chrome/browser/policy/cloud/user_policy_signin_service_base.cc
@@ -12,8 +12,13 @@ #include "base/single_thread_task_runner.h" #include "base/threading/thread_task_runner_handle.h" #include "build/build_config.h" +#include "chrome/browser/browser_process.h" #include "chrome/browser/chrome_notification_types.h" +#include "chrome/browser/enterprise/util/managed_browser_utils.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/profiles/profile_attributes_entry.h" +#include "chrome/browser/profiles/profile_attributes_storage.h" +#include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/signin/account_id_from_account_info.h" #include "chrome/browser/signin/signin_features.h" #include "chrome/common/chrome_content_client.h" @@ -95,7 +100,15 @@ const signin::PrimaryAccountChangeEvent& event) { if (event.GetEventTypeFor(signin::ConsentLevel::kSignin) == signin::PrimaryAccountChangeEvent::Type::kCleared) { - profile()->GetPrefs()->ClearPref(prefs::kUserAcceptedAccountManagement); + if (base::FeatureList::IsEnabled(kAccountPoliciesLoadedWithoutSync)) { + ProfileManager* profile_manager = g_browser_process->profile_manager(); + DCHECK(profile_manager); + ProfileAttributesEntry* entry = + profile_manager->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile_->GetPath()); + if (entry) + entry->SetUserAcceptedAccountManagement(false); + } ShutdownUserCloudPolicyManager(); } else if (event.GetEventTypeFor(signin::ConsentLevel::kSync) == signin::PrimaryAccountChangeEvent::Type::kCleared && @@ -288,8 +301,7 @@ signin::ConsentLevel::kSignin) : identity_manager()->HasPrimaryAccount( signin::ConsentLevel::kSignin)) && - profile()->GetPrefs()->GetBoolean( - prefs::kUserAcceptedAccountManagement); + chrome::enterprise_util::ProfileCanBeManaged(profile()); } return check_for_refresh_token
diff --git a/chrome/browser/policy/cloud/user_policy_signin_service_browsertest.cc b/chrome/browser/policy/cloud/user_policy_signin_service_browsertest.cc index d934f744..83211e0 100644 --- a/chrome/browser/policy/cloud/user_policy_signin_service_browsertest.cc +++ b/chrome/browser/policy/cloud/user_policy_signin_service_browsertest.cc
@@ -13,6 +13,7 @@ #include "base/values.h" #include "build/build_config.h" #include "chrome/browser/browser_process.h" +#include "chrome/browser/enterprise/util/managed_browser_utils.h" #include "chrome/browser/policy/chrome_browser_policy_connector.h" #include "chrome/browser/policy/profile_policy_connector.h" #include "chrome/browser/signin/identity_manager_factory.h" @@ -501,8 +502,6 @@ // Cancel sync. ConfirmSync(LoginUIService::ABORT_SYNC); - WaitForPrefValue(profile()->GetPrefs(), prefs::kUserAcceptedAccountManagement, - base::Value(true)); EXPECT_TRUE( IdentityManagerFactory::GetForProfile(profile())->HasPrimaryAccount( signin::ConsentLevel::kSignin)); @@ -510,7 +509,8 @@ IdentityManagerFactory::GetForProfile(profile())->HasPrimaryAccount( signin::ConsentLevel::kSync)); EXPECT_TRUE( - profile()->GetPrefs()->GetBoolean(prefs::kUserAcceptedAccountManagement)); + chrome::enterprise_util::UserAcceptedAccountManagement(profile())); + EXPECT_TRUE(chrome::enterprise_util::ProfileCanBeManaged(profile())); // Policy is still applied. EXPECT_TRUE(profile()->GetPrefs()->GetBoolean(prefs::kShowHomeButton)); @@ -524,5 +524,6 @@ IdentityManagerFactory::GetForProfile(profile())->HasPrimaryAccount( signin::ConsentLevel::kSignin)); EXPECT_FALSE( - profile()->GetPrefs()->GetBoolean(prefs::kUserAcceptedAccountManagement)); + chrome::enterprise_util::UserAcceptedAccountManagement(profile())); + EXPECT_FALSE(chrome::enterprise_util::ProfileCanBeManaged(profile())); }
diff --git a/chrome/browser/policy/cloud/user_policy_signin_service_factory.cc b/chrome/browser/policy/cloud/user_policy_signin_service_factory.cc index 494c6be2..44af5e6 100644 --- a/chrome/browser/policy/cloud/user_policy_signin_service_factory.cc +++ b/chrome/browser/policy/cloud/user_policy_signin_service_factory.cc
@@ -86,7 +86,6 @@ void UserPolicySigninServiceFactory::RegisterProfilePrefs( user_prefs::PrefRegistrySyncable* user_prefs) { - user_prefs->RegisterBooleanPref(prefs::kUserAcceptedAccountManagement, false); #if defined(OS_ANDROID) user_prefs->RegisterInt64Pref(prefs::kLastPolicyCheckTime, 0); #endif
diff --git a/chrome/browser/profiles/profile_attributes_entry.cc b/chrome/browser/profiles/profile_attributes_entry.cc index 9a86b12..76309f6 100644 --- a/chrome/browser/profiles/profile_attributes_entry.cc +++ b/chrome/browser/profiles/profile_attributes_entry.cc
@@ -18,6 +18,7 @@ #include "chrome/browser/profiles/profile_attributes_storage.h" #include "chrome/browser/profiles/profile_avatar_icon_util.h" #include "chrome/browser/profiles/profiles_state.h" +#include "chrome/browser/signin/signin_features.h" #include "chrome/browser/signin/signin_util.h" #include "chrome/browser/ui/signin/profile_colors_util.h" #include "chrome/browser/ui/ui_features.h" @@ -54,6 +55,8 @@ const char kMetricsBucketIndex[] = "metrics_bucket_index"; const char kForceSigninProfileLockedKey[] = "force_signin_profile_locked"; const char kHostedDomain[] = "hosted_domain"; +const char kUserAcceptedAccountManagement[] = + "user_accepted_account_management"; // All accounts info. This is a dictionary containing sub-dictionaries of // account information, keyed by the gaia ID. The sub-dictionaries are empty for @@ -181,7 +184,7 @@ } if (signin_util::IsForceSigninEnabled()) { - if (!IsAuthenticated()) + if (!CanBeManaged()) SetBool(kForceSigninProfileLockedKey, true); } else { // Reset the locked state to avoid a profile being locked after the force @@ -469,6 +472,18 @@ return GetBool(kIsConsentedPrimaryAccountKey); } +bool ProfileAttributesEntry::CanBeManaged() const { + switch (GetSigninState()) { + case SigninState::kSignedInWithConsentedPrimaryAccount: + return true; + case SigninState::kSignedInWithUnconsentedPrimaryAccount: + return base::FeatureList::IsEnabled(kAccountPoliciesLoadedWithoutSync) && + GetBool(kUserAcceptedAccountManagement); + case SigninState::kNotSignedIn: + return false; + } +} + bool ProfileAttributesEntry::IsUsingDefaultAvatar() const { return GetBool(kIsUsingDefaultAvatarKey); } @@ -683,6 +698,16 @@ SetBool(kProfileIsEphemeral, value); } +void ProfileAttributesEntry::SetUserAcceptedAccountManagement(bool value) { + if (SetBool(kUserAcceptedAccountManagement, value)) + profile_attributes_storage_->NotifyProfileUserManagementAcceptanceChanged( + GetPath()); +} + +bool ProfileAttributesEntry::UserAcceptedAccountManagement() const { + return GetBool(kUserAcceptedAccountManagement); +} + void ProfileAttributesEntry::SetIsUsingDefaultName(bool value) { if (SetBool(kIsUsingDefaultNameKey, value)) profile_attributes_storage_->NotifyIfProfileNamesHaveChanged();
diff --git a/chrome/browser/profiles/profile_attributes_entry.h b/chrome/browser/profiles/profile_attributes_entry.h index 3147e76d..fced225 100644 --- a/chrome/browser/profiles/profile_attributes_entry.h +++ b/chrome/browser/profiles/profile_attributes_entry.h
@@ -127,6 +127,8 @@ SigninState GetSigninState() const; // Returns true if the profile is signed in. bool IsAuthenticated() const; + // Returns true if the account can be be managed. + bool CanBeManaged() const; // Returns true if the Profile is using the default avatar, which is one of // the profile icons selectable at profile creation. bool IsUsingDefaultAvatar() const; @@ -178,6 +180,8 @@ // responsibility of the caller to make sure that the entry is set as // non-ephemeral only if prefs::kForceEphemeralProfiles is false. void SetIsEphemeral(bool value); + void SetUserAcceptedAccountManagement(bool value); + bool UserAcceptedAccountManagement() const; // TODO(msalama): Remove this function. void SetIsUsingDefaultName(bool value); void SetIsUsingDefaultAvatar(bool value);
diff --git a/chrome/browser/profiles/profile_attributes_storage.cc b/chrome/browser/profiles/profile_attributes_storage.cc index 26630f5..2307679e 100644 --- a/chrome/browser/profiles/profile_attributes_storage.cc +++ b/chrome/browser/profiles/profile_attributes_storage.cc
@@ -751,6 +751,12 @@ observer.OnProfileHighResAvatarLoaded(profile_path); } +void ProfileAttributesStorage::NotifyProfileUserManagementAcceptanceChanged( + const base::FilePath& profile_path) const { + for (auto& observer : observer_list_) + observer.OnProfileUserManagementAcceptanceChanged(profile_path); +} + std::string ProfileAttributesStorage::StorageKeyFromProfilePath( const base::FilePath& profile_path) const { DCHECK(user_data_dir_ == profile_path.DirName());
diff --git a/chrome/browser/profiles/profile_attributes_storage.h b/chrome/browser/profiles/profile_attributes_storage.h index b11f9508..2a80219 100644 --- a/chrome/browser/profiles/profile_attributes_storage.h +++ b/chrome/browser/profiles/profile_attributes_storage.h
@@ -172,6 +172,8 @@ const base::FilePath& profile_path) const; void NotifyProfileHostedDomainChanged( const base::FilePath& profile_path) const; + void NotifyProfileUserManagementAcceptanceChanged( + const base::FilePath& profile_path) const; // Returns a pref dictionary key of a profile at `profile_path`. std::string StorageKeyFromProfilePath(
diff --git a/chrome/browser/profiles/profile_attributes_storage_observer.h b/chrome/browser/profiles/profile_attributes_storage_observer.h index 6390c9a..e323d912 100644 --- a/chrome/browser/profiles/profile_attributes_storage_observer.h +++ b/chrome/browser/profiles/profile_attributes_storage_observer.h
@@ -48,6 +48,8 @@ } virtual void OnProfileHostedDomainChanged( const base::FilePath& profile_path) {} + virtual void OnProfileUserManagementAcceptanceChanged( + const base::FilePath& profile_path) {} protected: ProfileAttributesStorageObserver() = default;
diff --git a/chrome/browser/profiles/profile_attributes_storage_unittest.cc b/chrome/browser/profiles/profile_attributes_storage_unittest.cc index 80c6a2f..cda5ae5 100644 --- a/chrome/browser/profiles/profile_attributes_storage_unittest.cc +++ b/chrome/browser/profiles/profile_attributes_storage_unittest.cc
@@ -141,6 +141,8 @@ void(const base::FilePath& profile_path)); MOCK_METHOD1(OnProfileHostedDomainChanged, void(const base::FilePath& profile_path)); + MOCK_METHOD1(OnProfileUserManagementAcceptanceChanged, + void(const base::FilePath& profile_path)); }; size_t GetDefaultAvatarIconResourceIDAtIndex(int index) { @@ -754,6 +756,11 @@ TEST_BOOL_ACCESSORS(ProfileAttributesEntry, entry, IsUsingDefaultAvatar); TEST_STRING_ACCESSORS(ProfileAttributesEntry, entry, LastDownloadedGAIAPictureUrlWithSize); + + EXPECT_CALL(observer(), OnProfileUserManagementAcceptanceChanged(_)).Times(2); + TEST_BOOL_ACCESSORS(ProfileAttributesEntry, entry, + UserAcceptedAccountManagement); + VerifyAndResetCallExpectations(); } TEST_F(ProfileAttributesStorageTest, EntryInternalAccessors) {
diff --git a/chrome/browser/profiles/profile_manager.cc b/chrome/browser/profiles/profile_manager.cc index 25e9e40b8..04aab51e 100644 --- a/chrome/browser/profiles/profile_manager.cc +++ b/chrome/browser/profiles/profile_manager.cc
@@ -2077,7 +2077,7 @@ storage.GetProfileAttributesWithPath(profile->GetPath()); if (entry) { #if !defined(OS_ANDROID) && !BUILDFLAG(IS_CHROMEOS_ASH) - bool was_authenticated_status = entry->IsAuthenticated(); + bool could_be_managed_status = entry->CanBeManaged(); #endif // The ProfileAttributesStorage's info must match the Identity Manager. entry->SetAuthInfo(account_info.gaia, username, @@ -2090,10 +2090,10 @@ // Sign out if force-sign-in policy is enabled and profile is not signed // in. VLOG(1) << "ForceSigninCheck: " << signin_util::IsForceSigninEnabled() - << ", " << was_authenticated_status << ", " - << !entry->IsAuthenticated(); - if (signin_util::IsForceSigninEnabled() && was_authenticated_status && - !entry->IsAuthenticated()) { + << ", " << could_be_managed_status << ", " + << !entry->CanBeManaged(); + if (signin_util::IsForceSigninEnabled() && could_be_managed_status && + !entry->CanBeManaged()) { auto* account_mutator = identity_manager->GetPrimaryAccountMutator(); // GetPrimaryAccountMutator() returns nullptr on ChromeOS only.
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_te.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_te.xtb index a9911e2..2642b1e 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_te.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_te.xtb
@@ -225,7 +225,7 @@ <translation id="2573256689920773241">ప్రాథమిక నావిగేషన్</translation> <translation id="257674075312929031">గ్రూప్గా చేయి</translation> <translation id="2582407057977008361">ప్రక్కన</translation> -<translation id="2592212930811759050">సవరణను ప్రారంభించడానికి రెండుసార్లు నొక్కండి</translation> +<translation id="2592212930811759050">ఎడిట్ను ప్రారంభించడానికి రెండుసార్లు నొక్కండి</translation> <translation id="2598495320872286378">వ్యాకరణ దోషం</translation> <translation id="2603828437139726540">ఒక అక్షరం ముందుకు జరుపు</translation> <translation id="2619052155095999743">చొప్పించండి</translation> @@ -571,7 +571,7 @@ <translation id="492295894462528572">ముందుమాట</translation> <translation id="495046168593986294">పైకి స్క్రోల్ చేయి</translation> <translation id="495170559598752135">చర్యలు</translation> -<translation id="4953585991029886728">వచనాన్ని సవరించండి</translation> +<translation id="4953585991029886728">వచనాన్ని ఎడిట్ చేయండి</translation> <translation id="4973717656530883744">కనిష్టం <ph name="X" /></translation> <translation id="4974612477719259470">మునుపటి బటన్ లేదు</translation> <translation id="4979404613699303341">మునుపటి బటన్</translation> @@ -660,7 +660,7 @@ <translation id="5562645715554321347">hdnggrp</translation> <translation id="5574412348552378458">ChromeVox తెలుసుకునే మోడ్</translation> <translation id="5582839680698949063">ప్రధాన మెనూ</translation> -<translation id="5585044216466955529">వచనం, ఇమెయిల్ నమోదును సవరించండి</translation> +<translation id="5585044216466955529">వచనం, ఇమెయిల్ నమోదును ఎడిట్ చేయండి</translation> <translation id="5597170376237141345">తదుపరి చెక్బాక్స్</translation> <translation id="5598905979683743333"><ph name="NAME" />, రేడియో బటన్ ఎంపిక తీసివేయబడింది</translation> <translation id="5601172225407283979">డిఫాల్ట్ చర్యను అమలు చేయండి</translation> @@ -858,7 +858,7 @@ <translation id="7088960765736518739">స్విచ్ యాక్సెస్</translation> <translation id="7090715360595433170">ఒక వేలుతో ఎడమ, కుడి వైపునకు స్వైప్ చేయడం కంటే కూడా ఇది చాలా సమర్థవంతమైనది.</translation> <translation id="7091296112653361280">నారింజ తెలుపు రంగు</translation> -<translation id="7095834689119144465">వచన సంఖ్యను మాత్రమే సవరించండి</translation> +<translation id="7095834689119144465">వచన సంఖ్యను మాత్రమే ఎడిట్ చేయండి</translation> <translation id="7096001299300236431">మునుపటి మీడియా</translation> <translation id="7116595520562830928">multln</translation> <translation id="712735679809149106">పదం అనుకరణ</translation> @@ -941,7 +941,7 @@ <translation id="7674576868851035240">తర్వాతి లింక్</translation> <translation id="7674768236845044097">గుర్తు పెట్టండి</translation> <translation id="7676847077928500578">వచనం నుండి ప్రసంగం సెట్టింగ్లను రీసెట్ చేయండి</translation> -<translation id="7684431668231950609">వచనం, URL నమోదును సవరించండి</translation> +<translation id="7684431668231950609">వచనం, URL నమోదును ఎడిట్ చేయండి</translation> <translation id="7685589220304187312">tlbar</translation> <translation id="7693840228159394336">మునుపటి రేడియో బటన్</translation> <translation id="7701040980221191251">ఏదీ లేదు</translation> @@ -995,7 +995,7 @@ <translation id="8033827949643255796">ఎంచుకోబడ్డాయి</translation> <translation id="8035962149453661158">గరిష్ఠం:<ph name="X" /></translation> <translation id="8037651341025652929">ముగింపు</translation> -<translation id="8042761080832772327">వచనం, శోధన నమోదును సవరించండి</translation> +<translation id="8042761080832772327">వచనం, శోధన నమోదును ఎడిట్ చేయండి</translation> <translation id="8049189770492311300">టైమర్</translation> <translation id="8057472523431225012">ప్రస్తుత దశ</translation> <translation id="8058636807889143711">తర్వాత గణిత వ్యక్తీకరణ లేదు</translation> @@ -1063,7 +1063,7 @@ <translation id="8548973727659841685">అక్షరం</translation> <translation id="8561322612995434619">పాప్ అప్ను కలిగి ఉంది</translation> <translation id="8571096049907249734">బహు ఎంపి</translation> -<translation id="858006550102277544">వ్యాఖ్యానించండి</translation> +<translation id="858006550102277544">కామెంట్ చేయండి</translation> <translation id="8584721346566392021">h5</translation> <translation id="8587549812518406253">తరువాత జాబితా అంశం</translation> <translation id="8591343418134616947">మునుపటి స్థాయి 6 శీర్షిక లేదు</translation>
diff --git a/chrome/browser/resources/chromeos/audio/BUILD.gn b/chrome/browser/resources/chromeos/audio/BUILD.gn index b01d3bc..9e55b4e 100644 --- a/chrome/browser/resources/chromeos/audio/BUILD.gn +++ b/chrome/browser/resources/chromeos/audio/BUILD.gn
@@ -13,6 +13,7 @@ "audio_player.ts", "device_page.ts", "device_table.ts", + "input_page.ts", "output_page.ts", "page.ts", ] @@ -41,6 +42,7 @@ "audio.mojom-webui.js", "device_table.ts", "device_page.ts", + "input_page.ts", "output_page.ts", "page.ts", ]
diff --git a/chrome/browser/resources/chromeos/audio/audio.css b/chrome/browser/resources/chromeos/audio/audio.css index 815a2e6..9f349a7 100644 --- a/chrome/browser/resources/chromeos/audio/audio.css +++ b/chrome/browser/resources/chromeos/audio/audio.css
@@ -25,6 +25,10 @@ font-size: 120% } +button { + cursor: pointer; +} + /* Device Table */ table { border-collapse: collapse; @@ -67,7 +71,6 @@ .audio-player button { background: none; border: none; - cursor: pointer; font-size: 120%; padding: 0; position: absolute; @@ -109,4 +112,62 @@ left: 40px; position: absolute; top: 45px; -} \ No newline at end of file +} + +/* Input Page */ + +#input { + margin: auto; + width: 50%; +} + +#input-explainer { + margin-top: 30px; +} + +#channel-l, +#channel-r { + height: 60px; + width: 100%; +} + +#record-btn { + border: 3px solid #dcdcdc; + border-radius: 6px; + color: rgb(78, 76, 76); + display: inline-block; + font-size: 120%; + font-weight: bold; + margin-top: 10px; + padding: 6px 24px; +} + +.on-record { + background: linear-gradient(to bottom, #fff 5%, #f6f6f6 100%); + background-color: #fff; +} + +.on-stop { + background-color: #c7c7c7; +} + +#button-section { + position: relative; +} + +#counter { + color: red; + left: 100px; + position: absolute; + top: 5px; +} + +#audio-file { + margin-top: 15px; +} + +#input-qs button { + background: none; + border: none; + font-size: 120%; +}
diff --git a/chrome/browser/resources/chromeos/audio/audio.html b/chrome/browser/resources/chromeos/audio/audio.html index 1bdc0d3..ed1cd6f 100644 --- a/chrome/browser/resources/chromeos/audio/audio.html +++ b/chrome/browser/resources/chromeos/audio/audio.html
@@ -11,6 +11,7 @@ <div id = "deviceTable"> </div> <button id="output-btn">Test Output Devices</button> + <button id="input-btn">Test Input Devices</button> </section> <section id="output" hidden> <div id = "output-explainer"> @@ -24,6 +25,44 @@ <div id = "audio-players"> </div> </section> + <section id="input" hidden> + <div id = "input-explainer"> + <h>Test Input Devices</h> + <p>Please click the record button and say something. + Observe if you can see audio frequency from both channels, + and then listen to the playback and indicate if you can hear + the recording clearly.</p> + <p class="advice-label">For example, you could say: "I'm just testing + my audio input device."</p> + <p>Input from: <b id = "active-input"></b></p> + <p class="advice-label">please go back to the device table if this is not + the intended device.</p> + </div> + <div id = 'channels'> + <p> + Channle 0 + </p> + <canvas id='channel-l'></canvas> + <p> + Channle 1 + </p> + <canvas id='channel-r'></canvas> + </div> + <div id = 'recording'> + <div id="button-section"> + <button id="record-btn">Record</button> + <p id = "counter"></p> + </div> + <div id="audio-file"> + + </div> + <div id = 'input-qs' hidden> + <p>Can hear audio clearly?</p> + <button id = 'input-yes'>Yes</button> + <button id = 'input-no'>No</button> + </div> + </div> + </section> <template id="deviceTable-template"> <table> <thead> @@ -44,7 +83,7 @@ <p id="audio-name"></p> <p id="audio-expectation"></p> <audio title="local audio file" src="" controls> - This browser does not support the audio element. + This browser does not support the audio element. </audio> <p id="output-qs">Can hear clearly?</p> </div>
diff --git a/chrome/browser/resources/chromeos/audio/audio.ts b/chrome/browser/resources/chromeos/audio/audio.ts index 81b62ec5..ae8a7b7 100644 --- a/chrome/browser/resources/chromeos/audio/audio.ts +++ b/chrome/browser/resources/chromeos/audio/audio.ts
@@ -4,6 +4,7 @@ import {$} from 'chrome://resources/js/util.m.js'; import {DevicePage} from './device_page.js'; +import {InputPage} from './input_page.js'; import {OutputPage} from './output_page.js'; import {PageNavigator} from './page.js'; @@ -12,9 +13,10 @@ const pageNavigator = PageNavigator.getInstance(); const devicePage = DevicePage.getInstance(); const outputPage = OutputPage.getInstance(); + const inputPage = InputPage.getInstance(); pageNavigator.addPage(devicePage); pageNavigator.addPage(outputPage); - + pageNavigator.addPage(inputPage); window.addEventListener('hashchange', function() { const pageName = window.location.hash.substr(1); if ($(pageName)) { @@ -29,6 +31,9 @@ $('output-btn').addEventListener('click', function() { pageNavigator.showPage(outputPage.pageName); }); + $('input-btn').addEventListener('click', function() { + pageNavigator.showPage(inputPage.pageName); + }); pageNavigator.showPage(window.location.hash.substr(1)); }
diff --git a/chrome/browser/resources/chromeos/audio/device_page.ts b/chrome/browser/resources/chromeos/audio/device_page.ts index 49ead0c..2f5a0648 100644 --- a/chrome/browser/resources/chromeos/audio/device_page.ts +++ b/chrome/browser/resources/chromeos/audio/device_page.ts
@@ -3,6 +3,7 @@ import {DeviceData, PageCallbackRouter, PageHandlerRemote} from './audio.mojom-webui.js'; import {AudioBroker} from './audio_broker.js'; import {DeviceTable} from './device_table.js'; +import {InputPage} from './input_page.js'; import {OutputPage} from './output_page.js'; import {Page} from './page.js'; @@ -41,6 +42,7 @@ updateDeviceInfo(devices: DeviceMap) { this.deviceTable.setDevices(devices); OutputPage.getInstance().updateActiveOutputDevice(); + InputPage.getInstance().updateActiveInputDevice(); } updateDeviceVolume(nodeId: number, volume: number) {
diff --git a/chrome/browser/resources/chromeos/audio/input_page.ts b/chrome/browser/resources/chromeos/audio/input_page.ts new file mode 100644 index 0000000..e00f1d19 --- /dev/null +++ b/chrome/browser/resources/chromeos/audio/input_page.ts
@@ -0,0 +1,246 @@ +import {$} from 'chrome://resources/js/util.m.js'; + +import {AudioBroker} from './audio_broker.js'; +import {Page} from './page.js'; + + +export class InputPage extends Page { + testInputFeedback: Map<string, null|string>; + private analyserLeft?: AnalyserNode; + private analyserRight?: AnalyserNode; + private animationRequestId?: number; + private recordClicked: boolean; + private audioContext: AudioContext|null; + // Type is set to any because TypeScript compiler + // does not recognize the MediaRecorder object. + private mediaRecorder: any; + private intervalId: number|null; + + constructor() { + super('input'); + this.audioContext = null; + this.mediaRecorder = null; + this.recordClicked = false; + this.intervalId = null; + this.testInputFeedback = + new Map([['AudioUrl', null], ['Can Hear Clearly', null]]); + this.setUpButtons(); + } + + showPage() { + super.showPage(); + if (this.audioContext) { + this.audioContext.resume(); + } else { + this.initAudio(true); + } + } + + hidePage() { + super.hidePage(); + if (this.audioContext) { + this.audioContext.suspend(); + } + if (this.recordClicked) { + this.stopRecord(); + } + } + + updateActiveInputDevice() { + const handler = AudioBroker.getInstance().handler; + handler.getActiveInputDeviceName().then(({deviceName}) => { + $('active-input').innerHTML = deviceName; + }); + } + + visualize() { + const pairs = [ + {'canvas': $('channel-l'), 'analyser': this.analyserLeft}, + {'canvas': $('channel-r'), 'analyser': this.analyserRight}, + ]; + const draw = () => { + this.animationRequestId = requestAnimationFrame(draw); + for (const channel of pairs) { + let canvas = <HTMLCanvasElement>channel['canvas']; + let canvasContext = canvas.getContext('2d'); + let analyser = channel['analyser']; + + if (canvasContext && analyser) { + analyser.fftSize = 2048; + const bufferSize = analyser.frequencyBinCount; + const buffer = new Uint8Array(bufferSize); + + /* Since we are using percentage for width and height, make it the + * real value */ + canvas.width = canvas.clientWidth; + canvas.height = canvas.clientHeight; + + const width = canvas.clientWidth; + const height = canvas.clientHeight; + + analyser.getByteTimeDomainData(buffer); + canvasContext.fillStyle = 'rgb(200, 200, 200)'; + canvasContext.fillRect(0, 0, width, height); + canvasContext.lineWidth = 2; + canvasContext.strokeStyle = 'rgb(0, 0, 0)'; + + canvasContext.beginPath(); + + var dx = width * 1.0 / bufferSize; + var x = 0; + + for (var i = 0; i < bufferSize; i++) { + const data = buffer[i]; + if (data) { + var v = data / 128.0; + var y = v * height / 2; + if (i === 0) { + canvasContext.moveTo(x, y); + } else { + canvasContext.lineTo(x, y); + } + x += dx; + } + } + canvasContext.lineTo(width, height / 2); + canvasContext.stroke(); + } + } + }; + if (this.animationRequestId) + window.cancelAnimationFrame(this.animationRequestId); + draw(); + } + + buildAudioGraph(source: MediaStreamAudioSourceNode) { + if (this.audioContext) { + const splitter = this.audioContext.createChannelSplitter(2); + source.connect(splitter); + this.analyserLeft = this.audioContext.createAnalyser(); + this.analyserRight = this.audioContext.createAnalyser(); + splitter.connect(this.analyserLeft, 0); + splitter.connect(this.analyserRight, 1); + } + } + + initAudio(audio_constraint: boolean|Object) { + this.audioContext = new window.AudioContext(); + navigator.mediaDevices.getUserMedia({'audio': audio_constraint}) + .then((stream_got) => { + if (this.audioContext) { + const stream = stream_got; + const source = this.audioContext.createMediaStreamSource(stream); + this.record(stream); + this.buildAudioGraph(source); + this.visualize(); + } + }); + } + + record(source: MediaStream) { + let chunks = new Array<Blob>(); + const recordButton = $('record-btn'); + const clipSection = $('audio-file'); + this.mediaRecorder = new MediaRecorder(source); + + recordButton.onclick = () => { + if (!this.recordClicked) { + this.startRecord(); + } else { + this.stopRecord(); + } + }; + if (this.mediaRecorder) { + this.mediaRecorder.onstop = () => { + console.log('data available after MediaRecorder.stop() called.'); + + const clipContainer = document.createElement('article'); + const audio = document.createElement('audio'); + + audio.setAttribute('controls', ''); + clipContainer.appendChild(audio); + clipSection.appendChild(clipContainer); + + audio.controls = true; + const blob = new Blob(chunks, {'type': 'audio/ogg; codecs=opus'}); + chunks = new Array<Blob>(); + const audioURL = window.URL.createObjectURL(blob); + audio.src = audioURL; + this.testInputFeedback.set('audioUrl', audioURL); + console.log('recorder stopped'); + }; + + this.mediaRecorder.ondataavailable = (event: dataavailable) => { + chunks.push(event.data); + }; + } + } + + startRecord() { + if (this.mediaRecorder) { + const recordButton = $('record-btn'); + const clipSection = $('audio-file'); + this.recordClicked = true; + this.mediaRecorder.start(); + console.log(this.mediaRecorder.state); + console.log('recorder started'); + this.startTimer(); + recordButton.className = 'on-stop'; + recordButton.textContent = 'Stop'; + if (clipSection.firstChild) { + clipSection.removeChild(clipSection.firstChild); + } + } + } + + stopRecord() { + if (this.mediaRecorder) { + const recordButton = $('record-btn'); + this.recordClicked = false; + this.mediaRecorder.stop(); + this.stopTimer(); + console.log(this.mediaRecorder.state); + console.log('recorder stopped'); + recordButton.className = 'on-record'; + recordButton.textContent = 'Record'; + $('input-qs').hidden = false; + } + } + + startTimer() { + var startTime = Date.now(); + this.intervalId = setInterval(() => { + var delta = Date.now() - startTime; + $('counter').innerHTML = + String(Math.floor(delta / 1000)) + ':' + String(delta % 1000); + }); + } + + stopTimer() { + if (this.intervalId) { + clearInterval(this.intervalId); + $('counter').innerHTML = ''; + } + } + + setUpButtons() { + $('input-yes').addEventListener('click', () => { + this.testInputFeedback.set('Can Hear Clearly', 'true'); + }); + $('input-no').addEventListener('click', () => { + this.testInputFeedback.set('Can Hear Clearly', 'false'); + }); + } + + + static getInstance() { + if (instance === null) { + instance = new InputPage(); + } + return instance; + } +} + +let instance: InputPage|null = null; +declare let MediaRecorder: any; +type dataavailable = any;
diff --git a/chrome/browser/resources/chromeos/audio/page.ts b/chrome/browser/resources/chromeos/audio/page.ts index f4eb0ea..f0d6bb2 100644 --- a/chrome/browser/resources/chromeos/audio/page.ts +++ b/chrome/browser/resources/chromeos/audio/page.ts
@@ -8,12 +8,12 @@ this.visible = false; } - setVisible() { + showPage() { this.visible = true; $(this.pageName).hidden = false; } - setHidden() { + hidePage() { this.visible = false; $(this.pageName).hidden = true; } @@ -35,9 +35,9 @@ if (this.storedPages.has(pageName)) { let page: Page = this.storedPages.get(pageName) as Page; if (pageName != this.activePage?.pageName) { - page.setVisible(); + page.showPage(); history.pushState({}, '', ('#' + page.pageName)); - this.activePage?.setHidden(); + this.activePage?.hidePage(); this.activePage = page; } }
diff --git a/chrome/browser/resources/image_editor/OWNERS b/chrome/browser/resources/image_editor/OWNERS new file mode 100644 index 0000000..1745104 --- /dev/null +++ b/chrome/browser/resources/image_editor/OWNERS
@@ -0,0 +1 @@ +file://components/send_tab_to_self/OWNERS
diff --git a/chrome/browser/resources/image_editor/image_editor.html b/chrome/browser/resources/image_editor/image_editor.html new file mode 100644 index 0000000..59f7cd1 --- /dev/null +++ b/chrome/browser/resources/image_editor/image_editor.html
@@ -0,0 +1,12 @@ +<!doctype html> +<html dir="$i18n{textdirection}" lang="$i18n{language}"> +<head> + <meta charset="utf-8"> + <title>Screenshot Image Editor</title> +</head> +<body> + <pre id="content"> + Placeholder text + </pre> +</body> +</html>
diff --git a/chrome/browser/resources/read_later/side_panel/bookmarks_list.ts b/chrome/browser/resources/read_later/side_panel/bookmarks_list.ts index ebfb673..263272ff 100644 --- a/chrome/browser/resources/read_later/side_panel/bookmarks_list.ts +++ b/chrome/browser/resources/read_later/side_panel/bookmarks_list.ts
@@ -195,6 +195,9 @@ return; } + // Prevent arrow keys from causing scroll. + event.preventDefault(); + const allFolderElements: BookmarkFolderElement[] = Array.from(this.shadowRoot!.querySelectorAll('bookmark-folder'));
diff --git a/chrome/browser/resources/safe_browsing/README.md b/chrome/browser/resources/safe_browsing/README.md index 81b6a67..32bfbba7 100644 --- a/chrome/browser/resources/safe_browsing/README.md +++ b/chrome/browser/resources/safe_browsing/README.md
@@ -105,7 +105,7 @@ sure to specify values for all necessary settings. The `platform_settings` will override all of the `default_file_type`'s settings, and this may result in a change in behavior for `platform_settings` left unspecified. For - example, see [crbug.com/946558](https://crbug.com/956558#c5). + example, see [crbug.com/946558](https://crbug.com/946558#c5). * `platform_settings.danger_level`: (required) Controls how files should be handled by the UI in the absence of a better signal from the Safe Browsing
diff --git a/chrome/browser/resources/settings/chromeos/os_search_page/search_subpage.html b/chrome/browser/resources/settings/chromeos/os_search_page/search_subpage.html index 72d6919..b674ffb 100644 --- a/chrome/browser/resources/settings/chromeos/os_search_page/search_subpage.html +++ b/chrome/browser/resources/settings/chromeos/os_search_page/search_subpage.html
@@ -31,14 +31,16 @@ label="$i18n{quickAnswersDefinitionEnable}" deep-link-focus-id$="[[Setting.kQuickAnswersDefinition]]"> </settings-toggle-button> - <settings-toggle-button id="quick-answers-translation-enable" - class="hr subsection" - pref="{{prefs.settings.quick_answers.translation.enabled}}" - label="$i18n{quickAnswersTranslationEnable}" - sub-label-with-link="[[getAriaLabelledTranslationSubLabel_()]]" - on-sub-label-link-clicked="onSettingsLinkClick_" - deep-link-focus-id$="[[Setting.kQuickAnswersTranslation]]"> - </settings-toggle-button> + <template is="dom-if" if="[[!quickAnswersTranslationDisabled_]]" restamp> + <settings-toggle-button id="quick-answers-translation-enable" + class="hr subsection" + pref="{{prefs.settings.quick_answers.translation.enabled}}" + label="$i18n{quickAnswersTranslationEnable}" + sub-label-with-link="[[getAriaLabelledTranslationSubLabel_()]]" + on-sub-label-link-clicked="onSettingsLinkClick_" + deep-link-focus-id$="[[Setting.kQuickAnswersTranslation]]"> + </settings-toggle-button> + </template> <settings-toggle-button id="quick-answers-unit-conversion-enable" class="hr subsection" pref="{{prefs.settings.quick_answers.unit_conversion.enabled}}"
diff --git a/chrome/browser/resources/settings/chromeos/os_search_page/search_subpage.js b/chrome/browser/resources/settings/chromeos/os_search_page/search_subpage.js index 14bb846..6a294be 100644 --- a/chrome/browser/resources/settings/chromeos/os_search_page/search_subpage.js +++ b/chrome/browser/resources/settings/chromeos/os_search_page/search_subpage.js
@@ -58,6 +58,14 @@ chromeos.settings.mojom.Setting.kQuickAnswersUnitConversion, ]), }, + + /** @private */ + quickAnswersTranslationDisabled_: { + type: Boolean, + value() { + return loadTimeData.getBoolean('quickAnswersTranslationDisabled'); + }, + }, }, /**
diff --git a/chrome/browser/search/background/ntp_custom_background_service.h b/chrome/browser/search/background/ntp_custom_background_service.h index ba8babb2..63b77f5 100644 --- a/chrome/browser/search/background/ntp_custom_background_service.h +++ b/chrome/browser/search/background/ntp_custom_background_service.h
@@ -63,10 +63,11 @@ void RefreshBackgroundIfNeeded(); - absl::optional<CustomBackground> GetCustomBackground(); + // Virtual for testing. + virtual absl::optional<CustomBackground> GetCustomBackground(); // Adds/Removes NtpCustomBackgroundServiceObserver observers. - void AddObserver(NtpCustomBackgroundServiceObserver* observer); + virtual void AddObserver(NtpCustomBackgroundServiceObserver* observer); void RemoveObserver(NtpCustomBackgroundServiceObserver* observer); // Returns whether having a custom background is disabled by policy.
diff --git a/chrome/browser/sessions/session_service.cc b/chrome/browser/sessions/session_service.cc index 925734a..b2aae55 100644 --- a/chrome/browser/sessions/session_service.cc +++ b/chrome/browser/sessions/session_service.cc
@@ -33,6 +33,8 @@ #include "chrome/browser/ui/browser_list.h" #include "chrome/browser/ui/browser_tabstrip.h" #include "chrome/browser/ui/browser_window.h" +#include "chrome/browser/ui/session_crashed_bubble.h" +#include "chrome/browser/ui/startup/launch_mode_recorder.h" #include "chrome/browser/ui/startup/startup_browser_creator.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/browser/web_applications/components/web_app_helpers.h" @@ -415,6 +417,27 @@ urls_to_open); return true; } +#if BUILDFLAG(IS_CHROMEOS_ASH) + } else if (full_restore::features::IsFullRestoreEnabled() && + HasPendingUncleanExit(profile())) { + if (!browser) { + // If 'browser' is null, call StartupBrowserCreator to create a new + // browser instance. + StartupBrowserCreator browser_creator; + browser_creator.LaunchBrowser(*base::CommandLine::ForCurrentProcess(), + profile(), base::FilePath(), + chrome::startup::IS_PROCESS_STARTUP, + chrome::startup::IS_NOT_FIRST_RUN, + std::make_unique<LaunchModeRecorder>()); + return true; + } else { + // If 'browser' is not null, show the crash bubble in the current browser + // instance. + SessionCrashedBubble::ShowIfNotOffTheRecordProfile( + browser, /*skip_tab_checking=*/true); + AddLaunchedProfile(profile()); + } +#endif } return false; }
diff --git a/chrome/browser/sharing_hub/sharing_hub_model.cc b/chrome/browser/sharing_hub/sharing_hub_model.cc index f16ebd8..d4f074f8 100644 --- a/chrome/browser/sharing_hub/sharing_hub_model.cc +++ b/chrome/browser/sharing_hub/sharing_hub_model.cc
@@ -38,9 +38,6 @@ const char kUrlReplace[] = "%(escaped_url)"; const char kTitleReplace[] = "%(escaped_title)"; -const int kPopupWidthPx = 700; -const int kPopupHeightPx = 500; - gfx::Image DecodeIcon(std::string str) { std::string icon_str; base::Base64Decode(str, &icon_str); @@ -48,14 +45,6 @@ reinterpret_cast<const unsigned char*>(icon_str.data()), icon_str.size()); } -gfx::Rect GetSharePopupBounds(content::WebContents* web_contents) { - gfx::Rect bounds = web_contents->GetContainerBounds(); - bounds.set_x(bounds.top_center().x() - kPopupWidthPx / 2); - bounds.set_width(kPopupWidthPx); - bounds.set_height(kPopupHeightPx); - return bounds; -} - } // namespace SharingHubAction::SharingHubAction(int command_id, @@ -145,9 +134,8 @@ if (share_url.is_valid()) { NavigateParams params( Profile::FromBrowserContext(web_contents->GetBrowserContext()), - share_url, ui::PAGE_TRANSITION_AUTO_BOOKMARK); - params.disposition = WindowOpenDisposition::NEW_POPUP; - params.window_bounds = GetSharePopupBounds(web_contents); + share_url, ui::PAGE_TRANSITION_LINK); + params.disposition = WindowOpenDisposition::NEW_FOREGROUND_TAB; Navigate(¶ms); base::RecordAction( base::UserMetricsAction("SharingHubDesktop.ThirdPartyAppSelected"));
diff --git a/chrome/browser/signin/chrome_signin_client.cc b/chrome/browser/signin/chrome_signin_client.cc index 3de78fc1..251395e 100644 --- a/chrome/browser/signin/chrome_signin_client.cc +++ b/chrome/browser/signin/chrome_signin_client.cc
@@ -18,6 +18,7 @@ #include "chrome/browser/browser_process.h" #include "chrome/browser/content_settings/cookie_settings_factory.h" #include "chrome/browser/content_settings/host_content_settings_map_factory.h" +#include "chrome/browser/enterprise/util/managed_browser_utils.h" #include "chrome/browser/profiles/profile_attributes_entry.h" #include "chrome/browser/profiles/profile_attributes_storage.h" #include "chrome/browser/profiles/profile_manager.h" @@ -26,6 +27,7 @@ #include "chrome/browser/signin/chrome_device_id_helper.h" #include "chrome/browser/signin/force_signin_verifier.h" #include "chrome/browser/signin/identity_manager_factory.h" +#include "chrome/browser/signin/signin_features.h" #include "chrome/browser/signin/signin_util.h" #include "chrome/common/buildflags.h" #include "chrome/common/channel_info.h" @@ -93,6 +95,13 @@ if (signin_util::IsUserSignoutAllowedForProfile(profile)) return SigninClient::SignoutDecision::ALLOW_SIGNOUT; + auto* identity_manager = + IdentityManagerFactory::GetForProfileIfExists(profile); + if (identity_manager && + !identity_manager->HasPrimaryAccount(signin::ConsentLevel::kSync)) { + return SigninClient::SignoutDecision::ALLOW_SIGNOUT; + } + for (const auto& always_allowed_source : kAlwaysAllowedSignoutSources) { if (signout_source == always_allowed_source) return SigninClient::SignoutDecision::ALLOW_SIGNOUT; @@ -172,13 +181,19 @@ on_signout_decision_reached_ = std::move(on_signout_decision_reached); #if !defined(OS_ANDROID) && !BUILDFLAG(IS_CHROMEOS_ASH) - + // `signout_source_metric` is `signin_metrics::ABORT_SIGNIN` if the user + // declines sync in the signin process. In case the user accepts the managed + // account but declines sync, we should keep the window open. + bool user_declines_sync_after_consenting_to_management = + signout_source_metric == signin_metrics::ABORT_SIGNIN && + chrome::enterprise_util::UserAcceptedAccountManagement(profile_); // These sign out won't remove the policy cache, keep the window opened. bool keep_window_opened = signout_source_metric == signin_metrics::GOOGLE_SERVICE_NAME_PATTERN_CHANGED || signout_source_metric == signin_metrics::SERVER_FORCED_DISABLE || - signout_source_metric == signin_metrics::SIGNOUT_PREF_CHANGED; + signout_source_metric == signin_metrics::SIGNOUT_PREF_CHANGED || + user_declines_sync_after_consenting_to_management; if (signin_util::IsForceSigninEnabled() && !profile_->IsSystemProfile() && !profile_->IsGuestSession() && !profile_->IsSupervised() && !keep_window_opened) {
diff --git a/chrome/browser/signin/chrome_signin_client_unittest.cc b/chrome/browser/signin/chrome_signin_client_unittest.cc index 1d4ea762..069da05 100644 --- a/chrome/browser/signin/chrome_signin_client_unittest.cc +++ b/chrome/browser/signin/chrome_signin_client_unittest.cc
@@ -8,16 +8,30 @@ #include "base/bind.h" #include "base/cxx17_backports.h" +#include "base/feature_list.h" #include "base/notreached.h" #include "base/run_loop.h" #include "build/build_config.h" #include "build/chromeos_buildflags.h" +#include "chrome/browser/browser_process.h" +#include "chrome/browser/enterprise/util/managed_browser_utils.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/profiles/profile_attributes_entry.h" +#include "chrome/browser/profiles/profile_attributes_storage.h" +#include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/signin/chrome_signin_client_factory.h" +#include "chrome/browser/signin/identity_manager_factory.h" +#include "chrome/browser/signin/signin_features.h" #include "chrome/browser/signin/signin_util.h" #include "chrome/common/pref_names.h" #include "chrome/test/base/testing_browser_process.h" #include "chrome/test/base/testing_profile.h" +#include "chrome/test/base/testing_profile_manager.h" +#include "components/prefs/pref_service.h" +#include "components/signin/public/base/signin_pref_names.h" +#include "components/signin/public/identity_manager/consent_level.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "content/public/browser/network_service_instance.h" #include "content/public/test/browser_task_environment.h" #include "services/network/test/test_network_connection_tracker.h" @@ -215,11 +229,27 @@ class ChromeSigninClientSignoutSourceTest : public ::testing::WithParamInterface<signin_metrics::ProfileSignout>, - public ChromeSigninClientSignoutTest {}; + public ChromeSigninClientSignoutTest { + protected: + signin::IdentityTestEnvironment* identity_test_env() { + return &identity_test_env_; + } + + private: + signin::IdentityTestEnvironment identity_test_env_; +}; // Returns true if signout can be disallowed by policy for the given source. bool IsSignoutDisallowedByPolicy( + Profile* profile, signin_metrics::ProfileSignout signout_source) { + auto* identity_manager = + IdentityManagerFactory::GetForProfileIfExists(profile); + if (identity_manager && + !identity_manager->HasPrimaryAccount(signin::ConsentLevel::kSync)) { + return false; + } + switch (signout_source) { // NOTE: SIGNOUT_TEST == SIGNOUT_PREF_CHANGED. case signin_metrics::ProfileSignout::SIGNOUT_PREF_CHANGED: @@ -301,7 +331,67 @@ // Verify IdentityManager gets callback indicating sign-out is disallowed iff // the source of the sign-out is a user-action. SigninClient::SignoutDecision signout_decision = - IsSignoutDisallowedByPolicy(signout_source) + IsSignoutDisallowedByPolicy(profile.get(), signout_source) + ? SigninClient::SignoutDecision::DISALLOW_SIGNOUT + : SigninClient::SignoutDecision::ALLOW_SIGNOUT; + signin_metrics::SignoutDelete delete_metric = + signin_metrics::SignoutDelete::kIgnoreMetric; + EXPECT_CALL(*client_, + SignOutCallback(signout_source, delete_metric, signout_decision)) + .Times(1); + + PreSignOut(signout_source, delete_metric); +} + +TEST_P(ChromeSigninClientSignoutSourceTest, UserSignoutDisallowedWithSync) { + signin_metrics::ProfileSignout signout_source = GetParam(); + + TestingProfile::Builder builder; + builder.SetGuestSession(); + std::unique_ptr<TestingProfile> profile = builder.Build(); + + CreateClient(profile.get()); + + ASSERT_TRUE(signin_util::IsUserSignoutAllowedForProfile(profile.get())); + signin_util::SetUserSignoutAllowedForProfile(profile.get(), false); + ASSERT_FALSE(signin_util::IsUserSignoutAllowedForProfile(profile.get())); + + // Verify IdentityManager gets callback indicating sign-out is disallowed iff + // the source of the sign-out is a user-action. + SigninClient::SignoutDecision signout_decision = + IsSignoutDisallowedByPolicy(profile.get(), signout_source) + ? SigninClient::SignoutDecision::DISALLOW_SIGNOUT + : SigninClient::SignoutDecision::ALLOW_SIGNOUT; + signin_metrics::SignoutDelete delete_metric = + signin_metrics::SignoutDelete::kIgnoreMetric; + identity_test_env()->MakePrimaryAccountAvailable("bob@example.com", + signin::ConsentLevel::kSync); + EXPECT_CALL(*client_, + SignOutCallback(signout_source, delete_metric, signout_decision)) + .Times(1); + + PreSignOut(signout_source, delete_metric); +} + +TEST_P(ChromeSigninClientSignoutSourceTest, + UserSignoutDisallowedAccountManagementAccepted) { + base::test::ScopedFeatureList features(kAccountPoliciesLoadedWithoutSync); + signin_metrics::ProfileSignout signout_source = GetParam(); + + TestingProfile::Builder builder; + builder.SetGuestSession(); + std::unique_ptr<TestingProfile> profile = builder.Build(); + + CreateClient(profile.get()); + + ASSERT_TRUE(signin_util::IsUserSignoutAllowedForProfile(profile.get())); + signin_util::SetUserSignoutAllowedForProfile(profile.get(), false); + ASSERT_FALSE(signin_util::IsUserSignoutAllowedForProfile(profile.get())); + + // Verify IdentityManager gets callback indicating sign-out is disallowed iff + // the source of the sign-out is a user-action. + SigninClient::SignoutDecision signout_decision = + IsSignoutDisallowedByPolicy(profile.get(), signout_source) ? SigninClient::SignoutDecision::DISALLOW_SIGNOUT : SigninClient::SignoutDecision::ALLOW_SIGNOUT; signin_metrics::SignoutDelete delete_metric =
diff --git a/chrome/browser/signin/dice_web_signin_interceptor.cc b/chrome/browser/signin/dice_web_signin_interceptor.cc index 5d6d6b19..dc62900 100644 --- a/chrome/browser/signin/dice_web_signin_interceptor.cc +++ b/chrome/browser/signin/dice_web_signin_interceptor.cc
@@ -16,6 +16,7 @@ #include "base/threading/thread_task_runner_handle.h" #include "base/time/time.h" #include "chrome/browser/browser_process.h" +#include "chrome/browser/enterprise/util/managed_browser_utils.h" #include "chrome/browser/password_manager/chrome_password_manager_client.h" #include "chrome/browser/policy/profile_policy_connector.h" #include "chrome/browser/profiles/profile_attributes_entry.h" @@ -52,7 +53,6 @@ #include "components/prefs/pref_service.h" #include "components/prefs/scoped_user_pref_update.h" #include "components/signin/public/base/signin_metrics.h" -#include "components/signin/public/base/signin_pref_names.h" #include "components/signin/public/identity_manager/accounts_mutator.h" #include "components/signin/public/identity_manager/identity_manager.h" #include "google_apis/gaia/gaia_auth_util.h" @@ -363,8 +363,7 @@ if (!new_account_interception_ && primary_core_account_info.account_id == intercepted_account_info.account_id) { return base::FeatureList::IsEnabled(kAccountPoliciesLoadedWithoutSync) && - !profile_->GetPrefs()->GetBoolean( - prefs::kUserAcceptedAccountManagement); + !chrome::enterprise_util::UserAcceptedAccountManagement(profile_); } std::string account_restriction = @@ -599,8 +598,10 @@ base::TimeTicks::Now() - profile_creation_start_time_); } - new_profile->GetPrefs()->SetBoolean(prefs::kUserAcceptedAccountManagement, - intercepted_account_management_accepted_); + if (base::FeatureList::IsEnabled(kAccountPoliciesLoadedWithoutSync)) { + chrome::enterprise_util::SetUserAcceptedAccountManagement( + new_profile, intercepted_account_management_accepted_); + } // Work is done in this profile, the flow continues in the // DiceWebSigninInterceptor that is attached to the new profile. @@ -615,6 +616,7 @@ const AccountInfo& account_info, SkColor profile_color, SigninInterceptionResult create) { + DCHECK(base::FeatureList::IsEnabled(kAccountPoliciesLoadedWithoutSync)); if (create == SigninInterceptionResult::kAccepted) { intercepted_account_management_accepted_ = true; // In case of a reauth if there was no consent for management, do not create @@ -622,9 +624,8 @@ if (!new_account_interception_ && GetPrimaryAccountInfo(identity_manager_).account_id == account_info.account_id) { - profile_->GetPrefs()->SetBoolean( - prefs::kUserAcceptedAccountManagement, - intercepted_account_management_accepted_); + chrome::enterprise_util::SetUserAcceptedAccountManagement( + profile_, intercepted_account_management_accepted_); } else { OnProfileCreationChoice(account_info, profile_color, SigninInterceptionResult::kAccepted);
diff --git a/chrome/browser/signin/dice_web_signin_interceptor_browsertest.cc b/chrome/browser/signin/dice_web_signin_interceptor_browsertest.cc index 7e5a7404..9784709 100644 --- a/chrome/browser/signin/dice_web_signin_interceptor_browsertest.cc +++ b/chrome/browser/signin/dice_web_signin_interceptor_browsertest.cc
@@ -14,6 +14,7 @@ #include "base/test/metrics/histogram_tester.h" #include "base/threading/thread_task_runner_handle.h" #include "chrome/browser/browser_process.h" +#include "chrome/browser/enterprise/util/managed_browser_utils.h" #include "chrome/browser/profiles/profile_attributes_entry.h" #include "chrome/browser/profiles/profile_attributes_init_params.h" #include "chrome/browser/profiles/profile_attributes_storage.h" @@ -369,100 +370,6 @@ EXPECT_EQ(source_interceptor_delegate->customized_browser(), nullptr); } -// Tests the complete interception flow including profile and browser creation. -IN_PROC_BROWSER_TEST_F(DiceWebSigninInterceptorBrowserTest, - ForcedEnterpriseInterceptionTest) { - base::HistogramTester histogram_tester; - AccountInfo account_info = - identity_test_env()->MakeAccountAvailable("alice@example.com"); - // Fill the account info, in particular for the hosted_domain field. - account_info.full_name = "fullname"; - account_info.given_name = "givenname"; - account_info.hosted_domain = "example.com"; - account_info.locale = "en"; - account_info.picture_url = "https://example.com"; - DCHECK(account_info.IsValid()); - identity_test_env()->UpdateAccountInfoForAccount(account_info); - - // Enforce enterprise profile sepatation. - profile()->GetPrefs()->SetString(prefs::kManagedAccountsSigninRestriction, - "primary_account_strict"); - - // Instantly return from Gaia calls, to avoid timing out when injecting the - // account in the new profile. - network::TestURLLoaderFactory* loader_factory = test_url_loader_factory(); - loader_factory->SetInterceptor(base::BindLambdaForTesting( - [loader_factory](const network::ResourceRequest& request) { - std::string path = request.url.path(); - if (path == "/ListAccounts" || path == "/GetCheckConnectionInfo") { - loader_factory->AddResponse(request.url.spec(), std::string()); - return; - } - if (path == "/oauth/multilogin") { - loader_factory->AddResponse(request.url.spec(), - kMultiloginSuccessResponse); - return; - } - })); - - // Add a tab. - GURL intercepted_url = embedded_test_server()->GetURL("/defaultresponse"); - content::WebContents* web_contents = AddTab(intercepted_url); - int original_tab_count = browser()->tab_strip_model()->count(); - - // Do the signin interception. - EXPECT_EQ(BrowserList::GetInstance()->size(), 1u); - FakeDiceWebSigninInterceptorDelegate* source_interceptor_delegate = - GetInterceptorDelegate(profile()); - source_interceptor_delegate->set_expected_interception_type( - DiceWebSigninInterceptor::SigninInterceptionType::kEnterpriseForced); - Profile* new_profile = - InterceptAndWaitProfileCreation(web_contents, account_info.account_id); - EXPECT_TRUE(new_profile->GetPrefs()->GetBoolean( - prefs::kUserAcceptedAccountManagement)); - ASSERT_TRUE(new_profile); - EXPECT_TRUE(source_interceptor_delegate->intercept_bubble_shown()); - signin::IdentityManager* new_identity_manager = - IdentityManagerFactory::GetForProfile(new_profile); - EXPECT_TRUE(new_identity_manager->HasAccountWithRefreshToken( - account_info.account_id)); - - IdentityTestEnvironmentProfileAdaptor adaptor(new_profile); - adaptor.identity_test_env()->SetAutomaticIssueOfAccessTokens(true); - - // Check the profile name. - ProfileAttributesStorage& storage = - g_browser_process->profile_manager()->GetProfileAttributesStorage(); - ProfileAttributesEntry* entry = - storage.GetProfileAttributesWithPath(new_profile->GetPath()); - ASSERT_TRUE(entry); - EXPECT_EQ("example.com", base::UTF16ToUTF8(entry->GetLocalProfileName())); - // Check the profile color. - EXPECT_TRUE(ThemeServiceFactory::GetForProfile(new_profile) - ->UsingAutogeneratedTheme()); - - // A browser has been created for the new profile and the tab was moved there. - Browser* added_browser = ui_test_utils::WaitForBrowserToOpen(); - ASSERT_TRUE(added_browser); - ASSERT_EQ(BrowserList::GetInstance()->size(), 2u); - EXPECT_EQ(added_browser->profile(), new_profile); - EXPECT_EQ(browser()->tab_strip_model()->count(), original_tab_count - 1); - EXPECT_EQ(added_browser->tab_strip_model()->GetActiveWebContents()->GetURL(), - intercepted_url); - - CheckHistograms( - histogram_tester, - SigninInterceptionHeuristicOutcome::kInterceptEnterpriseForced); - // Interception bubble is destroyed in the source profile, and was not shown - // in the new profile. - FakeDiceWebSigninInterceptorDelegate* new_interceptor_delegate = - GetInterceptorDelegate(new_profile); - - // Profile customization UI was shown exactly once in the new profile. - EXPECT_EQ(new_interceptor_delegate->customized_browser(), added_browser); - EXPECT_EQ(source_interceptor_delegate->customized_browser(), nullptr); -} - // Tests the complete profile switch flow when the profile is not loaded. IN_PROC_BROWSER_TEST_F(DiceWebSigninInterceptorBrowserTest, SwitchAndLoad) { base::HistogramTester histogram_tester; @@ -654,10 +561,10 @@ GURL("chrome://newtab/")); } -class DiceWebSigninInterceptorEnterpriseSwitchBrowserTest +class DiceWebSigninInterceptorEnterpriseBrowserTest : public DiceWebSigninInterceptorBrowserTest { public: - DiceWebSigninInterceptorEnterpriseSwitchBrowserTest() { + DiceWebSigninInterceptorEnterpriseBrowserTest() { enterprise_feature_list_.InitAndEnableFeature( kAccountPoliciesLoadedWithoutSync); } @@ -666,8 +573,102 @@ base::test::ScopedFeatureList enterprise_feature_list_; }; +// Tests the complete interception flow including profile and browser creation. +IN_PROC_BROWSER_TEST_F(DiceWebSigninInterceptorEnterpriseBrowserTest, + ForcedEnterpriseInterceptionTest) { + base::HistogramTester histogram_tester; + AccountInfo account_info = + identity_test_env()->MakeAccountAvailable("alice@example.com"); + // Fill the account info, in particular for the hosted_domain field. + account_info.full_name = "fullname"; + account_info.given_name = "givenname"; + account_info.hosted_domain = "example.com"; + account_info.locale = "en"; + account_info.picture_url = "https://example.com"; + DCHECK(account_info.IsValid()); + identity_test_env()->UpdateAccountInfoForAccount(account_info); + + // Enforce enterprise profile sepatation. + profile()->GetPrefs()->SetString(prefs::kManagedAccountsSigninRestriction, + "primary_account_strict"); + + // Instantly return from Gaia calls, to avoid timing out when injecting the + // account in the new profile. + network::TestURLLoaderFactory* loader_factory = test_url_loader_factory(); + loader_factory->SetInterceptor(base::BindLambdaForTesting( + [loader_factory](const network::ResourceRequest& request) { + std::string path = request.url.path(); + if (path == "/ListAccounts" || path == "/GetCheckConnectionInfo") { + loader_factory->AddResponse(request.url.spec(), std::string()); + return; + } + if (path == "/oauth/multilogin") { + loader_factory->AddResponse(request.url.spec(), + kMultiloginSuccessResponse); + return; + } + })); + + // Add a tab. + GURL intercepted_url = embedded_test_server()->GetURL("/defaultresponse"); + content::WebContents* web_contents = AddTab(intercepted_url); + int original_tab_count = browser()->tab_strip_model()->count(); + + // Do the signin interception. + EXPECT_EQ(BrowserList::GetInstance()->size(), 1u); + FakeDiceWebSigninInterceptorDelegate* source_interceptor_delegate = + GetInterceptorDelegate(profile()); + source_interceptor_delegate->set_expected_interception_type( + DiceWebSigninInterceptor::SigninInterceptionType::kEnterpriseForced); + Profile* new_profile = + InterceptAndWaitProfileCreation(web_contents, account_info.account_id); + EXPECT_TRUE( + chrome::enterprise_util::UserAcceptedAccountManagement(new_profile)); + ASSERT_TRUE(new_profile); + EXPECT_TRUE(source_interceptor_delegate->intercept_bubble_shown()); + signin::IdentityManager* new_identity_manager = + IdentityManagerFactory::GetForProfile(new_profile); + EXPECT_TRUE(new_identity_manager->HasAccountWithRefreshToken( + account_info.account_id)); + + IdentityTestEnvironmentProfileAdaptor adaptor(new_profile); + adaptor.identity_test_env()->SetAutomaticIssueOfAccessTokens(true); + + // Check the profile name. + ProfileAttributesStorage& storage = + g_browser_process->profile_manager()->GetProfileAttributesStorage(); + ProfileAttributesEntry* entry = + storage.GetProfileAttributesWithPath(new_profile->GetPath()); + ASSERT_TRUE(entry); + EXPECT_EQ("example.com", base::UTF16ToUTF8(entry->GetLocalProfileName())); + // Check the profile color. + EXPECT_TRUE(ThemeServiceFactory::GetForProfile(new_profile) + ->UsingAutogeneratedTheme()); + + // A browser has been created for the new profile and the tab was moved there. + Browser* added_browser = ui_test_utils::WaitForBrowserToOpen(); + ASSERT_TRUE(added_browser); + ASSERT_EQ(BrowserList::GetInstance()->size(), 2u); + EXPECT_EQ(added_browser->profile(), new_profile); + EXPECT_EQ(browser()->tab_strip_model()->count(), original_tab_count - 1); + EXPECT_EQ(added_browser->tab_strip_model()->GetActiveWebContents()->GetURL(), + intercepted_url); + + CheckHistograms( + histogram_tester, + SigninInterceptionHeuristicOutcome::kInterceptEnterpriseForced); + // Interception bubble is destroyed in the source profile, and was not shown + // in the new profile. + FakeDiceWebSigninInterceptorDelegate* new_interceptor_delegate = + GetInterceptorDelegate(new_profile); + + // Profile customization UI was shown exactly once in the new profile. + EXPECT_EQ(new_interceptor_delegate->customized_browser(), added_browser); + EXPECT_EQ(source_interceptor_delegate->customized_browser(), nullptr); +} + // Tests the complete profile switch flow when the profile is not loaded. -IN_PROC_BROWSER_TEST_F(DiceWebSigninInterceptorEnterpriseSwitchBrowserTest, +IN_PROC_BROWSER_TEST_F(DiceWebSigninInterceptorEnterpriseBrowserTest, EnterpriseSwitchAndLoad) { base::HistogramTester histogram_tester; // Enforce enterprise profile sepatation. @@ -750,7 +751,7 @@ } // Tests the complete profile switch flow when the profile is already loaded. -IN_PROC_BROWSER_TEST_F(DiceWebSigninInterceptorEnterpriseSwitchBrowserTest, +IN_PROC_BROWSER_TEST_F(DiceWebSigninInterceptorEnterpriseBrowserTest, EnterpriseSwitchAlreadyOpen) { base::HistogramTester histogram_tester; // Enforce enterprise profile sepatation.
diff --git a/chrome/browser/signin/dice_web_signin_interceptor_unittest.cc b/chrome/browser/signin/dice_web_signin_interceptor_unittest.cc index 5b5727e..fe607383 100644 --- a/chrome/browser/signin/dice_web_signin_interceptor_unittest.cc +++ b/chrome/browser/signin/dice_web_signin_interceptor_unittest.cc
@@ -390,8 +390,11 @@ EXPECT_TRUE(interceptor()->ShouldEnforceEnterpriseProfileSeparation( primary_account_info)); - profile()->GetPrefs()->SetBoolean(prefs::kUserAcceptedAccountManagement, - true); + ProfileAttributesEntry* entry = + profile_attributes_storage()->GetProfileAttributesWithPath( + profile()->GetPath()); + entry->SetUserAcceptedAccountManagement(true); + EXPECT_FALSE(interceptor()->ShouldEnforceEnterpriseProfileSeparation( primary_account_info)); }
diff --git a/chrome/browser/signin/identity_manager_factory.cc b/chrome/browser/signin/identity_manager_factory.cc index 174cb2d..e0bdbf9 100644 --- a/chrome/browser/signin/identity_manager_factory.cc +++ b/chrome/browser/signin/identity_manager_factory.cc
@@ -7,6 +7,7 @@ #include <memory> #include <utility> +#include "base/feature_list.h" #include "base/files/file_path.h" #include "build/build_config.h" #include "build/chromeos_buildflags.h" @@ -16,6 +17,7 @@ #include "chrome/browser/signin/account_consistency_mode_manager.h" #include "chrome/browser/signin/chrome_signin_client_factory.h" #include "chrome/browser/signin/identity_manager_provider.h" +#include "chrome/browser/signin/signin_features.h" #include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/keyed_service/core/keyed_service.h" #include "components/pref_registry/pref_registry_syncable.h" @@ -41,6 +43,8 @@ #if BUILDFLAG(IS_CHROMEOS_LACROS) #include "chrome/browser/account_manager_facade_factory.h" +#include "chrome/browser/lacros/account_manager/profile_account_manager.h" +#include "chrome/browser/lacros/account_manager/profile_account_manager_factory.h" #endif #if defined(OS_WIN) @@ -60,8 +64,11 @@ #if !defined(OS_ANDROID) DependsOn(WebDataServiceFactory::GetInstance()); #endif +#if BUILDFLAG(IS_CHROMEOS_LACROS) + if (base::FeatureList::IsEnabled(kMultiProfileAccountConsistency)) + DependsOn(ProfileAccountManagerFactory::GetInstance()); +#endif DependsOn(ChromeSigninClientFactory::GetInstance()); - signin::SetIdentityManagerProvider( base::BindRepeating([](content::BrowserContext* context) { return GetForProfile(Profile::FromBrowserContext(context)); @@ -142,7 +149,9 @@ #if BUILDFLAG(IS_CHROMEOS_LACROS) params.account_manager_facade = - GetAccountManagerFacade(profile->GetPath().value()); + base::FeatureList::IsEnabled(kMultiProfileAccountConsistency) + ? ProfileAccountManagerFactory::GetForProfile(profile) + : GetAccountManagerFacade(profile->GetPath().value()); // Lacros runs inside a user session and is not used to render Chrome OS's // Login Screen, or its Lock Screen. Hence, all Profiles in Lacros are regular // Profiles.
diff --git a/chrome/browser/themes/theme_service.h b/chrome/browser/themes/theme_service.h index 30e11bcd..6440201 100644 --- a/chrome/browser/themes/theme_service.h +++ b/chrome/browser/themes/theme_service.h
@@ -162,7 +162,8 @@ std::unique_ptr<ThemeService::ThemeReinstaller> BuildReinstallerForCurrentTheme(); - void AddObserver(ThemeServiceObserver* observer); + // Virtual for testing. + virtual void AddObserver(ThemeServiceObserver* observer); void RemoveObserver(ThemeServiceObserver* observer);
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index 65664f4..bab9ce1 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -1415,6 +1415,8 @@ "webui/history_clusters/history_clusters_handler.h", "webui/identity_internals_ui.cc", "webui/identity_internals_ui.h", + "webui/image_editor/image_editor_ui.cc", + "webui/image_editor/image_editor_ui.h", "webui/inspect_ui.cc", "webui/inspect_ui.h", "webui/internals/user_education/user_education_internals_page_handler_impl.cc",
diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java index ab182d0..c97c869 100644 --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java
@@ -1014,9 +1014,14 @@ } private boolean shouldShowLensButton() { + // When this method is called on UI inflation, return false as the native is not ready. + if (!mNativeInitialized) { + return false; + } + // When this method is called after native initialized, check omnibox conditions and Lens + // eligibility. if (mIsTablet && mShouldShowButtonsWhenUnfocused) { - return mNativeInitialized && (mUrlHasFocus || mIsUrlFocusChangeInProgress) - && isLensOnOmniboxEnabled(); + return (mUrlHasFocus || mIsUrlFocusChangeInProgress) && isLensOnOmniboxEnabled(); } return !shouldShowDeleteButton() && (mUrlHasFocus || mIsUrlFocusChangeInProgress || mUrlFocusChangeFraction > 0f
diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/status/StatusCoordinator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/status/StatusCoordinator.java index 2ee4eaa..9bf89a0c 100644 --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/status/StatusCoordinator.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/status/StatusCoordinator.java
@@ -19,6 +19,7 @@ import org.chromium.chrome.browser.omnibox.R; import org.chromium.chrome.browser.omnibox.SearchEngineLogoUtils; import org.chromium.chrome.browser.omnibox.UrlBarEditingTextStateProvider; +import org.chromium.chrome.browser.preferences.ChromePreferenceKeys; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tabmodel.IncognitoStateProvider; @@ -28,8 +29,10 @@ import org.chromium.components.embedder_support.util.UrlConstants; import org.chromium.components.feature_engagement.FeatureConstants; import org.chromium.components.permissions.PermissionDialogController; +import org.chromium.components.prefs.PrefService; import org.chromium.components.search_engines.TemplateUrlService; import org.chromium.components.security_state.ConnectionSecurityLevel; +import org.chromium.components.user_prefs.UserPrefs; import org.chromium.ui.base.WindowAndroid; import org.chromium.ui.modaldialog.ModalDialogManager; import org.chromium.ui.modelutil.PropertyModel; @@ -55,6 +58,7 @@ private final PropertyModel mModel; private final boolean mIsTablet; private final Supplier<ModalDialogManager> mModalDialogManagerSupplier; + private final Supplier<Profile> mProfileSupplier; private final PageInfoAction mPageInfoAction; private final UserEducationHelper mUserEducationHelper; private LocationBarDataProvider mLocationBarDataProvider; @@ -89,6 +93,7 @@ mIsTablet = isTablet; mStatusView = statusView; mModalDialogManagerSupplier = modalDialogManagerSupplier; + mProfileSupplier = profileSupplier; mLocationBarDataProvider = locationBarDataProvider; mPageInfoAction = pageInfoAction; mUserEducationHelper = userEducationHelper; @@ -192,13 +197,26 @@ && mLocationBarDataProvider.getTab() != null && UrlConstants.HTTPS_SCHEME.equals( mLocationBarDataProvider.getTab().getUrl().getScheme())) { - mUserEducationHelper.requestShowIPH( - new IPHCommandBuilder(mStatusView.getContext().getResources(), + // Also check lock icon enterprise policy. + boolean useLockIconEnabled = false; + if (mProfileSupplier.get() != null) { + PrefService prefService = UserPrefs.get(mProfileSupplier.get()); + if (prefService.isManagedPreference( + ChromePreferenceKeys.LOCK_ICON_IN_ADDRESS_BAR_ENABLED)) { + useLockIconEnabled = prefService.getBoolean( + ChromePreferenceKeys.LOCK_ICON_IN_ADDRESS_BAR_ENABLED); + } + if (!useLockIconEnabled) { + mUserEducationHelper.requestShowIPH(new IPHCommandBuilder( + mStatusView.getContext().getResources(), FeatureConstants.IPH_UPDATED_CONNECTION_SECURITY_INDICATORS_FEATURE, R.string.iph_updated_connection_security_indicators, R.string.iph_updated_connection_security_indicators) - .setAnchorView(getSecurityIconView()) - .build()); + .setAnchorView( + getSecurityIconView()) + .build()); + } + } } }
diff --git a/chrome/browser/ui/android/passwords/manual_filling_view_android.cc b/chrome/browser/ui/android/passwords/manual_filling_view_android.cc index e5de3ac..8dbb43e 100644 --- a/chrome/browser/ui/android/passwords/manual_filling_view_android.cc +++ b/chrome/browser/ui/android/passwords/manual_filling_view_android.cc
@@ -31,6 +31,7 @@ #include "content/public/browser/web_contents.h" #include "ui/android/view_android.h" #include "ui/android/window_android.h" +#include "url/android/gurl_android.h" using autofill::AccessorySheetData; using autofill::AccessorySheetField; @@ -182,7 +183,8 @@ Java_ManualFillingComponentBridge_addUserInfoToAccessorySheetData( env, java_object_internal_, j_tab_data, ConvertUTF8ToJavaString(env, user_info.origin()), - user_info.is_psl_match().value()); + user_info.is_psl_match().value(), + url::GURLAndroid::FromNativeGURL(env, user_info.icon_url())); for (const AccessorySheetField& field : user_info.fields()) { Java_ManualFillingComponentBridge_addFieldToUserInfo( env, java_object_internal_, j_user_info,
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb index d7e5a70c..59b622b 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb
@@ -181,6 +181,7 @@ <translation id="2158408438301413340">Chrome ሁሉንም የይለፍ ቃላት ማረጋገጥ አልቻለም</translation> <translation id="2169830938017475061">አሁን</translation> <translation id="2172688499998841696">የምስል መግለጫዎች ጠፍተዋል</translation> +<translation id="2172905120685242547">መስኮት ይዘጋ?</translation> <translation id="2175927920773552910">የQR ኮድ</translation> <translation id="218608176142494674">ማጋራት</translation> <translation id="2195339740518523951">የChromeን በጣም ጠንካራ ደህንነት ያግኙ</translation> @@ -280,6 +281,7 @@ <translation id="2779651927720337254">አልተሳካም</translation> <translation id="2781151931089541271">1 ሰከንድ ይቀራል</translation> <translation id="2788468313014644040">የቡድን ቁጥር</translation> +<translation id="2800066122460699237">ትር <ph name="TAB_TITLE" /> ይዘጋል</translation> <translation id="2801022321632964776">ቋንቋዎን በቅርብ ጊዜው የChrome ስሪት ለማግኘት ያዘምኑ</translation> <translation id="2805756323405976993">መተግበሪያዎች</translation> <translation id="2806840421670364300">FLoC</translation> @@ -288,6 +290,7 @@ <translation id="2827278682606527653">የምግብ ካርድ ምናሌ በግማሽ ቁመት</translation> <translation id="2830783625999891985">የቅንጥብ ሰሌዳ ይዘቶች ተደብቀዋል</translation> <translation id="2839327205551510876"><ph name="SITE_NAME" /> መከተል ቆሟል</translation> +<translation id="2840810876587895427">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> ማንነት የማያሳውቅ ትር ይዘጋል}one{<ph name="TAB_COUNT_MANY" /> ማንነት የማያሳውቁ ትሮች ይዘጋሉ}other{<ph name="TAB_COUNT_MANY" /> ማንነት የማያሳውቁ ትሮች ይዘጋሉ}}</translation> <translation id="2841216154655874070">{NUM_DAYS,plural, =1{ከ1 ቀን በፊት ተፈትሿል}one{ከ# ቀኖች በፊት ተፈትሿል}other{ከ# ቀኖች በፊት ተፈትሿል}}</translation> <translation id="2842985007712546952">ወላጅ አቃፊ</translation> <translation id="2856503607207334158">በመለያ መግባት ተሰናክሏል</translation> @@ -673,6 +676,7 @@ <translation id="5222676887888702881">ዘግተህ ውጣ</translation> <translation id="5227554086496586518">የፍለጋ ውጤቶችን ለማየት መታ ያድርጉ</translation> <translation id="5233638681132016545">አዲስ ትር</translation> +<translation id="5235196193381275927">መግባት ላይ የሆነ ችግር ተፈጥሯል</translation> <translation id="5246093389635966745">የመሳሪያ አሞሌ አቋራጭን ያርትዑ</translation> <translation id="5250483651202458397">ቅጽበታዊ ገጽ እይታ። ለመዝጋት መታ ያድርጉ።</translation> <translation id="5262378156578470238">ይህ አውርድ በ<ph name="DATE" /> ላይ ሲጀመር ማሳወቂያ ያያሉ።</translation> @@ -896,6 +900,7 @@ <translation id="6541983376925655882">{NUM_HOURS,plural, =1{ከ1 ሰዓት በፊት ተፈትሿል}one{ከ# ሰዓቶች በፊት ተፈትሿል}other{ከ# ሰዓቶች በፊት ተፈትሿል}}</translation> <translation id="6545017243486555795">ሁሉንም ውሂብ አጽዳ</translation> <translation id="6546511553472444032">ፋይል ጎጂ ሊሆን ይችላል</translation> +<translation id="6556542240154580383">{TAB_COUNT,plural, =1{<ph name="TAB_TITLE" /> እና <ph name="TAB_COUNT_ONE" /> ተጨማሪ ትር ይዘጋል}one{<ph name="TAB_TITLE" /> እና <ph name="TAB_COUNT_MANY" /> ተጨማሪ ትሮች ይዘጋሉ}other{<ph name="TAB_TITLE" /> እና <ph name="TAB_COUNT_MANY" /> ተጨማሪ ትሮች ይዘጋሉ}}</translation> <translation id="6560414384669816528">ከSogou ጋር ይፈልጉ</translation> <translation id="656065428026159829">ተጨማሪ ይመልከቱ</translation> <translation id="6565959834589222080">Wi-Fi የሚገኝ ሲሆን ስራ ላይ ይውላል</translation> @@ -936,6 +941,7 @@ <translation id="6767294960381293877">በግማሽ ቁመቱ ላይ የተከፈተ ትር የሚጋሩ የመሣሪያዎች ዝርዝር።</translation> <translation id="6783942555455976443">ይህን ገጽ ለበኋላ ያስቀምጡ እና አስታዋሽ ያግኙ</translation> <translation id="6795633245022906657">አዲስ ትር በፍጥነት ይክፈቱ። ይህን አቋራጭ ለማርትዕ ወደ ቅንብሮች ይሂዱ።</translation> +<translation id="6802555630140434547">መስኮቱ ይዘጋል</translation> <translation id="6811034713472274749">ገጽ ለመመልከት ዝግጁ ነው</translation> <translation id="6813446258015311409">ወደ Chrome መግባት፣ ተከፍቷል።</translation> <translation id="6817747507826986771">ይህንን ገጽ በፍጥነት ያጋሩ ይህን አቋራጭ ለማርትዕ ነክተው ይያዙ።</translation> @@ -1163,6 +1169,7 @@ <translation id="8109613176066109935">የእርስዎን ዕልባቶች በሁሉም መሣሪያዎችዎ ላይ ስምረትን ማብራት ለማግኘት</translation> <translation id="8110087112193408731">በዲጂታል ብቁ መሆን ውስጥ የChrome እንቅስቃሴዎ ይታይ?</translation> <translation id="8127542551745560481">መነሻ ገጽን ያርትዑ</translation> +<translation id="8130309322784422030">የተከማቸው የመግቢያ መረጃዎ ጊዜው ያለፈበት ሊሆን ይችላል</translation> <translation id="813082847718468539">የጣቢያ መረጃን ይመልከቱ</translation> <translation id="8137558756159375272">ፍለጋ ላይ መንካት የተመረጠ ቃልን እና አሁን ያለውን ገጽ ወደ Google ፍለጋ ይልካል። በ<ph name="BEGIN_LINK" />ቅንብሮች<ph name="END_LINK" /> ውስጥ ሊያጠፉት ይችላሉ።</translation> <translation id="8153351135626613369">ረዳት እርስዎን በሚደገፉ ድር ጣቢያዎች ላይ ማገዝ እንደሚችል ሲያውቅ ይመጣል</translation> @@ -1293,6 +1300,7 @@ <translation id="8945143127965743188"><ph name="LANG" /> - ይህ ቋንቋ ሊወርድ አልቻለም ቆይተው እንደገና ይሞክሩ።</translation> <translation id="8951232171465285730">Chrome <ph name="MEGABYTES" /> ሜባ ቆጥቦልዎታል</translation> <translation id="8965591936373831584">በመጠበቅ ላይ</translation> +<translation id="8968085728801125376">{TAB_COUNT,plural, =1{<ph name="INCOGNITO_TAB_COUNT" /> ማንነትን የማያሳውቅ እና <ph name="TAB_COUNT_ONE" /> ተጨማሪ ትር ይዘጋል}one{<ph name="INCOGNITO_TAB_COUNT" /> ማንነትን የማያሳውቅ እና <ph name="TAB_COUNT_MANY" /> ተጨማሪ ትሮች ይዘጋሉ}other{<ph name="INCOGNITO_TAB_COUNT" /> ማንነትን የማያሳውቅ እና <ph name="TAB_COUNT_MANY" /> ተጨማሪ ትሮች ይዘጋሉ}}</translation> <translation id="8970887620466824814">የሆነ ችግር ተፈጥሯል።</translation> <translation id="8972098258593396643">ወደ ነባሪው አቃፊ ይውረድ?</translation> <translation id="8987641763863173640">የቪዲዮ ቅድመ-እይታ ቅንብሮችን ያቀናብሩ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb index 7cdd8d4..d2ef728 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
@@ -181,6 +181,7 @@ <translation id="2158408438301413340">تعذّر على Chrome التحقُّق من كلمات المرور التي تخطّت الحدّ اليومي.</translation> <translation id="2169830938017475061">الآن</translation> <translation id="2172688499998841696">ميزة أوصاف الصور غير مفعَّلة.</translation> +<translation id="2172905120685242547">هل تريد إغلاق النافذة؟</translation> <translation id="2175927920773552910">رمز الاستجابة السريعة</translation> <translation id="218608176142494674">المشاركة</translation> <translation id="2195339740518523951">الحصول على أعلى مستوى من الحماية في متصفِّح Chrome</translation> @@ -280,6 +281,7 @@ <translation id="2779651927720337254">تعذَّر التنزيل</translation> <translation id="2781151931089541271">يتبقى ثانية واحدة</translation> <translation id="2788468313014644040">رقم المجموعة</translation> +<translation id="2800066122460699237">سيتم إغلاق علامة التبويب <ph name="TAB_TITLE" />.</translation> <translation id="2801022321632964776">يمكنك إجراء التحديث للحصول على لغتك في أحدث إصدار من Chrome.</translation> <translation id="2805756323405976993">التطبيقات</translation> <translation id="2806840421670364300">التعلُّم الموحّد للمجموعات النموذجية (FLoC)</translation> @@ -288,6 +290,7 @@ <translation id="2827278682606527653">Feed card menu half height</translation> <translation id="2830783625999891985">تم إخفاء محتوى الحافظة.</translation> <translation id="2839327205551510876">تم إلغاء متابعة <ph name="SITE_NAME" />.</translation> +<translation id="2840810876587895427">{TAB_COUNT,plural, =1{سيتم إغلاق علامة تبويب واحدة (<ph name="TAB_COUNT_ONE" />) في وضع التصفّح المتخفي.}zero{سيتم إغلاق <ph name="TAB_COUNT_MANY" /> علامة تبويب في وضع التصفّح المتخفي.}two{سيتم إغلاق علامتَي تبويب (<ph name="TAB_COUNT_MANY" />) في وضع التصفّح المتخفي.}few{سيتم إغلاق <ph name="TAB_COUNT_MANY" /> علامات تبويب في وضع التصفّح المتخفي.}many{سيتم إغلاق <ph name="TAB_COUNT_MANY" /> علامة تبويب في وضع التصفّح المتخفي.}other{سيتم إغلاق <ph name="TAB_COUNT_MANY" /> علامة تبويب في وضع التصفّح المتخفي.}}</translation> <translation id="2841216154655874070">{NUM_DAYS,plural, =1{تمّ إجراء عملية التحقُّق قبل يوم واحد.}zero{تمّ إجراء عملية التحقُّق قبل # يوم.}two{تمّ إجراء عملية التحقُّق قبل يومَين.}few{تمّ إجراء عملية التحقُّق قبل # أيام.}many{تمّ إجراء عملية التحقُّق قبل # يومًا.}other{تمّ إجراء عملية التحقُّق قبل # يوم.}}</translation> <translation id="2842985007712546952">المجلد الرئيسي</translation> <translation id="2856503607207334158">تعذَّر تسجيل الدخول.</translation> @@ -673,6 +676,7 @@ <translation id="5222676887888702881">تسجيل الخروج</translation> <translation id="5227554086496586518">انقر للاطّلاع على نتائج البحث.</translation> <translation id="5233638681132016545">علامة تبويب جديدة</translation> +<translation id="5235196193381275927">حدث خطأ أثناء تسجيل الدخول.</translation> <translation id="5246093389635966745">تعديل الاختصار على شريط الأدوات</translation> <translation id="5250483651202458397">انقر لإغلاق لقطة الشاشة.</translation> <translation id="5262378156578470238">سيصلك إشعار يُعلمك ببدء عمليّة التنزيل في <ph name="DATE" />.</translation> @@ -896,6 +900,7 @@ <translation id="6541983376925655882">{NUM_HOURS,plural, =1{تمّ إجراء عملية التحقُّق قبل ساعة واحدة.}zero{تمّ إجراء عملية التحقُّق قبل # ساعة.}two{تمّ إجراء عملية التحقُّق قبل ساعتَين.}few{تمّ إجراء عملية التحقُّق قبل # ساعات.}many{تمّ إجراء عملية التحقُّق قبل # ساعة.}other{تمّ إجراء عملية التحقُّق قبل # ساعة.}}</translation> <translation id="6545017243486555795">محو جميع البيانات</translation> <translation id="6546511553472444032">قد يكون هذا الملف ضارًا.</translation> +<translation id="6556542240154580383">{TAB_COUNT,plural, =1{سيتم إغلاق علامة التبويب <ph name="TAB_TITLE" /> وعلامة تبويب واحدة (<ph name="TAB_COUNT_ONE" />) أخرى.}zero{سيتم إغلاق علامة التبويب <ph name="TAB_TITLE" /> و<ph name="TAB_COUNT_MANY" /> علامة تبويب أخرى.}two{سيتم إغلاق علامة التبويب <ph name="TAB_TITLE" /> وعلامتَي تبويب (<ph name="TAB_COUNT_MANY" />) أُخريان.}few{سيتم إغلاق علامة التبويب <ph name="TAB_TITLE" /> و<ph name="TAB_COUNT_MANY" /> علامات تبويب أخرى.}many{سيتم إغلاق علامة التبويب <ph name="TAB_TITLE" /> و<ph name="TAB_COUNT_MANY" /> علامة تبويب أخرى.}other{سيتم إغلاق علامة التبويب <ph name="TAB_TITLE" /> و<ph name="TAB_COUNT_MANY" /> علامة تبويب أخرى.}}</translation> <translation id="6560414384669816528">البحث باستخدام Sogou</translation> <translation id="656065428026159829">عرض المزيد</translation> <translation id="6565959834589222080">يتم استخدام شبكة Wi-Fi في حال توفّرها.</translation> @@ -936,6 +941,7 @@ <translation id="6767294960381293877">قائمة الأجهزة التي يمكن مشاركة علامة تبويب معها، مفتوحة على طول النصف السفلي من الشاشة.</translation> <translation id="6783942555455976443">حفظ هذه الصفحة لوقتٍ لاحق والحصول على تذكير</translation> <translation id="6795633245022906657">يتيح لك هذا الزر فتح علامة تبويب جديدة بسرعة. ولتعديل هذا الاختصار، انتقِل إلى "الإعدادات".</translation> +<translation id="6802555630140434547">سيتم إغلاق النافذة.</translation> <translation id="6811034713472274749">الصفحة جاهزة للعرض</translation> <translation id="6813446258015311409">تسجيل الدخول إلى Chrome، تم فتح البطاقة السفلية.</translation> <translation id="6817747507826986771">يتيح لك هذا الزر مشاركة هذه الصفحة بسرعة. ولتعديل هذا الاختصار، انقر مع الاستمرار.</translation> @@ -1163,6 +1169,7 @@ <translation id="8109613176066109935">للحصول على الإشارات المرجعية على جميع أجهزتك، يُرجى تفعيل المزامنة.</translation> <translation id="8110087112193408731">هل تريد عرض نشاط Chrome في الرفاهية الرقمية؟</translation> <translation id="8127542551745560481">تعديل الصفحة الرئيسية</translation> +<translation id="8130309322784422030">معلومات تسجيل الدخول المُخزَّنة الخاصة بك قد تكون قديمة.</translation> <translation id="813082847718468539">عرض معلومات الموقع</translation> <translation id="8137558756159375272">يرسل "المس للبحث" الكلمة المحددة والصفحة الحالية كسياق إلى بحث Google. يمكنك إيقافه في <ph name="BEGIN_LINK" />الإعدادات<ph name="END_LINK" />.</translation> <translation id="8153351135626613369">سيظهر "مساعد Google" على المواقع الإلكترونية المتوافقة التي يمكنه مساعدتك فيها.</translation> @@ -1293,6 +1300,7 @@ <translation id="8945143127965743188">تعذَّر تنزيل حزمة اللغة <ph name="LANG" />. يُرجى إعادة المحاولة لاحقًا.</translation> <translation id="8951232171465285730">لقد وفر Chrome لك <ph name="MEGABYTES" /> ميغابايت</translation> <translation id="8965591936373831584">في الانتظار</translation> +<translation id="8968085728801125376">{TAB_COUNT,plural, =1{سيتم إغلاق <ph name="INCOGNITO_TAB_COUNT" /> علامة تبويب في وضع التصفّح المتخفي وعلامة تبويب واحدة (<ph name="TAB_COUNT_ONE" />) أخرى.}zero{سيتم إغلاق <ph name="INCOGNITO_TAB_COUNT" /> علامة تبويب في وضع التصفّح المتخفي و<ph name="TAB_COUNT_MANY" /> علامة تبويب أخرى.}two{سيتم إغلاق <ph name="INCOGNITO_TAB_COUNT" /> علامة تبويب في وضع التصفّح المتخفي و علامتَي تبويب (<ph name="TAB_COUNT_MANY" />) أُخريان.}few{سيتم إغلاق <ph name="INCOGNITO_TAB_COUNT" /> علامة تبويب في وضع التصفّح المتخفي و<ph name="TAB_COUNT_MANY" /> علامات تبويب أخرى.}many{سيتم إغلاق <ph name="INCOGNITO_TAB_COUNT" /> علامة تبويب في وضع التصفّح المتخفي و<ph name="TAB_COUNT_MANY" /> علامة تبويب أخرى.}other{سيتم إغلاق <ph name="INCOGNITO_TAB_COUNT" /> علامة تبويب في وضع التصفّح المتخفي و<ph name="TAB_COUNT_MANY" /> علامة تبويب أخرى.}}</translation> <translation id="8970887620466824814">حدث خطأ.</translation> <translation id="8972098258593396643">هل تريد التنزيل إلى المجلد التلقائي؟</translation> <translation id="8987641763863173640">إدارة إعدادات معاينة الفيديو</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 c3c5c24..a2d4f49 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
@@ -181,6 +181,7 @@ <translation id="2158408438301413340">Chrome не успя да провери всички пароли</translation> <translation id="2169830938017475061">Сега</translation> <translation id="2172688499998841696">Функцията за описания на изображенията е изключена</translation> +<translation id="2172905120685242547">Да се затвори ли прозорецът?</translation> <translation id="2175927920773552910">Код за бърза реакция</translation> <translation id="218608176142494674">Споделяне</translation> <translation id="2195339740518523951">Получете най-високото ниво на сигурност на Chrome</translation> @@ -280,6 +281,7 @@ <translation id="2779651927720337254">неуспешно</translation> <translation id="2781151931089541271">Остава 1 сек</translation> <translation id="2788468313014644040">Номер на групата</translation> +<translation id="2800066122460699237">Разделът <ph name="TAB_TITLE" /> ще бъде затворен</translation> <translation id="2801022321632964776">Актуализирайте, за да получите своя език в най-новата версия на Chrome</translation> <translation id="2805756323405976993">Приложения</translation> <translation id="2806840421670364300">FLoC</translation> @@ -288,6 +290,7 @@ <translation id="2827278682606527653">Менюто на картата за емисията се показва на половината височина</translation> <translation id="2830783625999891985">Съдържанието на буферната памет е скрито</translation> <translation id="2839327205551510876">Следенето на <ph name="SITE_NAME" /> бе прекратено</translation> +<translation id="2840810876587895427">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> раздел в режим „инкогнито“ ще бъде затворен}other{<ph name="TAB_COUNT_MANY" /> раздела в режим „инкогнито“ ще бъдат затворени}}</translation> <translation id="2841216154655874070">{NUM_DAYS,plural, =1{Проверено преди 1 ден}other{Проверено преди # дни}}</translation> <translation id="2842985007712546952">Основна папка</translation> <translation id="2856503607207334158">Влизането в профила не бе успешно</translation> @@ -673,6 +676,7 @@ <translation id="5222676887888702881">Изход</translation> <translation id="5227554086496586518">Докоснете, за да видите резултатите от търсенето</translation> <translation id="5233638681132016545">Нов раздел</translation> +<translation id="5235196193381275927">Нещо се обърка при влизането в профила</translation> <translation id="5246093389635966745">Редактиране на пряк път в лентата с инструменти</translation> <translation id="5250483651202458397">Екранна снимка. Докоснете за затваряне.</translation> <translation id="5262378156578470238">Ще видите известие, когато изтеглянето започне на <ph name="DATE" />.</translation> @@ -896,6 +900,7 @@ <translation id="6541983376925655882">{NUM_HOURS,plural, =1{Проверено преди 1 час}other{Проверено преди # часа}}</translation> <translation id="6545017243486555795">Изчистване на всички данни</translation> <translation id="6546511553472444032">Файлът може да бъде опасен</translation> +<translation id="6556542240154580383">{TAB_COUNT,plural, =1{<ph name="TAB_TITLE" /> и още <ph name="TAB_COUNT_ONE" /> раздел ще бъдат затворени}other{<ph name="TAB_TITLE" /> и още <ph name="TAB_COUNT_MANY" /> раздела ще бъдат затворени}}</translation> <translation id="6560414384669816528">Търсене със Sogou</translation> <translation id="656065428026159829">Вижте още</translation> <translation id="6565959834589222080">Wi-Fi се използва, когато е налице</translation> @@ -936,6 +941,7 @@ <translation id="6767294960381293877">Списъкът с устройства, с които да се сподели даден раздел, е отворен на половин височина.</translation> <translation id="6783942555455976443">Запазване на тази страница за по-късно и получаване на напомняне</translation> <translation id="6795633245022906657">Бързо отваряне на нов раздел. За да редактирате този пряк път, отворете настройките.</translation> +<translation id="6802555630140434547">Прозорецът ще бъде затворен</translation> <translation id="6811034713472274749">Страницата е готова за преглед</translation> <translation id="6813446258015311409">Вход в Chrome – отворено.</translation> <translation id="6817747507826986771">Бързо споделяне на страницата. За да редактирате този пряк път, докоснете и задръжте.</translation> @@ -1163,6 +1169,7 @@ <translation id="8109613176066109935">Включете синхронизирането, за да получите отметките си на всичките си устройства</translation> <translation id="8110087112193408731">Искате ли активността ви в Chrome да се показва в „Дигитално благополучие“?</translation> <translation id="8127542551745560481">Редактиране на началната страница</translation> +<translation id="8130309322784422030">Съхранената ви информация за вход може да не е актуална</translation> <translation id="813082847718468539">Преглед на информацията за сайта</translation> <translation id="8137558756159375272">При търсене с докосване избраната дума и текущата страница се изпращат като контекст до Google Търсене. Можете да изключите функцията от <ph name="BEGIN_LINK" />Настройки<ph name="END_LINK" />.</translation> <translation id="8153351135626613369">Асистент ще се покаже, когато установи, че може да ви е от полза в поддържаните уебсайтове</translation> @@ -1293,6 +1300,7 @@ <translation id="8945143127965743188"><ph name="LANG" /> – този език не бе изтеглен. Опитайте отново по-късно.</translation> <translation id="8951232171465285730">Chrome ви спести <ph name="MEGABYTES" /> МБ</translation> <translation id="8965591936373831584">изчаква</translation> +<translation id="8968085728801125376">{TAB_COUNT,plural, =1{Следните раздели ще бъдат затворени: <ph name="INCOGNITO_TAB_COUNT" /> в режим „инкогнито“ и още <ph name="TAB_COUNT_ONE" />}other{Следните раздели ще бъдат затворени: <ph name="INCOGNITO_TAB_COUNT" /> в режим „инкогнито“ и още <ph name="TAB_COUNT_MANY" />}}</translation> <translation id="8970887620466824814">Нещо се обърка.</translation> <translation id="8972098258593396643">Да се изтегли ли файлът в стандартната папка?</translation> <translation id="8987641763863173640">Управление на настройките за визуализация на видеоклиповете</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb index 0f33dc06..52fff8e 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb
@@ -181,6 +181,7 @@ <translation id="2158408438301413340">Chrome nije mogao provjeriti sve lozinke</translation> <translation id="2169830938017475061">Sada</translation> <translation id="2172688499998841696">Opisi slika su isključeni</translation> +<translation id="2172905120685242547">Zatvoriti prozor?</translation> <translation id="2175927920773552910">QR kôd</translation> <translation id="218608176142494674">Dijeljenje</translation> <translation id="2195339740518523951">Odaberite maksimalnu sigurnost koju nudi Chrome</translation> @@ -280,6 +281,7 @@ <translation id="2779651927720337254">neuspjelo</translation> <translation id="2781151931089541271">Preostala je 1 sek</translation> <translation id="2788468313014644040">Član grupe</translation> +<translation id="2800066122460699237">Kartica <ph name="TAB_TITLE" /> će se zatvoriti</translation> <translation id="2801022321632964776">Ažurirajte da preuzmete svoj jezik u najnovijoj verziji Chromea</translation> <translation id="2805756323405976993">Aplikacije</translation> <translation id="2806840421670364300">FLoC</translation> @@ -288,6 +290,7 @@ <translation id="2827278682606527653">Feed card menu half height</translation> <translation id="2830783625999891985">Sadržaj međumemorije je skriven</translation> <translation id="2839327205551510876">Prestali ste pratiti: <ph name="SITE_NAME" /></translation> +<translation id="2840810876587895427">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> anonimna kartica će se zatvoriti}one{<ph name="TAB_COUNT_MANY" /> anonimna kartica će se zatvoriti}few{<ph name="TAB_COUNT_MANY" /> anonimne kartice će se zatvoriti}other{<ph name="TAB_COUNT_MANY" /> anonimnih kartica će se zatvoriti}}</translation> <translation id="2841216154655874070">{NUM_DAYS,plural, =1{Provjereno prije 1 dan}one{Provjereno prije # dan}few{Provjereno prije # dana}other{Provjereno prije # dana}}</translation> <translation id="2842985007712546952">Nadređeni folder</translation> <translation id="2856503607207334158">Prijava nije uspjela</translation> @@ -673,6 +676,7 @@ <translation id="5222676887888702881">Odjava</translation> <translation id="5227554086496586518">Dodirnite da vidite rezultate pretraživanja</translation> <translation id="5233638681132016545">Nova kartica</translation> +<translation id="5235196193381275927">Došlo je do problema prilikom prijave</translation> <translation id="5246093389635966745">Uređivanje prečice alatne trake</translation> <translation id="5250483651202458397">Snimak ekrana. Dodirnite da zatvorite.</translation> <translation id="5262378156578470238">Vidjet ćete obavještenje kada ovo preuzimanje započne na dan <ph name="DATE" />.</translation> @@ -896,6 +900,7 @@ <translation id="6541983376925655882">{NUM_HOURS,plural, =1{Provjereno prije 1 sat}one{Provjereno prije # sat}few{Provjereno prije # sata}other{Provjereno prije # sati}}</translation> <translation id="6545017243486555795">Obriši sve podatke</translation> <translation id="6546511553472444032">Fajl može biti štetan</translation> +<translation id="6556542240154580383">{TAB_COUNT,plural, =1{<ph name="TAB_TITLE" /> i još <ph name="TAB_COUNT_ONE" /> kartica će se zatvoriti}one{<ph name="TAB_TITLE" /> i još <ph name="TAB_COUNT_MANY" /> kartica će se zatvoriti}few{<ph name="TAB_TITLE" /> i još <ph name="TAB_COUNT_MANY" /> kartice će se zatvoriti}other{<ph name="TAB_TITLE" /> i još <ph name="TAB_COUNT_MANY" /> kartica će se zatvoriti}}</translation> <translation id="6560414384669816528">Pretražite pomoću usluge Sogou</translation> <translation id="656065428026159829">Prikaži više</translation> <translation id="6565959834589222080">WiFi mreža se koristi kada je dostupna</translation> @@ -936,6 +941,7 @@ <translation id="6767294960381293877">Spisak uređaja s kojim će se dijeliti kartica je otvoren na pola visine.</translation> <translation id="6783942555455976443">Sačuvajte ovu stranicu za kasnije i primite podsjetnik</translation> <translation id="6795633245022906657">Brzo otvorite novu karticu. Da uredite ovu prečicu, idite u Postavke.</translation> +<translation id="6802555630140434547">Prozor će se zatvoriti</translation> <translation id="6811034713472274749">Stranica je spremna za prikaz</translation> <translation id="6813446258015311409">Prijava na Chrome je otvorena.</translation> <translation id="6817747507826986771">Brzo dijelite ovu stranicu. Dodirnite i zadržite da uredite ovu prečicu.</translation> @@ -1163,6 +1169,7 @@ <translation id="8109613176066109935">Da biste imali svoje oznake na svim svojim uređajima, uključite sinhronizaciju</translation> <translation id="8110087112193408731">Prikazati aktivnosti Chromea u Digitalnom blagostanju?</translation> <translation id="8127542551745560481">Uredite početnu stranicu</translation> +<translation id="8130309322784422030">Moguće je da su vaše pohranjene informacije za prijavu zastarjele</translation> <translation id="813082847718468539">Prikaz informacija o web lokaciji</translation> <translation id="8137558756159375272">Značajka Dodirnite za pretraživanje Google pretraživanju šalje odabranu riječ i trenutačnu stranicu kao kontekst. Možete je isključiti u <ph name="BEGIN_LINK" />Postavkama<ph name="END_LINK" />.</translation> <translation id="8153351135626613369">Asistent će se pojaviti kada utvrdi da vam može pomoći na web lokacijama koje ga podržavaju</translation> @@ -1293,6 +1300,7 @@ <translation id="8945143127965743188"><ph name="LANG" /> – Preuzimanje ovog jezika nije uspjelo. Pokušajte ponovo kasnije.</translation> <translation id="8951232171465285730">Chrome vam je uštedio <ph name="MEGABYTES" /> MB</translation> <translation id="8965591936373831584">na čekanju</translation> +<translation id="8968085728801125376">{TAB_COUNT,plural, =1{<ph name="INCOGNITO_TAB_COUNT" /> anonimna kartica i još <ph name="TAB_COUNT_ONE" /> kartica će se zatvoriti}one{<ph name="INCOGNITO_TAB_COUNT" /> anonimna kartica i još <ph name="TAB_COUNT_MANY" /> kartica će se zatvoriti}few{<ph name="INCOGNITO_TAB_COUNT" /> anonimne kartice i još <ph name="TAB_COUNT_MANY" /> kartice će se zatvoriti}other{<ph name="INCOGNITO_TAB_COUNT" /> anonimnih kartica i još <ph name="TAB_COUNT_MANY" /> kartica će se zatvoriti}}</translation> <translation id="8970887620466824814">Nešto nije uredu.</translation> <translation id="8972098258593396643">Želite li preuzeti u zadanu mapu?</translation> <translation id="8987641763863173640">Upravljajte postavkama pregleda videozapisa</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 51cbe7f3..3f0abf5 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
@@ -181,6 +181,7 @@ <translation id="2158408438301413340">Chrome no ha pogut comprovar totes les contrasenyes</translation> <translation id="2169830938017475061">Ara</translation> <translation id="2172688499998841696">Les descripcions de les imatges estan desactivades</translation> +<translation id="2172905120685242547">Vols tancar la finestra?</translation> <translation id="2175927920773552910">Codi QR</translation> <translation id="218608176142494674">Compartició</translation> <translation id="2195339740518523951">Obtén la seguretat més efectiva de Chrome</translation> @@ -280,6 +281,7 @@ <translation id="2779651927720337254">ha fallat</translation> <translation id="2781151931089541271">Queda 1 segon</translation> <translation id="2788468313014644040">Número de grup</translation> +<translation id="2800066122460699237">Es tancarà la pestanya <ph name="TAB_TITLE" /></translation> <translation id="2801022321632964776">Fes l'actualització per veure la darrera versió de Chrome en el teu idioma</translation> <translation id="2805756323405976993">Aplicacions</translation> <translation id="2806840421670364300">FLoC</translation> @@ -288,6 +290,7 @@ <translation id="2827278682606527653">El menú de la targeta del tauler ocupa la meitat inferior de la pantalla</translation> <translation id="2830783625999891985">S'amaguen els continguts del porta-retalls</translation> <translation id="2839327205551510876">Has deixat de seguir <ph name="SITE_NAME" /></translation> +<translation id="2840810876587895427">{TAB_COUNT,plural, =1{Es tancarà <ph name="TAB_COUNT_ONE" /> pestanya d'incògnit}other{Es tancaran <ph name="TAB_COUNT_MANY" /> pestanyes d'incògnit}}</translation> <translation id="2841216154655874070">{NUM_DAYS,plural, =1{S'ha comprovat fa 1 dia}other{S'ha comprovat fa # dies}}</translation> <translation id="2842985007712546952">Carpeta principal</translation> <translation id="2856503607207334158">No s'ha pogut iniciar la sessió</translation> @@ -673,6 +676,7 @@ <translation id="5222676887888702881">Tanca la sessió</translation> <translation id="5227554086496586518">Toca per veure els resultats de la cerca</translation> <translation id="5233638681132016545">Pestanya nova</translation> +<translation id="5235196193381275927">S'ha produït un error durant l'inici de sessió</translation> <translation id="5246093389635966745">Edita la drecera de la barra d'eines</translation> <translation id="5250483651202458397">Captura de pantalla. Toca per tancar.</translation> <translation id="5262378156578470238">Veuràs una notificació quan aquesta baixada comenci el dia <ph name="DATE" />.</translation> @@ -896,6 +900,7 @@ <translation id="6541983376925655882">{NUM_HOURS,plural, =1{S'ha comprovat fa 1 hora}other{S'ha comprovat fa # hores}}</translation> <translation id="6545017243486555795">Esborra totes les dades</translation> <translation id="6546511553472444032">El fitxer pot ser perjudicial</translation> +<translation id="6556542240154580383">{TAB_COUNT,plural, =1{Es tancaran <ph name="TAB_TITLE" /> i <ph name="TAB_COUNT_ONE" /> pestanya més}other{Es tancaran <ph name="TAB_TITLE" /> i <ph name="TAB_COUNT_MANY" /> pestanyes més}}</translation> <translation id="6560414384669816528">Cerca amb Sogou</translation> <translation id="656065428026159829">Mostra'n més</translation> <translation id="6565959834589222080">S'utilitza la Wi‑Fi quan està disponible</translation> @@ -936,6 +941,7 @@ <translation id="6767294960381293877">La llista de dispositius amb què es compartirà una pestanya s'ha obert a mitja alçada.</translation> <translation id="6783942555455976443">Desa aquesta pàgina per a més tard i rep un recordatori</translation> <translation id="6795633245022906657">Obre ràpidament una pestanya nova. Per editar aquesta drecera, ves a Configuració.</translation> +<translation id="6802555630140434547">Es tancarà la finestra</translation> <translation id="6811034713472274749">Ja es pot veure la pàgina</translation> <translation id="6813446258015311409">S'ha obert Inicia la sessió a Chrome.</translation> <translation id="6817747507826986771">Comparteix ràpidament aquesta pàgina. Mantingues premuda aquesta drecera per editar-la.</translation> @@ -1163,6 +1169,7 @@ <translation id="8109613176066109935">Per accedir a les adreces d'interès des de tots els dispositius, activa la sincronització</translation> <translation id="8110087112193408731">Vols veure l'activitat de Chrome a Benestar digital?</translation> <translation id="8127542551745560481">Edita la pàgina d'inici</translation> +<translation id="8130309322784422030">És possible que la informació d'inici de sessió emmagatzemada no estigui actualitzada</translation> <translation id="813082847718468539">Mostra la informació del lloc web</translation> <translation id="8137558756159375272">La funció Toca per cercar envia la paraula seleccionada i la pàgina actual com a context a la Cerca de Google. La podeu desactivar a <ph name="BEGIN_LINK" />Configuració<ph name="END_LINK" />.</translation> <translation id="8153351135626613369">L'Assistent apareixerà quan detecti que et pot ajudar en llocs web compatibles</translation> @@ -1293,6 +1300,7 @@ <translation id="8945143127965743188"><ph name="LANG" />: no s'ha pogut baixar aquest idioma. Torna-ho a provar més tard.</translation> <translation id="8951232171465285730">Chrome t'ha estalviat <ph name="MEGABYTES" /> MB</translation> <translation id="8965591936373831584">pendent</translation> +<translation id="8968085728801125376">{TAB_COUNT,plural, =1{Es tancaran <ph name="INCOGNITO_TAB_COUNT" /> pestanya d'incògnit i <ph name="TAB_COUNT_ONE" /> de normal.}other{Es tancaran <ph name="INCOGNITO_TAB_COUNT" /> pestanyes d'incògnit i <ph name="TAB_COUNT_MANY" /> de normals.}}</translation> <translation id="8970887620466824814">S'ha produït un error.</translation> <translation id="8972098258593396643">Vols baixar el fitxer a la carpeta predeterminada?</translation> <translation id="8987641763863173640">Gestiona la configuració de la previsualització de vídeos</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 f6ad307..3e6e9a2 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
@@ -181,6 +181,7 @@ <translation id="2158408438301413340">Chrome kunne ikke tjekke alle adgangskoder</translation> <translation id="2169830938017475061">Nu</translation> <translation id="2172688499998841696">Billedbeskrivelser er slået fra</translation> +<translation id="2172905120685242547">Vil du lukke vinduet?</translation> <translation id="2175927920773552910">QR-kode</translation> <translation id="218608176142494674">Deling</translation> <translation id="2195339740518523951">Få Chromes stærkeste beskyttelse</translation> @@ -280,6 +281,7 @@ <translation id="2779651927720337254">mislykkedes</translation> <translation id="2781151931089541271">1 sekund tilbage</translation> <translation id="2788468313014644040">Gruppenummer</translation> +<translation id="2800066122460699237">Fanen <ph name="TAB_TITLE" /> lukkes</translation> <translation id="2801022321632964776">Opdater til den nyeste version af Chrome for at bruge dit eget sprog</translation> <translation id="2805756323405976993">Apps</translation> <translation id="2806840421670364300">FLoC</translation> @@ -288,6 +290,7 @@ <translation id="2827278682606527653">Feedkortmenu i halv højde</translation> <translation id="2830783625999891985">Indholdet i udklipsholderen er skjult</translation> <translation id="2839327205551510876">Følger ikke længere <ph name="SITE_NAME" /></translation> +<translation id="2840810876587895427">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> inkognitofane lukkes}one{<ph name="TAB_COUNT_MANY" /> inkognitofane lukkes}other{<ph name="TAB_COUNT_MANY" /> inkognitofaner lukkes}}</translation> <translation id="2841216154655874070">{NUM_DAYS,plural, =1{Tjekket for 1 dag siden}one{Tjekket for # dag siden}other{Tjekket for # dage siden}}</translation> <translation id="2842985007712546952">Overordnet mappe</translation> <translation id="2856503607207334158">Login mislykkedes</translation> @@ -673,6 +676,7 @@ <translation id="5222676887888702881">Log ud</translation> <translation id="5227554086496586518">Tryk for at se søgeresultaterne</translation> <translation id="5233638681132016545">Ny fane</translation> +<translation id="5235196193381275927">Noget gik galt under login</translation> <translation id="5246093389635966745">Rediger genvej til værktøjslinje</translation> <translation id="5250483651202458397">Screenshot. Tryk for at lukke.</translation> <translation id="5262378156578470238">Du får en notifikation, når denne download starter <ph name="DATE" />.</translation> @@ -896,6 +900,7 @@ <translation id="6541983376925655882">{NUM_HOURS,plural, =1{Tjekket for 1 time siden}one{Tjekket for # time siden}other{Tjekket for # timer siden}}</translation> <translation id="6545017243486555795">Ryd alle data</translation> <translation id="6546511553472444032">Filen kan være skadelig</translation> +<translation id="6556542240154580383">{TAB_COUNT,plural, =1{<ph name="TAB_TITLE" /> og <ph name="TAB_COUNT_ONE" /> anden fane lukkes}one{<ph name="TAB_TITLE" /> og <ph name="TAB_COUNT_MANY" /> anden fane lukkes}other{<ph name="TAB_TITLE" /> og <ph name="TAB_COUNT_MANY" /> andre faner lukkes}}</translation> <translation id="6560414384669816528">Søg via Sogou</translation> <translation id="656065428026159829">Se mere</translation> <translation id="6565959834589222080">Wi-Fi anvendes, når det er tilgængeligt</translation> @@ -936,6 +941,7 @@ <translation id="6767294960381293877">Åben liste i halv højde over enheder, der skal deles en fane med.</translation> <translation id="6783942555455976443">Gem denne side til senere, og få en påmindelse</translation> <translation id="6795633245022906657">Åbn hurtigt en ny fane. Gå til Indstillinger for at redigere denne genvej.</translation> +<translation id="6802555630140434547">Vinduet lukkes</translation> <translation id="6811034713472274749">Siden kan nu ses</translation> <translation id="6813446258015311409">Log ind i Chrome, åben.</translation> <translation id="6817747507826986771">Del hurtigt denne side. Hold fingeren nede for at redigere denne genvej.</translation> @@ -1163,6 +1169,7 @@ <translation id="8109613176066109935">Aktivér synkronisering for at få vist dine bogmærker på alle dine enheder</translation> <translation id="8110087112193408731">Vil du se din Chrome-aktivitet i Digital balance?</translation> <translation id="8127542551745560481">Rediger startside</translation> +<translation id="8130309322784422030">Dine gemte loginoplysninger kan være forældede</translation> <translation id="813082847718468539">Se websiteoplysninger</translation> <translation id="8137558756159375272">Funktionen "Tryk for at søge" sender det markerede ord og den aktuelle side som kontekst til Google Søgning. Du kan slå den fra under <ph name="BEGIN_LINK" />Indstillinger<ph name="END_LINK" />.</translation> <translation id="8153351135626613369">Assistenten vises, når den registrerer, at den kan hjælpe dig på understøttede websites</translation> @@ -1293,6 +1300,7 @@ <translation id="8945143127965743188"><ph name="LANG" /> – Dette sprog kunne ikke downloades. Prøv igen senere.</translation> <translation id="8951232171465285730">Chrome har sparet dig <ph name="MEGABYTES" /> MB</translation> <translation id="8965591936373831584">afventer</translation> +<translation id="8968085728801125376">{TAB_COUNT,plural, =1{<ph name="INCOGNITO_TAB_COUNT" /> inkognitofane og <ph name="TAB_COUNT_ONE" /> anden fane lukkes}one{<ph name="INCOGNITO_TAB_COUNT" /> inkognitofane og <ph name="TAB_COUNT_MANY" /> anden fane lukkes}other{<ph name="INCOGNITO_TAB_COUNT" /> inkognitofane og <ph name="TAB_COUNT_MANY" /> andre faner lukkes}}</translation> <translation id="8970887620466824814">Noget gik galt.</translation> <translation id="8972098258593396643">Vil du downloade til standardmappen?</translation> <translation id="8987641763863173640">Administrer indstillinger for forhåndsvisning af video</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb index 37869f4..c72e3403 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb
@@ -185,6 +185,7 @@ <translation id="218608176142494674">Freigabe</translation> <translation id="2195339740518523951">Höchste Sicherheit in Chrome erhalten</translation> <translation id="2200113223741723867">Freigabe von Nutzungsdaten verwalten</translation> +<translation id="2218567645332692482">Aufrufe von Websites auf HTTPS umstellen und warnen, bevor Websites geladen werden, die das Protokoll nicht unterstützen</translation> <translation id="2227444325776770048">Als <ph name="USER_FULL_NAME" /> fortfahren</translation> <translation id="2230777942707397948">Leeres Fenster</translation> <translation id="2239812875700136898">Über die Schaltfläche "Optionen für Discover" können Sie festlegen, welche Meldungen Ihnen angezeigt werden</translation> @@ -1294,6 +1295,7 @@ <translation id="8965591936373831584">ausstehend</translation> <translation id="8970887620466824814">Es gab ein Problem.</translation> <translation id="8972098258593396643">In Standardordner herunterladen?</translation> +<translation id="8987641763863173640">Einstellungen für die Videovorschau verwalten</translation> <translation id="8988028529677883095">Smartphone als Sicherheitsschlüssel verwenden</translation> <translation id="8993760627012879038">Neuen Tab im Inkognitomodus öffnen</translation> <translation id="8996847606757455498">Anderen Anbieter auswählen</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb index 3e1e038..fd2580f 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb
@@ -181,6 +181,7 @@ <translation id="2158408438301413340">Το Chrome δεν μπόρεσε να ελέγξει όλους τους κωδικούς πρόσβασης.</translation> <translation id="2169830938017475061">Τώρα</translation> <translation id="2172688499998841696">Οι περιγραφές εικόνων είναι απενεργοποιημένες</translation> +<translation id="2172905120685242547">Κλείσιμο παραθύρου;</translation> <translation id="2175927920773552910">Κωδικός QR</translation> <translation id="218608176142494674">Κοινοποίηση</translation> <translation id="2195339740518523951">Λάβετε την ισχυρότερη ασφάλεια του Chrome</translation> @@ -280,6 +281,7 @@ <translation id="2779651927720337254">απέτυχε</translation> <translation id="2781151931089541271">Απομένει 1 δευτερόλεπτο</translation> <translation id="2788468313014644040">Αριθμός ομάδας</translation> +<translation id="2800066122460699237">Πρόκειται να κλείσει η καρτέλα <ph name="TAB_TITLE" />.</translation> <translation id="2801022321632964776">Ενημερώστε για να χρησιμοποιείτε τη γλώσσα σας στην πιο πρόσφατη έκδοση του Chrome</translation> <translation id="2805756323405976993">Εφαρμογές </translation> <translation id="2806840421670364300">FLoC</translation> @@ -288,6 +290,7 @@ <translation id="2827278682606527653">Μενού της κάρτας ροής στο μισό ύψος</translation> <translation id="2830783625999891985">Έγινε απόκρυψη του περιεχομένου προχείρου</translation> <translation id="2839327205551510876">Καταργήθηκε η παρακολούθηση του ιστοτόπου <ph name="SITE_NAME" /></translation> +<translation id="2840810876587895427">{TAB_COUNT,plural, =1{Πρόκειται να κλείσει <ph name="TAB_COUNT_ONE" /> καρτέλα ανώνυμης περιήγησης.}other{Πρόκειται να κλείσουν <ph name="TAB_COUNT_MANY" /> καρτέλες ανώνυμης περιήγησης.}}</translation> <translation id="2841216154655874070">{NUM_DAYS,plural, =1{Ελέγχθηκε πριν από μία ημέρα}other{Ελέγχθηκε πριν από # ημέρες}}</translation> <translation id="2842985007712546952">Γονικός φάκελος</translation> <translation id="2856503607207334158">Η σύνδεση απέτυχε</translation> @@ -673,6 +676,7 @@ <translation id="5222676887888702881">Έξοδος</translation> <translation id="5227554086496586518">Πατήστε για να δείτε αποτελέσματα αναζήτησης</translation> <translation id="5233638681132016545">Νέα καρτέλα</translation> +<translation id="5235196193381275927">Παρουσιάστηκε κάποιο πρόβλημα κατά τη σύνδεση</translation> <translation id="5246093389635966745">Επεξεργασία συντόμευσης γραμμής εργαλείων</translation> <translation id="5250483651202458397">Στιγμιότυπο οθόνης. Πατήστε για κλείσιμο.</translation> <translation id="5262378156578470238">Θα εμφανιστεί μια ειδοποίηση όταν ξεκινήσει αυτή η λήψη στις <ph name="DATE" />.</translation> @@ -896,6 +900,7 @@ <translation id="6541983376925655882">{NUM_HOURS,plural, =1{Ελέγχθηκε πριν από μία ώρα}other{Ελέγχθηκε πριν από # ώρες}}</translation> <translation id="6545017243486555795">Διαγραφή όλων των δεδομένων</translation> <translation id="6546511553472444032">Το αρχείο μπορεί να είναι επιβλαβές</translation> +<translation id="6556542240154580383">{TAB_COUNT,plural, =1{Πρόκειται να κλείσει η καρτέλα <ph name="TAB_TITLE" /> και <ph name="TAB_COUNT_ONE" /> ακόμη καρτέλα}other{Πρόκειται να κλείσει η καρτέλα <ph name="TAB_TITLE" /> και <ph name="TAB_COUNT_MANY" /> ακόμη καρτέλες}}</translation> <translation id="6560414384669816528">Αναζήτηση με το Sogou</translation> <translation id="656065428026159829">Δείτε περισσότερα</translation> <translation id="6565959834589222080">Το Wi-Fi χρησιμοποιείται όταν είναι διαθέσιμο</translation> @@ -936,6 +941,7 @@ <translation id="6767294960381293877">Άνοιγμα σε μισό ύψος της λίστας συσκευών στις οποίες θα κοινοποιηθεί μια καρτέλα.</translation> <translation id="6783942555455976443">Αποθηκεύστε αυτήν τη σελίδα για αργότερα και λάβετε σχετική υπενθύμιση.</translation> <translation id="6795633245022906657">Ανοίξτε γρήγορα μια νέα καρτέλα. Για να επεξεργαστείτε αυτήν τη συντόμευση, μεταβείτε στις Ρυθμίσεις.</translation> +<translation id="6802555630140434547">Το παράθυρο θα κλείσει</translation> <translation id="6811034713472274749">Σελίδα έτοιμη για προβολή</translation> <translation id="6813446258015311409">Σύνδεση στο Chrome, έγινε άνοιγμα.</translation> <translation id="6817747507826986771">Κοινοποιήστε γρήγορα αυτήν τη σελίδα. Για να επεξεργαστείτε αυτήν τη συντόμευση, αγγίξτε παρατεταμένα.</translation> @@ -1163,6 +1169,7 @@ <translation id="8109613176066109935">Για να εμφανίζονται οι σελιδοδείκτες σας σε όλες τις συσκευές σας, ενεργοποιήστε τον συγχρονισμό</translation> <translation id="8110087112193408731">Να εμφανίζεται στο Digital Wellbeing η δραστηριότητά σας στο Chrome;</translation> <translation id="8127542551745560481">Επεξεργασία αρχικής σελίδας</translation> +<translation id="8130309322784422030">Οι αποθηκευμένες πληροφορίες σύνδεσης ενδέχεται να μην είναι ενημερωμένες</translation> <translation id="813082847718468539">Προβολή πληροφοριών τοποθεσίας</translation> <translation id="8137558756159375272">Η λειτουργία "Αγγίξτε για αναζήτηση" αποστέλλει την επιλεγμένη λέξη και την τρέχουσα σελίδα ως περιβάλλον στην Αναζήτηση Google. Μπορείτε να την απενεργοποιήσετε στις <ph name="BEGIN_LINK" />Ρυθμίσεις<ph name="END_LINK" />.</translation> <translation id="8153351135626613369">Ο Βοηθός θα εμφανίζεται όταν διαπιστώνει ότι μπορεί να σας βοηθήσει σε υποστηριζόμενους ιστοτόπους</translation> @@ -1293,6 +1300,7 @@ <translation id="8945143127965743188"><ph name="LANG" /> - Δεν ήταν δυνατή η λήψη αυτής της γλώσσας. Δοκιμάστε ξανά αργότερα.</translation> <translation id="8951232171465285730">Το Chrome έχει εξοικονομήσει <ph name="MEGABYTES" /> MB</translation> <translation id="8965591936373831584">σε εκκρεμότητα</translation> +<translation id="8968085728801125376">{TAB_COUNT,plural, =1{Πρόκειται να κλείσει <ph name="INCOGNITO_TAB_COUNT" /> καρτέλα ανώνυμης περιήγησης και <ph name="TAB_COUNT_ONE" /> ακόμη καρτέλα.}other{Πρόκειται να κλείσουν <ph name="INCOGNITO_TAB_COUNT" /> καρτέλες ανώνυμης περιήγησης και <ph name="TAB_COUNT_MANY" /> ακόμη καρτέλες.}}</translation> <translation id="8970887620466824814">Προέκυψε πρόβλημα.</translation> <translation id="8972098258593396643">Λήψη στον προεπιλεγμένο φάκελο;</translation> <translation id="8987641763863173640">Διαχείριση ρυθμίσεων προεπισκόπησης βίντεο</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb index 4942760f..b96d7de 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb
@@ -181,6 +181,7 @@ <translation id="2158408438301413340">Chrome couldn’t check all passwords</translation> <translation id="2169830938017475061">Now</translation> <translation id="2172688499998841696">Image descriptions are off</translation> +<translation id="2172905120685242547">Close window?</translation> <translation id="2175927920773552910">QR code</translation> <translation id="218608176142494674">Sharing</translation> <translation id="2195339740518523951">Get Chrome’s strongest security</translation> @@ -280,6 +281,7 @@ <translation id="2779651927720337254">failed</translation> <translation id="2781151931089541271">1 sec left</translation> <translation id="2788468313014644040">Group number</translation> +<translation id="2800066122460699237">The tab <ph name="TAB_TITLE" /> will be closed</translation> <translation id="2801022321632964776">Update to get your language in the latest version of Chrome</translation> <translation id="2805756323405976993">Apps</translation> <translation id="2806840421670364300">FLoC</translation> @@ -288,6 +290,7 @@ <translation id="2827278682606527653">Feed card menu half height</translation> <translation id="2830783625999891985">Clipboard contents hidden</translation> <translation id="2839327205551510876">Unfollowed <ph name="SITE_NAME" /></translation> +<translation id="2840810876587895427">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> incognito tab will be closed}other{<ph name="TAB_COUNT_MANY" /> incognito tabs will be closed}}</translation> <translation id="2841216154655874070">{NUM_DAYS,plural, =1{Checked 1 day ago}other{Checked # days ago}}</translation> <translation id="2842985007712546952">Parent folder</translation> <translation id="2856503607207334158">Sign-in failed</translation> @@ -673,6 +676,7 @@ <translation id="5222676887888702881">Sign out</translation> <translation id="5227554086496586518">Tap to see search results</translation> <translation id="5233638681132016545">New tab</translation> +<translation id="5235196193381275927">Something went wrong during sign-in</translation> <translation id="5246093389635966745">Edit toolbar shortcut</translation> <translation id="5250483651202458397">Screenshot. Tap to close.</translation> <translation id="5262378156578470238">You’ll see a notification when this download starts on <ph name="DATE" />.</translation> @@ -896,6 +900,7 @@ <translation id="6541983376925655882">{NUM_HOURS,plural, =1{Checked 1 hour ago}other{Checked # hours ago}}</translation> <translation id="6545017243486555795">Clear All Data</translation> <translation id="6546511553472444032">File might be harmful</translation> +<translation id="6556542240154580383">{TAB_COUNT,plural, =1{<ph name="TAB_TITLE" /> and <ph name="TAB_COUNT_ONE" /> more tab will be closed}other{<ph name="TAB_TITLE" /> and <ph name="TAB_COUNT_MANY" /> more tabs will be closed}}</translation> <translation id="6560414384669816528">Search with Sogou</translation> <translation id="656065428026159829">See more</translation> <translation id="6565959834589222080">Wi-Fi is used when available</translation> @@ -936,6 +941,7 @@ <translation id="6767294960381293877">List of devices to share a tab with, opened at half height.</translation> <translation id="6783942555455976443">Save this page for later and get a reminder</translation> <translation id="6795633245022906657">Quickly open a new tab. To edit this shortcut, go to Settings.</translation> +<translation id="6802555630140434547">The window will be closed</translation> <translation id="6811034713472274749">Page is ready to view</translation> <translation id="6813446258015311409">Sign in to Chrome, opened.</translation> <translation id="6817747507826986771">Quickly share this page. To edit this shortcut, touch and hold.</translation> @@ -1163,6 +1169,7 @@ <translation id="8109613176066109935">To get your bookmarks on all your devices, turn on sync</translation> <translation id="8110087112193408731">Show your Chrome activity in Digital Wellbeing?</translation> <translation id="8127542551745560481">Edit homepage</translation> +<translation id="8130309322784422030">Your stored sign-in info might be out of date</translation> <translation id="813082847718468539">View site information</translation> <translation id="8137558756159375272">Touch to Search sends the selected word and the current page as context to Google Search. You can turn it off in <ph name="BEGIN_LINK" />Settings<ph name="END_LINK" />.</translation> <translation id="8153351135626613369">Assistant will appear when it detects that it can help you on supported websites</translation> @@ -1293,6 +1300,7 @@ <translation id="8945143127965743188"><ph name="LANG" /> – This language couldn't be downloaded. Try again later.</translation> <translation id="8951232171465285730">Chrome has saved you <ph name="MEGABYTES" /> MB</translation> <translation id="8965591936373831584">pending</translation> +<translation id="8968085728801125376">{TAB_COUNT,plural, =1{<ph name="INCOGNITO_TAB_COUNT" /> incognito and <ph name="TAB_COUNT_ONE" /> more tab will be closed}other{<ph name="INCOGNITO_TAB_COUNT" /> incognito and <ph name="TAB_COUNT_MANY" /> more tabs will be closed}}</translation> <translation id="8970887620466824814">Something went wrong.</translation> <translation id="8972098258593396643">Download to default folder?</translation> <translation id="8987641763863173640">Manage video preview settings</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 968bc8c..ff4c589 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
@@ -181,6 +181,7 @@ <translation id="2158408438301413340">Chrome no ha podido comprobar todas las contraseñas</translation> <translation id="2169830938017475061">Ahora</translation> <translation id="2172688499998841696">Las descripciones de imágenes están desactivadas</translation> +<translation id="2172905120685242547">¿Cerrar ventana?</translation> <translation id="2175927920773552910">Código QR</translation> <translation id="218608176142494674">Compartir</translation> <translation id="2195339740518523951">Obtener la seguridad más potente de Chrome</translation> @@ -280,6 +281,7 @@ <translation id="2779651927720337254">ha fallado</translation> <translation id="2781151931089541271">Queda 1 segundo</translation> <translation id="2788468313014644040">Número de grupo</translation> +<translation id="2800066122460699237">Se cerrará la pestaña <ph name="TAB_TITLE" /></translation> <translation id="2801022321632964776">Actualiza para incluir tu idioma en la última versión de Chrome</translation> <translation id="2805756323405976993">Aplicaciones</translation> <translation id="2806840421670364300">Aprendizaje federado de cohortes (FLoC)</translation> @@ -288,6 +290,7 @@ <translation id="2827278682606527653">Feed card menu half height</translation> <translation id="2830783625999891985">Contenido del portapapeles ocultado</translation> <translation id="2839327205551510876">Has dejado de seguir a <ph name="SITE_NAME" /></translation> +<translation id="2840810876587895427">{TAB_COUNT,plural, =1{Se cerrará <ph name="TAB_COUNT_ONE" /> pestaña de incógnito}other{Se cerrarán <ph name="TAB_COUNT_MANY" /> pestañas de incógnito}}</translation> <translation id="2841216154655874070">{NUM_DAYS,plural, =1{Comprobado hace 1 día}other{Comprobado hace # días}}</translation> <translation id="2842985007712546952">Carpeta principal</translation> <translation id="2856503607207334158">No se ha podido iniciar sesión</translation> @@ -673,6 +676,7 @@ <translation id="5222676887888702881">Cerrar sesión</translation> <translation id="5227554086496586518">Toca para ver los resultados de búsqueda</translation> <translation id="5233638681132016545">Nueva pestaña</translation> +<translation id="5235196193381275927">No se ha podido iniciar la sesión</translation> <translation id="5246093389635966745">Editar combinación de teclas de la barra de herramientas</translation> <translation id="5250483651202458397">Captura de pantalla. Toca para cerrarla.</translation> <translation id="5262378156578470238">Verás una notificación cuando esta descarga comience el <ph name="DATE" />.</translation> @@ -896,6 +900,7 @@ <translation id="6541983376925655882">{NUM_HOURS,plural, =1{Comprobado hace 1 hora}other{Comprobado hace # horas}}</translation> <translation id="6545017243486555795">Borrar todos los datos</translation> <translation id="6546511553472444032">Es posible que el archivo sea dañino</translation> +<translation id="6556542240154580383">{TAB_COUNT,plural, =1{Se cerrarán la pestaña <ph name="TAB_TITLE" /> y <ph name="TAB_COUNT_ONE" /> más}other{Se cerrarán la pestaña <ph name="TAB_TITLE" /> y <ph name="TAB_COUNT_MANY" /> más}}</translation> <translation id="6560414384669816528">Realizar búsquedas con Sogou</translation> <translation id="656065428026159829">Ver más</translation> <translation id="6565959834589222080">Se utiliza la red Wi‑Fi si está disponible</translation> @@ -936,6 +941,7 @@ <translation id="6767294960381293877">La lista de dispositivos con los que puedes compartir una pestaña está abierta y ocupa la mitad inferior de la pantalla.</translation> <translation id="6783942555455976443">Guardar esta página para después y recibir un recordatorio</translation> <translation id="6795633245022906657">Abre una pestaña nueva rápidamente. Para editar esta combinación de teclas, ve a Configuración.</translation> +<translation id="6802555630140434547">Se cerrará la ventana</translation> <translation id="6811034713472274749">Ya se puede ver la página</translation> <translation id="6813446258015311409">Inicia sesión en Chrome, abierto.</translation> <translation id="6817747507826986771">Comparte esta página rápidamente. Para editar este acceso directo, mantenlo pulsado.</translation> @@ -1163,6 +1169,7 @@ <translation id="8109613176066109935">Activa la sincronización para ver tus marcadores en todos tus dispositivos</translation> <translation id="8110087112193408731">¿Mostrar tu actividad de Chrome en Bienestar digital?</translation> <translation id="8127542551745560481">Editar página principal</translation> +<translation id="8130309322784422030">Es posible que la información de inicio de sesión almacenada esté obsoleta</translation> <translation id="813082847718468539">Ver información del sitio</translation> <translation id="8137558756159375272">La función Tocar para buscar envía la palabra seleccionada y la página actual como contexto a la Búsqueda de Google. Puedes desactivarla en la <ph name="BEGIN_LINK" />configuración<ph name="END_LINK" />.</translation> <translation id="8153351135626613369">El Asistente aparecerá cuando detecte que puede serte útil en sitios web compatibles</translation> @@ -1293,6 +1300,7 @@ <translation id="8945143127965743188"><ph name="LANG" />: este idioma no se ha podido descargar. Inténtalo de nuevo más tarde.</translation> <translation id="8951232171465285730">Chrome te ha permitido ahorrar <ph name="MEGABYTES" /> MB</translation> <translation id="8965591936373831584">pendiente</translation> +<translation id="8968085728801125376">{TAB_COUNT,plural, =1{Se cerrarán <ph name="INCOGNITO_TAB_COUNT" /> pestaña de incógnito y <ph name="TAB_COUNT_ONE" /> pestaña más}other{Se cerrarán <ph name="INCOGNITO_TAB_COUNT" /> pestaña de incógnito y <ph name="TAB_COUNT_MANY" /> pestañas más}}</translation> <translation id="8970887620466824814">Ha ocurrido un error.</translation> <translation id="8972098258593396643">¿Quieres descargarlo en la carpeta predeterminada?</translation> <translation id="8987641763863173640">Gestionar los ajustes de vista previa de vídeo</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb index f7f3feb..362b6862 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb
@@ -181,6 +181,7 @@ <translation id="2158408438301413340">Chrome'il ei õnnestunud kõiki paroole kontrollida</translation> <translation id="2169830938017475061">Kohe</translation> <translation id="2172688499998841696">Pildikirjeldused on välja lülitatud</translation> +<translation id="2172905120685242547">Kas sulgeda aken?</translation> <translation id="2175927920773552910">QR-kood</translation> <translation id="218608176142494674">Jagamine</translation> <translation id="2195339740518523951">Hankige Chrome'i parim turvatase</translation> @@ -280,6 +281,7 @@ <translation id="2779651927720337254">ebaõnnestus</translation> <translation id="2781151931089541271">Jäänud on 1 sekund</translation> <translation id="2788468313014644040">Grupi number</translation> +<translation id="2800066122460699237">Vaheleht <ph name="TAB_TITLE" /> suletakse</translation> <translation id="2801022321632964776">Oma keele kasutamiseks värskendage Chrome uusimale versioonile</translation> <translation id="2805756323405976993">Rakendused</translation> <translation id="2806840421670364300">FLoC</translation> @@ -288,6 +290,7 @@ <translation id="2827278682606527653">Voo kaardimenüü on poole kõrgusega</translation> <translation id="2830783625999891985">Lõikelaua sisu on peidetud</translation> <translation id="2839327205551510876">Saidi <ph name="SITE_NAME" /> jälgimine lõpetati</translation> +<translation id="2840810876587895427">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> inkognito vaheleht suletakse}other{<ph name="TAB_COUNT_MANY" /> inkognito vahelehte suletakse}}</translation> <translation id="2841216154655874070">{NUM_DAYS,plural, =1{Kontrolliti 1 päev tagasi}other{Kontrolliti # päeva tagasi}}</translation> <translation id="2842985007712546952">Emakaust</translation> <translation id="2856503607207334158">Sisselogimine ebaõnnestus</translation> @@ -673,6 +676,7 @@ <translation id="5222676887888702881">Logi välja</translation> <translation id="5227554086496586518">Puudutage otsingutulemuste nägemiseks</translation> <translation id="5233638681132016545">Uus vaheleht</translation> +<translation id="5235196193381275927">Sisselogimisel läks midagi valesti</translation> <translation id="5246093389635966745">Tööriistariba otsetee muutmine</translation> <translation id="5250483651202458397">Ekraanipilt. Puudutage sulgemiseks.</translation> <translation id="5262378156578470238">Kui see allalaadimine kuupäeval <ph name="DATE" /> algab, näete märguannet.</translation> @@ -896,6 +900,7 @@ <translation id="6541983376925655882">{NUM_HOURS,plural, =1{Kontrolliti 1 tund tagasi}other{Kontrolliti # tundi tagasi}}</translation> <translation id="6545017243486555795">Kustuta kõik andmed</translation> <translation id="6546511553472444032">Fail võib olla kahjulik</translation> +<translation id="6556542240154580383">{TAB_COUNT,plural, =1{<ph name="TAB_TITLE" /> ja veel <ph name="TAB_COUNT_ONE" /> vaheleht suletakse}other{<ph name="TAB_TITLE" /> ja veel <ph name="TAB_COUNT_MANY" /> vahelehte suletakse}}</translation> <translation id="6560414384669816528">Otsi teenusega Sogou</translation> <translation id="656065428026159829">Kuva rohkem</translation> <translation id="6565959834589222080">WiFi-t kasutatakse siis, kui see on saadaval</translation> @@ -936,6 +941,7 @@ <translation id="6767294960381293877">Vahelehe jagamise seadmete loend (poolel kõrgusel avatud).</translation> <translation id="6783942555455976443">Salvestage see leht hiljem kasutamiseks ja laske saata meeldetuletus</translation> <translation id="6795633245022906657">Uue vahelehe kiire avamine. Selle otsetee muutmiseks avage menüü Seaded.</translation> +<translation id="6802555630140434547">Aken suletakse</translation> <translation id="6811034713472274749">Leht on vaatamiseks valmis</translation> <translation id="6813446258015311409">Chrome'i sisselogimine, avatud.</translation> <translation id="6817747507826986771">Jagage kiirelt seda lehte. Selle otsetee muutmiseks puudutage pikalt.</translation> @@ -1163,6 +1169,7 @@ <translation id="8109613176066109935">Järjehoidjate kõigisse oma seadmetesse hankimiseks lülitage sünkroonimine sisse</translation> <translation id="8110087112193408731">Kas kuvada teie Chrome'i tegevused teenuses Digitaalne heaolu?</translation> <translation id="8127542551745560481">Avalehe muutmine</translation> +<translation id="8130309322784422030">Salvestatud sisselogimisteave võib olla aegunud</translation> <translation id="813082847718468539">Kuvab saidi teabe</translation> <translation id="8137558756159375272">Puudutamine otsimiseks saadab valitud sõna ja praeguse lehe kontekstina Google'i otsingusse. Saate selle välja lülitada jaotises <ph name="BEGIN_LINK" />Seaded<ph name="END_LINK" />.</translation> <translation id="8153351135626613369">Assistent ilmub siis, kui talle tundub, et ta saab teid toetatud veebisaitidel aidata</translation> @@ -1293,6 +1300,7 @@ <translation id="8945143127965743188"><ph name="LANG" /> – seda keelt ei saanud alla laadida. Proovige hiljem uuesti.</translation> <translation id="8951232171465285730">Chrome aitas teil säästa <ph name="MEGABYTES" /> MB andmemahtu</translation> <translation id="8965591936373831584">ootel</translation> +<translation id="8968085728801125376">{TAB_COUNT,plural, =1{<ph name="INCOGNITO_TAB_COUNT" /> inkognito ja veel <ph name="TAB_COUNT_ONE" /> vaheleht suletakse}other{<ph name="INCOGNITO_TAB_COUNT" /> inkognito ja veel <ph name="TAB_COUNT_MANY" /> vahelehte suletakse}}</translation> <translation id="8970887620466824814">Midagi läks valesti.</translation> <translation id="8972098258593396643">Kas soovite alla laadida vaikekausta?</translation> <translation id="8987641763863173640">Videoeelvaate seadete haldamine</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 58cfce2a..e6e28e5 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
@@ -181,6 +181,7 @@ <translation id="2158408438301413340">Chrome نتوانست همه گذرواژههایتان را بررسی کند</translation> <translation id="2169830938017475061">اکنون</translation> <translation id="2172688499998841696">توضیحات تصویر خاموش است</translation> +<translation id="2172905120685242547">پنجره بسته شود؟</translation> <translation id="2175927920773552910">رمزینه پاسخسریع</translation> <translation id="218608176142494674">همرسانی</translation> <translation id="2195339740518523951">بهرهمندی از بالاترین سطح امنیت در Chrome</translation> @@ -280,6 +281,7 @@ <translation id="2779651927720337254">انجام نشد</translation> <translation id="2781151931089541271">۱ ثانیه باقیمانده است</translation> <translation id="2788468313014644040">شماره گروه</translation> +<translation id="2800066122460699237">برگه <ph name="TAB_TITLE" /> بسته خواهد شد</translation> <translation id="2801022321632964776">با بهروزرسانی به جدیدترین نسخه Chrome، زبانتان را دریافت کنید</translation> <translation id="2805756323405976993">برنامهها</translation> <translation id="2806840421670364300">FLoC</translation> @@ -288,6 +290,7 @@ <translation id="2827278682606527653">منوی کارت فید تا نیمه باز شد</translation> <translation id="2830783625999891985">محتوای بریدهدان پنهان شد</translation> <translation id="2839327205551510876">دنبال کردن <ph name="SITE_NAME" /> لغو شد</translation> +<translation id="2840810876587895427">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> برگه ناشناس بسته خواهد شد}one{<ph name="TAB_COUNT_MANY" /> برگه ناشناس بسته خواهد شد}other{<ph name="TAB_COUNT_MANY" /> برگه ناشناس بسته خواهد شد}}</translation> <translation id="2841216154655874070">{NUM_DAYS,plural, =1{آخرین بررسی: ۱ روز قبل}one{آخرین بررسی: # روز قبل}other{آخرین بررسی: # روز قبل}}</translation> <translation id="2842985007712546952">پوشه اصلی</translation> <translation id="2856503607207334158">ورود به سیستم ناموفق بود</translation> @@ -673,6 +676,7 @@ <translation id="5222676887888702881">خروج از سیستم</translation> <translation id="5227554086496586518">برای دیدن نتایج جستجو ضربه بزنید</translation> <translation id="5233638681132016545">برگه جدید</translation> +<translation id="5235196193381275927">هنگام ورود به سیستم مشکلی پیش آمد</translation> <translation id="5246093389635966745">میانبر ویرایش نوار ابزار</translation> <translation id="5250483651202458397">نماگرفت. برای بستن ضربه بزنید.</translation> <translation id="5262378156578470238">هنگام شروع این بارگیری در <ph name="DATE" />، اعلانی خواهید دید.</translation> @@ -896,6 +900,7 @@ <translation id="6541983376925655882">{NUM_HOURS,plural, =1{آخرین بررسی: ۱ ساعت قبل}one{آخرین بررسی: # ساعت قبل}other{آخرین بررسی: # ساعت قبل}}</translation> <translation id="6545017243486555795">پاک کردن همه دادهها</translation> <translation id="6546511553472444032">ممکن است فایل مضر باشد</translation> +<translation id="6556542240154580383">{TAB_COUNT,plural, =1{<ph name="TAB_TITLE" /> و <ph name="TAB_COUNT_ONE" /> برگه دیگر بسته خواهند شد}one{<ph name="TAB_TITLE" /> و <ph name="TAB_COUNT_MANY" /> برگه دیگر بسته خواهند شد}other{<ph name="TAB_TITLE" /> و <ph name="TAB_COUNT_MANY" /> برگه دیگر بسته خواهند شد}}</translation> <translation id="6560414384669816528">جستجو با Sogou</translation> <translation id="656065428026159829">موارد بیشتر</translation> <translation id="6565959834589222080">استفاده از Wi-Fi هنگام دردسترس بودن</translation> @@ -936,6 +941,7 @@ <translation id="6767294960381293877">فهرست نیمهباز دستگاههایی که میتوان با آنها برگه همرسانی کرد.</translation> <translation id="6783942555455976443">این صفحه را برای خواندن در فرصتی دیگر ذخیره کنید و یادآوری دریافت کنید</translation> <translation id="6795633245022906657">بهسرعت برگه جدیدی باز کنید. برای ویرایش این میانبر، به «تنظیمات» بروید.</translation> +<translation id="6802555630140434547">این پنجره بسته خواهد شد</translation> <translation id="6811034713472274749">صفحه آماده مشاهده است</translation> <translation id="6813446258015311409">ورود به سیستم Chrome، باز شد.</translation> <translation id="6817747507826986771">بهسرعت این صفحه را همرسانی کنید. برای ویرایش این میانبر، لمس کنید و نگه دارید.</translation> @@ -1163,6 +1169,7 @@ <translation id="8109613176066109935">برای اینکه به نشانکها در همه دستگاههایتان دسترسی داشته باشید، همگامسازی را روشن کنید</translation> <translation id="8110087112193408731">فعالیت Chrome شما در «آسایش دیجیتالی» نشان داده شود؟</translation> <translation id="8127542551745560481">ویرایش صفحه اصلی</translation> +<translation id="8130309322784422030">ممکن است اطلاعات ذخیرهشده ورود به سیستم قدیمی باشد</translation> <translation id="813082847718468539">مشاهدهٔ اطلاعات سایت</translation> <translation id="8137558756159375272">«لمس برای جستجو» کلمه انتخاب شده و صفحه کنونی را به عنوان محتوای زمینه به جستجوی Google ارسال میکند. میتوانید آن را در <ph name="BEGIN_LINK" />تنظیمات<ph name="END_LINK" /> خاموش کنید.</translation> <translation id="8153351135626613369">وقتی «دستیار» تشخیص دهد در وبسایتهای پشتیبانیشده میتواند به شما کمک کند، ظاهر میشود</translation> @@ -1293,6 +1300,7 @@ <translation id="8945143127965743188"><ph name="LANG" /> - این زبان بارگیری نشد. بعداً دوباره امتحان کنید.</translation> <translation id="8951232171465285730">Chrome <ph name="MEGABYTES" /> مگابایت از دادههای شما را ذخیره کرده است</translation> <translation id="8965591936373831584">در انتظار</translation> +<translation id="8968085728801125376">{TAB_COUNT,plural, =1{<ph name="INCOGNITO_TAB_COUNT" /> برگه ناشناس و <ph name="TAB_COUNT_ONE" /> برگه دیگر بسته خواهند شد}one{<ph name="INCOGNITO_TAB_COUNT" /> برگه ناشناس و <ph name="TAB_COUNT_MANY" /> برگه دیگر بسته خواهند شد}other{<ph name="INCOGNITO_TAB_COUNT" /> برگه ناشناس و <ph name="TAB_COUNT_MANY" /> برگه دیگر بسته خواهند شد}}</translation> <translation id="8970887620466824814">مشکلی پیش آمد.</translation> <translation id="8972098258593396643">در پوشه پیشفرض بارگیری شود؟</translation> <translation id="8987641763863173640">مدیریت تنظیمات پیشدید ویدیو</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 5256bd4..4734524 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
@@ -181,6 +181,7 @@ <translation id="2158408438301413340">Chrome n'est pas parvenu à vérifier tous les mots de passe</translation> <translation id="2169830938017475061">Maintenant</translation> <translation id="2172688499998841696">Les descriptions d'images sont désactivées</translation> +<translation id="2172905120685242547">Fermer la fenêtre ?</translation> <translation id="2175927920773552910">Code QR</translation> <translation id="218608176142494674">Partage</translation> <translation id="2195339740518523951">Renforcer la sécurité de Chrome</translation> @@ -280,6 +281,7 @@ <translation id="2779651927720337254">échec</translation> <translation id="2781151931089541271">1 seconde restante</translation> <translation id="2788468313014644040">Numéro du groupe</translation> +<translation id="2800066122460699237">L'onglet <ph name="TAB_TITLE" /> sera fermé</translation> <translation id="2801022321632964776">Lancez la mise à jour pour obtenir votre langue dans la dernière version de Chrome</translation> <translation id="2805756323405976993">Applications</translation> <translation id="2806840421670364300">FLoC (Federated Learning of Cohorts)</translation> @@ -288,6 +290,7 @@ <translation id="2827278682606527653">Le menu de la carte de flux est ouvert à mi-hauteur</translation> <translation id="2830783625999891985">Contenu du presse-papiers masqué</translation> <translation id="2839327205551510876">Désabonné de <ph name="SITE_NAME" /></translation> +<translation id="2840810876587895427">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> onglet de navigation privée sera fermé}one{<ph name="TAB_COUNT_MANY" /> onglet de navigation privée sera fermé}other{<ph name="TAB_COUNT_MANY" /> onglets de navigation privée seront fermés}}</translation> <translation id="2841216154655874070">{NUM_DAYS,plural, =1{Vérification effectuée il y a 1 jour}one{Vérification effectuée il y a # jour}other{Vérification effectuée il y a # jours}}</translation> <translation id="2842985007712546952">Dossier parent</translation> <translation id="2856503607207334158">Échec de la connexion</translation> @@ -673,6 +676,7 @@ <translation id="5222676887888702881">Déconnexion</translation> <translation id="5227554086496586518">Appuyer pour afficher les résultats de recherche</translation> <translation id="5233638681132016545">Nouvel onglet</translation> +<translation id="5235196193381275927">Une erreur s'est produite lors de la connexion</translation> <translation id="5246093389635966745">Modifier le raccourci sur la barre d'outils</translation> <translation id="5250483651202458397">Capture d'écran. Appuyez pour fermer.</translation> <translation id="5262378156578470238">Vous recevrez une notification lorsque ce téléchargement débutera le <ph name="DATE" />.</translation> @@ -896,6 +900,7 @@ <translation id="6541983376925655882">{NUM_HOURS,plural, =1{Vérification effectuée il y a 1 heure}one{Vérification effectuée il y a # heure}other{Vérification effectuée il y a # heures}}</translation> <translation id="6545017243486555795">Supprimer toutes les données</translation> <translation id="6546511553472444032">Fichier potentiellement corrompu</translation> +<translation id="6556542240154580383">{TAB_COUNT,plural, =1{<ph name="TAB_TITLE" /> et <ph name="TAB_COUNT_ONE" /> autre onglet seront fermés}one{<ph name="TAB_TITLE" /> et <ph name="TAB_COUNT_MANY" /> autre onglet seront fermés}other{<ph name="TAB_TITLE" /> et <ph name="TAB_COUNT_MANY" /> autres onglets seront fermés}}</translation> <translation id="6560414384669816528">Rechercher avec Sogou</translation> <translation id="656065428026159829">Voir plus</translation> <translation id="6565959834589222080">Le réseau Wi-Fi est utilisé s'il est disponible</translation> @@ -936,6 +941,7 @@ <translation id="6767294960381293877">La liste des appareils avec lesquels vous pouvez partager un onglet est ouverte à mi-hauteur.</translation> <translation id="6783942555455976443">Enregistrer cette page pour plus tard et recevoir un rappel</translation> <translation id="6795633245022906657">Ouvrir rapidement un nouvel onglet. Pour modifier ce raccourci, accédez aux paramètres.</translation> +<translation id="6802555630140434547">La fenêtre sera fermée</translation> <translation id="6811034713472274749">La page est prête à être affichée</translation> <translation id="6813446258015311409">Se connecter à Chrome, ouvert.</translation> <translation id="6817747507826986771">Partagez rapidement cette page. Pour modifier ce raccourci, appuyez dessus de manière prolongée.</translation> @@ -1163,6 +1169,7 @@ <translation id="8109613176066109935">Activez la synchronisation pour accéder à vos favoris sur tous vos appareils</translation> <translation id="8110087112193408731">Afficher votre activité Chrome dans Bien-être numérique ?</translation> <translation id="8127542551745560481">Modifier la page d'accueil</translation> +<translation id="8130309322784422030">Les infos de connexion enregistrées sont peut-être obsolètes</translation> <translation id="813082847718468539">Afficher des informations à propos du site</translation> <translation id="8137558756159375272">La fonction "Appuyer pour rechercher" transmet le mot sélectionné et la page actuelle en tant que contexte vers la fonction de recherche Google. Vous pouvez la désactiver dans les <ph name="BEGIN_LINK" />paramètres<ph name="END_LINK" />.</translation> <translation id="8153351135626613369">L'Assistant s'affiche lorsqu'il détecte qu'il peut vous aider sur des sites Web compatibles</translation> @@ -1293,6 +1300,7 @@ <translation id="8945143127965743188"><ph name="LANG" /> - Impossible de télécharger cette langue. Réessayez plus tard.</translation> <translation id="8951232171465285730">Chrome vous a permis de gagner <ph name="MEGABYTES" /> Mo</translation> <translation id="8965591936373831584">en attente</translation> +<translation id="8968085728801125376">{TAB_COUNT,plural, =1{<ph name="INCOGNITO_TAB_COUNT" /> onglet de navigation privée et <ph name="TAB_COUNT_ONE" /> autre onglet seront supprimés}one{<ph name="INCOGNITO_TAB_COUNT" /> onglet de navigation privée et <ph name="TAB_COUNT_MANY" /> autre onglet seront supprimés}other{<ph name="INCOGNITO_TAB_COUNT" /> onglet de navigation privée et <ph name="TAB_COUNT_MANY" /> autres onglets seront supprimés}}</translation> <translation id="8970887620466824814">Un problème est survenu</translation> <translation id="8972098258593396643">Télécharger dans le dossier par défaut ?</translation> <translation id="8987641763863173640">Gérez les paramètres de l'aperçu vidéo</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 9fa40c7..f6df199 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
@@ -181,6 +181,7 @@ <translation id="2158408438301413340">Chrome nije uspio provjeriti sve zaporke</translation> <translation id="2169830938017475061">Sad</translation> <translation id="2172688499998841696">Isključeni su opisi slika</translation> +<translation id="2172905120685242547">Zatvoriti prozor?</translation> <translation id="2175927920773552910">QR kôd</translation> <translation id="218608176142494674">Dijeljenje</translation> <translation id="2195339740518523951">Odaberite najsnažniju Chromeovu zaštitu sigurnosti</translation> @@ -280,6 +281,7 @@ <translation id="2779651927720337254">nije uspjelo</translation> <translation id="2781151931089541271">Još 1 s</translation> <translation id="2788468313014644040">Broj grupe</translation> +<translation id="2800066122460699237">Zatvorit će se kartica <ph name="TAB_TITLE" /></translation> <translation id="2801022321632964776">Ažurirajte Chrome na najnoviju verziju za prikaz na vašem jeziku</translation> <translation id="2805756323405976993">Aplikacije</translation> <translation id="2806840421670364300">FLoC</translation> @@ -288,6 +290,7 @@ <translation id="2827278682606527653">Feed card menu half height</translation> <translation id="2830783625999891985">Sadržaj međumemorije je skriven</translation> <translation id="2839327205551510876">Prestali ste pratiti <ph name="SITE_NAME" /></translation> +<translation id="2840810876587895427">{TAB_COUNT,plural, =1{Zatvorit će se <ph name="TAB_COUNT_ONE" /> anonimna kartica}one{Zatvorit će se <ph name="TAB_COUNT_MANY" /> anonimna kartica}few{Zatvorit će se <ph name="TAB_COUNT_MANY" /> anonimne kartice}other{Zatvorit će se <ph name="TAB_COUNT_MANY" /> anonimnih kartica}}</translation> <translation id="2841216154655874070">{NUM_DAYS,plural, =1{Provjera je izvršena jučer}one{Provjera je izvršena prije # dana}few{Provjera je izvršena prije # dana}other{Provjera je izvršena prije # dana}}</translation> <translation id="2842985007712546952">Nadređena mapa</translation> <translation id="2856503607207334158">Prijava nije uspjela</translation> @@ -672,6 +675,7 @@ <translation id="5222676887888702881">Odjava</translation> <translation id="5227554086496586518">Dodirnite da biste vidjeli rezultate pretraživanja</translation> <translation id="5233638681132016545">Nova kartica</translation> +<translation id="5235196193381275927">Došlo je do pogreške tijekom prijave</translation> <translation id="5246093389635966745">Uređivanje prečaca alatne trake</translation> <translation id="5250483651202458397">Snimka zaslona. Dodirnite da biste zatvorili.</translation> <translation id="5262378156578470238">Obavijest će se prikazati <ph name="DATE" />, kad preuzimanje započne.</translation> @@ -895,6 +899,7 @@ <translation id="6541983376925655882">{NUM_HOURS,plural, =1{Provjera je izvršena prije sat vremena}one{Provjera je izvršena prije # sata}few{Provjera je izvršena prije # sata}other{Provjera je izvršena prije # sati}}</translation> <translation id="6545017243486555795">Izbriši sve podatke</translation> <translation id="6546511553472444032">Datoteka bi mogla biti štetna</translation> +<translation id="6556542240154580383">{TAB_COUNT,plural, =1{Zatvorit će se kartica <ph name="TAB_TITLE" /> i još <ph name="TAB_COUNT_ONE" /> kartica}one{Zatvorit će se kartica <ph name="TAB_TITLE" /> i još <ph name="TAB_COUNT_MANY" /> kartica}few{Zatvorit će se kartica <ph name="TAB_TITLE" /> i još <ph name="TAB_COUNT_MANY" /> kartice}other{Zatvorit će se kartica <ph name="TAB_TITLE" /> i još <ph name="TAB_COUNT_MANY" /> kartica}}</translation> <translation id="6560414384669816528">Pretražujte na usluzi Sogou</translation> <translation id="656065428026159829">Prikaži više</translation> <translation id="6565959834589222080">Wi-Fi se koristi kad je dostupan</translation> @@ -935,6 +940,7 @@ <translation id="6767294960381293877">Popis za odabir uređaja s kojim će se dijeliti kartica otvoren na pola visine.</translation> <translation id="6783942555455976443">Spremite stranicu za kasnije i postavite podsjetnik</translation> <translation id="6795633245022906657">Brzo otvorite novu karticu. Da biste uredili prečac, otvorite Postavke.</translation> +<translation id="6802555630140434547">Prozor će se zatvoriti</translation> <translation id="6811034713472274749">Stranica je spremna za prikaz</translation> <translation id="6813446258015311409">Prijava u Chrome; otvoreno.</translation> <translation id="6817747507826986771">Brzo podijelite ovu stranicu. Da biste uredili taj prečac, dodirnite ga i zadržite pritisak.</translation> @@ -1162,6 +1168,7 @@ <translation id="8109613176066109935">Da bi se vaše oznake prikazale na svim vašim uređajima, uključite sinkronizaciju</translation> <translation id="8110087112193408731">Želite li da se vaša aktivnost u Chromeu prikazuje u Digitalnoj ravnoteži?</translation> <translation id="8127542551745560481">Uređivanje početne stranice</translation> +<translation id="8130309322784422030">Pohranjeni podaci o prijavi možda su zastarjeli</translation> <translation id="813082847718468539">Prikaz informacija o web-mjestu</translation> <translation id="8137558756159375272">Značajka Dodirnite za pretraživanje Google pretraživanju šalje odabranu riječ i trenutačnu stranicu kao kontekst. Možete je isključiti u <ph name="BEGIN_LINK" />Postavkama<ph name="END_LINK" />.</translation> <translation id="8153351135626613369">Asistent će se pojaviti kad otkrije da vam može pomoći na podržanim web-lokacijama</translation> @@ -1292,6 +1299,7 @@ <translation id="8945143127965743188"><ph name="LANG" /> – preuzimanje tog jezika nije uspjelo. Pokušajte ponovo kasnije.</translation> <translation id="8951232171465285730">Chrome vam je uštedio <ph name="MEGABYTES" /> MB</translation> <translation id="8965591936373831584">na čekanju</translation> +<translation id="8968085728801125376">{TAB_COUNT,plural, =1{Bit će zatvorena <ph name="INCOGNITO_TAB_COUNT" /> anonimna i još <ph name="TAB_COUNT_ONE" /> kartica}one{Bit će zatvorena <ph name="INCOGNITO_TAB_COUNT" /> anonimna i još <ph name="TAB_COUNT_MANY" /> kartica}few{Bit će zatvorena <ph name="INCOGNITO_TAB_COUNT" /> anonimna i još <ph name="TAB_COUNT_MANY" /> kartice}other{Bit će zatvorena <ph name="INCOGNITO_TAB_COUNT" /> anonimna i još <ph name="TAB_COUNT_MANY" /> kartica}}</translation> <translation id="8970887620466824814">Nešto nije u redu.</translation> <translation id="8972098258593396643">Želite li preuzeti u zadanu mapu?</translation> <translation id="8987641763863173640">Upravljanje postavkama pregleda videozapisa</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb index fcb415e..7b178c6 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb
@@ -181,6 +181,7 @@ <translation id="2158408438301413340">A Chrome nem tudta ellenőrizni az összes jelszót</translation> <translation id="2169830938017475061">Most</translation> <translation id="2172688499998841696">A képleírások ki vannak kapcsolva</translation> +<translation id="2172905120685242547">Bezárja az ablakot?</translation> <translation id="2175927920773552910">QR-kód</translation> <translation id="218608176142494674">Megosztás</translation> <translation id="2195339740518523951">Állítsa be a Chrome legerősebb védelmét</translation> @@ -280,6 +281,7 @@ <translation id="2779651927720337254">sikertelen</translation> <translation id="2781151931089541271">1 másodperc van hátra</translation> <translation id="2788468313014644040">Csoportszám</translation> +<translation id="2800066122460699237">A lap (<ph name="TAB_TITLE" />) be lesz zárva</translation> <translation id="2801022321632964776">Frissítsen, hogy a saját nyelvén használhassa a Chrome legújabb verzióját</translation> <translation id="2805756323405976993">Alkalmazások</translation> <translation id="2806840421670364300">FLoC</translation> @@ -288,6 +290,7 @@ <translation id="2827278682606527653">A hírcsatornakártya menüje félmagasságban van megnyitva</translation> <translation id="2830783625999891985">A vágólap tartalma elrejtve</translation> <translation id="2839327205551510876">Felhagyott a(z) <ph name="SITE_NAME" /> követésével.</translation> +<translation id="2840810876587895427">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> inkognitó lap lesz bezárva}other{<ph name="TAB_COUNT_MANY" /> inkognitó lap lesz bezárva}}</translation> <translation id="2841216154655874070">{NUM_DAYS,plural, =1{1 napja ellenőrizve}other{# napja ellenőrizve}}</translation> <translation id="2842985007712546952">Szülőmappa</translation> <translation id="2856503607207334158">Sikertelen bejelentkezés</translation> @@ -673,6 +676,7 @@ <translation id="5222676887888702881">Kijelentkezés</translation> <translation id="5227554086496586518">Koppintson a keresési találatok megtekintéséhez</translation> <translation id="5233638681132016545">Új lap</translation> +<translation id="5235196193381275927">A bejelentkezés közben hiba történt</translation> <translation id="5246093389635966745">Eszköztár gyorsparancsainak szerkesztése</translation> <translation id="5250483651202458397">Képernyőkép. Koppintson a bezáráshoz.</translation> <translation id="5262378156578470238">Értesítést kap, amikor ez a letöltés elindul ekkor: <ph name="DATE" />.</translation> @@ -896,6 +900,7 @@ <translation id="6541983376925655882">{NUM_HOURS,plural, =1{1 órája ellenőrizve}other{# órája ellenőrizve}}</translation> <translation id="6545017243486555795">Összes adat törlése</translation> <translation id="6546511553472444032">A fájl kártékony lehet</translation> +<translation id="6556542240154580383">{TAB_COUNT,plural, =1{A(z) <ph name="TAB_TITLE" /> és <ph name="TAB_COUNT_ONE" /> másik lap be lesz zárva}other{A(z) <ph name="TAB_TITLE" /> és <ph name="TAB_COUNT_MANY" /> másik lap be lesz zárva}}</translation> <translation id="6560414384669816528">Keresés a Sogou használatával</translation> <translation id="656065428026159829">Továbbiak megjelenítése</translation> <translation id="6565959834589222080">Wi-Fi használata, ha rendelkezésre áll</translation> @@ -936,6 +941,7 @@ <translation id="6767294960381293877">Lap megosztására szolgáló eszközök listája félmagasságban megnyitva.</translation> <translation id="6783942555455976443">Az oldal mentése későbbre, és emlékeztető kérése</translation> <translation id="6795633245022906657">Új lap gyors megnyitása. A gyorsparancs szerkesztéséhez lépjen a Beálltásokhoz.</translation> +<translation id="6802555630140434547">Az ablak be lesz zárva</translation> <translation id="6811034713472274749">Az oldal megtekinthető</translation> <translation id="6813446258015311409">Bejelentkezés a Chrome-ba, megnyitva.</translation> <translation id="6817747507826986771">Az oldal gyors megosztása. A gyorsparancs szerkesztéséhez tartsa lenyomva.</translation> @@ -1163,6 +1169,7 @@ <translation id="8109613176066109935">Ha az összes eszközén szeretné elérni könyvjelzőit, kapcsolja be a szinkronizálást</translation> <translation id="8110087112193408731">Chrome-beli tevékenysége megjelenjen a digitális jóllét funkcióban?</translation> <translation id="8127542551745560481">Kezdőlap szerkesztése</translation> +<translation id="8130309322784422030">A tárolt bejelentkezési adatai elavultak lehetnek</translation> <translation id="813082847718468539">Az oldalinformációk megtekintése</translation> <translation id="8137558756159375272">Az Érintéssel keresés elküldi a kiválasztott szót és az aktuális oldalt kontextusként a Google Kereső számára. A funkciót a <ph name="BEGIN_LINK" />Beállítások<ph name="END_LINK" /> szakaszban kikapcsolhatja.</translation> <translation id="8153351135626613369">A Segéd megjelenik, amikor azt észleli, hogy segíteni tud a támogatott webhelyeken.</translation> @@ -1293,6 +1300,7 @@ <translation id="8945143127965743188"><ph name="LANG" /> – Ezt a nyelvet nem lehetett letölteni. Próbálja újra később.</translation> <translation id="8951232171465285730">A Chrome <ph name="MEGABYTES" /> MB-ot spórolt meg Önnek</translation> <translation id="8965591936373831584">függőben</translation> +<translation id="8968085728801125376">{TAB_COUNT,plural, =1{<ph name="INCOGNITO_TAB_COUNT" /> inkognitó és <ph name="TAB_COUNT_ONE" /> további lap lesz bezárva}other{<ph name="INCOGNITO_TAB_COUNT" /> inkognitó és <ph name="TAB_COUNT_MANY" /> további lap lesz bezárva}}</translation> <translation id="8970887620466824814">Hiba történt.</translation> <translation id="8972098258593396643">Letölti az alapértelmezett mappába?</translation> <translation id="8987641763863173640">Videó-előnézeti beállítások kezelése</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb index 1dcccd7..c8175b6 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb
@@ -181,6 +181,7 @@ <translation id="2158408438301413340">Chrome барлық құпия сөзді тексере алмады.</translation> <translation id="2169830938017475061">Қазір</translation> <translation id="2172688499998841696">Кескін сипаттамалары өшірулі.</translation> +<translation id="2172905120685242547">Терезені жабу керек пе?</translation> <translation id="2175927920773552910">QR коды</translation> <translation id="218608176142494674">Бөлісу</translation> <translation id="2195339740518523951">Chrome-ның ең мықты қауіпсіздік жүйесін алыңыз</translation> @@ -280,6 +281,7 @@ <translation id="2779651927720337254">қате шықты</translation> <translation id="2781151931089541271">1 сек қалды</translation> <translation id="2788468313014644040">Топ нөмірі</translation> +<translation id="2800066122460699237">"<ph name="TAB_TITLE" />" қойындысы жабылады.</translation> <translation id="2801022321632964776">Chrome браузерінің соңғы нұсқасын өз тіліңізде қолданғыңыз келсе, оны жаңартыңыз.</translation> <translation id="2805756323405976993">Қолданбалар</translation> <translation id="2806840421670364300">FLoC</translation> @@ -288,6 +290,7 @@ <translation id="2827278682606527653">Фид картасының мәзірі жартылай ашылды.</translation> <translation id="2830783625999891985">Буфердегі мазмұн жасырулы</translation> <translation id="2839327205551510876"><ph name="SITE_NAME" /> сайтына жазылудан бас тарттыңыз.</translation> +<translation id="2840810876587895427">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> инкогнито қойындысы жабылады.}other{<ph name="TAB_COUNT_MANY" /> инкогнито қойындысы жабылады.}}</translation> <translation id="2841216154655874070">{NUM_DAYS,plural, =1{1 күн бұрын тексерілді.}other{# күн бұрын тексерілді.}}</translation> <translation id="2842985007712546952">Түпкі қалта</translation> <translation id="2856503607207334158">Кіру сәтсіз аяқталды.</translation> @@ -673,6 +676,7 @@ <translation id="5222676887888702881">Шығу</translation> <translation id="5227554086496586518">Іздеу нәтижелерін көру үшін түртіңіз.</translation> <translation id="5233638681132016545">Жаңа қойынды</translation> +<translation id="5235196193381275927">Кіру кезінде бірдеңе дұрыс болмады.</translation> <translation id="5246093389635966745">Құралдар тақтасын өзгерту таңбашасы</translation> <translation id="5250483651202458397">Скриншот. Жабу үшін түртіңіз.</translation> <translation id="5262378156578470238">Жүктеп алу <ph name="DATE" /> күні басталғанда, хабарландыру шығады.</translation> @@ -896,6 +900,7 @@ <translation id="6541983376925655882">{NUM_HOURS,plural, =1{1 сағат бұрын тексерілді.}other{# сағат бұрын тексерілді.}}</translation> <translation id="6545017243486555795">Барлық деректерді өшіру</translation> <translation id="6546511553472444032">Файл зиянды болуы мүмкін</translation> +<translation id="6556542240154580383">{TAB_COUNT,plural, =1{"<ph name="TAB_TITLE" />" және тағы <ph name="TAB_COUNT_ONE" /> қойынды жабылады.}other{"<ph name="TAB_TITLE" />" және тағы <ph name="TAB_COUNT_MANY" /> қойынды жабылады.}}</translation> <translation id="6560414384669816528">Sogou қызметімен іздеу</translation> <translation id="656065428026159829">Басқаларын көру</translation> <translation id="6565959834589222080">Бар болса, Wi-Fi желісі пайдаланылады.</translation> @@ -936,6 +941,7 @@ <translation id="6767294960381293877">Қойынды жіберілетін құрылғылар тізімі жарты экранға ашылған.</translation> <translation id="6783942555455976443">Бұл бетті кейінірек көруге сақтап, еске салғыш алыңыз.</translation> <translation id="6795633245022906657">Жаңа қойындыны жылдам ашуға арналған. Бұл таңбашаны өзгерту үшін "Параметрлер" бөліміне өтіңіз.</translation> +<translation id="6802555630140434547">Терезе жабылады.</translation> <translation id="6811034713472274749">Бетті көре беруге болады.</translation> <translation id="6813446258015311409">Chrome-ға кіру, ашық.</translation> <translation id="6817747507826986771">Осы бетті жылдам бөлісу. Бұл жылдам пәрменді өзгерту үшін оны басып тұрыңыз.</translation> @@ -1163,6 +1169,7 @@ <translation id="8109613176066109935">Бетбелгілерді барлық құрылғылардан пайдалану үшін синхрондау функциясын қосыңыз</translation> <translation id="8110087112193408731">Digital Wellbeing қызметінде Chrome браузерін пайдалану деректері көрсетілсін бе?</translation> <translation id="8127542551745560481">Негізгі бетті өзгерту</translation> +<translation id="8130309322784422030">Сақталған кіру ақпараты ескі болуы мүмкін</translation> <translation id="813082847718468539">Сайт ақпаратын көру</translation> <translation id="8137558756159375272">Түртіп іздеу функциясы таңдалған сөз бен ағымдағы бетті контекст ретінде Google Search-ке жібереді. Оны <ph name="BEGIN_LINK" />Параметрлерде<ph name="END_LINK" /> өшіруіңізге болады.</translation> <translation id="8153351135626613369">Assistant жарамды веб-сайттарда көмектесе алатын жағдайда, оның терезесі пайда болады.</translation> @@ -1293,6 +1300,7 @@ <translation id="8945143127965743188"><ph name="LANG" /> – бұл тіл жүктеп алынбады. Кейінірек қайталап көріңіз.</translation> <translation id="8951232171465285730">Chrome браузері <ph name="MEGABYTES" /> МБ деректі сақтады</translation> <translation id="8965591936373831584">күтілуде</translation> +<translation id="8968085728801125376">{TAB_COUNT,plural, =1{<ph name="INCOGNITO_TAB_COUNT" /> инкогнито қойындысы және тағы <ph name="TAB_COUNT_ONE" /> қойынды жабылады.}other{<ph name="INCOGNITO_TAB_COUNT" /> инкогнито қойындысы және тағы <ph name="TAB_COUNT_MANY" /> қойынды жабылады.}}</translation> <translation id="8970887620466824814">Бірдеңе дұрыс болмады.</translation> <translation id="8972098258593396643">Әдепкі қалтаға жүктеп алынсын ба?</translation> <translation id="8987641763863173640">Бейнені алдын ала қарау параметрлерін басқару</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb index 4bfb0b4..1398cff 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb
@@ -181,6 +181,7 @@ <translation id="2158408438301413340">Chrome бардык сырсөздөрдү текшере алган жок.</translation> <translation id="2169830938017475061">Азыр</translation> <translation id="2172688499998841696">Сүрөттөмөлөр өчүк</translation> +<translation id="2172905120685242547">Терезе жабылсынбы?</translation> <translation id="2175927920773552910">QR коду</translation> <translation id="218608176142494674">Бөлүшүү</translation> <translation id="2195339740518523951">Chrome'дун эң күчтүү коопсуздук тутумун колдонуңуз</translation> @@ -280,6 +281,7 @@ <translation id="2779651927720337254">ката</translation> <translation id="2781151931089541271">1 сек. калды</translation> <translation id="2788468313014644040">Топтун номери</translation> +<translation id="2800066122460699237"><ph name="TAB_TITLE" /> өтмөгү жабылат</translation> <translation id="2801022321632964776">Chrome'дун акыркы версиясын жүктөп алып, аны эне тилиңизде колдонуңуз</translation> <translation id="2805756323405976993">Колдонмолор</translation> <translation id="2806840421670364300">FLoC</translation> @@ -288,6 +290,7 @@ <translation id="2827278682606527653">Түрмөктөгү меню экрандын жарымына чейин ачылды</translation> <translation id="2830783625999891985">Алмашуу буфериндеги мазмундар жашырылган</translation> <translation id="2839327205551510876">Төмөнкүгө көз салуу токтотулду: <ph name="SITE_NAME" /></translation> +<translation id="2840810876587895427">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> жашыруун өтмөк жабылат}other{<ph name="TAB_COUNT_MANY" /> жашыруун өтмөк жабылат}}</translation> <translation id="2841216154655874070">{NUM_DAYS,plural, =1{1 күн мурун текшерилди}other{# күн мурун текшерилди}}</translation> <translation id="2842985007712546952">Түпкү куржун</translation> <translation id="2856503607207334158">Кирүү ишке ашкан жок</translation> @@ -673,6 +676,7 @@ <translation id="5222676887888702881">Чыгуу</translation> <translation id="5227554086496586518">Издөө натыйжаларын көрүү үчүн таптап коюңуз</translation> <translation id="5233638681132016545">Жаңы өтмөк</translation> +<translation id="5235196193381275927">Кирүү учурунда бир жерден ката кетти</translation> <translation id="5246093389635966745">Куралдар тилкесинин ыкчам баскычын түзөтүү</translation> <translation id="5250483651202458397">Скриншот. Жабуу үчүн таптаңыз.</translation> <translation id="5262378156578470238">Бул файл <ph name="DATE" /> жүктөлүп алынып баштаганда билдирме аласыз.</translation> @@ -896,6 +900,7 @@ <translation id="6541983376925655882">{NUM_HOURS,plural, =1{1 саат мурда текшерилди}other{# саат мурда текшерилди}}</translation> <translation id="6545017243486555795">Бардык нерселерди өчүрүү</translation> <translation id="6546511553472444032">Файл кооптуу болушу мүмкүн</translation> +<translation id="6556542240154580383">{TAB_COUNT,plural, =1{<ph name="TAB_TITLE" /> жана дагы <ph name="TAB_COUNT_ONE" /> өтмөк жабылат}other{<ph name="TAB_TITLE" /> жана дагы <ph name="TAB_COUNT_MANY" /> өтмөк жабылат}}</translation> <translation id="6560414384669816528">Sogou менен издөө</translation> <translation id="656065428026159829">Дагы көрүү</translation> <translation id="6565959834589222080">Wi-Fi жеткиликтүү болгондо колдонулат</translation> @@ -936,6 +941,7 @@ <translation id="6767294960381293877">Жалпы түзмөктөрдүн тизмеси көрсөтүлгөн өтмөк экрандын жарымында ачылды.</translation> <translation id="6783942555455976443">Бул баракты кийинчерээк көрүү үчүн сактоо жана эскертме алуу</translation> <translation id="6795633245022906657">Жаңы өтмөктү ыкчам ачыңыз. Бул ыкчам баскычты түзөтүү үчүн жөндөөлөргө өтүңүз.</translation> +<translation id="6802555630140434547">Терезе жабылат</translation> <translation id="6811034713472274749">Барак карап чыгууга даяр</translation> <translation id="6813446258015311409">Chrome'го кириңиз. Ачылды.</translation> <translation id="6817747507826986771">Бул баракты ыкчам бөлүшүү. Бул ыкчам баскычты түзөтүү үчүн коё бербей басып туруңуз.</translation> @@ -1163,6 +1169,7 @@ <translation id="8109613176066109935">Кыстармаларды бардык түзмөктөрүңүздө колдонуу үчүн шайкештирүүнү күйгүзүңүз</translation> <translation id="8110087112193408731">Chrome'ду колдонуу дайын-даректериңиз Санариптик бакубаттык кызматында көрсөтүлсүнбү?</translation> <translation id="8127542551745560481">Башкы бетти түзөтүү</translation> +<translation id="8130309322784422030">Сакталган кирүү маалыматынын мөөнөтү өтүп кеткен окшойт</translation> <translation id="813082847718468539">Сайттын маалыматын карап көрүү</translation> <translation id="8137558756159375272">Тийип издөө тандалган сөздү жана учурдагы баракты контекст катары Google издөөгө жөнөтөт. Аны <ph name="BEGIN_LINK" />Жөндөөлөрдөн<ph name="END_LINK" /> өчүрө аласыз.</translation> <translation id="8153351135626613369">Жардамчы сизге жардам бере ала турган учурларда, колдоого алынган вебсайттарда ачылат</translation> @@ -1293,6 +1300,7 @@ <translation id="8945143127965743188"><ph name="LANG" /> - Бул тил жүктөлүп алынбай калды. Кийинчерээк кайталаңыз.</translation> <translation id="8951232171465285730">Chrome сизге <ph name="MEGABYTES" /> Мб үнөмдөп берди</translation> <translation id="8965591936373831584">күтүүдө</translation> +<translation id="8968085728801125376">{TAB_COUNT,plural, =1{<ph name="INCOGNITO_TAB_COUNT" /> жашыруун жана дагы <ph name="TAB_COUNT_ONE" /> өтмөк жабылат}other{<ph name="INCOGNITO_TAB_COUNT" /> жашыруун жана дагы <ph name="TAB_COUNT_MANY" /> өтмөк жабылат}}</translation> <translation id="8970887620466824814">Бир жерден ката кетти.</translation> <translation id="8972098258593396643">Демейки папкага жүктөлүп алынсынбы?</translation> <translation id="8987641763863173640">Видеону алдын ала көрүү жөндөөлөрүн башкарасыз</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb index d19352bb..a993a4d 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb
@@ -185,6 +185,7 @@ <translation id="218608176142494674">ਸਾਂਝਾਕਰਨ</translation> <translation id="2195339740518523951">Chrome ਦੀ ਸਭ ਤੋਂ ਮਜਬੂਤ ਸੁਰੱਖਿਆ ਪ੍ਰਾਪਤ ਕਰੋ</translation> <translation id="2200113223741723867">ਵਰਤੋਂ ਡਾਟੇ ਸੰਬੰਧੀ ਸਾਂਝੇਕਰਨ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ</translation> +<translation id="2218567645332692482">ਨੈਵੀਗੇਸ਼ਨਾਂ ਨੂੰ HTTPS 'ਤੇ ਅੱਪਗ੍ਰੇਡ ਕਰੋ ਅਤੇ ਇੰਝ ਕਰਨ ਨਾਲ ਉਨ੍ਹਾਂ ਸਾਈਟਾਂ ਦੇ ਲੋਡ ਹੋਣ ਤੋਂ ਪਹਿਲਾਂ ਤੁਹਾਨੂੰ ਚਿਤਾਵਨੀ ਮਿਲੇਗੀ ਜੋ ਇਸਦਾ ਸਮਰਥਨ ਨਹੀਂ ਕਰਦੀਆਂ</translation> <translation id="2227444325776770048"><ph name="USER_FULL_NAME" /> ਵਜੋਂ ਜਾਰੀ ਰੱਖੋ</translation> <translation id="2230777942707397948">ਖਾਲੀ ਵਿੰਡੋ</translation> <translation id="2239812875700136898">'ਡਿਸਕਵਰ' ਬਟਨ ਲਈ 'ਵਿਕਲਪ' ਤੋਂ ਆਪਣੀਆਂ ਕਹਾਣੀਆਂ ਨੂੰ ਕੰਟਰੋਲ ਕਰੋ</translation> @@ -1294,6 +1295,7 @@ <translation id="8965591936373831584">ਵਿਚਾਰ-ਅਧੀਨ</translation> <translation id="8970887620466824814">ਕੋਈ ਗੜਬੜ ਹੋ ਗਈ।</translation> <translation id="8972098258593396643">ਕੀ ਪੂਰਵ-ਨਿਰਧਾਰਤ ਫੋਲਡਰ ਵਿੱਚ ਡਾਊਨਲੋਡ ਕਰਨਾ ਹੈ?</translation> +<translation id="8987641763863173640">ਵੀਡੀਓ ਪੂਰਵ-ਝਲਕ ਸੈਟਿੰਗਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ</translation> <translation id="8988028529677883095">ਫ਼ੋਨ ਨੂੰ ਇੱਕ ਸੁਰੱਖਿਆ ਕੁੰਜੀ ਵਜੋਂ ਵਰਤੋ</translation> <translation id="8993760627012879038">ਇਨਕੋਗਨਿਟੋ ਮੋਡ ਵਿੱਚ ਇੱਕ ਨਵੀਂ ਟੈਬ ਖੋਲ੍ਹੋ</translation> <translation id="8996847606757455498">ਕੋਈ ਹੋਰ ਪ੍ਰਦਾਨਕ ਚੁਣੋ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb index 18c57cf..30abff9 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb
@@ -181,6 +181,7 @@ <translation id="2158408438301413340">Przeglądarce Chrome nie udało się sprawdzić wszystkich haseł</translation> <translation id="2169830938017475061">Przed chwilą</translation> <translation id="2172688499998841696">Opisy do obrazów są wyłączone</translation> +<translation id="2172905120685242547">Zamknąć okno?</translation> <translation id="2175927920773552910">Kod QR</translation> <translation id="218608176142494674">Udostępnianie</translation> <translation id="2195339740518523951">Korzystaj z najlepszych zabezpieczeń Chrome</translation> @@ -280,6 +281,7 @@ <translation id="2779651927720337254">Nie pobrano</translation> <translation id="2781151931089541271">Pozostała sekunda</translation> <translation id="2788468313014644040">Numer grupy</translation> +<translation id="2800066122460699237">Zostanie zamknięta karta <ph name="TAB_TITLE" /></translation> <translation id="2801022321632964776">Zaktualizuj Chrome do najnowszej wersji, by mieć w nim dostępny swój język</translation> <translation id="2805756323405976993">Aplikacje</translation> <translation id="2806840421670364300">Sfederowane uczenie się kohort</translation> @@ -288,6 +290,7 @@ <translation id="2827278682606527653">Menu karty kanału – połowa wysokości</translation> <translation id="2830783625999891985">Zawartość schowka została ukryta</translation> <translation id="2839327205551510876">Usunięto z obserwowanych: <ph name="SITE_NAME" /></translation> +<translation id="2840810876587895427">{TAB_COUNT,plural, =1{Zostanie zamknięta <ph name="TAB_COUNT_ONE" /> karta incognito}few{Zostaną zamknięte <ph name="TAB_COUNT_MANY" /> karty incognito}many{Zostanie zamkniętych <ph name="TAB_COUNT_MANY" /> kart incognito}other{Zostanie zamknięte <ph name="TAB_COUNT_MANY" /> karty incognito}}</translation> <translation id="2841216154655874070">{NUM_DAYS,plural, =1{Sprawdzano 1 dzień temu}few{Sprawdzano # dni temu}many{Sprawdzano # dni temu}other{Sprawdzano # dnia temu}}</translation> <translation id="2842985007712546952">Folder nadrzędny</translation> <translation id="2856503607207334158">Błąd logowania</translation> @@ -673,6 +676,7 @@ <translation id="5222676887888702881">Wyloguj się</translation> <translation id="5227554086496586518">Kliknij, aby zobaczyć wyniki wyszukiwania</translation> <translation id="5233638681132016545">Nowa karta</translation> +<translation id="5235196193381275927">Podczas logowania coś poszło nie tak</translation> <translation id="5246093389635966745">Edytuj skrót na pasku narzędzi</translation> <translation id="5250483651202458397">Zrzut ekranu. Kliknij, by zamknąć.</translation> <translation id="5262378156578470238">Gdy to pobieranie rozpocznie się <ph name="DATE" />, zobaczysz powiadomienie.</translation> @@ -896,6 +900,7 @@ <translation id="6541983376925655882">{NUM_HOURS,plural, =1{Sprawdzano godzinę temu}few{Sprawdzano # godziny temu}many{Sprawdzano # godzin temu}other{Sprawdzano # godziny temu}}</translation> <translation id="6545017243486555795">Wyczyść wszystkie dane</translation> <translation id="6546511553472444032">Plik może być szkodliwy</translation> +<translation id="6556542240154580383">{TAB_COUNT,plural, =1{Zostaną zamknięte karty: <ph name="TAB_TITLE" /> i <ph name="TAB_COUNT_ONE" /> inna}few{Zostaną zamknięte karty: <ph name="TAB_TITLE" /> i <ph name="TAB_COUNT_MANY" /> inne}many{Zostaną zamknięte karty: <ph name="TAB_TITLE" /> i <ph name="TAB_COUNT_MANY" /> innych}other{Zostaną zamknięte karty: <ph name="TAB_TITLE" /> i <ph name="TAB_COUNT_MANY" /> innej}}</translation> <translation id="6560414384669816528">Szukaj w Sogou</translation> <translation id="656065428026159829">Pokaż więcej</translation> <translation id="6565959834589222080">Sieć Wi-Fi jest używana, gdy jest dostępna</translation> @@ -936,6 +941,7 @@ <translation id="6767294960381293877">Lista urządzeń, którym udostępnisz kartę, jest otwarta na połowę wysokości.</translation> <translation id="6783942555455976443">Zapisz tę stronę na później i ustaw przypomnienie</translation> <translation id="6795633245022906657">Szybko otwórz nową kartę. Aby edytować ten skrót, otwórz Ustawienia.</translation> +<translation id="6802555630140434547">Okno zostanie zamknięte</translation> <translation id="6811034713472274749">Strona jest gotowa do wyświetlenia</translation> <translation id="6813446258015311409">Logowanie się w Chrome, otwarte.</translation> <translation id="6817747507826986771">Szybko udostępnij tę stronę. Aby edytować ten skrót, naciśnij i przytrzymaj.</translation> @@ -1163,6 +1169,7 @@ <translation id="8109613176066109935">Aby korzystać ze swoich zakładek na wszystkich urządzeniach, włącz synchronizację</translation> <translation id="8110087112193408731">Pokazywać Twoją aktywność w Chrome w Cyfrowej równowadze?</translation> <translation id="8127542551745560481">Edytuj stronę główną</translation> +<translation id="8130309322784422030">Twoje zapisane dane logowania mogą być nieaktualne</translation> <translation id="813082847718468539">Wyświetl informacje o witrynie</translation> <translation id="8137558756159375272">Funkcja „Dotknij, by wyszukać” wysyła zaznaczone słowo i bieżącą stronę jako kontekst do wyszukiwarki Google. Możesz ją wyłączyć w <ph name="BEGIN_LINK" />ustawieniach<ph name="END_LINK" />.</translation> <translation id="8153351135626613369">Asystent pojawi się, gdy wykryje, że może Ci pomóc (na obsługiwanych stronach)</translation> @@ -1293,6 +1300,7 @@ <translation id="8945143127965743188"><ph name="LANG" /> – nie udało się pobrać tego języka. Spróbuj później.</translation> <translation id="8951232171465285730">Chrome pozwolił Ci zaoszczędzić <ph name="MEGABYTES" /> MB</translation> <translation id="8965591936373831584">Oczekiwanie</translation> +<translation id="8968085728801125376">{TAB_COUNT,plural, =1{Zostaną zamknięte karty incognito (<ph name="INCOGNITO_TAB_COUNT" />) i <ph name="TAB_COUNT_ONE" /> inna}few{Zostaną zamknięte karty incognito (<ph name="INCOGNITO_TAB_COUNT" />) i <ph name="TAB_COUNT_MANY" /> inne}many{Zostaną zamknięte karty incognito (<ph name="INCOGNITO_TAB_COUNT" />) i <ph name="TAB_COUNT_MANY" /> innych}other{Zostaną zamknięte karty incognito (<ph name="INCOGNITO_TAB_COUNT" />) i <ph name="TAB_COUNT_MANY" /> innej}}</translation> <translation id="8970887620466824814">Coś poszło nie tak.</translation> <translation id="8972098258593396643">Czy pobrać do folderu domyślnego?</translation> <translation id="8987641763863173640">Zarządzaj ustawieniami podglądu wideo</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 f1910b8..930465d3 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
@@ -181,6 +181,7 @@ <translation id="2158408438301413340">Não foi possível verificar todas as senhas com o Chrome</translation> <translation id="2169830938017475061">Agora</translation> <translation id="2172688499998841696">As descrições de imagens estão desativadas</translation> +<translation id="2172905120685242547">Fechar a janela?</translation> <translation id="2175927920773552910">Código QR</translation> <translation id="218608176142494674">Compartilhamento</translation> <translation id="2195339740518523951">Usar o nível mais alto de segurança do Chrome</translation> @@ -280,6 +281,7 @@ <translation id="2779651927720337254">falha</translation> <translation id="2781151931089541271">Um segundo restante</translation> <translation id="2788468313014644040">Número do grupo</translation> +<translation id="2800066122460699237">A guia <ph name="TAB_TITLE" /> será fechada</translation> <translation id="2801022321632964776">Faça a atualização para usar a versão mais recente do Chrome no seu idioma</translation> <translation id="2805756323405976993">Apps</translation> <translation id="2806840421670364300">FLoC</translation> @@ -288,6 +290,7 @@ <translation id="2827278682606527653">O menu do card do feed está aberto pela metade</translation> <translation id="2830783625999891985">Conteúdo da área de transferência oculto</translation> <translation id="2839327205551510876">Parou de seguir <ph name="SITE_NAME" /></translation> +<translation id="2840810876587895427">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> guia anônima será fechada}one{<ph name="TAB_COUNT_MANY" /> guia anônima será fechada}other{<ph name="TAB_COUNT_MANY" /> guias anônimas serão fechadas}}</translation> <translation id="2841216154655874070">{NUM_DAYS,plural, =1{Verificado 1 dia atrás}one{Verificado # dia atrás}other{Verificado # dias atrás}}</translation> <translation id="2842985007712546952">Pasta mãe</translation> <translation id="2856503607207334158">Falha no login</translation> @@ -674,6 +677,7 @@ <translation id="5222676887888702881">Sair</translation> <translation id="5227554086496586518">Toque para ver os resultados da pesquisa</translation> <translation id="5233638681132016545">Nova guia</translation> +<translation id="5235196193381275927">Algo deu errado durante o login</translation> <translation id="5246093389635966745">Editar atalho da barra de ferramentas</translation> <translation id="5250483651202458397">Captura de tela. Toque para fechar.</translation> <translation id="5262378156578470238">Você receberá uma notificação quando o download começar, em <ph name="DATE" />.</translation> @@ -897,6 +901,7 @@ <translation id="6541983376925655882">{NUM_HOURS,plural, =1{Verificado 1 hora atrás}one{Verificado # hora atrás}other{Verificado # horas atrás}}</translation> <translation id="6545017243486555795">Limpar todos os dados</translation> <translation id="6546511553472444032">O arquivo pode ser nocivo</translation> +<translation id="6556542240154580383">{TAB_COUNT,plural, =1{A guia <ph name="TAB_TITLE" /> e <ph name="TAB_COUNT_ONE" /> outra serão fechadas}one{A guia <ph name="TAB_TITLE" /> e <ph name="TAB_COUNT_MANY" /> outra serão fechadas}other{A guia <ph name="TAB_TITLE" /> e <ph name="TAB_COUNT_MANY" /> outras serão fechadas}}</translation> <translation id="6560414384669816528">Pesquisar usando o Sogou</translation> <translation id="656065428026159829">Ver mais</translation> <translation id="6565959834589222080">O Wi-Fi será usado quando disponível</translation> @@ -937,6 +942,7 @@ <translation id="6767294960381293877">Lista de dispositivos com os quais é possível compartilhar uma guia aberta na metade da altura.</translation> <translation id="6783942555455976443">Salve esta página e receba uma notificação mais tarde</translation> <translation id="6795633245022906657">Abrir rapidamente uma nova guia. Para editar esse atalho, acesse as Configurações.</translation> +<translation id="6802555630140434547">A janela será fechada</translation> <translation id="6811034713472274749">A página já pode ser visualizada</translation> <translation id="6813446258015311409">Fazer login no Chrome, aberta.</translation> <translation id="6817747507826986771">Compartilhar esta página rapidamente. Para editar este atalho, toque e mantenha pressionado.</translation> @@ -1164,6 +1170,7 @@ <translation id="8109613176066109935">Para ter seus favoritos em todos os seus dispositivos, ative a sincronização</translation> <translation id="8110087112193408731">Mostrar sua atividade do Chrome no Bem-estar digital?</translation> <translation id="8127542551745560481">Editar página inicial</translation> +<translation id="8130309322784422030">Suas informações de login armazenadas podem estar desatualizadas</translation> <translation id="813082847718468539">Visualizar informações do site</translation> <translation id="8137558756159375272">A "Pesquisa por toque" envia a palavra selecionada e a página atual como contexto para a Pesquisa Google. Desative esse recurso em <ph name="BEGIN_LINK" />Configurações<ph name="END_LINK" />.</translation> <translation id="8153351135626613369">O Assistente será exibido quando ele detectar que pode oferecer ajuda nos sites compatíveis</translation> @@ -1294,6 +1301,7 @@ <translation id="8945143127965743188"><ph name="LANG" />: não foi possível fazer o download desse idioma. Tente novamente mais tarde.</translation> <translation id="8951232171465285730">O Chrome economizou <ph name="MEGABYTES" /> MB</translation> <translation id="8965591936373831584">pendente</translation> +<translation id="8968085728801125376">{TAB_COUNT,plural, =1{<ph name="INCOGNITO_TAB_COUNT" /> guia anônima e <ph name="TAB_COUNT_ONE" /> outra serão fechadas}one{<ph name="INCOGNITO_TAB_COUNT" /> guia anônima e <ph name="TAB_COUNT_MANY" /> outra serão fechadas}other{<ph name="INCOGNITO_TAB_COUNT" /> guia anônima e <ph name="TAB_COUNT_MANY" /> outras serão fechadas}}</translation> <translation id="8970887620466824814">Algo deu errado.</translation> <translation id="8972098258593396643">Fazer o download para a pasta padrão?</translation> <translation id="8987641763863173640">Gerenciar configurações de prévia de vídeos</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb index e583633..9fa6851 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb
@@ -181,6 +181,7 @@ <translation id="2158408438301413340">Chrome nu a putut verifica toate parolele</translation> <translation id="2169830938017475061">Acum</translation> <translation id="2172688499998841696">Descrierile imaginilor sunt dezactivate</translation> +<translation id="2172905120685242547">Închizi fereastra?</translation> <translation id="2175927920773552910">Cod QR</translation> <translation id="218608176142494674">Trimitere</translation> <translation id="2195339740518523951">Beneficiază de cel mai înalt nivel de securitate de la Chrome</translation> @@ -280,6 +281,7 @@ <translation id="2779651927720337254">nereușită</translation> <translation id="2781151931089541271">1 sec. rămasă</translation> <translation id="2788468313014644040">Numărul grupului</translation> +<translation id="2800066122460699237">Fila <ph name="TAB_TITLE" /> va fi închisă</translation> <translation id="2801022321632964776">Actualizează pentru a descărca limba ta în cea mai recentă versiune de Chrome</translation> <translation id="2805756323405976993">Aplicații</translation> <translation id="2806840421670364300">ÎFG</translation> @@ -288,6 +290,7 @@ <translation id="2827278682606527653">Meniul cardului din feed la jumătate din înălțime</translation> <translation id="2830783625999891985">Conținutul clipboardului este ascuns</translation> <translation id="2839327205551510876">Ai anulat urmărirea pentru <ph name="SITE_NAME" /></translation> +<translation id="2840810876587895427">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> filă incognito va fi închisă}few{<ph name="TAB_COUNT_MANY" /> file incognito vor fi închise}other{<ph name="TAB_COUNT_MANY" /> de file incognito vor fi închise}}</translation> <translation id="2841216154655874070">{NUM_DAYS,plural, =1{A rulat acum o zi}few{A rulat acum # zile}other{A rulat acum # de zile}}</translation> <translation id="2842985007712546952">Dosar părinte</translation> <translation id="2856503607207334158">Nu te-ai conectat</translation> @@ -673,6 +676,7 @@ <translation id="5222676887888702881">Deconectează-te</translation> <translation id="5227554086496586518">Atinge pentru a vedea rezultatele căutării</translation> <translation id="5233638681132016545">Filă nouă</translation> +<translation id="5235196193381275927">A apărut o eroare la conectare</translation> <translation id="5246093389635966745">Editează comanda rapidă pentru bara de instrumente</translation> <translation id="5250483651202458397">Captură de ecran. Atinge pentru a închide.</translation> <translation id="5262378156578470238">Vei primi o notificare când începe descărcarea, la <ph name="DATE" />.</translation> @@ -896,6 +900,7 @@ <translation id="6541983376925655882">{NUM_HOURS,plural, =1{A rulat acum o oră}few{A rulat acum # ore}other{A rulat acum # de ore}}</translation> <translation id="6545017243486555795">Șterge toate datele</translation> <translation id="6546511553472444032">Fișierul poate fi dăunător</translation> +<translation id="6556542240154580383">{TAB_COUNT,plural, =1{<ph name="TAB_TITLE" /> și încă <ph name="TAB_COUNT_ONE" /> filă vor fi închise}few{<ph name="TAB_TITLE" /> și încă <ph name="TAB_COUNT_MANY" /> file vor fi închise}other{<ph name="TAB_TITLE" /> și încă <ph name="TAB_COUNT_MANY" /> de file vor fi închise}}</translation> <translation id="6560414384669816528">Caută cu Sogou</translation> <translation id="656065428026159829">Vezi mai multe</translation> <translation id="6565959834589222080">Conexiunea Wi-Fi este folosită când este disponibilă</translation> @@ -936,6 +941,7 @@ <translation id="6767294960381293877">Lista de dispozitive pe care să trimiți o filă este deschisă la jumătate din înălțime.</translation> <translation id="6783942555455976443">Salvează această pagină pentru mai târziu și primește un memento</translation> <translation id="6795633245022906657">Deschide rapid o filă nouă. Pentru a edita comanda rapidă, accesează setările.</translation> +<translation id="6802555630140434547">Fereastra va fi închisă</translation> <translation id="6811034713472274749">Pagina este gata de vizualizare</translation> <translation id="6813446258015311409">Conectează-te la Chrome, deschis.</translation> <translation id="6817747507826986771">Distribuie rapid pagina. Pentru a edita comanda rapidă, atinge-o lung.</translation> @@ -1163,6 +1169,7 @@ <translation id="8109613176066109935">Pentru a accesa marcajele pe toate dispozitivele, activează sincronizarea</translation> <translation id="8110087112193408731">Afișezi activitatea din Chrome în Bunăstare digitală?</translation> <translation id="8127542551745560481">Editează pagina de pornire</translation> +<translation id="8130309322784422030">Este posibil ca informațiile de conectare stocate să fie învechite</translation> <translation id="813082847718468539">Afișează informațiile privind site-ul</translation> <translation id="8137558756159375272">Funcția Atinge pentru a căuta trimite cuvântul selectat și pagina actuală drept context către Căutare Google. Poți dezactiva această funcție din <ph name="BEGIN_LINK" />Setări<ph name="END_LINK" />.</translation> <translation id="8153351135626613369">Asistentul va apărea când detectează că ai nevoie de ajutor pe site-urile acceptate</translation> @@ -1293,6 +1300,7 @@ <translation id="8945143127965743188"><ph name="LANG" /> – Limba nu a putut fi descărcată. Încearcă din nou mai târziu.</translation> <translation id="8951232171465285730">Chrome a economisit <ph name="MEGABYTES" /> MB</translation> <translation id="8965591936373831584">în așteptare</translation> +<translation id="8968085728801125376">{TAB_COUNT,plural, =1{<ph name="INCOGNITO_TAB_COUNT" /> filă incognito și încă <ph name="TAB_COUNT_ONE" /> filă vor fi închise}few{<ph name="INCOGNITO_TAB_COUNT" /> filă incognito și încă <ph name="TAB_COUNT_MANY" /> file vor fi închise}other{<ph name="INCOGNITO_TAB_COUNT" /> filă incognito și încă <ph name="TAB_COUNT_MANY" /> de file vor fi închise}}</translation> <translation id="8970887620466824814">A apărut o eroare.</translation> <translation id="8972098258593396643">Descarci în dosarul prestabilit?</translation> <translation id="8987641763863173640">Gestionează setările pentru previzualizarea videoclipurilor</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb index d09d256..49330ce 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb
@@ -181,6 +181,7 @@ <translation id="2158408438301413340">Chromu sa nepodarilo skontrolovať všetky heslá</translation> <translation id="2169830938017475061">Teraz</translation> <translation id="2172688499998841696">Popisy obrázkov sú vypnuté</translation> +<translation id="2172905120685242547">Chcete zavrieť okno?</translation> <translation id="2175927920773552910">QR kód</translation> <translation id="218608176142494674">Zdieľanie</translation> <translation id="2195339740518523951">Získajte najsilnejšie zabezpečenie Chromu</translation> @@ -280,6 +281,7 @@ <translation id="2779651927720337254">neúspešné</translation> <translation id="2781151931089541271">Zostáva: 1 s</translation> <translation id="2788468313014644040">Číslo skupiny</translation> +<translation id="2800066122460699237">Karta <ph name="TAB_TITLE" /> bude zavretá</translation> <translation id="2801022321632964776">Ak chcete získať svoj jazyk v najnovšej verzii Chromu, aktualizujte ho</translation> <translation id="2805756323405976993">Aplikácie</translation> <translation id="2806840421670364300">FLoC</translation> @@ -288,6 +290,7 @@ <translation id="2827278682606527653">Ponuka karty feedu je otvorená do polovice</translation> <translation id="2830783625999891985">Obsah schránky je skrytý</translation> <translation id="2839327205551510876">Zrušili ste sledovanie webu <ph name="SITE_NAME" /></translation> +<translation id="2840810876587895427">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> karta inkognito bude zavretá}few{<ph name="TAB_COUNT_MANY" /> karty inkognito budú zavreté}many{<ph name="TAB_COUNT_MANY" /> incognito tabs will be closed}other{<ph name="TAB_COUNT_MANY" /> kariet inkognito bude zavretých}}</translation> <translation id="2841216154655874070">{NUM_DAYS,plural, =1{Kontrola prebehla včera}few{Kontrola prebehla pred # dňami}many{Kontrola prebehla pred # dňa}other{Kontrola prebehla pred # dňami}}</translation> <translation id="2842985007712546952">Nadradený priečinok</translation> <translation id="2856503607207334158">Nepodarilo sa prihlásiť</translation> @@ -673,6 +676,7 @@ <translation id="5222676887888702881">Odhlásiť sa</translation> <translation id="5227554086496586518">Klepnutím zobrazíte výsledky vyhľadávania</translation> <translation id="5233638681132016545">Nová karta</translation> +<translation id="5235196193381275927">Počas prihlasovania sa vyskytla chyba</translation> <translation id="5246093389635966745">Skratka na úpravy panela s nástrojmi</translation> <translation id="5250483651202458397">Snímka obrazovky. Zavriete klepnutím.</translation> <translation id="5262378156578470238">Keď sa toto sťahovanie <ph name="DATE" /> začne, zobrazí sa vám upozornenie.</translation> @@ -896,6 +900,7 @@ <translation id="6541983376925655882">{NUM_HOURS,plural, =1{Kontrola prebehla pred hodinou}few{Kontrola prebehla pred # hodinami}many{Kontrola prebehla pred # hodiny}other{Kontrola prebehla pred # hodinami}}</translation> <translation id="6545017243486555795">Vymazať všetky dáta</translation> <translation id="6546511553472444032">Súbor môže byť škodlivý</translation> +<translation id="6556542240154580383">{TAB_COUNT,plural, =1{<ph name="TAB_TITLE" /> a <ph name="TAB_COUNT_ONE" /> ďalšia karta budú zavreté}few{<ph name="TAB_TITLE" /> a <ph name="TAB_COUNT_MANY" /> ďalšie karty budú zavreté}many{<ph name="TAB_TITLE" /> and <ph name="TAB_COUNT_MANY" /> more tabs will be closed}other{<ph name="TAB_TITLE" /> a <ph name="TAB_COUNT_MANY" /> ďalších kariet budú zavreté}}</translation> <translation id="6560414384669816528">Vyhľadávať pomocou Sogou</translation> <translation id="656065428026159829">Zobraziť viac</translation> <translation id="6565959834589222080">Wi-Fi sa použije, keď bude k dispozícii</translation> @@ -936,6 +941,7 @@ <translation id="6767294960381293877">Zoznam zariadení, s ktorými sa má zdieľať karta, je otvorený na polovičnú výšku.</translation> <translation id="6783942555455976443">Uložte si túto stranu na neskôr a dostanete pripomenutie</translation> <translation id="6795633245022906657">Skratka na rýchle otvorenie novej karty. Ak chcete skratku upraviť, prejdite do Nastavení.</translation> +<translation id="6802555630140434547">Okno bude zavreté</translation> <translation id="6811034713472274749">Stránka je pripravená na prezeranie</translation> <translation id="6813446258015311409">Prihlásenie sa do Chromu, otvorené.</translation> <translation id="6817747507826986771">Skratka na rýchle zdieľanie tejto stránky. Ak ju chcete upraviť, pridržte ju.</translation> @@ -1163,6 +1169,7 @@ <translation id="8109613176066109935">Ak chcete získať záložky vo všetkých zariadeniach, zapnite synchronizáciu</translation> <translation id="8110087112193408731">Chcete v digitálnej rovnováhe zobrazovať svoju aktivitu v Chrome?</translation> <translation id="8127542551745560481">Upraviť domovskú stránku</translation> +<translation id="8130309322784422030">Vaše uložené prihlasovacie údaje môžu byť zastarané</translation> <translation id="813082847718468539">Zobraziť informácie o stránkach</translation> <translation id="8137558756159375272">Funkcia vyhľadávania klepnutím odošle vybrané slovo a súčasnú stránku ako kontext do Vyhľadávania Google. Môžete ju vypnúť v <ph name="BEGIN_LINK" />Nastaveniach<ph name="END_LINK" />.</translation> <translation id="8153351135626613369">Asistent sa zobrazí, keď rozpozná, že vám môže pomôcť na podporovaných weboch</translation> @@ -1293,6 +1300,7 @@ <translation id="8945143127965743188"><ph name="LANG" /> – tento jazyk sa nedá stiahnuť. Skúste to neskôr.</translation> <translation id="8951232171465285730">Chrome ušetril <ph name="MEGABYTES" /> MB</translation> <translation id="8965591936373831584">nespracované</translation> +<translation id="8968085728801125376">{TAB_COUNT,plural, =1{<ph name="INCOGNITO_TAB_COUNT" /> inkognito a <ph name="TAB_COUNT_ONE" /> ďalšia karta budú zavreté}few{<ph name="INCOGNITO_TAB_COUNT" /> inkognito a <ph name="TAB_COUNT_MANY" /> ďalšie karty budú zavreté}many{<ph name="INCOGNITO_TAB_COUNT" /> incognito and <ph name="TAB_COUNT_MANY" /> more tabs will be closed}other{<ph name="INCOGNITO_TAB_COUNT" /> inkognito a <ph name="TAB_COUNT_MANY" /> ďalších kariet budú zavreté}}</translation> <translation id="8970887620466824814">Vyskytol sa problém.</translation> <translation id="8972098258593396643">Stiahnuť do predvoleného priečinka?</translation> <translation id="8987641763863173640">Spravujte nastavenia ukážok videa</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb index 791026e..9da171f 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb
@@ -181,6 +181,7 @@ <translation id="2158408438301413340">Chrome ni mogel preveriti vseh gesel</translation> <translation id="2169830938017475061">Zdaj</translation> <translation id="2172688499998841696">Opisi slik so izklopljeni</translation> +<translation id="2172905120685242547">Želite zapreti okno?</translation> <translation id="2175927920773552910">Koda QR</translation> <translation id="218608176142494674">Deljenje z drugimi</translation> <translation id="2195339740518523951">Izberite Chromovo najmočnejšo varnost</translation> @@ -280,6 +281,7 @@ <translation id="2779651927720337254">ni uspelo</translation> <translation id="2781151931089541271">Še 1 s</translation> <translation id="2788468313014644040">Številka skupine</translation> +<translation id="2800066122460699237">Zavihek <ph name="TAB_TITLE" /> bo zaprt.</translation> <translation id="2801022321632964776">Posodobite Chrome na najnovejšo različico, če ga želite v svojem jeziku</translation> <translation id="2805756323405976993">Aplikacije</translation> <translation id="2806840421670364300">FLoC</translation> @@ -288,6 +290,7 @@ <translation id="2827278682606527653">Meni kartice vira je odprt pri pol višine</translation> <translation id="2830783625999891985">Vsebina odložišča je skrita</translation> <translation id="2839327205551510876">Spremljanje <ph name="SITE_NAME" /> je preklicano.</translation> +<translation id="2840810876587895427">{TAB_COUNT,plural, =1{Zaprt bo <ph name="TAB_COUNT_ONE" /> anonimni zavihek.}one{Zaprt bo <ph name="TAB_COUNT_MANY" /> anonimni zavihek.}two{Zaprta bosta <ph name="TAB_COUNT_MANY" /> anonimna zavihka.}few{Zaprti bodo <ph name="TAB_COUNT_MANY" /> anonimni zavihki.}other{Zaprtih bo <ph name="TAB_COUNT_MANY" /> anonimnih zavihkov.}}</translation> <translation id="2841216154655874070">{NUM_DAYS,plural, =1{Preverjeno pred 1 dnevom}one{Preverjeno pred # dnevom}two{Preverjeno pred # dnevoma}few{Preverjeno pred # dnevi}other{Preverjeno pred # dnevi}}</translation> <translation id="2842985007712546952">Nadrejena mapa</translation> <translation id="2856503607207334158">Prijava ni uspela</translation> @@ -673,6 +676,7 @@ <translation id="5222676887888702881">Odjava</translation> <translation id="5227554086496586518">Dotaknite se, če želite prikazati rezultate iskanja</translation> <translation id="5233638681132016545">Nov zavihek</translation> +<translation id="5235196193381275927">Med prijavo je prišlo do težave.</translation> <translation id="5246093389635966745">Urejanje bližnjice orodne vrstice</translation> <translation id="5250483651202458397">Posnetek zaslona. Dotaknite se, če ga želite zapreti.</translation> <translation id="5262378156578470238">Ko se ta prenos začne <ph name="DATE" />, bo prikazano obvestilo.</translation> @@ -896,6 +900,7 @@ <translation id="6541983376925655882">{NUM_HOURS,plural, =1{Preverjeno pred 1 uro}one{Preverjeno pred # uro}two{Preverjeno pred # urama}few{Preverjeno pred # urami}other{Preverjeno pred # urami}}</translation> <translation id="6545017243486555795">Izbris vseh podatkov</translation> <translation id="6546511553472444032">Datoteka je morda škodljiva</translation> +<translation id="6556542240154580383">{TAB_COUNT,plural, =1{Zaprt bo zavihek <ph name="TAB_TITLE" /> in še <ph name="TAB_COUNT_ONE" />.}one{Zaprt bo zavihek <ph name="TAB_TITLE" /> in še <ph name="TAB_COUNT_MANY" />.}two{Zaprt bo zavihek <ph name="TAB_TITLE" /> in še <ph name="TAB_COUNT_MANY" />.}few{Zaprt bo zavihek <ph name="TAB_TITLE" /> in še <ph name="TAB_COUNT_MANY" />.}other{Zaprt bo zavihek <ph name="TAB_TITLE" /> in še <ph name="TAB_COUNT_MANY" />.}}</translation> <translation id="6560414384669816528">Iskanje z iskalnikom Sogou</translation> <translation id="656065428026159829">Prikaži več</translation> <translation id="6565959834589222080">Wi-Fi se uporablja, ko je na voljo</translation> @@ -936,6 +941,7 @@ <translation id="6767294960381293877">Seznam naprav, s katerimi želite deliti zavihek, odprt pri polovični višini.</translation> <translation id="6783942555455976443">Shranite to stran za pozneje in prejmite opomnik</translation> <translation id="6795633245022906657">Hitro odprite nov zavihek. To bližnjico lahko uredite v nastavitvah.</translation> +<translation id="6802555630140434547">Okno bo zaprto.</translation> <translation id="6811034713472274749">Stran je pripravljena za ogled</translation> <translation id="6813446258015311409">Prijava v Chrome, odprto.</translation> <translation id="6817747507826986771">Hitro delite to stran. Če želite urediti to bližnjico, pridržite.</translation> @@ -1163,6 +1169,7 @@ <translation id="8109613176066109935">Če želite dostopati do zaznamkov v vseh napravah, vklopite sinhronizacijo</translation> <translation id="8110087112193408731">Ali želite svojo dejavnost v Chromu prikazati v Digitalni dobrobiti?</translation> <translation id="8127542551745560481">Urejanje domače strani</translation> +<translation id="8130309322784422030">Shranjeni podatki za prijavo so morda zastareli.</translation> <translation id="813082847718468539">Ogled podatkov o mestu</translation> <translation id="8137558756159375272">»Dotaknite se za iskanje« pošlje izbrano besedo in trenutno strank kot kontekst Iskanju Google. To lahko izklopite v <ph name="BEGIN_LINK" />nastavitvah<ph name="END_LINK" />.</translation> <translation id="8153351135626613369">Pomočnik se bo prikazal, ko bo zaznal, da vam lahko pomaga na podprtih spletnih mestih.</translation> @@ -1293,6 +1300,7 @@ <translation id="8945143127965743188"><ph name="LANG" /> – tega jezika ni bilo mogoče prenesti. Poskusite pozneje.</translation> <translation id="8951232171465285730">S Chromom ste prihranili <ph name="MEGABYTES" /> MB</translation> <translation id="8965591936373831584">poteka</translation> +<translation id="8968085728801125376">{TAB_COUNT,plural, =1{Zaprt bo <ph name="INCOGNITO_TAB_COUNT" /> anonimni zavihek in še <ph name="TAB_COUNT_ONE" />.}one{Zaprt bo <ph name="INCOGNITO_TAB_COUNT" /> anonimni zavihek in še <ph name="TAB_COUNT_MANY" />.}two{Zaprta bosta <ph name="INCOGNITO_TAB_COUNT" /> anonimna zavihka in še <ph name="TAB_COUNT_MANY" />.}few{Zaprti bodo <ph name="INCOGNITO_TAB_COUNT" /> anonimni zavihki in še <ph name="TAB_COUNT_MANY" />.}other{Zaprtih bo <ph name="INCOGNITO_TAB_COUNT" /> anonimnih zavihkov in še <ph name="TAB_COUNT_MANY" />.}}</translation> <translation id="8970887620466824814">Prišlo je do napake.</translation> <translation id="8972098258593396643">Želite prenesti v privzeto mapo?</translation> <translation id="8987641763863173640">Upravljanje nastavitev predogleda videoposnetkov</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb index 729557aa..83d8344 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb
@@ -181,6 +181,7 @@ <translation id="2158408438301413340">Chrome nije uspeo da proveri sve lozinke</translation> <translation id="2169830938017475061">Sada</translation> <translation id="2172688499998841696">Opisi slika su isključeni</translation> +<translation id="2172905120685242547">Želite da zatvorite prozor?</translation> <translation id="2175927920773552910">QR kôd</translation> <translation id="218608176142494674">Deljenje</translation> <translation id="2195339740518523951">Nabavite najjaču zaštitu u Chrome-u</translation> @@ -280,6 +281,7 @@ <translation id="2779651927720337254">nije uspelo</translation> <translation id="2781151931089541271">Još 1 sek</translation> <translation id="2788468313014644040">Broj grupe</translation> +<translation id="2800066122460699237">Kartica <ph name="TAB_TITLE" /> će biti zatvorena</translation> <translation id="2801022321632964776">Ažurirajte na najnoviju verziju Chrome-a da biste imali svoj jezik u njoj</translation> <translation id="2805756323405976993">Aplikacije</translation> <translation id="2806840421670364300">Grupisani podaci o kohortama</translation> @@ -288,6 +290,7 @@ <translation id="2827278682606527653">Meni kartice fida je do polovine ekrana</translation> <translation id="2830783625999891985">Sadržaj privremene memorije je sakriven</translation> <translation id="2839327205551510876">Opozvali ste praćenje sajta <ph name="SITE_NAME" /></translation> +<translation id="2840810876587895427">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> kartica bez arhiviranja će biti zatvorena}one{<ph name="TAB_COUNT_MANY" /> kartica bez arhiviranja će biti zatvorena}few{<ph name="TAB_COUNT_MANY" /> kartice bez arhiviranja će biti zatvorene}other{<ph name="TAB_COUNT_MANY" /> kartica bez arhiviranja će biti zatvoreno}}</translation> <translation id="2841216154655874070">{NUM_DAYS,plural, =1{Provereno pre 1 dan}one{Provereno pre # dan}few{Provereno pre # dana}other{Provereno pre # dana}}</translation> <translation id="2842985007712546952">Nadređeni direktorijum</translation> <translation id="2856503607207334158">Prijavljivanje nije uspelo</translation> @@ -673,6 +676,7 @@ <translation id="5222676887888702881">Odjavi me</translation> <translation id="5227554086496586518">Dodirnite da biste videli rezultate pretrage</translation> <translation id="5233638681132016545">Nova kartica</translation> +<translation id="5235196193381275927">Došlo je do problema pri prijavljivanju</translation> <translation id="5246093389635966745">Izmeni prečicu za traku sa alatkama</translation> <translation id="5250483651202458397">Snimak ekrana. Dodirnite da biste ga zatvorili.</translation> <translation id="5262378156578470238">Videćete obaveštenje kad se ovo preuzimanje pokrene <ph name="DATE" />.</translation> @@ -896,6 +900,7 @@ <translation id="6541983376925655882">{NUM_HOURS,plural, =1{Provereno pre 1 sat}one{Provereno pre # sat}few{Provereno pre # sata}other{Provereno pre # sati}}</translation> <translation id="6545017243486555795">Obriši sve podatke</translation> <translation id="6546511553472444032">Fajl može da bude štetan</translation> +<translation id="6556542240154580383">{TAB_COUNT,plural, =1{<ph name="TAB_TITLE" /> i još <ph name="TAB_COUNT_ONE" /> kartica će biti zatvorene}one{<ph name="TAB_TITLE" /> i još <ph name="TAB_COUNT_MANY" /> kartica će biti zatvorene}few{<ph name="TAB_TITLE" /> i još <ph name="TAB_COUNT_MANY" /> kartice će biti zatvorene}other{<ph name="TAB_TITLE" /> i još <ph name="TAB_COUNT_MANY" /> kartica će biti zatvorene}}</translation> <translation id="6560414384669816528">Pretraga pomoću Sogou-a</translation> <translation id="656065428026159829">Prikaži još</translation> <translation id="6565959834589222080">WiFi se koristi kada je dostupan</translation> @@ -936,6 +941,7 @@ <translation id="6767294960381293877">Lista uređaja sa kojima se deli kartica je otvorena na pola visine.</translation> <translation id="6783942555455976443">Sačuvajte ovu stranicu za kasnije i primite podsetnik</translation> <translation id="6795633245022906657">Brzo otvorite novu karticu. Da biste izmenili ovu prečicu, idite u Podešavanja.</translation> +<translation id="6802555630140434547">Prozor će biti zatvoren</translation> <translation id="6811034713472274749">Stranica je spremna za pregled</translation> <translation id="6813446258015311409">Prijavljivanje u Chrome, otvoreno.</translation> <translation id="6817747507826986771">Brzo delite ovu stranicu. Da biste izmenili ovu prečicu, dodirnite i zadržite.</translation> @@ -1163,6 +1169,7 @@ <translation id="8109613176066109935">Da bi vam obeleživači bili dostupni na svim uređajima, uključite sinhronizaciju</translation> <translation id="8110087112193408731">Želite li da se Chrome aktivnosti prikazuju u Digitalnom blagostanju?</translation> <translation id="8127542551745560481">Izmenite početnu stranicu</translation> +<translation id="8130309322784422030">Sačuvane informacije za prijavljivanje su možda zastarele</translation> <translation id="813082847718468539">Pogledajte informacije o sajtu</translation> <translation id="8137558756159375272">Funkcija Dodirnite za pretragu šalje izabranu reč i aktuelnu stranicu kao kontekst u Google pretragu. Možete da je isključite u <ph name="BEGIN_LINK" />Podešavanjima<ph name="END_LINK" />.</translation> <translation id="8153351135626613369">Pomoćnik se pojavljuje kada utvrdi da može da vam pomogne na podržanim veb-sajtovima</translation> @@ -1293,6 +1300,7 @@ <translation id="8945143127965743188"><ph name="LANG" /> – Preuzimanje ovog jezika nije uspelo. Probajte ponovo kasnije.</translation> <translation id="8951232171465285730">Chrome vam je uštedeo <ph name="MEGABYTES" /> MB</translation> <translation id="8965591936373831584">na čekanju</translation> +<translation id="8968085728801125376">{TAB_COUNT,plural, =1{Kartice bez arhiviranja (<ph name="INCOGNITO_TAB_COUNT" />) i još <ph name="TAB_COUNT_ONE" /> kartica će biti zatvorene}one{Kartice bez arhiviranja (<ph name="INCOGNITO_TAB_COUNT" />) i još <ph name="TAB_COUNT_MANY" /> kartica će biti zatvorene}few{Kartice bez arhiviranja (<ph name="INCOGNITO_TAB_COUNT" />) i još <ph name="TAB_COUNT_MANY" /> kartice će biti zatvorene}other{Kartice bez arhiviranja (<ph name="INCOGNITO_TAB_COUNT" />) i još <ph name="TAB_COUNT_MANY" /> kartica će biti zatvorene}}</translation> <translation id="8970887620466824814">Došlo je do greške.</translation> <translation id="8972098258593396643">Preuzimate u podrazumevani direktorijum?</translation> <translation id="8987641763863173640">Upravljajte podešavanjima pregleda videa</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb index dceae67..b4626175 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb
@@ -181,6 +181,7 @@ <translation id="2158408438301413340">Chrome није успео да провери све лозинке</translation> <translation id="2169830938017475061">Сада</translation> <translation id="2172688499998841696">Описи слика су искључени</translation> +<translation id="2172905120685242547">Желите да затворите прозор?</translation> <translation id="2175927920773552910">QR кôд</translation> <translation id="218608176142494674">Дељење</translation> <translation id="2195339740518523951">Набавите најјачу заштиту у Chrome-у</translation> @@ -280,6 +281,7 @@ <translation id="2779651927720337254">није успело</translation> <translation id="2781151931089541271">Још 1 сек</translation> <translation id="2788468313014644040">Број групе</translation> +<translation id="2800066122460699237">Картица <ph name="TAB_TITLE" /> ће бити затворена</translation> <translation id="2801022321632964776">Ажурирајте на најновију верзију Chrome-а да бисте имали свој језик у њој</translation> <translation id="2805756323405976993">Апликације</translation> <translation id="2806840421670364300">Груписани подаци о кохортама</translation> @@ -288,6 +290,7 @@ <translation id="2827278682606527653">Мени картице фида је до половине екрана</translation> <translation id="2830783625999891985">Садржај привремене меморије је сакривен</translation> <translation id="2839327205551510876">Опозвали сте праћење сајта <ph name="SITE_NAME" /></translation> +<translation id="2840810876587895427">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> картица без архивирања ће бити затворена}one{<ph name="TAB_COUNT_MANY" /> картица без архивирања ће бити затворена}few{<ph name="TAB_COUNT_MANY" /> картице без архивирања ће бити затворене}other{<ph name="TAB_COUNT_MANY" /> картица без архивирања ће бити затворено}}</translation> <translation id="2841216154655874070">{NUM_DAYS,plural, =1{Проверено пре 1 дан}one{Проверено пре # дан}few{Проверено пре # дана}other{Проверено пре # дана}}</translation> <translation id="2842985007712546952">Надређени директоријум</translation> <translation id="2856503607207334158">Пријављивање није успело</translation> @@ -673,6 +676,7 @@ <translation id="5222676887888702881">Одјави ме</translation> <translation id="5227554086496586518">Додирните да бисте видели резултате претраге</translation> <translation id="5233638681132016545">Нова картица</translation> +<translation id="5235196193381275927">Дошло је до проблема при пријављивању</translation> <translation id="5246093389635966745">Измени пречицу за траку са алаткама</translation> <translation id="5250483651202458397">Снимак екрана. Додирните да бисте га затворили.</translation> <translation id="5262378156578470238">Видећете обавештење кад се ово преузимање покрене <ph name="DATE" />.</translation> @@ -896,6 +900,7 @@ <translation id="6541983376925655882">{NUM_HOURS,plural, =1{Проверено пре 1 сат}one{Проверено пре # сат}few{Проверено пре # сата}other{Проверено пре # сати}}</translation> <translation id="6545017243486555795">Обриши све податке</translation> <translation id="6546511553472444032">Фајл може да буде штетан</translation> +<translation id="6556542240154580383">{TAB_COUNT,plural, =1{<ph name="TAB_TITLE" /> и још <ph name="TAB_COUNT_ONE" /> картица ће бити затворене}one{<ph name="TAB_TITLE" /> и још <ph name="TAB_COUNT_MANY" /> картица ће бити затворене}few{<ph name="TAB_TITLE" /> и још <ph name="TAB_COUNT_MANY" /> картице ће бити затворене}other{<ph name="TAB_TITLE" /> и још <ph name="TAB_COUNT_MANY" /> картица ће бити затворене}}</translation> <translation id="6560414384669816528">Претрага помоћу Sogou-а</translation> <translation id="656065428026159829">Прикажи још</translation> <translation id="6565959834589222080">WiFi се користи када је доступан</translation> @@ -936,6 +941,7 @@ <translation id="6767294960381293877">Листа уређаја са којима се дели картица је отворена на пола висине.</translation> <translation id="6783942555455976443">Сачувајте ову страницу за касније и примите подсетник</translation> <translation id="6795633245022906657">Брзо отворите нову картицу. Да бисте изменили ову пречицу, идите у Подешавања.</translation> +<translation id="6802555630140434547">Прозор ће бити затворен</translation> <translation id="6811034713472274749">Страница је спремна за преглед</translation> <translation id="6813446258015311409">Пријављивање у Chrome, отворено.</translation> <translation id="6817747507826986771">Брзо делите ову страницу. Да бисте изменили ову пречицу, додирните и задржите.</translation> @@ -1163,6 +1169,7 @@ <translation id="8109613176066109935">Да би вам обележивачи били доступни на свим уређајима, укључите синхронизацију</translation> <translation id="8110087112193408731">Желите ли да се Chrome активности приказују у Дигиталном благостању?</translation> <translation id="8127542551745560481">Измените почетну страницу</translation> +<translation id="8130309322784422030">Сачуване информације за пријављивање су можда застареле</translation> <translation id="813082847718468539">Погледајте информације о сајту</translation> <translation id="8137558756159375272">Функција Додирните за претрагу шаље изабрану реч и актуелну страницу као контекст у Google претрагу. Можете да је искључите у <ph name="BEGIN_LINK" />Подешавањима<ph name="END_LINK" />.</translation> <translation id="8153351135626613369">Помоћник се појављује када утврди да може да вам помогне на подржаним веб-сајтовима</translation> @@ -1293,6 +1300,7 @@ <translation id="8945143127965743188"><ph name="LANG" /> – Преузимање овог језика није успело. Пробајте поново касније.</translation> <translation id="8951232171465285730">Chrome вам је уштедео <ph name="MEGABYTES" /> MB</translation> <translation id="8965591936373831584">на чекању</translation> +<translation id="8968085728801125376">{TAB_COUNT,plural, =1{Картице без архивирања (<ph name="INCOGNITO_TAB_COUNT" />) и још <ph name="TAB_COUNT_ONE" /> картица ће бити затворене}one{Картице без архивирања (<ph name="INCOGNITO_TAB_COUNT" />) и још <ph name="TAB_COUNT_MANY" /> картица ће бити затворене}few{Картице без архивирања (<ph name="INCOGNITO_TAB_COUNT" />) и још <ph name="TAB_COUNT_MANY" /> картице ће бити затворене}other{Картице без архивирања (<ph name="INCOGNITO_TAB_COUNT" />) и још <ph name="TAB_COUNT_MANY" /> картица ће бити затворене}}</translation> <translation id="8970887620466824814">Дошло је до грешке.</translation> <translation id="8972098258593396643">Преузимате у подразумевани директоријум?</translation> <translation id="8987641763863173640">Управљајте подешавањима прегледа видеа</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb index d80da9c0..14447ed16 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb
@@ -185,6 +185,7 @@ <translation id="218608176142494674">பகிர்தல்</translation> <translation id="2195339740518523951">Chromeமின் வலிமையான பாதுகாப்பைப் பெறுங்கள்</translation> <translation id="2200113223741723867">உபயோகத் தரவுப் பகிர்தலை நிர்வகித்தல்</translation> +<translation id="2218567645332692482">தளங்களை HTTPS வழியாகக் காட்டும் வகையில் மேம்படுத்துவதுடன் இதை ஆதரிக்காத தளங்களைக் காட்டுவதற்கு முன்பு எச்சரிக்கையையும் வழங்கும்</translation> <translation id="2227444325776770048"><ph name="USER_FULL_NAME" /> ஆகத் தொடர்க</translation> <translation id="2230777942707397948">காலியான சாளரம்</translation> <translation id="2239812875700136898">கண்டறிவதற்கான விருப்பங்கள் என்ற பட்டன் மூலம் உங்கள் செய்திகளைக் கட்டுப்படுத்தலாம்</translation> @@ -1294,6 +1295,7 @@ <translation id="8965591936373831584">நிலுவையிலுள்ளது</translation> <translation id="8970887620466824814">ஏதோ தவறாகிவிட்டது.</translation> <translation id="8972098258593396643">இயல்புக் கோப்புறைக்குப் பதிவிறக்கவா?</translation> +<translation id="8987641763863173640">வீடியோ மாதிரிக்காட்சிக்கான அமைப்புகளை நிர்வகிக்கலாம்</translation> <translation id="8988028529677883095">பாதுகாப்பு விசையாக மொபைலைப் பயன்படுத்து</translation> <translation id="8993760627012879038">புதிய தாவலை மறைநிலையில் திறக்கும்</translation> <translation id="8996847606757455498">மற்றொரு வழங்குநரைத் தேர்வுசெய்க</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb index d5347ee..970e3d4e 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb
@@ -174,7 +174,7 @@ <translation id="2139186145475833000">హోమ్ స్క్రీన్కు జోడించు</translation> <translation id="2141396931810938595">మీ వినియోగం ఆధారంగా</translation> <translation id="214888715418183969">మీరు Chromeతో సౌకర్యవంతంగా షేర్ చేసుకోగలిగేవి ఎంచుకోండి. మీరు షేర్ చేసే కొలమానాలు, Chrome ఫీచర్లు, పనితీరు, ఇంకా స్థిరత్వాన్ని మెరుగుపరచడంలో సహాయపడతాయి.</translation> -<translation id="2154484045852737596">కార్డ్ను సవరించండి</translation> +<translation id="2154484045852737596">కార్డ్ను ఎడిట్ చేయండి</translation> <translation id="2154710561487035718">URLను కాపీ చేయి</translation> <translation id="2156074688469523661">మిగిలిన సైట్లు (<ph name="NUMBER_OF_SITES" />)</translation> <translation id="2157851137955077194">మీ ఫోన్ నుండి మరొక పరికరానికి దేనినైనా షేర్ చేయడానికి, రెండు పరికరాల్లోని Chrome సెట్టింగ్లలో సింక్ను ఆన్ చేయండి</translation> @@ -297,7 +297,7 @@ <translation id="2891154217021530873">పేజీ లోడ్ కాకుండా ఆపివేయండి</translation> <translation id="2892647708214602204">ఈ ఫైల్ సిద్ధంగా ఉన్నప్పుడు మీకు నోటిఫికేషన్ కనిపిస్తుంది</translation> <translation id="2893180576842394309">శోధన, ఇతర Google సేవలను వ్యక్తిగతీకరించడానికి Google మీ చరిత్రను ఉపయోగించే అవకాశం ఉంటుంది</translation> -<translation id="2900528713135656174">ఈవెంట్ను సృష్టించండి</translation> +<translation id="2900528713135656174">ఈవెంట్ను క్రియేట్ చేయండి</translation> <translation id="2901411048554510387"><ph name="WEBSITE_TITLE" /> కోసం సూచనలను చూపుతోంది</translation> <translation id="2904414404539560095">ట్యాబ్ను షేర్ చేయాల్సిన పరికరాల జాబితా పూర్తి ఎత్తులో తెరవబడింది.</translation> <translation id="2908243544703713905">చదవని కథనాలు సిద్ధంగా ఉన్నాయి</translation> @@ -317,7 +317,7 @@ <translation id="2987620471460279764">ఇతర పరికరం నుండి షేర్ చేయబడిన వచనం</translation> <translation id="2989523299700148168">ఇటీవల సందర్శించినవి</translation> <translation id="2992473221983447149">ఇమేజ్ వివరణలు</translation> -<translation id="2996291259634659425">రహస్య పదబంధాన్ని సృష్టించండి</translation> +<translation id="2996291259634659425">రహస్య పదబంధాన్ని క్రియేట్ చేయండి</translation> <translation id="2996809686854298943">URL అవసరం</translation> <translation id="3006881078666935414">వినియోగ డేటా లేదు</translation> <translation id="3016635187733453316">ఈ పరికరం ఇంటర్నెట్కు కనెక్ట్ చేయబడి ఉందని నిర్ధారించుకోండి</translation> @@ -634,7 +634,7 @@ <translation id="4988210275050210843">ఫైల్ను డౌన్లోడ్ చేస్తోంది (<ph name="MEGABYTES" />).</translation> <translation id="4988526792673242964">పేజీలు</translation> <translation id="5001388021414335527">ఈ సైట్ను ఇక్కడ ఫాలో అవ్వండి</translation> -<translation id="5004416275253351869">Google కార్యకలాప నియంత్రణలు</translation> +<translation id="5004416275253351869">Google యాక్టివిటీ కంట్రోల్స్</translation> <translation id="5005498671520578047">పాస్వర్డ్ కాపీచేయడం</translation> <translation id="5011311129201317034"><ph name="SITE" /> దీనికి కనెక్ట్ చేయాలనుకుంటోంది</translation> <translation id="5016205925109358554">Serif</translation> @@ -735,7 +735,7 @@ <translation id="5648166631817621825">గత 7 రోజులు</translation> <translation id="5655963694829536461">మీ డౌన్లోడ్లను వెతకండి</translation> <translation id="5659593005791499971">ఇమెయిల్</translation> -<translation id="5665379678064389456"><ph name="APP_NAME" />లో ఈవెంట్ను సృష్టించండి</translation> +<translation id="5665379678064389456"><ph name="APP_NAME" />లో ఈవెంట్ను క్రియేట్ చేయండి</translation> <translation id="5668404140385795438">దగ్గరకు జూమ్ చేయడాన్ని నిరోధించడానికి ప్రయత్నించే వెబ్సైట్ అభ్యర్థనను పట్టించుకోదు</translation> <translation id="5683547024293500885">అప్డేట్లను Chrome చెక్ చేయలేదు</translation> <translation id="5686790454216892815">ఫైల్ పేరు చాలా పొడవుగా ఉంది</translation> @@ -847,7 +847,7 @@ <translation id="6312687380483398334">వెబ్ యాప్లు (నిశ్శబ్దం)</translation> <translation id="6316139424528454185">Android వెర్షన్కు మద్దతు లేదు</translation> <translation id="6324034347079777476">Android సిస్టమ్ సమకాలీకరణ నిలిపివేయబడింది</translation> -<translation id="6324916366299863871">షార్ట్కట్ను సవరించండి</translation> +<translation id="6324916366299863871">షార్ట్కట్ను ఎడిట్ చేయండి</translation> <translation id="6324977638108296054">హైలైట్ చేసిన టెక్స్ట్కు లింక్ క్రియేట్ చేయబడదు</translation> <translation id="6324997754869598316">(ఎర్రర్ <ph name="ERROR_CODE" />)</translation> <translation id="6333140779060797560"><ph name="APPLICATION" /> ద్వారా భాగస్వామ్యం చేయి</translation> @@ -1081,7 +1081,7 @@ <translation id="7665369617277396874">ఖాతాను జోడించండి</translation> <translation id="766587987807204883">కథనాలు ఇక్కడ కనిపిస్తాయి, మీరు ఆఫ్లైన్లో ఉన్నప్పటికీ కూడా వీటిని చదవవచ్చు</translation> <translation id="7682724950699840886">కింది చిట్కాలను ప్రయత్నించండి: మీ పరికరంలో తగినంత స్థలం ఉన్నట్లు నిర్ధారించుకోండి, మళ్లీ ఎగుమతి చేయడానికి ప్రయత్నించండి.</translation> -<translation id="7698359219371678927"><ph name="APP_NAME" />లో ఇమెయిల్ను సృష్టించండి</translation> +<translation id="7698359219371678927"><ph name="APP_NAME" />లో ఇమెయిల్ను క్రియేట్ చేయండి</translation> <translation id="7704317875155739195">ఆటో-ఫిల్ సెర్చ్లు, URLలు</translation> <translation id="7707922173985738739">మొబైల్ డేటాను ఉపయోగిస్తుంది</translation> <translation id="7725024127233776428">మీరు బుక్మార్క్ చేసే పేజీలు ఇక్కడ కనిపిస్తాయి</translation> @@ -1111,7 +1111,7 @@ <translation id="7853202427316060426">కార్యాచరణ</translation> <translation id="7857691613771368249">ఫైల్స్ను సేవ్ చేయవలసి వచ్చినప్పుడు అనుమతి అడగాలి</translation> <translation id="7859988229622350291">వీటిని ఎప్పటికీ అనువదించవద్దు</translation> -<translation id="7875915731392087153">ఇమెయిల్ను సృష్టించండి</translation> +<translation id="7875915731392087153">ఇమెయిల్ను క్రియేట్ చేయండి</translation> <translation id="7876243839304621966">అన్నీ తొలగించు</translation> <translation id="7879130110979560610">{READING_LIST_REMINDER_NOTIFICATION_SUBTITLE,plural, =1{మీకు <ph name="READING_LIST_REMINDER_NOTIFICATION_SUBTITLE_ONE" /> చదవని పేజీ ఉంది}other{మీకు <ph name="READING_LIST_REMINDER_NOTIFICATION_SUBTITLE_MANY" /> చదవని పేజీలు ఉన్నాయి}}</translation> <translation id="7882131421121961860">చరిత్ర ఏదీ కనుగొనబడలేదు</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb index e3731fbb..155a941 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb
@@ -181,6 +181,7 @@ <translation id="2158408438301413340">Chrome не вдалося перевірити всі паролі</translation> <translation id="2169830938017475061">Щойно</translation> <translation id="2172688499998841696">Описи зображень вимкнено</translation> +<translation id="2172905120685242547">Закрити вікно?</translation> <translation id="2175927920773552910">QR-код</translation> <translation id="218608176142494674">Спільний доступ</translation> <translation id="2195339740518523951">Найвищий рівень безпеки в Chrome</translation> @@ -280,6 +281,7 @@ <translation id="2779651927720337254">не завантажено</translation> <translation id="2781151931089541271">Залишилась 1 с</translation> <translation id="2788468313014644040">Номер групи</translation> +<translation id="2800066122460699237">Вкладку "<ph name="TAB_TITLE" />" буде закрито</translation> <translation id="2801022321632964776">Виконайте оновлення, щоб користуватися своєю мовою в останній версії Chrome</translation> <translation id="2805756323405976993">Додатки</translation> <translation id="2806840421670364300">FLoC</translation> @@ -288,6 +290,7 @@ <translation id="2827278682606527653">Меню картки зі стрічки відкрито на половину висоти</translation> <translation id="2830783625999891985">Вміст буфера обміну сховано</translation> <translation id="2839327205551510876">Підписку на сайт "<ph name="SITE_NAME" />" скасовано</translation> +<translation id="2840810876587895427">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> анонімну вкладку буде закрито}one{<ph name="TAB_COUNT_MANY" /> анонімну вкладку буде закрито}few{<ph name="TAB_COUNT_MANY" /> анонімні вкладки буде закрито}many{<ph name="TAB_COUNT_MANY" /> анонімних вкладок буде закрито}other{<ph name="TAB_COUNT_MANY" /> анонімної вкладки буде закрито}}</translation> <translation id="2841216154655874070">{NUM_DAYS,plural, =1{Перевірено 1 день тому}one{Перевірено # день тому}few{Перевірено # дні тому}many{Перевірено # днів тому}other{Перевірено # дня тому}}</translation> <translation id="2842985007712546952">Батьківська папка</translation> <translation id="2856503607207334158">Помилка входу</translation> @@ -673,6 +676,7 @@ <translation id="5222676887888702881">Вийти</translation> <translation id="5227554086496586518">Торкніться, щоб переглянути результати пошуку</translation> <translation id="5233638681132016545">Нова вкладка</translation> +<translation id="5235196193381275927">Під час входу сталася помилка</translation> <translation id="5246093389635966745">Змінити кнопку на панелі інструментів</translation> <translation id="5250483651202458397">Знімок екрана. Торкніться, щоб закрити.</translation> <translation id="5262378156578470238">Ви отримаєте сповіщення, коли почнеться завантаження (<ph name="DATE" />).</translation> @@ -896,6 +900,7 @@ <translation id="6541983376925655882">{NUM_HOURS,plural, =1{Перевірено 1 годину тому}one{Перевірено # годину тому}few{Перевірено # години тому}many{Перевірено # годин тому}other{Перевірено # години тому}}</translation> <translation id="6545017243486555795">Видалити всі дані</translation> <translation id="6546511553472444032">Файл може бути шкідливим</translation> +<translation id="6556542240154580383">{TAB_COUNT,plural, =1{"<ph name="TAB_TITLE" />" і ще <ph name="TAB_COUNT_ONE" /> вкладку буде закрито}one{"<ph name="TAB_TITLE" />" і ще <ph name="TAB_COUNT_MANY" /> вкладку буде закрито}few{"<ph name="TAB_TITLE" />" і ще <ph name="TAB_COUNT_MANY" /> вкладки буде закрито}many{"<ph name="TAB_TITLE" />" і ще <ph name="TAB_COUNT_MANY" /> вкладок буде закрито}other{"<ph name="TAB_TITLE" />" і ще <ph name="TAB_COUNT_MANY" /> вкладки буде закрито}}</translation> <translation id="6560414384669816528">Шукати за допомогою Sogou</translation> <translation id="656065428026159829">Показати більше</translation> <translation id="6565959834589222080">Мережа Wi-Fi використовується, коли вона доступна</translation> @@ -936,6 +941,7 @@ <translation id="6767294960381293877">Список пристроїв, з якими можна ділитися вкладкою, відкрито на половину висоти.</translation> <translation id="6783942555455976443">Зберегти цю сторінку на пізніше й отримати нагадування</translation> <translation id="6795633245022906657">Швидко відкривайте нову вкладку. Щоб змінити функцію цієї кнопки, перейдіть у налаштування.</translation> +<translation id="6802555630140434547">Вікно буде закрито</translation> <translation id="6811034713472274749">Сторінка готова для перегляду</translation> <translation id="6813446258015311409">Вікно "Увійти в Chrome" відкрите.</translation> <translation id="6817747507826986771">Швидко діліться цією сторінкою. Щоб змінити функцію цієї кнопки, натисніть і втримуйте її.</translation> @@ -1163,6 +1169,7 @@ <translation id="8109613176066109935">Щоб мати доступ до закладок на всіх своїх пристроях, увімкніть синхронізацію</translation> <translation id="8110087112193408731">Показувати активність у Chrome у Цифровому добробуті?</translation> <translation id="8127542551745560481">Змінити головну сторінку</translation> +<translation id="8130309322784422030">Збережені дані для входу, імовірно, застаріли</translation> <translation id="813082847718468539">Перегляд інформації про сайт</translation> <translation id="8137558756159375272">Функція пошуку дотиком надсилає слово та поточну сторінку як додаткові дані в Пошук Google. Її можна вимкнути в <ph name="BEGIN_LINK" />налаштуваннях<ph name="END_LINK" />.</translation> <translation id="8153351135626613369">Асистент з'являтиметься на підтримуваних веб-сайтах, коли вам може знадобитися його допомога</translation> @@ -1293,6 +1300,7 @@ <translation id="8945143127965743188"><ph name="LANG" /> – Не вдалося завантажити цю мову. Повторіть спробу пізніше.</translation> <translation id="8951232171465285730">Chrome заощадив <ph name="MEGABYTES" /> МБ</translation> <translation id="8965591936373831584">очікується</translation> +<translation id="8968085728801125376">{TAB_COUNT,plural, =1{Анонімні (<ph name="INCOGNITO_TAB_COUNT" />) і ще <ph name="TAB_COUNT_ONE" /> вкладку буде закрито}one{Анонімні (<ph name="INCOGNITO_TAB_COUNT" />) і ще <ph name="TAB_COUNT_MANY" /> вкладку буде закрито}few{Анонімні (<ph name="INCOGNITO_TAB_COUNT" />) і ще <ph name="TAB_COUNT_MANY" /> вкладки буде закрито}many{Анонімні (<ph name="INCOGNITO_TAB_COUNT" />) і ще <ph name="TAB_COUNT_MANY" /> вкладок буде закрито}other{Анонімні (<ph name="INCOGNITO_TAB_COUNT" />) і ще <ph name="TAB_COUNT_MANY" /> вкладки буде закрито}}</translation> <translation id="8970887620466824814">Сталася помилка.</translation> <translation id="8972098258593396643">Завантажити в папку за умовчанням?</translation> <translation id="8987641763863173640">Керуйте налаштуваннями попереднього перегляду відео</translation>
diff --git a/chrome/browser/ui/android/theme/java/src/org/chromium/chrome/browser/theme/ThemeUtils.java b/chrome/browser/ui/android/theme/java/src/org/chromium/chrome/browser/theme/ThemeUtils.java index 3aa1dbc6..8ef7b43 100644 --- a/chrome/browser/ui/android/theme/java/src/org/chromium/chrome/browser/theme/ThemeUtils.java +++ b/chrome/browser/ui/android/theme/java/src/org/chromium/chrome/browser/theme/ThemeUtils.java
@@ -157,7 +157,7 @@ if (isUsingDefaultToolbarColor(context, isIncognito, toolbarColor)) { return isIncognito ? res.getColor(R.color.divider_line_bg_color_light) - : MaterialColors.getColor(context, R.attr.divider_line_bg_color, TAG); + : MaterialColors.getColor(context, R.attr.divider_line_bg_color_dynamic, TAG); } final float alpha = ResourcesCompat.getFloat(res, R.dimen.toolbar_hairline_overlay_alpha);
diff --git a/chrome/browser/ui/ash/wallpaper_controller_client_impl.cc b/chrome/browser/ui/ash/wallpaper_controller_client_impl.cc index 922a49af..ebfe3594 100644 --- a/chrome/browser/ui/ash/wallpaper_controller_client_impl.cc +++ b/chrome/browser/ui/ash/wallpaper_controller_client_impl.cc
@@ -497,6 +497,16 @@ return success; } +base::FilePath WallpaperControllerClientImpl::GetWallpaperPathFromDriveFs( + const AccountId& account_id) { + Profile* profile = + chromeos::ProfileHelper::Get()->GetProfileByAccountId(account_id); + base::FilePath wallpaper_directory = GetDriveFsWallpaperDir(profile); + if (wallpaper_directory.empty()) + return wallpaper_directory; + return wallpaper_directory.Append(kDriveFsWallpaperFileName); +} + void WallpaperControllerClientImpl::GetFilesId( const AccountId& account_id, base::OnceCallback<void(const std::string&)> files_id_callback) const {
diff --git a/chrome/browser/ui/ash/wallpaper_controller_client_impl.h b/chrome/browser/ui/ash/wallpaper_controller_client_impl.h index 5d4be10..73c5df6 100644 --- a/chrome/browser/ui/ash/wallpaper_controller_client_impl.h +++ b/chrome/browser/ui/ash/wallpaper_controller_client_impl.h
@@ -61,6 +61,8 @@ DailyWallpaperUrlFetchedCallback callback) override; bool SaveWallpaperToDriveFs(const AccountId& account_id, const base::FilePath& origin) override; + base::FilePath GetWallpaperPathFromDriveFs( + const AccountId& account_id) override; void GetFilesId(const AccountId& account_id, base::OnceCallback<void(const std::string&)> files_id_callback) const override;
diff --git a/chrome/browser/ui/browser_commands.cc b/chrome/browser/ui/browser_commands.cc index 55d2b31..32156e58 100644 --- a/chrome/browser/ui/browser_commands.cc +++ b/chrome/browser/ui/browser_commands.cc
@@ -1764,24 +1764,43 @@ browser->window()->ShowIncognitoClearBrowsingDataDialog(); } +void ShowIncognitoHistoryDisclaimerDialog(Browser* browser) { + browser->window()->ShowIncognitoHistoryDisclaimerDialog(); +} + bool ShouldInterceptChromeURLNavigationInIncognito(Browser* browser, const GURL& url) { if (!browser || !browser->profile()->IsIncognitoProfile()) return false; - return url == GURL(chrome::kChromeUISettingsURL) - .Resolve(chrome::kClearBrowserDataSubPage) && - base::FeatureList::IsEnabled( - features::kIncognitoClearBrowsingDataDialogForDesktop); + bool show_clear_browsing_data_dialog = + url == GURL(chrome::kChromeUISettingsURL) + .Resolve(chrome::kClearBrowserDataSubPage) && + base::FeatureList::IsEnabled( + features::kIncognitoClearBrowsingDataDialogForDesktop); + + bool show_history_disclaimer_dialog = + url == GURL(chrome::kChromeUIHistoryURL) && + base::FeatureList::IsEnabled( + features::kUpdateHistoryEntryPointsInIncognito); + + return show_clear_browsing_data_dialog || show_history_disclaimer_dialog; } void ProcessInterceptedChromeURLNavigationInIncognito(Browser* browser, const GURL& url) { - DCHECK(url == GURL(chrome::kChromeUISettingsURL) - .Resolve(chrome::kClearBrowserDataSubPage)); - DCHECK(base::FeatureList::IsEnabled( - features::kIncognitoClearBrowsingDataDialogForDesktop)); - ShowIncognitoClearBrowsingDataDialog(browser); + if (url == GURL(chrome::kChromeUISettingsURL) + .Resolve(chrome::kClearBrowserDataSubPage)) { + DCHECK(base::FeatureList::IsEnabled( + features::kIncognitoClearBrowsingDataDialogForDesktop)); + ShowIncognitoClearBrowsingDataDialog(browser); + } else if (url == GURL(chrome::kChromeUIHistoryURL)) { + DCHECK(base::FeatureList::IsEnabled( + features::kUpdateHistoryEntryPointsInIncognito)); + ShowIncognitoHistoryDisclaimerDialog(browser); + } else { + NOTREACHED(); + } } } // namespace chrome
diff --git a/chrome/browser/ui/browser_commands.h b/chrome/browser/ui/browser_commands.h index 51e5ec73f..34a544a 100644 --- a/chrome/browser/ui/browser_commands.h +++ b/chrome/browser/ui/browser_commands.h
@@ -233,6 +233,7 @@ absl::optional<int> GetKeyboardFocusedTabIndex(const Browser* browser); void ShowIncognitoClearBrowsingDataDialog(Browser* browser); +void ShowIncognitoHistoryDisclaimerDialog(Browser* browser); bool ShouldInterceptChromeURLNavigationInIncognito(Browser* browser, const GURL& url); void ProcessInterceptedChromeURLNavigationInIncognito(Browser* browser,
diff --git a/chrome/browser/ui/browser_window.h b/chrome/browser/ui/browser_window.h index 1fd8555..f1b87810 100644 --- a/chrome/browser/ui/browser_window.h +++ b/chrome/browser/ui/browser_window.h
@@ -556,6 +556,9 @@ // Shows an Incognito clear browsing data dialog. virtual void ShowIncognitoClearBrowsingDataDialog() = 0; + // Shows an Incognito history disclaimer dialog. + virtual void ShowIncognitoHistoryDisclaimerDialog() = 0; + protected: friend class BrowserCloseManager; friend class BrowserView;
diff --git a/chrome/browser/ui/chrome_pages.cc b/chrome/browser/ui/chrome_pages.cc index 021245a..c6e71c5 100644 --- a/chrome/browser/ui/chrome_pages.cc +++ b/chrome/browser/ui/chrome_pages.cc
@@ -228,11 +228,13 @@ } void ShowHistory(Browser* browser) { - // History UI should not be shown in Incognito mode. Also this prevents - // history keyboard shortcts open History UI in Incognito. + // History UI should not be shown in Incognito mode, instead history + // disclaimer bubble should show up. This also updates the behavior of history + // keyboard shortcts in Incognito. if (browser->profile()->IsOffTheRecord() && base::FeatureList::IsEnabled( features::kUpdateHistoryEntryPointsInIncognito)) { + browser->window()->ShowIncognitoHistoryDisclaimerDialog(); return; }
diff --git a/chrome/browser/ui/content_settings/content_setting_bubble_model.cc b/chrome/browser/ui/content_settings/content_setting_bubble_model.cc index 5a6004e7..2ba7d62 100644 --- a/chrome/browser/ui/content_settings/content_setting_bubble_model.cc +++ b/chrome/browser/ui/content_settings/content_setting_bubble_model.cc
@@ -1648,17 +1648,21 @@ void ContentSettingQuietRequestBubbleModel::OnDoneButtonClicked() { permissions::PermissionRequestManager* manager = permissions::PermissionRequestManager::FromWebContents(web_contents()); - + CHECK_GT(manager->Requests().size(), 0u); + DCHECK_EQ(manager->Requests().size(), 1u); auto quiet_ui_reason = manager->ReasonForUsingQuietUi(); + const permissions::RequestType request_type = + manager->Requests()[0]->request_type(); DCHECK(quiet_ui_reason); + DCHECK(request_type == permissions::RequestType::kNotifications || + request_type == permissions::RequestType::kGeolocation); switch (*quiet_ui_reason) { case QuietUiReason::kEnabledInPrefs: case QuietUiReason::kTriggeredByCrowdDeny: case QuietUiReason::kPredictedVeryUnlikelyGrant: manager->Accept(); base::RecordAction(base::UserMetricsAction( - manager->Requests()[0]->request_type() == - permissions::RequestType::kNotifications + request_type == permissions::RequestType::kNotifications ? "Permissions.Prompt.QuietBubble.Notifications.AllowClicked" : "Permissions.Prompt.QuietBubble.Geolocation.AllowClicked")); break;
diff --git a/chrome/browser/ui/session_crashed_bubble.h b/chrome/browser/ui/session_crashed_bubble.h index 4effc0dd..3742cd7b 100644 --- a/chrome/browser/ui/session_crashed_bubble.h +++ b/chrome/browser/ui/session_crashed_bubble.h
@@ -19,7 +19,8 @@ // reporting if it's not already enabled. // Note: It is the caller's responsibility to determine if the previous // session ended with a crash. - static void ShowIfNotOffTheRecordProfile(Browser* browser); + static void ShowIfNotOffTheRecordProfile(Browser* browser, + bool skip_tab_checking); virtual ~SessionCrashedBubble() {}
diff --git a/chrome/browser/ui/startup/startup_browser_creator.cc b/chrome/browser/ui/startup/startup_browser_creator.cc index 19ca291f..b600387d 100644 --- a/chrome/browser/ui/startup/startup_browser_creator.cc +++ b/chrome/browser/ui/startup/startup_browser_creator.cc
@@ -1437,6 +1437,10 @@ switches::kHideCrashRestoreBubble); } +void AddLaunchedProfile(Profile* profile) { + profile_launch_observer.Get().AddLaunched(profile); +} + StartupProfilePathInfo GetStartupProfilePath( const base::FilePath& cur_dir, const base::CommandLine& command_line,
diff --git a/chrome/browser/ui/startup/startup_browser_creator.h b/chrome/browser/ui/startup/startup_browser_creator.h index fc7c81c..f549ef2d 100644 --- a/chrome/browser/ui/startup/startup_browser_creator.h +++ b/chrome/browser/ui/startup/startup_browser_creator.h
@@ -285,6 +285,9 @@ // after the unclean exit. bool HasPendingUncleanExit(Profile* profile); +// Adds launched |profile| to ProfileLaunchObserver. +void AddLaunchedProfile(Profile* profile); + // Returns the path that contains the profile that should be loaded on process // startup. // When the profile picker is shown on startup, this returns the Guest profile
diff --git a/chrome/browser/ui/startup/startup_browser_creator_impl.cc b/chrome/browser/ui/startup/startup_browser_creator_impl.cc index a1f81e6e..714472b 100644 --- a/chrome/browser/ui/startup/startup_browser_creator_impl.cc +++ b/chrome/browser/ui/startup/startup_browser_creator_impl.cc
@@ -625,7 +625,8 @@ return; if (HasPendingUncleanExit(browser->profile())) - SessionCrashedBubble::ShowIfNotOffTheRecordProfile(browser); + SessionCrashedBubble::ShowIfNotOffTheRecordProfile( + browser, /*skip_tab_checking=*/false); // The below info bars are only added to the first profile which is launched. // Other profiles might be restoring the browsing sessions asynchronously,
diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc index b4fe312cc..f0b0bd64 100644 --- a/chrome/browser/ui/views/frame/browser_view.cc +++ b/chrome/browser/ui/views/frame/browser_view.cc
@@ -59,6 +59,7 @@ #include "chrome/browser/ui/browser_dialogs.h" #include "chrome/browser/ui/browser_finder.h" #include "chrome/browser/ui/browser_list.h" +#include "chrome/browser/ui/browser_navigator.h" #include "chrome/browser/ui/browser_window_state.h" #include "chrome/browser/ui/exclusive_access/exclusive_access_manager.h" #include "chrome/browser/ui/find_bar/find_bar.h" @@ -1874,7 +1875,7 @@ new sharing_hub::ScreenshotCapturedBubble( toolbar_button_provider()->GetAnchorView( PageActionIconType::kSharingHub), - contents, image); + contents, image, browser_->profile(), base::BindOnce(&Navigate)); views::BubbleDialogDelegateView::CreateBubble(bubble); bubble->ShowForReason(LocationBarBubbleDelegateView::USER_GESTURE); @@ -3637,7 +3638,17 @@ static_cast<views::View*>(BrowserView::GetBrowserViewForBrowser(browser()) ->toolbar_button_provider() ->GetAvatarToolbarButton()), - browser()->profile()); + browser()->profile(), + IncognitoClearBrowsingDataDialog::Type::kDefaultBubble); +} + +void BrowserView::ShowIncognitoHistoryDisclaimerDialog() { + IncognitoClearBrowsingDataDialog::Show( + static_cast<views::View*>(BrowserView::GetBrowserViewForBrowser(browser()) + ->toolbar_button_provider() + ->GetAvatarToolbarButton()), + browser()->profile(), + IncognitoClearBrowsingDataDialog::Type::kHistoryDisclaimerBubble); } ExclusiveAccessContext* BrowserView::GetExclusiveAccessContext() {
diff --git a/chrome/browser/ui/views/frame/browser_view.h b/chrome/browser/ui/views/frame/browser_view.h index dcbd116..021f047 100644 --- a/chrome/browser/ui/views/frame/browser_view.h +++ b/chrome/browser/ui/views/frame/browser_view.h
@@ -533,6 +533,8 @@ void ShowIncognitoClearBrowsingDataDialog() override; + void ShowIncognitoHistoryDisclaimerDialog() override; + // TabStripModelObserver: void OnTabStripModelChanged( TabStripModel* tab_strip_model,
diff --git a/chrome/browser/ui/views/global_media_controls/media_notification_device_selector_view.cc b/chrome/browser/ui/views/global_media_controls/media_notification_device_selector_view.cc index 3780c74..7c86d47 100644 --- a/chrome/browser/ui/views/global_media_controls/media_notification_device_selector_view.cc +++ b/chrome/browser/ui/views/global_media_controls/media_notification_device_selector_view.cc
@@ -68,7 +68,9 @@ {MediaRouteProviderId::DIAL, {{true, 0}, {false, 0}}}, {MediaRouteProviderId::WIRED_DISPLAY, {{true, 0}, {false, 0}}}}; for (const CastDeviceEntryView* entry : entries) { - counts.at(entry->sink().provider).at(entry->GetEnabled())++; + if (entry->sink().provider != MediaRouteProviderId::TEST) { + counts.at(entry->sink().provider).at(entry->GetEnabled())++; + } } for (auto provider : {MediaRouteProviderId::CAST, MediaRouteProviderId::DIAL, MediaRouteProviderId::WIRED_DISPLAY}) {
diff --git a/chrome/browser/ui/views/incognito_clear_browsing_data_dialog.cc b/chrome/browser/ui/views/incognito_clear_browsing_data_dialog.cc index 182c6f2..00aaded 100644 --- a/chrome/browser/ui/views/incognito_clear_browsing_data_dialog.cc +++ b/chrome/browser/ui/views/incognito_clear_browsing_data_dialog.cc
@@ -26,9 +26,10 @@ // static void IncognitoClearBrowsingDataDialog::Show(views::View* anchor_view, - Profile* incognito_profile) { - g_incognito_cbd_dialog = - new IncognitoClearBrowsingDataDialog(anchor_view, incognito_profile); + Profile* incognito_profile, + Type type) { + g_incognito_cbd_dialog = new IncognitoClearBrowsingDataDialog( + anchor_view, incognito_profile, type); views::Widget* const widget = BubbleDialogDelegateView::CreateBubble(g_incognito_cbd_dialog); widget->Show(); @@ -63,7 +64,8 @@ IncognitoClearBrowsingDataDialog::IncognitoClearBrowsingDataDialog( views::View* anchor_view, - Profile* incognito_profile) + Profile* incognito_profile, + Type type) : BubbleDialogDelegateView(anchor_view, views::BubbleBorder::TOP_RIGHT), incognito_profile_(incognito_profile) { DCHECK(incognito_profile_); @@ -89,6 +91,14 @@ header_view_ = header_view.get(); AddChildView(std::move(header_view)); + // Set bubble regarding to the type. + if (type == kHistoryDisclaimerBubble) + SetDialogForHistoryDisclaimerBubbleType(); + else + SetDialogForDefaultBubbleType(); +} + +void IncognitoClearBrowsingDataDialog::SetDialogForDefaultBubbleType() { // Text AddChildView(views::Builder<views::Label>() .SetText(l10n_util::GetStringUTF16( @@ -122,6 +132,46 @@ base::Unretained(this))); } +void IncognitoClearBrowsingDataDialog:: + SetDialogForHistoryDisclaimerBubbleType() { + // Text + AddChildView(views::Builder<views::Label>() + .SetText(l10n_util::GetStringUTF16( + IDS_INCOGNITO_HISTORY_BUBBLE_PRIMARY_TEXT)) + .SetFontList(views::style::GetFont( + views::style::CONTEXT_LABEL, STYLE_EMPHASIZED)) + .SetHorizontalAlignment(gfx::ALIGN_LEFT) + .Build()); + + views::Label* label = AddChildView( + views::Builder<views::Label>() + .SetText(l10n_util::GetStringUTF16( + IDS_INCOGNITO_HISTORY_BUBBLE_SECONDARY_TEXT)) + .SetFontList(views::style::GetFont(views::style::CONTEXT_LABEL, + views::style::STYLE_SECONDARY)) + .SetHorizontalAlignment(gfx::ALIGN_LEFT) + .SetMultiLine(true) + .Build()); + label->SizeToFit(views::LayoutProvider::Get()->GetDistanceMetric( + views::DISTANCE_BUBBLE_PREFERRED_WIDTH)); + + // Buttons + SetButtons(ui::DIALOG_BUTTON_OK | ui::DIALOG_BUTTON_CANCEL); + SetButtonLabel(ui::DIALOG_BUTTON_OK, + l10n_util::GetStringUTF16( + IDS_INCOGNITO_HISTORY_BUBBLE_CANCEL_BUTTON_TEXT)); + SetButtonLabel(ui::DIALOG_BUTTON_CANCEL, + l10n_util::GetStringUTF16( + IDS_INCOGNITO_HISTORY_BUBBLE_CLOSE_INCOGNITO_BUTTON_TEXT)); + + SetAcceptCallback( + base::BindOnce(&IncognitoClearBrowsingDataDialog::OnCancelButtonClicked, + base::Unretained(this))); + SetCancelCallback(base::BindOnce( + &IncognitoClearBrowsingDataDialog::OnCloseWindowsButtonClicked, + base::Unretained(this))); +} + void IncognitoClearBrowsingDataDialog::OnCloseWindowsButtonClicked() { // Skipping before-unload trigger to give incognito mode users a chance to // quickly close all incognito windows without needing to confirm closing the
diff --git a/chrome/browser/ui/views/incognito_clear_browsing_data_dialog.h b/chrome/browser/ui/views/incognito_clear_browsing_data_dialog.h index c773a01..75b7f53 100644 --- a/chrome/browser/ui/views/incognito_clear_browsing_data_dialog.h +++ b/chrome/browser/ui/views/incognito_clear_browsing_data_dialog.h
@@ -25,7 +25,15 @@ public: METADATA_HEADER(IncognitoClearBrowsingDataDialog); - static void Show(views::View* anchor_view, Profile* incognito_profile); + enum Type { + kDefaultBubble = 0, + kHistoryDisclaimerBubble = 1, + kMaxValue = kHistoryDisclaimerBubble, + }; + + static void Show(views::View* anchor_view, + Profile* incognito_profile, + Type type); static bool IsShowing(); // testing @@ -43,7 +51,8 @@ private: explicit IncognitoClearBrowsingDataDialog(views::View* anchor_view, - Profile* incognito_profile); + Profile* incognito_profile, + Type type); static void CloseDialog(); @@ -53,6 +62,9 @@ void OnCloseWindowsButtonClicked(); void OnCancelButtonClicked(); + void SetDialogForDefaultBubbleType(); + void SetDialogForHistoryDisclaimerBubbleType(); + Profile* incognito_profile_; NonAccessibleImageView* header_view_; base::OnceClosure destructor_callback_ = base::DoNothing();
diff --git a/chrome/browser/ui/views/incognito_clear_browsing_data_dialog_browsertest.cc b/chrome/browser/ui/views/incognito_clear_browsing_data_dialog_browsertest.cc index a3cdd96..1ca141a3 100644 --- a/chrome/browser/ui/views/incognito_clear_browsing_data_dialog_browsertest.cc +++ b/chrome/browser/ui/views/incognito_clear_browsing_data_dialog_browsertest.cc
@@ -26,7 +26,9 @@ BrowserView::GetBrowserViewForBrowser(incognito_browser_) ->toolbar_button_provider() ->GetAvatarToolbarButton()); - IncognitoClearBrowsingDataDialog::Show(view, incognito_browser_->profile()); + IncognitoClearBrowsingDataDialog::Show( + view, incognito_browser_->profile(), + IncognitoClearBrowsingDataDialog::Type::kDefaultBubble); EXPECT_TRUE(IncognitoClearBrowsingDataDialog::IsShowing()); } @@ -130,3 +132,69 @@ ASSERT_FALSE(IncognitoClearBrowsingDataDialog::IsShowing()); } } + +class IncognitoHistoryDisclaimerDialogBrowserTest + : public InProcessBrowserTest { + public: + void OpenDialog() { + incognito_browser_ = CreateIncognitoBrowser(browser()->profile()); + views::View* view = static_cast<views::View*>( + BrowserView::GetBrowserViewForBrowser(incognito_browser_) + ->toolbar_button_provider() + ->GetAvatarToolbarButton()); + IncognitoClearBrowsingDataDialog::Show( + view, incognito_browser_->profile(), + IncognitoClearBrowsingDataDialog::Type::kHistoryDisclaimerBubble); + EXPECT_TRUE(IncognitoClearBrowsingDataDialog::IsShowing()); + } + + Browser* GetIncognitoBrowser() { return incognito_browser_; } + + IncognitoClearBrowsingDataDialog* GetDialogView() { + return IncognitoClearBrowsingDataDialog:: + GetIncognitoClearBrowsingDataDialogForTesting(); + } + + private: + Browser* incognito_browser_ = nullptr; +}; + +IN_PROC_BROWSER_TEST_F(IncognitoHistoryDisclaimerDialogBrowserTest, + TestDialogIsShown) { + OpenDialog(); + auto* incognito_cbd_dialog_view = GetDialogView(); + + ASSERT_TRUE(IncognitoClearBrowsingDataDialog::IsShowing()); + ASSERT_EQ(ui::DIALOG_BUTTON_OK | ui::DIALOG_BUTTON_CANCEL, + incognito_cbd_dialog_view->GetDialogButtons()); + ASSERT_TRUE( + incognito_cbd_dialog_view->IsDialogButtonEnabled(ui::DIALOG_BUTTON_OK)); + ASSERT_TRUE(incognito_cbd_dialog_view->IsDialogButtonEnabled( + ui::DIALOG_BUTTON_CANCEL)); +} + +IN_PROC_BROWSER_TEST_F(IncognitoHistoryDisclaimerDialogBrowserTest, + TestCloseIncognitoButton) { + OpenDialog(); + + GetDialogView()->CancelDialog(); + ui_test_utils::WaitForBrowserToClose(GetIncognitoBrowser()); + ASSERT_EQ(0UL, BrowserList::GetIncognitoBrowserCount()); + ASSERT_TRUE(GetDialogView() == nullptr); +} + +IN_PROC_BROWSER_TEST_F(IncognitoHistoryDisclaimerDialogBrowserTest, + TestGotItButton) { + OpenDialog(); + + base::RunLoop run_loop; + GetDialogView()->SetDestructorCallbackForTesting( + base::BindLambdaForTesting([&]() { + run_loop.Quit(); + ASSERT_FALSE(IncognitoClearBrowsingDataDialog::IsShowing()); + ASSERT_TRUE(GetDialogView() == nullptr); + })); + + GetDialogView()->AcceptDialog(); + run_loop.Run(); +}
diff --git a/chrome/browser/ui/views/media_router/cast_dialog_metrics.cc b/chrome/browser/ui/views/media_router/cast_dialog_metrics.cc index ebd2727..3f66e81 100644 --- a/chrome/browser/ui/views/media_router/cast_dialog_metrics.cc +++ b/chrome/browser/ui/views/media_router/cast_dialog_metrics.cc
@@ -178,8 +178,10 @@ {MediaRouteProviderId::DIAL, {{true, 0}, {false, 0}}}, {MediaRouteProviderId::WIRED_DISPLAY, {{true, 0}, {false, 0}}}}; for (const UIMediaSink* sink : sinks) { - counts.at(sink->provider) - .at(sink->state != UIMediaSinkState::UNAVAILABLE)++; + if (sink->provider != MediaRouteProviderId::TEST) { + counts.at(sink->provider) + .at(sink->state != UIMediaSinkState::UNAVAILABLE)++; + } } for (auto provider : {MediaRouteProviderId::CAST, MediaRouteProviderId::DIAL, MediaRouteProviderId::WIRED_DISPLAY}) {
diff --git a/chrome/browser/ui/views/page_info/accuracy_tip_bubble_view_browsertest.cc b/chrome/browser/ui/views/page_info/accuracy_tip_bubble_view_browsertest.cc index 11ce8462..cc7040bc 100644 --- a/chrome/browser/ui/views/page_info/accuracy_tip_bubble_view_browsertest.cc +++ b/chrome/browser/ui/views/page_info/accuracy_tip_bubble_view_browsertest.cc
@@ -34,8 +34,10 @@ #include "components/safe_browsing/core/common/features.h" #include "components/site_engagement/content/site_engagement_score.h" #include "components/site_engagement/content/site_engagement_service.h" +#include "components/ukm/test_ukm_recorder.h" #include "content/public/test/browser_test.h" #include "net/dns/mock_host_resolver.h" +#include "services/metrics/public/cpp/ukm_builders.h" #include "ui/events/base_event_utils.h" #include "ui/views/controls/button/button.h" #include "ui/views/test/button_test_api.h" @@ -121,6 +123,8 @@ IN_PROC_BROWSER_TEST_F(AccuracyTipBubbleViewBrowserTest, DontShowOnBadUrlWithEngagement) { + ukm::TestAutoSetUkmRecorder ukm_recorder; + const GURL url = GetUrl("badurl.com"); auto* engagement_service = site_engagement::SiteEngagementServiceFactory::GetForProfile( browser()->profile()); @@ -128,15 +132,25 @@ GetUrl("badurl.com"), site_engagement::SiteEngagementScore::GetMediumEngagementBoundary()); - ui_test_utils::NavigateToURL(browser(), GetUrl("badurl.com")); + ui_test_utils::NavigateToURL(browser(), url); EXPECT_FALSE(IsUIShowing()); histogram_tester()->ExpectUniqueSample( "Privacy.AccuracyTip.PageStatus", AccuracyTipStatus::kHighEnagagement, 1); + + auto entries = ukm_recorder.GetEntriesByName( + ukm::builders::AccuracyTipStatus::kEntryName); + EXPECT_EQ(1u, entries.size()); + ukm_recorder.ExpectEntrySourceHasUrl(entries[0], url); + ukm_recorder.ExpectEntryMetric( + entries[0], ukm::builders::AccuracyTipStatus::kStatusName, + static_cast<int>(AccuracyTipStatus::kHighEnagagement)); } IN_PROC_BROWSER_TEST_F(AccuracyTipBubbleViewBrowserTest, PressIgnoreButton) { - ui_test_utils::NavigateToURL(browser(), GetUrl("badurl.com")); + ukm::TestAutoSetUkmRecorder ukm_recorder; + const GURL url = GetUrl("badurl.com"); + ui_test_utils::NavigateToURL(browser(), url); EXPECT_TRUE(IsUIShowing()); auto* view = PageInfoBubbleViewBase::GetPageInfoBubbleForTesting(); @@ -148,6 +162,23 @@ histogram_tester()->ExpectUniqueSample( "Privacy.AccuracyTip.AccuracyTipInteraction", AccuracyTipInteraction::kClosed, 1); + + auto status_entries = ukm_recorder.GetEntriesByName( + ukm::builders::AccuracyTipStatus::kEntryName); + EXPECT_EQ(1u, status_entries.size()); + ukm_recorder.ExpectEntrySourceHasUrl(status_entries[0], url); + ukm_recorder.ExpectEntryMetric( + status_entries[0], ukm::builders::AccuracyTipStatus::kStatusName, + static_cast<int>(AccuracyTipStatus::kShowAccuracyTip)); + + auto interaction_entries = ukm_recorder.GetEntriesByName( + ukm::builders::AccuracyTipDialog::kEntryName); + EXPECT_EQ(1u, interaction_entries.size()); + ukm_recorder.ExpectEntrySourceHasUrl(interaction_entries[0], url); + ukm_recorder.ExpectEntryMetric( + interaction_entries[0], + ukm::builders::AccuracyTipDialog::kInteractionName, + static_cast<int>(AccuracyTipInteraction::kClosed)); } IN_PROC_BROWSER_TEST_F(AccuracyTipBubbleViewBrowserTest, PressEsc) {
diff --git a/chrome/browser/ui/views/session_crashed_bubble_view.cc b/chrome/browser/ui/views/session_crashed_bubble_view.cc index 1f4e192..b7feead 100644 --- a/chrome/browser/ui/views/session_crashed_bubble_view.cc +++ b/chrome/browser/ui/views/session_crashed_bubble_view.cc
@@ -168,7 +168,9 @@ }; // static -void SessionCrashedBubble::ShowIfNotOffTheRecordProfile(Browser* browser) { +void SessionCrashedBubble::ShowIfNotOffTheRecordProfile( + Browser* browser, + bool skip_tab_checking) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); if (browser->profile()->IsOffTheRecord()) return; @@ -183,15 +185,17 @@ GoogleUpdateSettings::CollectStatsConsentTaskRunner(), FROM_HERE, base::BindOnce(&GoogleUpdateSettings::GetCollectStatsConsent), base::BindOnce(&SessionCrashedBubbleView::Show, - std::move(browser_observer))); + std::move(browser_observer), skip_tab_checking)); } else { - SessionCrashedBubbleView::Show(std::move(browser_observer), false); + SessionCrashedBubbleView::Show(std::move(browser_observer), + skip_tab_checking, false); } } // static void SessionCrashedBubbleView::Show( std::unique_ptr<BrowserRemovalObserver> browser_observer, + bool skip_tab_checking, bool uma_opted_in_already) { // Determine whether or not the UMA opt-in option should be offered. It is // offered only when it is a Google chrome build, user hasn't opted in yet, @@ -203,12 +207,13 @@ Browser* browser = browser_observer->browser(); - if (!browser || !browser->tab_strip_model()->GetActiveWebContents()) { - RecordBubbleHistogramValue(SESSION_CRASHED_BUBBLE_ERROR); + if (browser && (skip_tab_checking || + browser->tab_strip_model()->GetActiveWebContents())) { + ShowBubble(browser, uma_opted_in_already, offer_uma_optin); return; } - ShowBubble(browser, uma_opted_in_already, offer_uma_optin); + RecordBubbleHistogramValue(SESSION_CRASHED_BUBBLE_ERROR); } views::BubbleDialogDelegate* SessionCrashedBubbleView::ShowBubble(
diff --git a/chrome/browser/ui/views/session_crashed_bubble_view.h b/chrome/browser/ui/views/session_crashed_bubble_view.h index 920d4759..d93014f 100644 --- a/chrome/browser/ui/views/session_crashed_bubble_view.h +++ b/chrome/browser/ui/views/session_crashed_bubble_view.h
@@ -21,10 +21,12 @@ // A helper class that listens to browser removal event. class BrowserRemovalObserver; - // Creates and shows the session crashed bubble, with |uma_opted_in_already| + // Creates and shows the session crashed bubble, with |skip_tab_checking| + // indicating whether skip the tab checking, and |uma_opted_in_already| // indicating whether the user has already opted-in to UMA. It will be called // by ShowIfNotOffTheRecordProfile. It takes ownership of |browser_observer|. static void Show(std::unique_ptr<BrowserRemovalObserver> browser_observer, + bool skip_tab_checking, bool uma_opted_in_already); private:
diff --git a/chrome/browser/ui/views/sharing_hub/screenshot/screenshot_captured_bubble.cc b/chrome/browser/ui/views/sharing_hub/screenshot/screenshot_captured_bubble.cc index 21732d94..bcad414 100644 --- a/chrome/browser/ui/views/sharing_hub/screenshot/screenshot_captured_bubble.cc +++ b/chrome/browser/ui/views/sharing_hub/screenshot/screenshot_captured_bubble.cc
@@ -8,7 +8,10 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_finder.h" +#include "chrome/browser/ui/browser_navigator.h" +#include "chrome/browser/ui/browser_navigator_params.h" #include "chrome/browser/ui/views/chrome_layout_provider.h" +#include "chrome/common/webui_url_constants.h" #include "chrome/grit/generated_resources.h" #include "content/public/browser/download_manager.h" #include "content/public/browser/download_request_utils.h" @@ -52,10 +55,14 @@ ScreenshotCapturedBubble::ScreenshotCapturedBubble( views::View* anchor_view, content::WebContents* web_contents, - const gfx::Image& image) + const gfx::Image& image, + Profile* profile, + base::OnceCallback<void(NavigateParams*)> edit_callback) : LocationBarBubbleDelegateView(anchor_view, nullptr), image_(image), - web_contents_(web_contents) { + web_contents_(web_contents), + profile_(profile), + edit_callback_(std::move(edit_callback)) { SetButtons(ui::DIALOG_BUTTON_NONE); SetTitle(IDS_BROWSER_SHARING_SCREENSHOT_POST_CAPTURE_TITLE); } @@ -221,7 +228,11 @@ } void ScreenshotCapturedBubble::EditButtonPressed() { - NOTIMPLEMENTED(); + GURL url(chrome::kChromeUIImageEditorURL); + NavigateParams params(profile_, url, ui::PAGE_TRANSITION_LINK); + params.disposition = WindowOpenDisposition::NEW_FOREGROUND_TAB; + params.window_action = NavigateParams::SHOW_WINDOW; + std::move(edit_callback_).Run(¶ms); } BEGIN_METADATA(ScreenshotCapturedBubble, LocationBarBubbleDelegateView)
diff --git a/chrome/browser/ui/views/sharing_hub/screenshot/screenshot_captured_bubble.h b/chrome/browser/ui/views/sharing_hub/screenshot/screenshot_captured_bubble.h index c538465..254da5b 100644 --- a/chrome/browser/ui/views/sharing_hub/screenshot/screenshot_captured_bubble.h +++ b/chrome/browser/ui/views/sharing_hub/screenshot/screenshot_captured_bubble.h
@@ -20,6 +20,9 @@ class View; } // namespace views +class Profile; +struct NavigateParams; + namespace sharing_hub { // Dialog that displays a captured screenshot, and provides the option @@ -27,9 +30,12 @@ class ScreenshotCapturedBubble : public LocationBarBubbleDelegateView { public: METADATA_HEADER(ScreenshotCapturedBubble); - ScreenshotCapturedBubble(views::View* anchor_view, - content::WebContents* web_contents, - const gfx::Image& image); + ScreenshotCapturedBubble( + views::View* anchor_view, + content::WebContents* web_contents, + const gfx::Image& image, + Profile* profile, + base::OnceCallback<void(NavigateParams*)> edit_callback); ScreenshotCapturedBubble(const ScreenshotCapturedBubble&) = delete; ScreenshotCapturedBubble& operator=(const ScreenshotCapturedBubble&) = delete; ~ScreenshotCapturedBubble() override; @@ -55,6 +61,10 @@ content::WebContents* web_contents_; + Profile* profile_; + + base::OnceCallback<void(NavigateParams*)> edit_callback_; + // Pointers to view widgets; weak. views::ImageView* image_view_ = nullptr; views::MdTextButton* download_button_ = nullptr;
diff --git a/chrome/browser/ui/views/sharing_hub/screenshot/screenshot_captured_bubble_unittest.cc b/chrome/browser/ui/views/sharing_hub/screenshot/screenshot_captured_bubble_unittest.cc new file mode 100644 index 0000000..4e330884 --- /dev/null +++ b/chrome/browser/ui/views/sharing_hub/screenshot/screenshot_captured_bubble_unittest.cc
@@ -0,0 +1,34 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/ui/views/sharing_hub/screenshot/screenshot_captured_bubble.h" + +#include <vector> + +#include "base/callback.h" +#include "base/test/bind.h" +#include "chrome/browser/ui/browser_navigator.h" +#include "chrome/browser/ui/browser_navigator_params.h" +#include "chrome/common/webui_url_constants.h" +#include "chrome/test/views/chrome_views_test_base.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "ui/views/bubble/bubble_dialog_delegate_view.h" + +namespace sharing_hub { + +class ScreenshotCapturedBubbleTest : public ChromeViewsTestBase {}; + +TEST_F(ScreenshotCapturedBubbleTest, EditNavigatesToImageEditorWebUI) { + const gfx::Image image; + ScreenshotCapturedBubble bubble( + nullptr, nullptr, image, nullptr, + base::BindLambdaForTesting([&](NavigateParams* params) { + EXPECT_EQ(chrome::kChromeUIImageEditorURL, params->url.spec()); + EXPECT_EQ(WindowOpenDisposition::NEW_FOREGROUND_TAB, + params->disposition); + EXPECT_EQ(NavigateParams::SHOW_WINDOW, params->window_action); + })); +} + +} // namespace sharing_hub
diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc index b8751d3..df3ec5d 100644 --- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc +++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
@@ -38,6 +38,7 @@ #include "chrome/browser/ui/webui/federated_learning/floc_internals_ui.h" #include "chrome/browser/ui/webui/flags/flags_ui.h" #include "chrome/browser/ui/webui/gcm_internals_ui.h" +#include "chrome/browser/ui/webui/image_editor/image_editor_ui.h" #include "chrome/browser/ui/webui/internals/internals_ui.h" #include "chrome/browser/ui/webui/interstitials/interstitial_ui.h" #include "chrome/browser/ui/webui/invalidations/invalidations_ui.h" @@ -961,6 +962,9 @@ !profile->IsOffTheRecord()) { return &NewWebUI<SyncConfirmationUI>; } + if (url.host_piece() == chrome::kChromeUIImageEditorHost) { + return &NewWebUI<ImageEditorUI>; + } #endif // defined(OS_ANDROID) #if !BUILDFLAG(IS_CHROMEOS_ASH) && !defined(OS_ANDROID) if (url.host_piece() == chrome::kChromeUIEnterpriseProfileWelcomeHost)
diff --git a/chrome/browser/ui/webui/image_editor/OWNERS b/chrome/browser/ui/webui/image_editor/OWNERS new file mode 100644 index 0000000..1745104 --- /dev/null +++ b/chrome/browser/ui/webui/image_editor/OWNERS
@@ -0,0 +1 @@ +file://components/send_tab_to_self/OWNERS
diff --git a/chrome/browser/ui/webui/image_editor/image_editor_ui.cc b/chrome/browser/ui/webui/image_editor/image_editor_ui.cc new file mode 100644 index 0000000..ef5964f6 --- /dev/null +++ b/chrome/browser/ui/webui/image_editor/image_editor_ui.cc
@@ -0,0 +1,18 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/ui/webui/image_editor/image_editor_ui.h" + +#include "chrome/browser/profiles/profile.h" +#include "chrome/common/url_constants.h" +#include "chrome/grit/browser_resources.h" +#include "content/public/browser/web_ui_data_source.h" + +ImageEditorUI::ImageEditorUI(content::WebUI* web_ui) : WebUIController(web_ui) { + // Set up the chrome://image-editor source. + content::WebUIDataSource* html_source = + content::WebUIDataSource::Create(chrome::kChromeUIImageEditorHost); + html_source->SetDefaultResource(IDR_IMAGE_EDITOR_HTML); + content::WebUIDataSource::Add(Profile::FromWebUI(web_ui), html_source); +}
diff --git a/chrome/browser/ui/webui/image_editor/image_editor_ui.h b/chrome/browser/ui/webui/image_editor/image_editor_ui.h new file mode 100644 index 0000000..380f4aeb --- /dev/null +++ b/chrome/browser/ui/webui/image_editor/image_editor_ui.h
@@ -0,0 +1,24 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_UI_WEBUI_IMAGE_EDITOR_IMAGE_EDITOR_UI_H_ +#define CHROME_BROWSER_UI_WEBUI_IMAGE_EDITOR_IMAGE_EDITOR_UI_H_ + +#include "base/macros.h" +#include "content/public/browser/web_ui_controller.h" + +// This UI and the chrome://image-editor page acts as a wrapper, using an +// <iframe> to display an app hosted from chrome-untrusted://image-editor. The +// mojo interface to handle the user-generated screenshot content will exist +// on the chrome-untrusted page. Note the actual editor app and library is +// reviewed and controlled by us. +class ImageEditorUI : public content::WebUIController { + public: + explicit ImageEditorUI(content::WebUI* web_ui); + ImageEditorUI(const ImageEditorUI&) = delete; + ImageEditorUI& operator=(const ImageEditorUI&) = delete; + ~ImageEditorUI() override = default; +}; + +#endif // CHROME_BROWSER_UI_WEBUI_IMAGE_EDITOR_IMAGE_EDITOR_UI_H_
diff --git a/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.cc b/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.cc index b594b63..1de1e3ce 100644 --- a/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.cc +++ b/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.cc
@@ -28,7 +28,7 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/search/background/ntp_background_service.h" #include "chrome/browser/search/background/ntp_background_service_factory.h" -#include "chrome/browser/search/instant_service.h" +#include "chrome/browser/search/background/ntp_custom_background_service.h" #include "chrome/browser/search_engines/template_url_service_factory.h" #include "chrome/browser/themes/theme_properties.h" #include "chrome/browser/ui/chrome_select_file_policy.h" @@ -38,9 +38,9 @@ #include "chrome/browser/ui/webui/new_tab_page/ntp_pref_names.h" #include "chrome/browser/ui/webui/realbox/realbox.mojom.h" #include "chrome/common/pref_names.h" -#include "chrome/common/search/instant_types.h" #include "chrome/common/url_constants.h" #include "chrome/grit/generated_resources.h" +#include "chrome/grit/theme_resources.h" #include "components/keyed_service/core/service_access_type.h" #include "components/prefs/pref_service.h" #include "components/prefs/scoped_user_pref_update.h" @@ -55,6 +55,7 @@ #include "services/network/public/mojom/url_response_head.mojom.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/theme_provider.h" +#include "ui/gfx/color_palette.h" #include "ui/gfx/color_utils.h" namespace { @@ -62,113 +63,103 @@ const int64_t kMaxDownloadBytes = 1024 * 1024; new_tab_page::mojom::ThemePtr MakeTheme( - const NtpTheme& ntp_theme, - const ui::ThemeProvider* theme_provider) { + const ui::ThemeProvider* theme_provider, + ThemeService* theme_service, + NtpCustomBackgroundService* ntp_custom_background_service) { auto theme = new_tab_page::mojom::Theme::New(); auto most_visited = most_visited::mojom::MostVisitedTheme::New(); - theme->is_default = ntp_theme.using_default_theme; - theme->background_color = ntp_theme.background_color; - if (!ntp_theme.custom_background_url.is_empty()) { + auto custom_background = + ntp_custom_background_service + ? ntp_custom_background_service->GetCustomBackground() + : absl::optional<CustomBackground>(); + theme->is_default = theme_service->UsingDefaultTheme(); + theme->background_color = + theme_provider->GetColor(ThemeProperties::COLOR_NTP_BACKGROUND); + SkColor text_color; + if (custom_background.has_value()) { + text_color = gfx::kGoogleGrey050; most_visited->background_color = ThemeProperties::GetDefaultColor( ThemeProperties::COLOR_NTP_SHORTCUT, false); theme->logo_color = ThemeProperties::GetDefaultColor( ThemeProperties::COLOR_NTP_LOGO, false); } else { + text_color = theme_provider->GetColor(ThemeProperties::COLOR_NTP_TEXT); most_visited->background_color = theme_provider->GetColor(ThemeProperties::COLOR_NTP_SHORTCUT); - if (ntp_theme.logo_alternate) { + if (theme_provider->GetDisplayProperty( + ThemeProperties::NTP_LOGO_ALTERNATE) == 1) { theme->logo_color = theme_provider->GetColor(ThemeProperties::COLOR_NTP_LOGO); } } most_visited->use_white_tile_icon = color_utils::IsDark(most_visited->background_color); - most_visited->is_dark = !color_utils::IsDark(ntp_theme.text_color); + most_visited->is_dark = !color_utils::IsDark(text_color); most_visited->use_title_pill = false; - theme->text_color = ntp_theme.text_color; - theme->is_dark = !color_utils::IsDark(ntp_theme.text_color); + theme->text_color = text_color; + theme->is_dark = !color_utils::IsDark(text_color); auto background_image = new_tab_page::mojom::BackgroundImage::New(); - if (!ntp_theme.custom_background_url.is_empty()) { - background_image->url = ntp_theme.custom_background_url; - } else if (ntp_theme.has_theme_image) { + if (custom_background.has_value()) { + background_image->url = custom_background->custom_background_url; + } else if (theme_provider->HasCustomImage(IDR_THEME_NTP_BACKGROUND)) { most_visited->use_title_pill = true; - background_image->url = - GURL(base::StrCat({"chrome-untrusted://theme/IDR_THEME_NTP_BACKGROUND?", - ntp_theme.theme_id})); - background_image->url_2x = GURL( - base::StrCat({"chrome-untrusted://theme/IDR_THEME_NTP_BACKGROUND@2x?", - ntp_theme.theme_id})); - if (ntp_theme.has_attribution) { + auto theme_id = theme_service->GetThemeID(); + background_image->url = GURL(base::StrCat( + {"chrome-untrusted://theme/IDR_THEME_NTP_BACKGROUND?", theme_id})); + background_image->url_2x = GURL(base::StrCat( + {"chrome-untrusted://theme/IDR_THEME_NTP_BACKGROUND@2x?", theme_id})); + if (theme_provider->HasCustomImage(IDR_THEME_NTP_ATTRIBUTION)) { background_image->attribution_url = GURL(base::StrCat( - {"chrome://theme/IDR_THEME_NTP_ATTRIBUTION?", ntp_theme.theme_id})); + {"chrome://theme/IDR_THEME_NTP_ATTRIBUTION?", theme_id})); } background_image->size = "initial"; - switch (ntp_theme.image_tiling) { - case THEME_BKGRND_IMAGE_NO_REPEAT: + switch (theme_provider->GetDisplayProperty( + ThemeProperties::NTP_BACKGROUND_TILING)) { + case ThemeProperties::NO_REPEAT: background_image->repeat_x = "no-repeat"; background_image->repeat_y = "no-repeat"; break; - case THEME_BKGRND_IMAGE_REPEAT_X: + case ThemeProperties::REPEAT_X: background_image->repeat_x = "repeat"; background_image->repeat_y = "no-repeat"; break; - case THEME_BKGRND_IMAGE_REPEAT_Y: + case ThemeProperties::REPEAT_Y: background_image->repeat_x = "no-repeat"; background_image->repeat_y = "repeat"; break; - case THEME_BKGRND_IMAGE_REPEAT: + case ThemeProperties::REPEAT: background_image->repeat_x = "repeat"; background_image->repeat_y = "repeat"; break; } - switch (ntp_theme.image_horizontal_alignment) { - case THEME_BKGRND_IMAGE_ALIGN_CENTER: - background_image->position_x = "center"; - break; - case THEME_BKGRND_IMAGE_ALIGN_LEFT: - background_image->position_x = "left"; - break; - case THEME_BKGRND_IMAGE_ALIGN_RIGHT: - background_image->position_x = "right"; - break; - case THEME_BKGRND_IMAGE_ALIGN_TOP: - case THEME_BKGRND_IMAGE_ALIGN_BOTTOM: - // Inconsistent. Ignore. - break; + int alignment = theme_provider->GetDisplayProperty( + ThemeProperties::NTP_BACKGROUND_ALIGNMENT); + if (alignment & ThemeProperties::ALIGN_LEFT) { + background_image->position_x = "left"; + } else if (alignment & ThemeProperties::ALIGN_RIGHT) { + background_image->position_x = "right"; + } else { + background_image->position_x = "center"; } - switch (ntp_theme.image_vertical_alignment) { - case THEME_BKGRND_IMAGE_ALIGN_CENTER: - background_image->position_y = "center"; - break; - case THEME_BKGRND_IMAGE_ALIGN_TOP: - background_image->position_y = "top"; - break; - case THEME_BKGRND_IMAGE_ALIGN_BOTTOM: - background_image->position_y = "bottom"; - break; - case THEME_BKGRND_IMAGE_ALIGN_LEFT: - case THEME_BKGRND_IMAGE_ALIGN_RIGHT: - // Inconsistent. Ignore. - break; + if (alignment & ThemeProperties::ALIGN_TOP) { + background_image->position_y = "top"; + } else if (alignment & ThemeProperties::ALIGN_BOTTOM) { + background_image->position_y = "bottom"; + } else { + background_image->position_y = "center"; } } else { background_image = nullptr; } theme->background_image = std::move(background_image); - if (!ntp_theme.custom_background_attribution_line_1.empty()) { + if (custom_background.has_value()) { theme->background_image_attribution_1 = - ntp_theme.custom_background_attribution_line_1; - } - if (!ntp_theme.custom_background_attribution_line_2.empty()) { + custom_background->custom_background_attribution_line_1; theme->background_image_attribution_2 = - ntp_theme.custom_background_attribution_line_2; - } - if (!ntp_theme.custom_background_attribution_action_url.is_empty()) { + custom_background->custom_background_attribution_line_2; theme->background_image_attribution_url = - ntp_theme.custom_background_attribution_action_url; - } - if (!ntp_theme.collection_id.empty()) { - theme->daily_refresh_collection_id = ntp_theme.collection_id; + custom_background->custom_background_attribution_action_url; + theme->daily_refresh_collection_id = custom_background->collection_id; } theme->most_visited = std::move(most_visited); @@ -348,16 +339,18 @@ pending_page_handler, mojo::PendingRemote<new_tab_page::mojom::Page> pending_page, Profile* profile, - InstantService* instant_service, + NtpCustomBackgroundService* ntp_custom_background_service, + ThemeService* theme_service, search_provider_logos::LogoService* logo_service, const ui::ThemeProvider* theme_provider, content::WebContents* web_contents, const base::Time& ntp_navigation_start_time) - : instant_service_(instant_service), - ntp_background_service_( + : ntp_background_service_( NtpBackgroundServiceFactory::GetForProfile(profile)), + ntp_custom_background_service_(ntp_custom_background_service), logo_service_(logo_service), theme_provider_(theme_provider), + theme_service_(theme_service), profile_(profile), web_contents_(web_contents), ntp_navigation_start_time_(ntp_navigation_start_time), @@ -365,20 +358,23 @@ promo_service_(PromoServiceFactory::GetForProfile(profile)), page_{std::move(pending_page)}, receiver_{this, std::move(pending_page_handler)} { - CHECK(instant_service_); CHECK(ntp_background_service_); + CHECK(ntp_custom_background_service_); CHECK(logo_service_); CHECK(theme_provider_); + CHECK(theme_service_); CHECK(promo_service_); CHECK(web_contents_); - instant_service_->AddObserver(this); ntp_background_service_->AddObserver(this); - instant_service_->UpdateNtpTheme(); + theme_service_observation_.Observe(theme_service_); + ntp_custom_background_service_observation_.Observe( + ntp_custom_background_service_); promo_service_observation_.Observe(promo_service_); + page_->SetTheme(MakeTheme(theme_provider_, theme_service_, + ntp_custom_background_service_)); } NewTabPageHandler::~NewTabPageHandler() { - instant_service_->RemoveObserver(this); ntp_background_service_->RemoveObserver(this); if (select_file_dialog_) { select_file_dialog_->ListenerDestroyed(); @@ -423,9 +419,9 @@ const GURL& image_url) { // Populating the |collection_id| turns on refresh daily which overrides the // the selected image. - instant_service_->SetCustomBackgroundInfo(image_url, attribution_1, - attribution_2, attribution_url, - /* collection_id= */ ""); + ntp_custom_background_service_->SetCustomBackgroundInfo( + image_url, attribution_1, attribution_2, attribution_url, + /* collection_id= */ ""); LogEvent(NTP_BACKGROUND_IMAGE_SET); } @@ -433,16 +429,18 @@ const std::string& collection_id) { // Populating the |collection_id| turns on refresh daily which overrides the // the selected image. - instant_service_->SetCustomBackgroundInfo( - /* image_url */ GURL(), /* attribution_1= */ "", /* attribution_2= */ "", - /* attribution_url= */ GURL(), collection_id); + ntp_custom_background_service_->SetCustomBackgroundInfo( + /* image_url */ GURL(), /* attribution_line_1= */ "", + /* attribution_line_2= */ "", + /* action_url= */ GURL(), collection_id); LogEvent(NTP_BACKGROUND_DAILY_REFRESH_ENABLED); } void NewTabPageHandler::SetNoBackgroundImage() { - instant_service_->SetCustomBackgroundInfo( - /* image_url */ GURL(), /* attribution_1= */ "", /* attribution_2= */ "", - /* attribution_url= */ GURL(), /* collection_id= */ ""); + ntp_custom_background_service_->SetCustomBackgroundInfo( + /* image_url */ GURL(), /* attribution_line_1= */ "", + /* attribution_line_2= */ "", + /* action_url= */ GURL(), /* collection_id= */ ""); LogEvent(NTP_BACKGROUND_IMAGE_RESET); } @@ -813,12 +811,20 @@ LogEvent(NTP_MIDDLE_SLOT_PROMO_LINK_CLICKED); } -void NewTabPageHandler::NtpThemeChanged(const NtpTheme& ntp_theme) { - page_->SetTheme(MakeTheme(ntp_theme, theme_provider_)); +void NewTabPageHandler::OnThemeChanged() { + page_->SetTheme(MakeTheme(theme_provider_, theme_service_, + ntp_custom_background_service_)); } -void NewTabPageHandler::MostVisitedInfoChanged( - const InstantMostVisitedInfo& info) {} +void NewTabPageHandler::OnCustomBackgroundImageUpdated() { + page_->SetTheme(MakeTheme(theme_provider_, theme_service_, + ntp_custom_background_service_)); +} + +void NewTabPageHandler::OnNtpCustomBackgroundServiceShuttingDown() { + ntp_custom_background_service_observation_.Reset(); + ntp_custom_background_service_ = nullptr; +} void NewTabPageHandler::OnCollectionInfoAvailable() { if (!background_collections_callback_) { @@ -901,9 +907,9 @@ int index, void* params) { DCHECK(choose_local_custom_background_callback_); - if (instant_service_) { + if (ntp_custom_background_service_) { profile_->set_last_selected_directory(path.DirName()); - instant_service_->SelectLocalBackgroundImage(path); + ntp_custom_background_service_->SelectLocalBackgroundImage(path); } select_file_dialog_ = nullptr;
diff --git a/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.h b/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.h index 4582cfb..c2c05a09 100644 --- a/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.h +++ b/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.h
@@ -15,10 +15,12 @@ #include "chrome/browser/new_tab_page/promos/promo_service.h" #include "chrome/browser/new_tab_page/promos/promo_service_observer.h" #include "chrome/browser/search/background/ntp_background_service_observer.h" -#include "chrome/browser/search/instant_service_observer.h" +#include "chrome/browser/search/background/ntp_custom_background_service.h" +#include "chrome/browser/search/background/ntp_custom_background_service_observer.h" +#include "chrome/browser/themes/theme_service.h" +#include "chrome/browser/themes/theme_service_observer.h" #include "chrome/browser/ui/search/ntp_user_data_logger.h" #include "chrome/browser/ui/webui/new_tab_page/new_tab_page.mojom.h" -#include "chrome/common/search/instant_types.h" #include "chrome/common/search/ntp_logging_events.h" #include "components/search_provider_logos/logo_common.h" #include "content/public/browser/web_contents_observer.h" @@ -30,7 +32,6 @@ #include "ui/shell_dialogs/select_file_dialog.h" class GURL; -class InstantService; class NtpBackgroundService; class Profile; class NTPUserDataLogger; @@ -48,7 +49,8 @@ } // namespace ui class NewTabPageHandler : public new_tab_page::mojom::PageHandler, - public InstantServiceObserver, + public ThemeServiceObserver, + public NtpCustomBackgroundServiceObserver, public NtpBackgroundServiceObserver, public ui::SelectFileDialog::Listener, public PromoServiceObserver { @@ -57,7 +59,8 @@ pending_page_handler, mojo::PendingRemote<new_tab_page::mojom::Page> pending_page, Profile* profile, - InstantService* instant_service, + NtpCustomBackgroundService* ntp_custom_background_service, + ThemeService* theme_service, search_provider_logos::LogoService* logo_service, const ui::ThemeProvider* theme_provider, content::WebContents* web_contents, @@ -113,9 +116,12 @@ void OnPromoLinkClicked() override; private: - // InstantServiceObserver: - void NtpThemeChanged(const NtpTheme& theme) override; - void MostVisitedInfoChanged(const InstantMostVisitedInfo& info) override; + // ThemeServiceObserver: + void OnThemeChanged() override; + + // NtpCustomBackgroundServiceObserver: + void OnCustomBackgroundImageUpdated() override; + void OnNtpCustomBackgroundServiceShuttingDown() override; // NtpBackgroundServiceObserver: void OnCollectionInfoAvailable() override; @@ -155,10 +161,11 @@ bool IsShortcutsVisible() const; ChooseLocalCustomBackgroundCallback choose_local_custom_background_callback_; - InstantService* instant_service_; NtpBackgroundService* ntp_background_service_; + NtpCustomBackgroundService* ntp_custom_background_service_; search_provider_logos::LogoService* logo_service_; const ui::ThemeProvider* theme_provider_; + ThemeService* theme_service_; GURL last_blocklisted_; GetBackgroundCollectionsCallback background_collections_callback_; base::TimeTicks background_collections_request_start_time_; @@ -176,6 +183,11 @@ loader_map_; std::vector<GetPromoCallback> promo_callbacks_; PromoService* promo_service_; + base::ScopedObservation<ThemeService, ThemeServiceObserver> + theme_service_observation_{this}; + base::ScopedObservation<NtpCustomBackgroundService, + NtpCustomBackgroundServiceObserver> + ntp_custom_background_service_observation_{this}; base::ScopedObservation<PromoService, PromoServiceObserver> promo_service_observation_{this}; absl::optional<base::TimeTicks> promo_load_start_time_;
diff --git a/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler_unittest.cc b/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler_unittest.cc index c9885845..f813ac5 100644 --- a/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler_unittest.cc +++ b/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler_unittest.cc
@@ -6,11 +6,16 @@ #include "base/memory/ref_counted_memory.h" #include "base/test/metrics/histogram_tester.h" #include "base/test/mock_callback.h" -#include "chrome/browser/search/instant_service.h" +#include "chrome/browser/search/background/ntp_background_data.h" +#include "chrome/browser/search/background/ntp_custom_background_service.h" +#include "chrome/browser/search/background/ntp_custom_background_service_observer.h" +#include "chrome/browser/themes/theme_helper.h" #include "chrome/browser/themes/theme_properties.h" +#include "chrome/browser/themes/theme_service.h" +#include "chrome/browser/themes/theme_service_observer.h" #include "chrome/browser/ui/webui/new_tab_page/new_tab_page.mojom.h" #include "chrome/common/webui_url_constants.h" -#include "chrome/test/base/test_theme_provider.h" +#include "chrome/grit/theme_resources.h" #include "chrome/test/base/testing_profile.h" #include "components/search_provider_logos/logo_common.h" #include "components/search_provider_logos/logo_service.h" @@ -21,21 +26,15 @@ #include "mojo/public/cpp/bindings/receiver.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" +#include "third_party/abseil-cpp/absl/types/optional.h" +#include "ui/base/theme_provider.h" +#include "ui/gfx/color_palette.h" #include "url/gurl.h" namespace { using testing::DoAll; -class MockInstantService : public InstantService { - public: - explicit MockInstantService(Profile* profile) : InstantService(profile) {} - ~MockInstantService() override = default; - - MOCK_METHOD1(AddObserver, void(InstantServiceObserver*)); - MOCK_METHOD0(UpdateNtpTheme, void()); -}; - class MockPage : public new_tab_page::mojom::Page { public: MockPage() = default; @@ -60,30 +59,69 @@ MOCK_METHOD1(GetLogo, void(search_provider_logos::LogoObserver*)); }; +class MockThemeProvider : public ui::ThemeProvider { + public: + MOCK_CONST_METHOD1(GetImageSkiaNamed, gfx::ImageSkia*(int)); + MOCK_CONST_METHOD1(GetColor, SkColor(int)); + MOCK_CONST_METHOD1(GetTint, color_utils::HSL(int)); + MOCK_CONST_METHOD1(GetDisplayProperty, int(int)); + MOCK_CONST_METHOD0(ShouldUseNativeFrame, bool()); + MOCK_CONST_METHOD1(HasCustomImage, bool(int)); + MOCK_CONST_METHOD1(HasCustomColor, bool(int)); + MOCK_CONST_METHOD2(GetRawData, + base::RefCountedMemory*(int, ui::ResourceScaleFactor)); +}; + +class MockNtpCustomBackgroundService : public NtpCustomBackgroundService { + public: + explicit MockNtpCustomBackgroundService(Profile* profile) + : NtpCustomBackgroundService(profile) {} + MOCK_METHOD0(GetCustomBackground, absl::optional<CustomBackground>()); + MOCK_METHOD1(AddObserver, void(NtpCustomBackgroundServiceObserver*)); +}; + +class MockThemeService : public ThemeService { + public: + MockThemeService() : ThemeService(nullptr, theme_helper_) {} + MOCK_CONST_METHOD0(GetThemeID, std::string()); + MOCK_CONST_METHOD0(UsingDefaultTheme, bool()); + MOCK_METHOD1(AddObserver, void(ThemeServiceObserver*)); + + private: + ThemeHelper theme_helper_; +}; + } // namespace class NewTabPageHandlerTest : public testing::Test { public: NewTabPageHandlerTest() - : mock_instant_service_(&profile_), + : mock_ntp_custom_background_service_(&profile_), web_contents_(factory_.CreateWebContents(&profile_)) {} ~NewTabPageHandlerTest() override = default; void SetUp() override { - EXPECT_CALL(mock_instant_service_, AddObserver) - .WillOnce(DoAll(testing::SaveArg<0>(&instant_service_observer_))); - EXPECT_CALL(mock_instant_service_, UpdateNtpTheme()); + EXPECT_CALL(mock_theme_service_, AddObserver) + .Times(1) + .WillOnce(testing::SaveArg<0>(&theme_service_observer_)); + EXPECT_CALL(mock_ntp_custom_background_service_, AddObserver) + .Times(1) + .WillOnce( + testing::SaveArg<0>(&ntp_custom_background_service_observer_)); + EXPECT_CALL(mock_page_, SetTheme).Times(1); handler_ = std::make_unique<NewTabPageHandler>( mojo::PendingReceiver<new_tab_page::mojom::PageHandler>(), - mock_page_.BindAndGetRemote(), &profile_, &mock_instant_service_, - &mock_logo_service_, &test_theme_provider_, web_contents_, + mock_page_.BindAndGetRemote(), &profile_, + &mock_ntp_custom_background_service_, &mock_theme_service_, + &mock_logo_service_, &mock_theme_provider_, web_contents_, base::Time::Now()); - EXPECT_EQ(handler_.get(), instant_service_observer_); + mock_page_.FlushForTesting(); + EXPECT_EQ(handler_.get(), theme_service_observer_); + EXPECT_EQ(handler_.get(), ntp_custom_background_service_observer_); + testing::Mock::VerifyAndClearExpectations(&mock_page_); } - void TearDown() override { testing::Test::TearDown(); } - new_tab_page::mojom::DoodlePtr GetDoodle( const search_provider_logos::EncodedLogo& logo) { search_provider_logos::EncodedLogoCallback on_cached_encoded_logo_available; @@ -118,14 +156,17 @@ // NOTE: The initialization order of these members matters. content::BrowserTaskEnvironment task_environment_; TestingProfile profile_; - MockInstantService mock_instant_service_; + testing::NiceMock<MockNtpCustomBackgroundService> + mock_ntp_custom_background_service_; + testing::NiceMock<MockThemeService> mock_theme_service_; MockLogoService mock_logo_service_; - TestThemeProvider test_theme_provider_; + testing::NiceMock<MockThemeProvider> mock_theme_provider_; content::TestWebContentsFactory factory_; content::WebContents* web_contents_; // Weak. Owned by factory_. base::HistogramTester histogram_tester_; std::unique_ptr<NewTabPageHandler> handler_; - InstantServiceObserver* instant_service_observer_; + ThemeServiceObserver* theme_service_observer_; + NtpCustomBackgroundServiceObserver* ntp_custom_background_service_observer_; }; TEST_F(NewTabPageHandlerTest, SetTheme) { @@ -135,68 +176,83 @@ .WillOnce(testing::Invoke([&theme](new_tab_page::mojom::ThemePtr arg) { theme = std::move(arg); })); - NtpTheme ntp_theme; - ntp_theme.custom_background_attribution_line_1 = "foo line"; - ntp_theme.custom_background_attribution_line_2 = "bar line"; - ntp_theme.custom_background_attribution_action_url = GURL("https://foo.com"); - ntp_theme.collection_id = "foo"; - ntp_theme.background_color = SkColorSetRGB(0, 0, 1); - ntp_theme.text_color = SkColorSetRGB(0, 0, 2); - ntp_theme.using_default_theme = false; - ntp_theme.logo_alternate = true; - test_theme_provider_.SetColor(ThemeProperties::COLOR_NTP_LOGO, - SkColorSetRGB(0, 0, 3)); - ntp_theme.theme_id = "bar"; - ntp_theme.image_horizontal_alignment = THEME_BKGRND_IMAGE_ALIGN_CENTER; - ntp_theme.image_vertical_alignment = THEME_BKGRND_IMAGE_ALIGN_TOP; - ntp_theme.image_tiling = THEME_BKGRND_IMAGE_REPEAT_X; - ntp_theme.has_attribution = true; - ntp_theme.has_theme_image = true; - test_theme_provider_.SetColor(ThemeProperties::COLOR_NTP_SHORTCUT, - SkColorSetRGB(0, 0, 4)); - test_theme_provider_.SetColor(ThemeProperties::COLOR_OMNIBOX_BACKGROUND, - SkColorSetRGB(0, 0, 5)); - test_theme_provider_.SetColor(ThemeProperties::COLOR_OMNIBOX_RESULTS_ICON, - SkColorSetRGB(0, 0, 6)); - test_theme_provider_.SetColor( - ThemeProperties::COLOR_OMNIBOX_RESULTS_ICON_SELECTED, - SkColorSetRGB(0, 0, 7)); - test_theme_provider_.SetColor(ThemeProperties::COLOR_OMNIBOX_TEXT_DIMMED, - SkColorSetRGB(0, 0, 8)); - test_theme_provider_.SetColor(ThemeProperties::COLOR_OMNIBOX_RESULTS_BG, - SkColorSetRGB(0, 0, 9)); - test_theme_provider_.SetColor( - ThemeProperties::COLOR_OMNIBOX_RESULTS_BG_HOVERED, - SkColorSetRGB(0, 0, 10)); - test_theme_provider_.SetColor( - ThemeProperties::COLOR_OMNIBOX_RESULTS_BG_SELECTED, - SkColorSetRGB(0, 0, 11)); - test_theme_provider_.SetColor( - ThemeProperties::COLOR_OMNIBOX_RESULTS_TEXT_DIMMED, - SkColorSetRGB(0, 0, 12)); - test_theme_provider_.SetColor( - ThemeProperties::COLOR_OMNIBOX_RESULTS_TEXT_DIMMED_SELECTED, - SkColorSetRGB(0, 0, 13)); - test_theme_provider_.SetColor(ThemeProperties::COLOR_OMNIBOX_TEXT, - SkColorSetRGB(0, 0, 14)); - test_theme_provider_.SetColor( - ThemeProperties::COLOR_OMNIBOX_RESULTS_TEXT_SELECTED, - SkColorSetRGB(0, 0, 15)); - test_theme_provider_.SetColor(ThemeProperties::COLOR_OMNIBOX_RESULTS_URL, - SkColorSetRGB(0, 0, 16)); - test_theme_provider_.SetColor( - ThemeProperties::COLOR_OMNIBOX_RESULTS_URL_SELECTED, - SkColorSetRGB(0, 0, 17)); + ON_CALL(mock_ntp_custom_background_service_, GetCustomBackground()) + .WillByDefault(testing::Return(absl::optional<CustomBackground>())); + ON_CALL(mock_theme_provider_, GetColor(ThemeProperties::COLOR_NTP_BACKGROUND)) + .WillByDefault(testing::Return(SkColorSetRGB(0, 0, 1))); + ON_CALL(mock_theme_provider_, GetColor(ThemeProperties::COLOR_NTP_TEXT)) + .WillByDefault(testing::Return(SkColorSetRGB(0, 0, 2))); + ON_CALL(mock_theme_service_, UsingDefaultTheme()) + .WillByDefault(testing::Return(false)); + ON_CALL(mock_theme_provider_, + GetDisplayProperty(ThemeProperties::NTP_LOGO_ALTERNATE)) + .WillByDefault(testing::Return(1)); + ON_CALL(mock_theme_provider_, GetColor(ThemeProperties::COLOR_NTP_LOGO)) + .WillByDefault(testing::Return(SkColorSetRGB(0, 0, 3))); + ON_CALL(mock_theme_service_, GetThemeID()) + .WillByDefault(testing::Return("bar")); + ON_CALL(mock_theme_provider_, + GetDisplayProperty(ThemeProperties::NTP_BACKGROUND_TILING)) + .WillByDefault(testing::Return(ThemeProperties::REPEAT_X)); + ON_CALL(mock_theme_provider_, + GetDisplayProperty(ThemeProperties::NTP_BACKGROUND_ALIGNMENT)) + .WillByDefault(testing::Return(ThemeProperties::ALIGN_TOP)); + ON_CALL(mock_theme_provider_, HasCustomImage(IDR_THEME_NTP_ATTRIBUTION)) + .WillByDefault(testing::Return(true)); + ON_CALL(mock_theme_provider_, HasCustomImage(IDR_THEME_NTP_BACKGROUND)) + .WillByDefault(testing::Return(true)); + ON_CALL(mock_theme_provider_, GetColor(ThemeProperties::COLOR_NTP_SHORTCUT)) + .WillByDefault(testing::Return(SkColorSetRGB(0, 0, 4))); + ON_CALL(mock_theme_provider_, + GetColor(ThemeProperties::COLOR_OMNIBOX_BACKGROUND)) + .WillByDefault(testing::Return(SkColorSetRGB(0, 0, 5))); + ON_CALL(mock_theme_provider_, + GetColor(ThemeProperties::COLOR_OMNIBOX_RESULTS_ICON)) + .WillByDefault(testing::Return(SkColorSetRGB(0, 0, 6))); + ON_CALL(mock_theme_provider_, + GetColor(ThemeProperties::COLOR_OMNIBOX_RESULTS_ICON_SELECTED)) + .WillByDefault(testing::Return(SkColorSetRGB(0, 0, 7))); + ON_CALL(mock_theme_provider_, + GetColor(ThemeProperties::COLOR_OMNIBOX_TEXT_DIMMED)) + .WillByDefault(testing::Return(SkColorSetRGB(0, 0, 8))); + ON_CALL(mock_theme_provider_, + GetColor(ThemeProperties::COLOR_OMNIBOX_RESULTS_BG)) + .WillByDefault(testing::Return(SkColorSetRGB(0, 0, 9))); + ON_CALL(mock_theme_provider_, + GetColor(ThemeProperties::COLOR_OMNIBOX_RESULTS_BG_HOVERED)) + .WillByDefault(testing::Return(SkColorSetRGB(0, 0, 10))); + ON_CALL(mock_theme_provider_, + GetColor(ThemeProperties::COLOR_OMNIBOX_RESULTS_BG_SELECTED)) + .WillByDefault(testing::Return(SkColorSetRGB(0, 0, 11))); + ON_CALL(mock_theme_provider_, + GetColor(ThemeProperties::COLOR_OMNIBOX_RESULTS_TEXT_DIMMED)) + .WillByDefault(testing::Return(SkColorSetRGB(0, 0, 12))); + ON_CALL(mock_theme_provider_, + GetColor(ThemeProperties::COLOR_OMNIBOX_RESULTS_TEXT_DIMMED_SELECTED)) + .WillByDefault(testing::Return(SkColorSetRGB(0, 0, 13))); + ON_CALL(mock_theme_provider_, GetColor(ThemeProperties::COLOR_OMNIBOX_TEXT)) + .WillByDefault(testing::Return(SkColorSetRGB(0, 0, 14))); + ON_CALL(mock_theme_provider_, + GetColor(ThemeProperties::COLOR_OMNIBOX_RESULTS_TEXT_SELECTED)) + .WillByDefault(testing::Return(SkColorSetRGB(0, 0, 15))); + ON_CALL(mock_theme_provider_, + GetColor(ThemeProperties::COLOR_OMNIBOX_RESULTS_URL)) + .WillByDefault(testing::Return(SkColorSetRGB(0, 0, 16))); + ON_CALL(mock_theme_provider_, + GetColor(ThemeProperties::COLOR_OMNIBOX_RESULTS_URL_SELECTED)) + .WillByDefault(testing::Return(SkColorSetRGB(0, 0, 17))); - instant_service_observer_->NtpThemeChanged(ntp_theme); + theme_service_observer_->OnThemeChanged(); mock_page_.FlushForTesting(); + ASSERT_TRUE(theme); EXPECT_EQ(SkColorSetRGB(0, 0, 1), theme->background_color); EXPECT_EQ(SkColorSetRGB(0, 0, 2), theme->text_color); EXPECT_FALSE(theme->is_default); EXPECT_FALSE(theme->is_dark); EXPECT_EQ(SkColorSetRGB(0, 0, 3), theme->logo_color); - EXPECT_EQ("foo", theme->daily_refresh_collection_id); + EXPECT_FALSE(theme->daily_refresh_collection_id.has_value()); + ASSERT_TRUE(theme->background_image); EXPECT_EQ("chrome-untrusted://theme/IDR_THEME_NTP_BACKGROUND?bar", theme->background_image->url); EXPECT_EQ("chrome-untrusted://theme/IDR_THEME_NTP_BACKGROUND@2x?bar", @@ -208,9 +264,10 @@ EXPECT_EQ("no-repeat", theme->background_image->repeat_y); EXPECT_EQ("center", theme->background_image->position_x); EXPECT_EQ("top", theme->background_image->position_y); - EXPECT_EQ("foo line", theme->background_image_attribution_1); - EXPECT_EQ("bar line", theme->background_image_attribution_2); - EXPECT_EQ(GURL("https://foo.com"), theme->background_image_attribution_url); + EXPECT_FALSE(theme->background_image_attribution_1.has_value()); + EXPECT_FALSE(theme->background_image_attribution_2.has_value()); + EXPECT_FALSE(theme->background_image_attribution_url.has_value()); + ASSERT_TRUE(theme->most_visited); EXPECT_EQ(SkColorSetRGB(0, 0, 4), theme->most_visited->background_color); EXPECT_TRUE(theme->most_visited->use_white_tile_icon); EXPECT_TRUE(theme->most_visited->use_title_pill); @@ -231,6 +288,41 @@ EXPECT_EQ(SkColorSetRGB(0, 0, 14), theme->search_box->text); } +TEST_F(NewTabPageHandlerTest, SetCustomBackground) { + new_tab_page::mojom::ThemePtr theme; + EXPECT_CALL(mock_page_, SetTheme) + .Times(1) + .WillOnce(testing::Invoke([&theme](new_tab_page::mojom::ThemePtr arg) { + theme = std::move(arg); + })); + CustomBackground custom_background; + custom_background.custom_background_url = GURL("https://foo.com/img.png"); + custom_background.custom_background_attribution_line_1 = "foo line"; + custom_background.custom_background_attribution_line_2 = "bar line"; + custom_background.custom_background_attribution_action_url = + GURL("https://foo.com/action"); + custom_background.collection_id = "baz collection"; + ON_CALL(mock_ntp_custom_background_service_, GetCustomBackground()) + .WillByDefault(testing::Return(absl::make_optional(custom_background))); + + ntp_custom_background_service_observer_->OnCustomBackgroundImageUpdated(); + mock_page_.FlushForTesting(); + + ASSERT_TRUE(theme); + EXPECT_EQ(gfx::kGoogleGrey050, theme->text_color); + EXPECT_EQ(ThemeProperties::GetDefaultColor( + ThemeProperties::COLOR_NTP_SHORTCUT, false), + theme->most_visited->background_color); + EXPECT_EQ( + ThemeProperties::GetDefaultColor(ThemeProperties::COLOR_NTP_LOGO, false), + theme->logo_color); + EXPECT_EQ("https://foo.com/img.png", theme->background_image->url); + EXPECT_EQ("foo line", theme->background_image_attribution_1); + EXPECT_EQ("bar line", theme->background_image_attribution_2); + EXPECT_EQ("https://foo.com/action", theme->background_image_attribution_url); + EXPECT_EQ("baz collection", theme->daily_refresh_collection_id); +} + TEST_F(NewTabPageHandlerTest, Histograms) { histogram_tester_.ExpectTotalCount( NewTabPageHandler::kModuleDismissedHistogram, 0);
diff --git a/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc b/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc index 041ca8da..3dafb79 100644 --- a/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc +++ b/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc
@@ -16,12 +16,14 @@ #include "chrome/browser/new_tab_page/modules/photos/photos_handler.h" #include "chrome/browser/new_tab_page/modules/task_module/task_module_handler.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/search/background/ntp_custom_background_service_factory.h" #include "chrome/browser/search/instant_service.h" #include "chrome/browser/search/instant_service_factory.h" #include "chrome/browser/search_engines/template_url_service_factory.h" #include "chrome/browser/search_provider_logos/logo_service_factory.h" #include "chrome/browser/signin/identity_manager_factory.h" #include "chrome/browser/themes/theme_service.h" +#include "chrome/browser/themes/theme_service_factory.h" #include "chrome/browser/ui/webui/cr_components/most_visited/most_visited_handler.h" #include "chrome/browser/ui/webui/customize_themes/chrome_customize_themes_handler.h" #include "chrome/browser/ui/webui/favicon_source.h" @@ -34,6 +36,7 @@ #include "chrome/browser/ui/webui/theme_source.h" #include "chrome/browser/ui/webui/webui_util.h" #include "chrome/common/pref_names.h" +#include "chrome/common/search/instant_types.h" #include "chrome/common/url_constants.h" #include "chrome/grit/browser_resources.h" #include "chrome/grit/chromium_strings.h" @@ -492,7 +495,9 @@ DCHECK(pending_page.is_valid()); page_handler_ = std::make_unique<NewTabPageHandler>( std::move(pending_page_handler), std::move(pending_page), profile_, - instant_service_, LogoServiceFactory::GetForProfile(profile_), + NtpCustomBackgroundServiceFactory::GetForProfile(profile_), + ThemeServiceFactory::GetForProfile(profile_), + LogoServiceFactory::GetForProfile(profile_), &ThemeService::GetThemeProviderForProfile(profile_), web_contents_, navigation_start_time_); }
diff --git a/chrome/browser/ui/webui/settings/chromeos/search_section.cc b/chrome/browser/ui/webui/settings/chromeos/search_section.cc index 308fdd9..d4fa63c 100644 --- a/chrome/browser/ui/webui/settings/chromeos/search_section.cc +++ b/chrome/browser/ui/webui/settings/chromeos/search_section.cc
@@ -190,6 +190,9 @@ }; html_source->AddLocalizedStrings(kLocalizedStrings); + + html_source->AddBoolean("quickAnswersTranslationDisabled", + ash::features::IsQuickAnswersV2TranslationDisabled()); } void AddGoogleAssistantStrings(content::WebUIDataSource* html_source) {
diff --git a/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.cc b/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.cc index ef5d45d..3d29a537 100644 --- a/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.cc +++ b/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.cc
@@ -19,7 +19,9 @@ #include "base/strings/utf_string_conversions.h" #include "base/supports_user_data.h" #include "base/threading/sequenced_task_runner_handle.h" +#include "chrome/browser/browser_process.h" #include "chrome/browser/enterprise/browser_management/browser_management_service.h" +#include "chrome/browser/enterprise/util/managed_browser_utils.h" #include "chrome/browser/policy/chrome_policy_conversions_client.h" #include "chrome/browser/policy/cloud/user_policy_signin_service.h" #include "chrome/browser/policy/cloud/user_policy_signin_service_factory.h" @@ -377,8 +379,7 @@ client_id_ = client_id; if (!base::FeatureList::IsEnabled(kAccountPoliciesLoadedWithoutSync) || - !profile_->GetPrefs()->GetBoolean( - prefs::kUserAcceptedAccountManagement)) { + !chrome::enterprise_util::UserAcceptedAccountManagement(profile_)) { // Allow user to create a new profile before continuing with sign-in. delegate_->ShowEnterpriseAccountConfirmation( account_info_, @@ -387,9 +388,8 @@ return; } - DCHECK( - base::FeatureList::IsEnabled(kAccountPoliciesLoadedWithoutSync) && - profile_->GetPrefs()->GetBoolean(prefs::kUserAcceptedAccountManagement)); + DCHECK(base::FeatureList::IsEnabled(kAccountPoliciesLoadedWithoutSync) && + chrome::enterprise_util::UserAcceptedAccountManagement(profile_)); LoadPolicyWithCachedCredentials(); } @@ -492,12 +492,14 @@ base::RecordAction(base::UserMetricsAction("Signin_Signin_Succeed")); if (base::FeatureList::IsEnabled(kAccountPoliciesLoadedWithoutSync)) { - if (!profile_->GetPrefs()->GetBoolean( - prefs::kUserAcceptedAccountManagement)) { - profile_->GetPrefs()->SetBoolean(prefs::kUserAcceptedAccountManagement, - enterprise_account_confirmed_); + bool user_accepted_management = + chrome::enterprise_util::UserAcceptedAccountManagement(profile_); + if (!user_accepted_management) { + chrome::enterprise_util::SetUserAcceptedAccountManagement( + profile_, enterprise_account_confirmed_); + user_accepted_management = true; } - if (profile_->GetPrefs()->GetBoolean(prefs::kUserAcceptedAccountManagement)) + if (user_accepted_management) signin_aborted_mode_ = SigninAbortedMode::KEEP_ACCOUNT; }
diff --git a/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_delegate_impl.cc b/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_delegate_impl.cc index 7f55c55..d224e002 100644 --- a/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_delegate_impl.cc +++ b/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_delegate_impl.cc
@@ -123,13 +123,20 @@ DiceTurnSyncOnHelper::Delegate::ShowLoginErrorForBrowser(error, browser_); } +void DiceTurnSyncOnHelperDelegateImpl:: + ShouldEnterpriseConfirmationPromptForNewProfile( + Profile* profile, + base::OnceCallback<void(bool)> callback) { + ui::CheckShouldPromptForNewProfile(profile, std::move(callback)); +} + void DiceTurnSyncOnHelperDelegateImpl::ShowEnterpriseAccountConfirmation( const AccountInfo& account_info, DiceTurnSyncOnHelper::SigninChoiceCallback callback) { browser_ = EnsureBrowser(browser_, profile_); // Checking whether to show the prompt for a new profile is sometimes // asynchronous. - ui::CheckShouldPromptForNewProfile( + ShouldEnterpriseConfirmationPromptForNewProfile( profile_, base::BindOnce(&OnProfileCheckComplete, account_info, std::move(callback), browser_)); }
diff --git a/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_delegate_impl.h b/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_delegate_impl.h index d0d0949..8d54c46 100644 --- a/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_delegate_impl.h +++ b/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_delegate_impl.h
@@ -26,6 +26,14 @@ explicit DiceTurnSyncOnHelperDelegateImpl(Browser* browser); ~DiceTurnSyncOnHelperDelegateImpl() override; + protected: + void ShowEnterpriseAccountConfirmation( + const AccountInfo& account_info, + DiceTurnSyncOnHelper::SigninChoiceCallback callback) override; + virtual void ShouldEnterpriseConfirmationPromptForNewProfile( + Profile* profile, + base::OnceCallback<void(bool)> callback); + private: // DiceTurnSyncOnHelper::Delegate: void ShowLoginError(const SigninUIError& error) override; @@ -33,9 +41,6 @@ const std::string& previous_email, const std::string& new_email, DiceTurnSyncOnHelper::SigninChoiceCallback callback) override; - void ShowEnterpriseAccountConfirmation( - const AccountInfo& account_info, - DiceTurnSyncOnHelper::SigninChoiceCallback callback) override; void ShowSyncConfirmation( base::OnceCallback<void(LoginUIService::SyncConfirmationUIClosedResult)> callback) override;
diff --git a/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc b/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc index 9081730a..c26cf9c 100644 --- a/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc +++ b/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc
@@ -27,6 +27,7 @@ #include "base/values.h" #include "build/build_config.h" #include "chrome/browser/browser_process.h" +#include "chrome/browser/enterprise/util/managed_browser_utils.h" #include "chrome/browser/password_manager/password_reuse_manager_factory.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_attributes_entry.h" @@ -37,6 +38,7 @@ #include "chrome/browser/signin/account_consistency_mode_manager.h" #include "chrome/browser/signin/chrome_device_id_helper.h" #include "chrome/browser/signin/identity_manager_factory.h" +#include "chrome/browser/signin/signin_features.h" #include "chrome/browser/signin/signin_promo.h" #include "chrome/browser/signin/signin_util.h" #include "chrome/browser/themes/theme_service.h" @@ -122,6 +124,13 @@ explicit ForcedSigninDiceTurnSyncOnHelperDelegate(Browser* browser) : DiceTurnSyncOnHelperDelegateImpl(browser) {} + protected: + void ShouldEnterpriseConfirmationPromptForNewProfile( + Profile* profile, + base::OnceCallback<void(bool)> callback) override { + std::move(callback).Run(/*prompt_for_new_profile=*/false); + } + private: void ShowMergeSyncDataConfirmation( const std::string& previous_email, @@ -133,6 +142,11 @@ void ShowEnterpriseAccountConfirmation( const AccountInfo& account_info, DiceTurnSyncOnHelper::SigninChoiceCallback callback) override { + if (base::FeatureList::IsEnabled(kAccountPoliciesLoadedWithoutSync)) { + DiceTurnSyncOnHelperDelegateImpl::ShowEnterpriseAccountConfirmation( + account_info, std::move(callback)); + return; + } std::move(callback).Run( DiceTurnSyncOnHelper ::SigninChoice::SIGNIN_CHOICE_CONTINUE); } @@ -217,15 +231,16 @@ } // Callback for DiceTurnOnSyncHelper. -void OnSyncSetupComplete(Profile* profile, - const std::string& username, - const std::string& password, - bool is_force_sign_in_with_usermanager) { +void OnSigninComplete(Profile* profile, + const std::string& username, + const std::string& password, + bool is_force_sign_in_with_usermanager) { DCHECK(signin_util::IsForceSigninEnabled()); signin::IdentityManager* identity_manager = IdentityManagerFactory::GetForProfile(profile); bool has_primary_account = - identity_manager->HasPrimaryAccount(signin::ConsentLevel::kSync); + identity_manager->HasPrimaryAccount(signin::ConsentLevel::kSignin) && + chrome::enterprise_util::UserAcceptedAccountManagement(profile); if (has_primary_account && !password.empty()) { password_manager::PasswordReuseManager* reuse_manager = PasswordReuseManagerFactory::GetForProfile(profile); @@ -238,7 +253,7 @@ if (has_primary_account && is_force_sign_in_with_usermanager) { CoreAccountInfo primary_account = - identity_manager->GetPrimaryAccountInfo(signin::ConsentLevel::kSync); + identity_manager->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin); AccountInfo primary_account_info = identity_manager->FindExtendedAccountInfo(primary_account); std::u16string profile_name; @@ -393,8 +408,8 @@ } if (reason == HandlerSigninReason::kReauthentication) { - DCHECK(!identity_manager->GetPrimaryAccountInfo(signin::ConsentLevel::kSync) - .IsEmpty()); + DCHECK(identity_manager->HasPrimaryAccount(signin::ConsentLevel::kSignin) && + chrome::enterprise_util::UserAcceptedAccountManagement(profile_)); identity_manager->GetAccountsMutator()->AddOrUpdateAccount( gaia_id_, email_, result.refresh_token, @@ -403,7 +418,7 @@ kInlineLoginHandler_Signin); identity_manager->GetAccountsCookieMutator()->AddAccountToCookie( - identity_manager->GetPrimaryAccountId(signin::ConsentLevel::kSync), + identity_manager->GetPrimaryAccountId(signin::ConsentLevel::kSignin), gaia::GaiaSource::kPrimaryAccountManager, {}); signin_metrics::LogSigninReason(signin_metrics::Reason::kReauthentication); @@ -469,7 +484,7 @@ signin::GetSigninReasonForEmbeddedPromoURL(current_url_), account_id, DiceTurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT, std::move(delegate), - base::BindOnce(&OnSyncSetupComplete, profile_, email_, password_, + base::BindOnce(&OnSigninComplete, profile_, email_, password_, is_force_sign_in_with_usermanager_)); }
diff --git a/chrome/browser/ui/webui/signin/profile_picker_handler.cc b/chrome/browser/ui/webui/signin/profile_picker_handler.cc index 673e15ea..1d1e209 100644 --- a/chrome/browser/ui/webui/signin/profile_picker_handler.cc +++ b/chrome/browser/ui/webui/signin/profile_picker_handler.cc
@@ -346,7 +346,7 @@ if (entry->IsSigninRequired()) { DCHECK(signin_util::IsForceSigninEnabled()); - if (entry->IsAuthenticated() && + if (entry->CanBeManaged() && base::FeatureList::IsEnabled(features::kForceSignInReauth)) { ProfilePickerForceSigninDialog::ShowReauthDialog( web_ui()->GetWebContents()->GetBrowserContext(),
diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc index 6c545cf..1b2e4aa 100644 --- a/chrome/common/chrome_features.cc +++ b/chrome/common/chrome_features.cc
@@ -592,7 +592,7 @@ #if defined(OS_ANDROID) COMPONENT_EXPORT(CHROME_FEATURES) const base::Feature kLinkDoctorDeprecationAndroid{ - "LinkDoctorDeprecationAndroid", base::FEATURE_DISABLED_BY_DEFAULT}; + "LinkDoctorDeprecationAndroid", base::FEATURE_ENABLED_BY_DEFAULT}; #endif // defined(OS_ANDROID) // Enables LiteVideos, a data-saving optimization that throttles media requests @@ -734,6 +734,16 @@ "holdback_chance", 0.0); +// Enables using the prediction service for geolocation permission prompts. +const base::Feature kPermissionGeolocationPredictions{ + "PermissionGeolocationPredictions", base::FEATURE_DISABLED_BY_DEFAULT}; + +const base::FeatureParam<double> + kPermissionGeolocationPredictionsHoldbackChance( + &kPermissionGeolocationPredictions, + "holdback_chance", + 0.0); + #if BUILDFLAG(IS_CHROMEOS_ASH) // Enable support for "Plugin VMs" on Chrome OS. const base::Feature kPluginVm{"PluginVm", base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/chrome/common/chrome_features.h b/chrome/common/chrome_features.h index 249c87f..8471913 100644 --- a/chrome/common/chrome_features.h +++ b/chrome/common/chrome_features.h
@@ -487,6 +487,12 @@ COMPONENT_EXPORT(CHROME_FEATURES) extern const base::FeatureParam<double> kPermissionPredictionsHoldbackChance; +COMPONENT_EXPORT(CHROME_FEATURES) +extern const base::Feature kPermissionGeolocationPredictions; +COMPONENT_EXPORT(CHROME_FEATURES) +extern const base::FeatureParam<double> + kPermissionGeolocationPredictionsHoldbackChance; + #if BUILDFLAG(IS_CHROMEOS_ASH) COMPONENT_EXPORT(CHROME_FEATURES) extern const base::Feature kPluginVm;
diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc index 631b6b3..6fad87c 100644 --- a/chrome/common/pref_names.cc +++ b/chrome/common/pref_names.cc
@@ -1304,12 +1304,6 @@ // The supervised user ID. const char kSupervisedUserId[] = "profile.managed_user_id"; -// Boolean specifying if the user has accepted account management. This enables -// the browser to fetch profile policies even if they have not consented to -// sync. -extern const char kUserAcceptedAccountManagement[] = - "profile.user_accepted_account_management"; - // Integer that specifies the number of times that we have shown the upgrade // tutorial card in the avatar menu bubble. const char kProfileAvatarTutorialShown[] =
diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h index d4f2458..863fdc4 100644 --- a/chrome/common/pref_names.h +++ b/chrome/common/pref_names.h
@@ -424,7 +424,6 @@ extern const char kProfileUsingDefaultAvatar[]; extern const char kProfileUsingGAIAAvatar[]; extern const char kSupervisedUserId[]; -extern const char kUserAcceptedAccountManagement[]; extern const char kProfileAvatarTutorialShown[];
diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_constants.cc index b8bedff4..7597a88 100644 --- a/chrome/common/webui_url_constants.cc +++ b/chrome/common/webui_url_constants.cc
@@ -101,6 +101,8 @@ const char kChromeUIHistorySyncedTabs[] = "/syncedTabs"; const char kChromeUIHistoryURL[] = "chrome://history/"; const char kChromeUIIdentityInternalsHost[] = "identity-internals"; +const char kChromeUIImageEditorHost[] = "image-editor"; +const char kChromeUIImageEditorURL[] = "chrome://image-editor/"; const char kChromeUIImageHost[] = "image"; const char kChromeUIImageURL[] = "chrome://image/"; const char kChromeUIInspectHost[] = "inspect";
diff --git a/chrome/common/webui_url_constants.h b/chrome/common/webui_url_constants.h index 5475ae9e..9dab620 100644 --- a/chrome/common/webui_url_constants.h +++ b/chrome/common/webui_url_constants.h
@@ -102,6 +102,8 @@ extern const char kChromeUIHistorySyncedTabs[]; extern const char kChromeUIHistoryURL[]; extern const char kChromeUIIdentityInternalsHost[]; +extern const char kChromeUIImageEditorHost[]; +extern const char kChromeUIImageEditorURL[]; extern const char kChromeUIImageHost[]; extern const char kChromeUIImageURL[]; extern const char kChromeUIInspectHost[];
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 159495e..a4f4693 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -7421,6 +7421,7 @@ "../browser/ui/views/relaunch_notification/relaunch_required_timer_internal_unittest.cc", "../browser/ui/views/send_tab_to_self/send_tab_to_self_bubble_view_impl_unittest.cc", "../browser/ui/views/send_tab_to_self/send_tab_to_self_toolbar_bubble_view_unittest.cc", + "../browser/ui/views/sharing_hub/screenshot/screenshot_captured_bubble_unittest.cc", "../browser/ui/views/tab_contents/chrome_web_contents_view_delegate_views_unittest.cc", "../browser/ui/views/tabs/color_picker_view_unittest.cc", "../browser/ui/views/tabs/fake_base_tab_strip_controller.cc",
diff --git a/chrome/test/base/test_browser_window.h b/chrome/test/base/test_browser_window.h index 00dfccb6..2079fe9b 100644 --- a/chrome/test/base/test_browser_window.h +++ b/chrome/test/base/test_browser_window.h
@@ -206,6 +206,7 @@ const SurveyStringData& product_specific_string_data) override {} void ShowIncognitoClearBrowsingDataDialog() override {} + void ShowIncognitoHistoryDisclaimerDialog() override {} #endif ExclusiveAccessContext* GetExclusiveAccessContext() override;
diff --git a/chrome/test/data/webui/chromeos/scanning/scanning_app_test.js b/chrome/test/data/webui/chromeos/scanning/scanning_app_test.js index 028086c..15c3b16 100644 --- a/chrome/test/data/webui/chromeos/scanning/scanning_app_test.js +++ b/chrome/test/data/webui/chromeos/scanning/scanning_app_test.js
@@ -51,11 +51,9 @@ ADF_DUPLEX: ash.scanning.mojom.SourceType.kAdfDuplex, }; -const firstPageSizes = [PageSize.A4, PageSize.Max]; +const firstPageSizes = [PageSize.A4, PageSize.Letter, PageSize.Max]; -const secondPageSizes = [PageSize.A4, PageSize.Letter]; - -const thirdPageSizes = [PageSize.A4, PageSize.Max]; +const secondPageSizes = [PageSize.A4, PageSize.Max]; const firstScannerId = /** @type {!mojoBase.mojom.UnguessableToken} */ ({high: 0, low: 1}); @@ -68,7 +66,7 @@ const firstCapabilities = { sources: [ createScannerSource(SourceType.ADF_DUPLEX, ADF_DUPLEX, firstPageSizes), - createScannerSource(SourceType.FLATBED, PLATEN, secondPageSizes), + createScannerSource(SourceType.FLATBED, PLATEN, firstPageSizes), ], colorModes: [ColorMode.BLACK_AND_WHITE, ColorMode.COLOR], resolutions: [75, 100, 300] @@ -76,8 +74,8 @@ const secondCapabilities = { sources: [ - createScannerSource(SourceType.ADF_DUPLEX, ADF_DUPLEX, thirdPageSizes), - createScannerSource(SourceType.ADF_SIMPLEX, ADF_SIMPLEX, thirdPageSizes), + createScannerSource(SourceType.ADF_DUPLEX, ADF_DUPLEX, secondPageSizes), + createScannerSource(SourceType.ADF_SIMPLEX, ADF_SIMPLEX, secondPageSizes), ], colorModes: [ColorMode.BLACK_AND_WHITE, ColorMode.GRAYSCALE], resolutions: [150, 600] @@ -594,7 +592,7 @@ assertEquals( ColorMode.COLOR.toString(), scanningApp.selectedColorMode); assertEquals( - firstCapabilities.sources[1].pageSizes[1].toString(), + firstCapabilities.sources[0].pageSizes[1].toString(), scanningApp.selectedPageSize); assertEquals( firstCapabilities.resolutions[0].toString(), @@ -1345,12 +1343,6 @@ return getScannerCapabilities(); }) .then(() => { - // Ensure the UI elements have updated since the last render. This - // allows them to observe the change in scanner source and set mapped - // properties appropriately. - return flushTasks(); - }) - .then(() => { assertEquals( tokenToString(firstScannerId), scanningApp.$$('#scannerSelect').$$('select').value); @@ -1664,12 +1656,6 @@ return getScannerCapabilities(); }) .then(() => { - // Ensure the UI elements have updated since the last render. This - // allows them to observe the change in scanner source and set mapped - // properties appropriately. - return flushTasks(); - }) - .then(() => { scanningApp.$$('#scanButton').click(); const actualSavedScanSettings = /** @type {!ScanSettings} */
diff --git a/chrome/test/webapps/models.py b/chrome/test/webapps/models.py index 51e76feb7..41b1f9fd 100755 --- a/chrome/test/webapps/models.py +++ b/chrome/test/webapps/models.py
@@ -244,7 +244,7 @@ f" helper_.{create_after_action_method(action)};") for action in self.actions ]) - return (f"IN_PROC_BROWSERTEST_F(" + return (f"IN_PROC_BROWSER_TEST_F(" f"{test_partition.test_fixture}, " f"{CoverageTest.TEST_ID_PREFIX}{self.id}){{\n" f"{body}\n}}")
diff --git a/chrome/test/webapps/test_data/tests_change_b_mac_win_linux.cc b/chrome/test/webapps/test_data/tests_change_b_mac_win_linux.cc index f2893d7..3af2634 100644 --- a/chrome/test/webapps/test_data/tests_change_b_mac_win_linux.cc +++ b/chrome/test/webapps/test_data/tests_change_b_mac_win_linux.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -IN_PROC_BROWSERTEST_F(TwoClientWebAppsIntegrationSyncTest, +IN_PROC_BROWSER_TEST_F(TwoClientWebAppsIntegrationSyncTest, WebAppIntegration_ChngBMode1_ChckAMode1_ChckBMode1) { // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info.
diff --git a/chrome/test/webapps/test_data/tests_default.cc b/chrome/test/webapps/test_data/tests_default.cc index d5fddc1..f5a03e6 100644 --- a/chrome/test/webapps/test_data/tests_default.cc +++ b/chrome/test/webapps/test_data/tests_default.cc
@@ -9,7 +9,7 @@ #define MAYBE_WebAppIntegration_ChngAMode1_ChckAMode1_ChckBMode1 \ WebAppIntegration_ChngAMode1_ChckAMode1_ChckBMode1 #endif -IN_PROC_BROWSERTEST_F( +IN_PROC_BROWSER_TEST_F( WebAppIntegrationBrowserTest, MAYBE_WebAppIntegration_ChngAMode1_ChckAMode1_ChckBMode1) { // Test contents are generated by script. Please do not modify!
diff --git a/chrome/test/webapps/test_data/tests_default_cros.cc b/chrome/test/webapps/test_data/tests_default_cros.cc index 882d2d6f9..8801fc4 100644 --- a/chrome/test/webapps/test_data/tests_default_cros.cc +++ b/chrome/test/webapps/test_data/tests_default_cros.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -IN_PROC_BROWSERTEST_F( +IN_PROC_BROWSER_TEST_F( WebAppIntegrationBrowserTest, WebAppIntegration_ChngAMode2_ChckBMode4_ChngAMode1_ChckAMode1) { // Test contents are generated by script. Please do not modify!
diff --git a/chrome/test/webapps/test_data/tests_default_mac_win_linux.cc b/chrome/test/webapps/test_data/tests_default_mac_win_linux.cc index 6334094..0406279d 100644 --- a/chrome/test/webapps/test_data/tests_default_mac_win_linux.cc +++ b/chrome/test/webapps/test_data/tests_default_mac_win_linux.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -IN_PROC_BROWSERTEST_F(WebAppIntegrationBrowserTest, +IN_PROC_BROWSER_TEST_F(WebAppIntegrationBrowserTest, WebAppIntegration_ChngAMode2_ChckBMode4) { // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info.
diff --git a/chrome/updater/BUILD.gn b/chrome/updater/BUILD.gn index 425c72b..5374865 100644 --- a/chrome/updater/BUILD.gn +++ b/chrome/updater/BUILD.gn
@@ -553,6 +553,17 @@ } } + if (is_win) { + copy("test_service_files") { + testonly = true + sources = [ + "test/service/win/updater_test_service.py", + "test/service/win/updater_test_service_control.py", + ] + outputs = [ "$root_build_dir/test_service/{{source_file_part}}" ] + } + } + # These tests are run serially since they mutate system state. test("updater_tests") { testonly = true @@ -576,6 +587,9 @@ if (is_mac) { data_deps += [ "//chrome/updater/mac:updater_bundle_test" ] } + if (is_win) { + data_deps += [ ":test_service_files" ] + } } test("updater_tests_system") {
diff --git a/chrome/updater/test/integration_test_commands.h b/chrome/updater/test/integration_test_commands.h index 6ce755f..3cf9cbe 100644 --- a/chrome/updater/test/integration_test_commands.h +++ b/chrome/updater/test/integration_test_commands.h
@@ -48,6 +48,9 @@ virtual void WaitForServerExit() const = 0; #if defined(OS_WIN) virtual void ExpectInterfacesRegistered() const = 0; + + virtual void SetUpTestService() const = 0; + virtual void TearDownTestService() const = 0; #endif // OS_WIN protected:
diff --git a/chrome/updater/test/integration_test_commands_system.cc b/chrome/updater/test/integration_test_commands_system.cc index b8399fc..3d52c5a 100644 --- a/chrome/updater/test/integration_test_commands_system.cc +++ b/chrome/updater/test/integration_test_commands_system.cc
@@ -133,6 +133,15 @@ void ExpectInterfacesRegistered() const override { RunCommand("expect_interfaces_registered"); } + + void SetUpTestService() const override { + updater::test::RunTestServiceCommand("setup"); + } + + void TearDownTestService() const override { + updater::test::RunTestServiceCommand("teardown"); + } + #endif // OS_WIN base::FilePath GetDifferentUserPath() const override {
diff --git a/chrome/updater/test/integration_test_commands_user.cc b/chrome/updater/test/integration_test_commands_user.cc index fa1f352..5a865c5 100644 --- a/chrome/updater/test/integration_test_commands_user.cc +++ b/chrome/updater/test/integration_test_commands_user.cc
@@ -123,6 +123,11 @@ void ExpectInterfacesRegistered() const override { updater::test::ExpectInterfacesRegistered(kUpdaterScope); } + + void SetUpTestService() const override {} + + void TearDownTestService() const override {} + #endif // OS_WIN base::FilePath GetDifferentUserPath() const override {
diff --git a/chrome/updater/test/integration_tests.cc b/chrome/updater/test/integration_tests.cc index 417650d..f7f2555 100644 --- a/chrome/updater/test/integration_tests.cc +++ b/chrome/updater/test/integration_tests.cc
@@ -61,6 +61,7 @@ false); // enable_tickcount Clean(); ExpectClean(); + SetUpTestService(); EnterTestMode(GURL("http://localhost:1234")); } @@ -70,6 +71,7 @@ // TODO(crbug.com/1159189): Use a specific test output directory // because Uninstall() deletes the files under GetDataDirPath(). CopyLog(); + TearDownTestService(); Clean(); } @@ -158,6 +160,18 @@ void WaitForServerExit() { test_commands_->WaitForServerExit(); } + void SetUpTestService() { +#if defined(OS_WIN) + test_commands_->SetUpTestService(); +#endif // OS_WIN + } + + void TearDownTestService() { +#if defined(OS_WIN) + test_commands_->TearDownTestService(); +#endif // OS_WIN + } + scoped_refptr<IntegrationTestCommands> test_commands_; private:
diff --git a/chrome/updater/test/integration_tests_impl.h b/chrome/updater/test/integration_tests_impl.h index 19ca5129..781562d 100644 --- a/chrome/updater/test/integration_tests_impl.h +++ b/chrome/updater/test/integration_tests_impl.h
@@ -128,6 +128,7 @@ #if defined(OS_WIN) void ExpectInterfacesRegistered(UpdaterScope scope); +void RunTestServiceCommand(const std::string& sub_command); #endif // OS_WIN // Returns the number of files in the directory, not including directories,
diff --git a/chrome/updater/test/integration_tests_win.cc b/chrome/updater/test/integration_tests_win.cc index 14d90ae..0e5ea5f8 100644 --- a/chrome/updater/test/integration_tests_win.cc +++ b/chrome/updater/test/integration_tests_win.cc
@@ -11,6 +11,8 @@ #include "base/files/file_path.h" #include "base/files/file_util.h" #include "base/path_service.h" +#include "base/process/launch.h" +#include "base/process/process.h" #include "base/strings/strcat.h" #include "base/strings/utf_string_conversions.h" #include "base/synchronization/waitable_event.h" @@ -407,5 +409,31 @@ EXPECT_HRESULT_SUCCEEDED(updater_internal_server.As(&updater_internal)); } +int RunVPythonCommand(const base::CommandLine& command_line) { + base::CommandLine python_command = command_line; + python_command.PrependWrapper(FILE_PATH_LITERAL("vpython.bat")); + + int exit_code = -1; + base::Process process = base::LaunchProcess(python_command, {}); + EXPECT_TRUE(process.IsValid()); + EXPECT_TRUE(process.WaitForExitWithTimeout(base::TimeDelta::FromSeconds(60), + &exit_code)); + return exit_code; +} + +void RunTestServiceCommand(const std::string& sub_command) { + base::FilePath path(base::CommandLine::ForCurrentProcess()->GetProgram()); + path = path.DirName(); + path = MakeAbsoluteFilePath(path); + path = path.Append(FILE_PATH_LITERAL("test_service")) + .Append(FILE_PATH_LITERAL("updater_test_service_control.py")); + EXPECT_TRUE(base::PathExists(path)); + + base::CommandLine command(path); + command.AppendArg(sub_command); + + EXPECT_EQ(RunVPythonCommand(command), 0); +} + } // namespace test } // namespace updater
diff --git a/chrome/updater/test/service/win/updater_test_service.py b/chrome/updater/test/service/win/updater_test_service.py new file mode 100644 index 0000000..15f5bc78 --- /dev/null +++ b/chrome/updater/test/service/win/updater_test_service.py
@@ -0,0 +1,90 @@ +# Copyright 2021 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import logging +import os +import sys +import SimpleXMLRPCServer + +import pywintypes +import servicemanager +import win32api +import win32service +import win32serviceutil + + +# TODO(crbug.com/1233612): Use portpick to choose an available port, and +# propagate the port to clients (for example, via a pre-defined registry key). +_XML_RPC_SERVER_PORT = 9090 + + +class UpdaterTestRequestHanlder(): + + # TODO(crbug.com/1233612): Replace this placeholder function with real ones to + # serve test requests. Also consider to move this class into a separate + # module. + def echo(self, message): + return message + + +class UpdaterTestXmlRpcServer(SimpleXMLRPCServer.SimpleXMLRPCServer): + """Customized XML-RPC server for updater tests.""" + + def run(self): + """xml-rpc server main loop.""" + self.register_introspection_functions() + self.register_instance(UpdaterTestRequestHanlder()) + self.serve_forever() + + +class UpdaterTestService(win32serviceutil.ServiceFramework): + """Customizes updater tests behavior.""" + + # Do not change these class variables names, these are required by the base + # class. + _svc_name_ = 'UpdaterTestService' + _svc_display_name_ = 'Updater Test Service' + _svc_description_ = 'Service for browser updater tests' + + + def SvcStop(self): + """Called by service framework to stop this service.""" + logging.info('Updater test service stopping...') + self._xmlrpc_server.shutdown() + self.ReportServiceStatus(win32service.SERVICE_STOPPED) + + def SvcDoRun(self): + """Called by service framework to start this service.""" + + try: + logging.info('%s starting...', self._svc_name_) + servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE, + servicemanager.PYS_SERVICE_STARTED, + (self._svc_name_, '')) + self.ReportServiceStatus(win32service.SERVICE_RUNNING) + self._xmlrpc_server = UpdaterTestXmlRpcServer( + ('localhost', _XML_RPC_SERVER_PORT)) + self._xmlrpc_server.run() + servicemanager.LogInfoMsg(self._svc_name_ + ' - Ended') + except pywintypes.error as err: + logging.exception(err) + servicemanager.LogErrorMsg(err) + self.ReportServiceStatus(win32service.SERVICE_ERROR_SEVERE) + + +if __name__ == "__main__": + logging.info('Command: %s', sys.argv) + + # Prefer the pythonservice.exe in the same directory as the interpreter. + # This is mainly for the vpython case. + destination = os.path.join( + os.path.dirname(os.path.abspath(sys.executable)), 'pythonservice.exe') + if os.path.exists(destination): + os.environ['PYTHON_SERVICE_EXE'] = destination + + try: + win32api.SetConsoleCtrlHandler(lambda _: True, True) + win32serviceutil.HandleCommandLine(UpdaterTestService) + except Exception as err: + servicemanager.LogErrorMsg(err)
diff --git a/chrome/updater/test/service/win/updater_test_service_control.py b/chrome/updater/test/service/win/updater_test_service_control.py new file mode 100644 index 0000000..4fe955e --- /dev/null +++ b/chrome/updater/test/service/win/updater_test_service_control.py
@@ -0,0 +1,260 @@ +# Copyright 2021 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# [VPYTHON:BEGIN] +# python_version: "2.7" +# wheel: < +# name: "infra/python/wheels/pywin32/${vpython_platform}" +# version: "version:227" +# > +# [VPYTHON:END] + + +import logging +import os +import shutil +import subprocess +import socket +import sys +import time +import xmlrpclib + +import pywintypes +import win32api +import win32service +import win32serviceutil + + +_UPDATER_TEST_SERVICE_NAME = 'UpdaterTestService' + +# TODO(crbug.com/1233612): Query XML RPC server port once the server propgate +# the value. +_UPDATER_XML_RPC_PORT = 9090 + + +# Errors that might be raised when interacting with the service. +_ServiceErrors = (OSError, pywintypes.error, win32api.error, win32service.error, + WindowsError) # pylint: disable=undefined-variable + + +def _TestXMLRPCServerConnection(): + """Test that connection to the XML RPC server.""" + proxy = xmlrpclib.ServerProxy('http://localhost:%s' % _UPDATER_XML_RPC_PORT) + try: + return 'hi' == proxy.echo('hi') + except (socket.error, socket.herror, socket.gaierror, socket.timeout) as err: + logging.error('Unable connect to XML RPC server') + logging.exception(err) + return False + + +def _RunCommand(command, log_error=True): + """Run a command and logs stdout/stderr if needed. + + Args: + command: Command to run. + log_error: Whether to log the stderr. + + Returns: + True if the process exits with 0. + """ + process = subprocess.Popen(command, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + stdout, stderr = process.communicate() + logging.info('Command %s stdout:\n %s', command, stdout) + if log_error and stderr: + logging.error('Command %s stderr:\n %s', command, stderr) + + return process.returncode == 0 + + +def _SetupEnvironmentForVPython(): + """Setup vpython environment.""" + if os.getenv('VIRTUAL_ENV') is None: + logging.info('Not running in vpython, no additional setup is needed.') + return + + # vpython_spec above brings the pywin32 module we need, but it may not be + # ready to use, run the post install scripts as described by + # https://pypi.org/project/pywin32/. + # This script outputs some error messages to stderr if it has run before. + # So skip logging to avoid this log pollution. + post_install_script = os.path.join( + os.path.dirname(os.path.abspath(sys.executable)), + 'pywin32_postinstall.py') + _RunCommand([sys.executable, post_install_script, '-install'], + log_error=False) + + # Make pythonservice.exe explicit for our service. This is to avoid pickup + # an incompatible interpreter accidentally. + source = os.path.join( + os.environ['VIRTUAL_ENV'], 'Lib', + 'site-packages', 'win32', 'pythonservice.exe') + python_service_path = os.path.join( + os.path.dirname(os.path.abspath(sys.executable)), 'pythonservice.exe') + if not os.path.exists(python_service_path): + shutil.copyfile(source, python_service_path) + os.environ['PYTHON_SERVICE_EXE'] = python_service_path + + +def _IsServiceInStatus(status): + """Returns the if test service is in the given status.""" + try: + return status == win32serviceutil.QueryServiceStatus( + _UPDATER_TEST_SERVICE_NAME)[1] + except _ServiceErrors as err: + return False + + +def _MainServiceScriptPath(): + """Returns the service main script path.""" + # Assumes updater_test_service.py file is in the same directory as this file. + service_main = os.path.join( + os.path.abspath(os.path.dirname(__file__)), 'updater_test_service.py') + if not os.path.isfile(service_main): + logging.error('Cannot find service main module: %s', service_main) + return None + return service_main + + +def _WaitServiceStatus(status, timeout=30): + """Wait the service to be in the given state.""" + check_interval = 0.2 + for i in range(int(timeout / check_interval)): + if _IsServiceInStatus(status): + return True + time.sleep(check_interval) + return False + + +def InstallService(): + """Install updater test service. + + If the service was previously installed, it will be updated. + + Returns: + True if the service is installed successfully. + """ + _SetupEnvironmentForVPython() + + service_main = _MainServiceScriptPath() + if not service_main: + logging.error('Cannot find the service main script [%s].', service_main) + return False + + try: + if _IsServiceInStatus(win32service.SERVICE_RUNNING) and not StopService(): + logging.error('Cannot stop existing test service.') + return False + + logging.info('Installing service with script: %s', service_main) + command = [ + sys.executable, service_main, '--interactive', '--startup', 'auto', + 'install' + ] + if _RunCommand(command): + logging.info('Service [%s] installed.', _UPDATER_TEST_SERVICE_NAME) + return True + else: + logging.error('Failed to install [%s].', _UPDATER_TEST_SERVICE_NAME) + return False + except _ServiceErrors as err: + logging.exception(err) + return False + + +def UninstallService(): + """Uninstall the service.""" + service_main = _MainServiceScriptPath() + if not service_main: + logging.error('Unexpected: missing service main script [%s].', service_main) + return False + + try: + if _IsServiceInStatus(win32service.SERVICE_RUNNING) and not StopService(): + logging.error('Cannot stop test service for uninstall.') + return False + + command = [sys.executable, service_main, 'remove'] + if _RunCommand(command): + logging.info('Service [%s] uninstalled.', _UPDATER_TEST_SERVICE_NAME) + return True + else: + logging.error('Failed to uninstall [%s].', _UPDATER_TEST_SERVICE_NAME) + return False + except _ServiceErrors as err: + logging.error('Failed to install service.') + logging.exception(err) + return False + + +def StartService(timeout=30): + """Start updater test service and make sure it is reachable. + + Args: + timeout: How long to wait for service to be ready. + + Returns: + True if the service is started successfully. + """ + logging.info('Starting service [%s].', _UPDATER_TEST_SERVICE_NAME) + if _IsServiceInStatus(win32service.SERVICE_RUNNING): + logging.info('Test service is already running.') + return True + + try: + win32serviceutil.StartService(_UPDATER_TEST_SERVICE_NAME) + if not _WaitServiceStatus(win32service.SERVICE_RUNNING, timeout): + logging.error('Wait for service start failed.') + return False + + logging.error('Service %s started.', _UPDATER_TEST_SERVICE_NAME) + return _TestXMLRPCServerConnection() + except _ServiceErrors as err: + logging.error('Failed to start service.') + logging.exception(err) + + return False + + +def StopService(timeout=30): + """Stop test service if it is running. + + Returns: + True if the service is stopped successfully. + """ + logging.info('Stopping service [%s]...', _UPDATER_TEST_SERVICE_NAME) + try: + if not _IsServiceInStatus(win32service.SERVICE_RUNNING): + return True + + win32serviceutil.StopService(_UPDATER_TEST_SERVICE_NAME) + if not _WaitServiceStatus(win32service.SERVICE_STOPPED, timeout): + logging.error('Wait for service stop failed.') + return False + + logging.info('Service [%s] stopped.', _UPDATER_TEST_SERVICE_NAME) + return True + except _ServiceErrors as err: + logging.error('Failed to stop service.') + logging.exception(err) + return False + + +if __name__ == '__main__': + if len(sys.argv) == 1: + logging.error('Must provide an action.') + sys.exit(-1) + + command = sys.argv[1] + if command == 'setup': + result = InstallService() and StartService() + elif command == 'teardown': + result = UninstallService() + else: + logging.error('Unknown command: %s.', command) + sys.exit(-2) + + sys.exit(0 if result else 1)
diff --git a/chromecast/BUILD.gn b/chromecast/BUILD.gn index 187a4815..ed802d7 100644 --- a/chromecast/BUILD.gn +++ b/chromecast/BUILD.gn
@@ -490,7 +490,6 @@ "//chromecast/app", "//chromecast/base:default_create_sys_info", "//chromecast/browser", - "//chromecast/cast_core", "//chromecast/common", "//chromecast/renderer", "//chromecast/utility",
diff --git a/chromecast/app/BUILD.gn b/chromecast/app/BUILD.gn index 7d726b30..60121d7 100644 --- a/chromecast/app/BUILD.gn +++ b/chromecast/app/BUILD.gn
@@ -31,6 +31,10 @@ "//ui/base", ] + if (enable_cast_media_runtime) { + deps += [ "//chromecast/cast_core" ] + } + if (!is_fuchsia) { # TODO(crbug.com/1226159): Complete crash reporting integration on Fuchsia. deps += [ "//components/crash/core/app" ]
diff --git a/chromecast/cast_core/BUILD.gn b/chromecast/cast_core/BUILD.gn index 192c96c3..8139b38 100644 --- a/chromecast/cast_core/BUILD.gn +++ b/chromecast/cast_core/BUILD.gn
@@ -113,6 +113,7 @@ "//chromecast/bindings/public/mojom", "//components/cast/api_bindings:manager", "//components/cast/message_port", + "//components/cast/message_port:message_port_cast", "//mojo/public/cpp/bindings", "//third_party/openscreen/src/cast/cast_core/api:core_application_service_proto", "//third_party/openscreen/src/cast/cast_core/api:message_channel_proto", @@ -253,19 +254,27 @@ } } -cast_source_set("cast_core") { - sources = [] - deps = [ ":runtime_service" ] +if (enable_cast_media_runtime) { + cast_source_set("cast_runtime_content_client_factories") { + sources = [ + "cast_content_browser_client_factory_runtime.cc", + "cast_content_renderer_client_factory_runtime.cc", + ] - if (enable_cast_media_runtime) { - deps += [ + deps = [ ":browser", ":renderer", + "//base", + "//chromecast/browser", + "//chromecast/common:cors_exempt_headers", + "//chromecast/renderer", ] - } -} -if (enable_cast_media_runtime) { + if (chromecast_branding != "public") { + deps += [ "//chromecast/internal/cast_core/services" ] + } + } + cast_executable("core_runtime_simple") { sources = [ "cast_runtime_main.cc" ] @@ -309,6 +318,26 @@ ] } +group("cast_core") { + deps = [ + ":browser", + ":message_port", + ":metrics_recorder", + ":renderer", + ":runtime_service", + ":streaming_receiver_session_client", + ":url_rewrite", + ] + + if (is_linux) { + deps += [ ":core_runtime" ] + } + + if (enable_cast_media_runtime) { + deps += [ ":cast_runtime_content_client_factories" ] + } +} + # TODO(b/194439829): Upstream additional metrics unit tests. test("cast_cast_core_unittests") { sources = [
diff --git a/chromecast/cast_core/cast_content_browser_client_factory_runtime.cc b/chromecast/cast_core/cast_content_browser_client_factory_runtime.cc new file mode 100644 index 0000000..6b3fe07e --- /dev/null +++ b/chromecast/cast_core/cast_content_browser_client_factory_runtime.cc
@@ -0,0 +1,38 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chromecast/cast_core/cast_runtime_content_browser_client.h" + +#include <memory> +#include <string> +#include <vector> + +#include "base/containers/span.h" +#include "chromecast/browser/cast_content_browser_client.h" +#include "chromecast/common/cors_exempt_headers.h" + +namespace chromecast { +namespace shell { +namespace { + +constexpr char kAcceptLanguageHeader[] = "Accept-Language"; + +} // namespace + +// static +std::unique_ptr<CastContentBrowserClient> CastContentBrowserClient::Create( + CastFeatureListCreator* feature_list_creator) { + return CastRuntimeContentBrowserClient::Create(feature_list_creator); +} + +// static +std::vector<std::string> CastContentBrowserClient::GetCorsExemptHeadersList() { + base::span<const char*> base_headers = GetLegacyCorsExemptHeaders(); + std::vector<std::string> headers{base_headers.begin(), base_headers.end()}; + headers.emplace_back(kAcceptLanguageHeader); + return headers; +} + +} // namespace shell +} // namespace chromecast
diff --git a/chromecast/cast_core/cast_content_renderer_client_factory_runtime.cc b/chromecast/cast_core/cast_content_renderer_client_factory_runtime.cc new file mode 100644 index 0000000..582e105f --- /dev/null +++ b/chromecast/cast_core/cast_content_renderer_client_factory_runtime.cc
@@ -0,0 +1,18 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chromecast/cast_core/cast_runtime_content_renderer_client.h" + +#include <memory> + +#include "chromecast/renderer/cast_content_renderer_client.h" + +namespace chromecast { + +std::unique_ptr<shell::CastContentRendererClient> +shell::CastContentRendererClient::Create() { + return std::make_unique<CastRuntimeContentRendererClient>(); +} + +} // namespace chromecast
diff --git a/chromecast/cast_core/cast_runtime_content_browser_client.cc b/chromecast/cast_core/cast_runtime_content_browser_client.cc index a8fd925..0fa882c 100644 --- a/chromecast/cast_core/cast_runtime_content_browser_client.cc +++ b/chromecast/cast_core/cast_runtime_content_browser_client.cc
@@ -12,28 +12,6 @@ #include "third_party/blink/public/common/web_preferences/web_preferences.h" namespace chromecast { -namespace shell { -namespace { - -constexpr char kAcceptLanguageHeader[] = "Accept-Language"; - -} // namespace - -// static -std::unique_ptr<CastContentBrowserClient> CastContentBrowserClient::Create( - CastFeatureListCreator* feature_list_creator) { - return CastRuntimeContentBrowserClient::Create(feature_list_creator); -} - -// static -std::vector<std::string> CastContentBrowserClient::GetCorsExemptHeadersList() { - base::span<const char*> base_headers = GetLegacyCorsExemptHeaders(); - std::vector<std::string> headers{base_headers.begin(), base_headers.end()}; - headers.emplace_back(kAcceptLanguageHeader); - return headers; -} - -} // namespace shell CastRuntimeContentBrowserClient::CastRuntimeContentBrowserClient( CastFeatureListCreator* feature_list_creator)
diff --git a/chromecast/cast_core/cast_runtime_content_renderer_client.cc b/chromecast/cast_core/cast_runtime_content_renderer_client.cc index c89a127..fae3613 100644 --- a/chromecast/cast_core/cast_runtime_content_renderer_client.cc +++ b/chromecast/cast_core/cast_runtime_content_renderer_client.cc
@@ -10,12 +10,6 @@ namespace chromecast { -// static -std::unique_ptr<shell::CastContentRendererClient> -shell::CastContentRendererClient::Create() { - return std::make_unique<CastRuntimeContentRendererClient>(); -} - CastRuntimeContentRendererClient::CastRuntimeContentRendererClient() = default; CastRuntimeContentRendererClient::~CastRuntimeContentRendererClient() = default;
diff --git a/chromeos/components/camera_app_ui/DEPS b/chromeos/components/camera_app_ui/DEPS index 3293afbf..16dfa83 100644 --- a/chromeos/components/camera_app_ui/DEPS +++ b/chromeos/components/camera_app_ui/DEPS
@@ -7,6 +7,7 @@ "+content/public/browser", "+content/public/common", "+media/capture/video/chromeos", + "+services/video_capture/public/mojom/video_capture_service.mojom.h", "+ui/aura", "+ui/display", "+ui/gfx/geometry",
diff --git a/chromeos/components/camera_app_ui/camera_app_ui.cc b/chromeos/components/camera_app_ui/camera_app_ui.cc index 8d10a7d..195150f 100644 --- a/chromeos/components/camera_app_ui/camera_app_ui.cc +++ b/chromeos/components/camera_app_ui/camera_app_ui.cc
@@ -28,6 +28,7 @@ #include "mojo/public/cpp/bindings/self_owned_receiver.h" #include "mojo/public/js/grit/mojo_bindings_resources.h" #include "services/network/public/mojom/content_security_policy.mojom.h" +#include "services/video_capture/public/mojom/video_capture_service.mojom.h" #include "ui/aura/window.h" #include "ui/webui/webui_allowlist.h"
diff --git a/chromeos/components/camera_app_ui/resources/js/nav.js b/chromeos/components/camera_app_ui/resources/js/nav.js index 9eb79e3..75311d18 100644 --- a/chromeos/components/camera_app_ui/resources/js/nav.js +++ b/chromeos/components/camera_app_ui/resources/js/nav.js
@@ -244,3 +244,12 @@ } } } + +/** + * Returns whether the view is the top view above all shown view. + * @param {!ViewName} name Name of the view + * @return {boolean} + */ +export function isTopMostView(name) { + return topmostIndex === findIndex(name); +}
diff --git a/chromeos/components/camera_app_ui/resources/js/views/camera.js b/chromeos/components/camera_app_ui/resources/js/views/camera.js index 79d47e60..ddcad00 100644 --- a/chromeos/components/camera_app_ui/resources/js/views/camera.js +++ b/chromeos/components/camera_app_ui/resources/js/views/camera.js
@@ -599,6 +599,11 @@ return; } + // Check the view is still on the top after await. + if (!nav.isTopMostView(ViewName.CAMERA)) { + return; + } + if (newFeatureToast.isShowing()) { newFeatureToast.focus(); return;
diff --git a/chromeos/components/quick_answers/understanding/intent_generator.cc b/chromeos/components/quick_answers/understanding/intent_generator.cc index 08221d9..6d9af17e 100644 --- a/chromeos/components/quick_answers/understanding/intent_generator.cc +++ b/chromeos/components/quick_answers/understanding/intent_generator.cc
@@ -196,10 +196,12 @@ if (it != intent_type_map.end()) { if (features::IsQuickAnswersV2Enabled()) { // Skip the entity if the corresponding intent type is disabled. - if ((it->second == IntentType::kDictionary && - !ash::QuickAnswersState::Get()->definition_enabled()) || - (it->second == IntentType::kUnit && - !ash::QuickAnswersState::Get()->unit_conversion_enabled())) { + bool definition_disabled = + !ash::QuickAnswersState::Get()->definition_enabled(); + bool unit_conversion_disabled = + !ash::QuickAnswersState::Get()->unit_conversion_enabled(); + if ((it->second == IntentType::kDictionary && definition_disabled) || + (it->second == IntentType::kUnit && unit_conversion_disabled)) { // Fallback to language detection for generating translation intent. MaybeGenerateTranslationIntent(request); return; @@ -227,7 +229,8 @@ DCHECK(complete_callback_); if (features::IsQuickAnswersV2Enabled() && - !ash::QuickAnswersState::Get()->translation_enabled()) { + (!ash::QuickAnswersState::Get()->translation_enabled() || + features::IsQuickAnswersV2TranslationDisabled())) { std::move(complete_callback_) .Run(IntentInfo(request.selected_text, IntentType::kUnknown)); return;
diff --git a/chromeos/strings/chromeos_strings_am.xtb b/chromeos/strings/chromeos_strings_am.xtb index 4abee86..e0a05f1 100644 --- a/chromeos/strings/chromeos_strings_am.xtb +++ b/chromeos/strings/chromeos_strings_am.xtb
@@ -367,9 +367,11 @@ <translation id="7835501727204647447">CloudReadyን ጫን</translation> <translation id="7881066108824108340">ዲኤንኤስ</translation> <translation id="7882358943899516840">የአቅራቢ አይነት</translation> +<translation id="7895471513946376273">የስዕል እና የንድፍ መሣሪያዎችን ያግኙ</translation> <translation id="7936303884198020182">ምንም የስም አገልጋዮች አልተገኙም</translation> <translation id="7960831585769876809">የሙቀት መጠን</translation> <translation id="7994702968232966508">የEAP ስልት</translation> +<translation id="8020238979854764615">ስህተት ነበር። እባክዎ ሌሎች ምስሎችን በመምረጥ እንደገና ይሞክሩ።</translation> <translation id="802154636333426148">ማውረድ አልተሳካም</translation> <translation id="8041089156583427627">ግብረ መልስ ላክ</translation> <translation id="8075838845814659848">የሚቀረው ኃይል መሙላት</translation>
diff --git a/chromeos/strings/chromeos_strings_ar.xtb b/chromeos/strings/chromeos_strings_ar.xtb index 0f37df3..691fc41d 100644 --- a/chromeos/strings/chromeos_strings_ar.xtb +++ b/chromeos/strings/chromeos_strings_ar.xtb
@@ -367,9 +367,11 @@ <translation id="7835501727204647447">تثبيت CloudReady</translation> <translation id="7881066108824108340">نظام أسماء النطاقات</translation> <translation id="7882358943899516840">نوع مقدم الخدمة</translation> +<translation id="7895471513946376273">التعرّف على أدوات الرسم والتصميم</translation> <translation id="7936303884198020182">لم يتم العثور على خوادم الأسماء.</translation> <translation id="7960831585769876809">درجة الحرارة</translation> <translation id="7994702968232966508">طريقة EAP</translation> +<translation id="8020238979854764615">حدث خطأ. يُرجى إعادة المحاولة عن طريق اختيار صور أخرى.</translation> <translation id="802154636333426148">تعذّر التنزيل</translation> <translation id="8041089156583427627">إرسال تعليقات</translation> <translation id="8075838845814659848">شحن البطارية المتبقي</translation>
diff --git a/chromeos/strings/chromeos_strings_bg.xtb b/chromeos/strings/chromeos_strings_bg.xtb index 1ea059a3..031edc0 100644 --- a/chromeos/strings/chromeos_strings_bg.xtb +++ b/chromeos/strings/chromeos_strings_bg.xtb
@@ -367,9 +367,11 @@ <translation id="7835501727204647447">Инсталиране на CloudReady</translation> <translation id="7881066108824108340">DNS</translation> <translation id="7882358943899516840">Тип на доставчика</translation> +<translation id="7895471513946376273">Открийте инструменти за рисуване и дизайн</translation> <translation id="7936303884198020182">Не са намерени сървъри за имена</translation> <translation id="7960831585769876809">Температура</translation> <translation id="7994702968232966508">Метод с EAP</translation> +<translation id="8020238979854764615">Възникна грешка. Моля, опитайте отново, като изберете други изображения.</translation> <translation id="802154636333426148">Изтеглянето не бе успешно</translation> <translation id="8041089156583427627">Изпращане на отзивите</translation> <translation id="8075838845814659848">Оставащ заряд</translation>
diff --git a/chromeos/strings/chromeos_strings_bs.xtb b/chromeos/strings/chromeos_strings_bs.xtb index 0ad704a..8b01dc3e 100644 --- a/chromeos/strings/chromeos_strings_bs.xtb +++ b/chromeos/strings/chromeos_strings_bs.xtb
@@ -367,9 +367,11 @@ <translation id="7835501727204647447">Instaliraj CloudReady</translation> <translation id="7881066108824108340">DNS</translation> <translation id="7882358943899516840">Vrsta davatelja usluge</translation> +<translation id="7895471513946376273">Otkrijte alate za crtanje i dizajn</translation> <translation id="7936303884198020182">Nije pronađen nijedan server naziva</translation> <translation id="7960831585769876809">Temperatura</translation> <translation id="7994702968232966508">EAP metoda</translation> +<translation id="8020238979854764615">Došlo je do greške. Pokušajte ponovo odabirom drugih slika.</translation> <translation id="802154636333426148">Preuzimanje nije uspjelo</translation> <translation id="8041089156583427627">Slanje povratnih informacija</translation> <translation id="8075838845814659848">Preostali nivo napunjenosti</translation>
diff --git a/chromeos/strings/chromeos_strings_ca.xtb b/chromeos/strings/chromeos_strings_ca.xtb index b737000ba..b09e6b2c 100644 --- a/chromeos/strings/chromeos_strings_ca.xtb +++ b/chromeos/strings/chromeos_strings_ca.xtb
@@ -367,9 +367,11 @@ <translation id="7835501727204647447">Instal·la CloudReady</translation> <translation id="7881066108824108340">DNS</translation> <translation id="7882358943899516840">Tipus de proveïdor</translation> +<translation id="7895471513946376273">Descobreix les eines de dibuix i disseny</translation> <translation id="7936303884198020182">No s'han trobat servidors de noms</translation> <translation id="7960831585769876809">Temperatura</translation> <translation id="7994702968232966508">Mètode EAP</translation> +<translation id="8020238979854764615">S'ha produït un error. Torna-ho a provar triant altres imatges.</translation> <translation id="802154636333426148">Error de baixada</translation> <translation id="8041089156583427627">Envia suggeriments</translation> <translation id="8075838845814659848">Càrrega restant</translation>
diff --git a/chromeos/strings/chromeos_strings_da.xtb b/chromeos/strings/chromeos_strings_da.xtb index 9845ef2..3a492c9 100644 --- a/chromeos/strings/chromeos_strings_da.xtb +++ b/chromeos/strings/chromeos_strings_da.xtb
@@ -366,9 +366,11 @@ <translation id="7835501727204647447">Installer CloudReady</translation> <translation id="7881066108824108340">DNS</translation> <translation id="7882358943899516840">Udbydertype</translation> +<translation id="7895471513946376273">Find tegne- og designværktøjer</translation> <translation id="7936303884198020182">Der blev ikke fundet nogen navneservere</translation> <translation id="7960831585769876809">Temperatur</translation> <translation id="7994702968232966508">EAP-metode</translation> +<translation id="8020238979854764615">Der opstod en fejl. Prøv igen ved at vælge andre billeder.</translation> <translation id="802154636333426148">Download mislykkedes</translation> <translation id="8041089156583427627">Send feedback</translation> <translation id="8075838845814659848">Resterende batteriniveau</translation>
diff --git a/chromeos/strings/chromeos_strings_el.xtb b/chromeos/strings/chromeos_strings_el.xtb index 30ce8bc..190bb43 100644 --- a/chromeos/strings/chromeos_strings_el.xtb +++ b/chromeos/strings/chromeos_strings_el.xtb
@@ -367,9 +367,11 @@ <translation id="7835501727204647447">Εγκατάσταση CloudReady</translation> <translation id="7881066108824108340">DNS</translation> <translation id="7882358943899516840">Τύπος παρόχου</translation> +<translation id="7895471513946376273">Ανακαλύψτε εργαλεία σχεδίασης</translation> <translation id="7936303884198020182">Δεν βρέθηκαν διακομιστές ονομάτων.</translation> <translation id="7960831585769876809">Θερμοκρασία</translation> <translation id="7994702968232966508">Μέθοδος EAP</translation> +<translation id="8020238979854764615">Παρουσιάστηκε σφάλμα. Δοκιμάστε ξανά επιλέγοντας άλλες εικόνες.</translation> <translation id="802154636333426148">Η λήψη απέτυχε</translation> <translation id="8041089156583427627">Αποστολή σχολίων</translation> <translation id="8075838845814659848">Υπόλοιπο φόρτισης</translation>
diff --git a/chromeos/strings/chromeos_strings_en-GB.xtb b/chromeos/strings/chromeos_strings_en-GB.xtb index 0c6e0d1..3511531 100644 --- a/chromeos/strings/chromeos_strings_en-GB.xtb +++ b/chromeos/strings/chromeos_strings_en-GB.xtb
@@ -367,9 +367,11 @@ <translation id="7835501727204647447">Install CloudReady</translation> <translation id="7881066108824108340">DNS</translation> <translation id="7882358943899516840">Provider type</translation> +<translation id="7895471513946376273">Discover drawing and design tools</translation> <translation id="7936303884198020182">No name servers found</translation> <translation id="7960831585769876809">Temperature</translation> <translation id="7994702968232966508">EAP method</translation> +<translation id="8020238979854764615">There was an error. Please try again by choosing other images.</translation> <translation id="802154636333426148">Download failed</translation> <translation id="8041089156583427627">Send Feedback</translation> <translation id="8075838845814659848">Remaining charge</translation>
diff --git a/chromeos/strings/chromeos_strings_es.xtb b/chromeos/strings/chromeos_strings_es.xtb index d8a9041..821d38b 100644 --- a/chromeos/strings/chromeos_strings_es.xtb +++ b/chromeos/strings/chromeos_strings_es.xtb
@@ -366,9 +366,11 @@ <translation id="7835501727204647447">Instalar CloudReady</translation> <translation id="7881066108824108340">DNS</translation> <translation id="7882358943899516840">Tipo de proveedor</translation> +<translation id="7895471513946376273">Descubre herramientas de dibujo y diseño</translation> <translation id="7936303884198020182">No se han encontrado servidores de nombres</translation> <translation id="7960831585769876809">Temperatura</translation> <translation id="7994702968232966508">Método EAP</translation> +<translation id="8020238979854764615">Se ha producido un error. Selecciona otras imágenes e inténtalo de nuevo.</translation> <translation id="802154636333426148">No se ha podido descargar el archivo</translation> <translation id="8041089156583427627">Enviar</translation> <translation id="8075838845814659848">Carga restante</translation>
diff --git a/chromeos/strings/chromeos_strings_et.xtb b/chromeos/strings/chromeos_strings_et.xtb index 5dff0dd2b..4f03869 100644 --- a/chromeos/strings/chromeos_strings_et.xtb +++ b/chromeos/strings/chromeos_strings_et.xtb
@@ -367,9 +367,11 @@ <translation id="7835501727204647447">Installi CloudReady</translation> <translation id="7881066108824108340">DNS</translation> <translation id="7882358943899516840">Teenusepakkuja tüüp</translation> +<translation id="7895471513946376273">Avastage joonistus- ja kujundustööriistu</translation> <translation id="7936303884198020182">Ei leitud ühtegi nimeserverit</translation> <translation id="7960831585769876809">Temperatuur</translation> <translation id="7994702968232966508">EAP meetod</translation> +<translation id="8020238979854764615">Esines viga. Proovige uuesti, valides muud pildid.</translation> <translation id="802154636333426148">Allalaadimine ebaõnnestus</translation> <translation id="8041089156583427627">Saada tagasiside</translation> <translation id="8075838845814659848">Aku laetuse tase</translation>
diff --git a/chromeos/strings/chromeos_strings_fa.xtb b/chromeos/strings/chromeos_strings_fa.xtb index ffbac83..2e41c662 100644 --- a/chromeos/strings/chromeos_strings_fa.xtb +++ b/chromeos/strings/chromeos_strings_fa.xtb
@@ -367,9 +367,11 @@ <translation id="7835501727204647447">نصب CloudReady</translation> <translation id="7881066108824108340">DNS</translation> <translation id="7882358943899516840">نوع ارائهدهنده</translation> +<translation id="7895471513946376273">کاوش ابزارهای ترسیم و طراحی</translation> <translation id="7936303884198020182">سرور نام دامنه پیدا نشد</translation> <translation id="7960831585769876809">دما</translation> <translation id="7994702968232966508">روش EAP</translation> +<translation id="8020238979854764615">خطایی وجود داشت. لطفاً تصاویر دیگری انتخاب کنید و دوباره امتحان کنید.</translation> <translation id="802154636333426148">بارگیری نشد</translation> <translation id="8041089156583427627">ارسال بازخورد</translation> <translation id="8075838845814659848">شارژ باقیمانده</translation>
diff --git a/chromeos/strings/chromeos_strings_fr.xtb b/chromeos/strings/chromeos_strings_fr.xtb index 3d262204..9d2f129 100644 --- a/chromeos/strings/chromeos_strings_fr.xtb +++ b/chromeos/strings/chromeos_strings_fr.xtb
@@ -367,9 +367,11 @@ <translation id="7835501727204647447">Installer CloudReady</translation> <translation id="7881066108824108340">DNS</translation> <translation id="7882358943899516840">Type de fournisseur</translation> +<translation id="7895471513946376273">Découvrez les outils de dessin et de graphisme</translation> <translation id="7936303884198020182">Aucun serveur de noms trouvé</translation> <translation id="7960831585769876809">Température</translation> <translation id="7994702968232966508">Méthode EAP</translation> +<translation id="8020238979854764615">Une erreur s'est produite. Veuillez réessayer en sélectionnant d'autres images.</translation> <translation id="802154636333426148">Échec du téléchargement</translation> <translation id="8041089156583427627">Envoyer</translation> <translation id="8075838845814659848">Niveau de charge</translation>
diff --git a/chromeos/strings/chromeos_strings_hr.xtb b/chromeos/strings/chromeos_strings_hr.xtb index 949f42c..2df62e5 100644 --- a/chromeos/strings/chromeos_strings_hr.xtb +++ b/chromeos/strings/chromeos_strings_hr.xtb
@@ -367,9 +367,11 @@ <translation id="7835501727204647447">Instaliraj CloudReady</translation> <translation id="7881066108824108340">DNS</translation> <translation id="7882358943899516840">Vrsta davatelja usluge</translation> +<translation id="7895471513946376273">Otkrijte alate za crtanje i dizajn</translation> <translation id="7936303884198020182">Nije pronađen nijedan poslužitelj naziva</translation> <translation id="7960831585769876809">Temperatura</translation> <translation id="7994702968232966508">EAP metoda</translation> +<translation id="8020238979854764615">Došlo je do pogreške. Pokušajte ponovo kasnije odabirom drugih slika.</translation> <translation id="802154636333426148">Preuzimanje nije uspjelo</translation> <translation id="8041089156583427627">Slanje povratnih informacija</translation> <translation id="8075838845814659848">Preostala razina napunjenosti</translation>
diff --git a/chromeos/strings/chromeos_strings_hu.xtb b/chromeos/strings/chromeos_strings_hu.xtb index 34f8ae573..1047b6bd 100644 --- a/chromeos/strings/chromeos_strings_hu.xtb +++ b/chromeos/strings/chromeos_strings_hu.xtb
@@ -367,9 +367,11 @@ <translation id="7835501727204647447">CloudReady telepítése</translation> <translation id="7881066108824108340">DNS</translation> <translation id="7882358943899516840">Szolgáltató típusa</translation> +<translation id="7895471513946376273">Rajz- és tervezőeszközök felfedezése</translation> <translation id="7936303884198020182">Nem találhatók névszerverek</translation> <translation id="7960831585769876809">Hőmérséklet</translation> <translation id="7994702968232966508">EAP módszer</translation> +<translation id="8020238979854764615">Valami hiba történt. Próbálkozzon újra úgy, hogy más képeket választ.</translation> <translation id="802154636333426148">Nem sikerült a letöltés</translation> <translation id="8041089156583427627">Visszajelzés küldése</translation> <translation id="8075838845814659848">Töltöttségi szint</translation>
diff --git a/chromeos/strings/chromeos_strings_kk.xtb b/chromeos/strings/chromeos_strings_kk.xtb index 79bc5b3..d821b24 100644 --- a/chromeos/strings/chromeos_strings_kk.xtb +++ b/chromeos/strings/chromeos_strings_kk.xtb
@@ -366,9 +366,11 @@ <translation id="7835501727204647447">CloudReady-ді орнату</translation> <translation id="7881066108824108340">DNS</translation> <translation id="7882358943899516840">Провайдер түрі</translation> +<translation id="7895471513946376273">Discover сызу және жобалау құралдары</translation> <translation id="7936303884198020182">Атау серверлері табылмады.</translation> <translation id="7960831585769876809">Температура</translation> <translation id="7994702968232966508">EAP әдісі</translation> +<translation id="8020238979854764615">Қате шықты. Басқа суреттерді таңдап, қайталап көріңіз.</translation> <translation id="802154636333426148">Жүктеу сәтсіз аяқталды</translation> <translation id="8041089156583427627">Пікір жіберу</translation> <translation id="8075838845814659848">Қалған заряд</translation>
diff --git a/chromeos/strings/chromeos_strings_ky.xtb b/chromeos/strings/chromeos_strings_ky.xtb index 5a0e0bc0..ae53ff6 100644 --- a/chromeos/strings/chromeos_strings_ky.xtb +++ b/chromeos/strings/chromeos_strings_ky.xtb
@@ -367,9 +367,11 @@ <translation id="7835501727204647447">CloudReady'ни орнотуу</translation> <translation id="7881066108824108340">DNS</translation> <translation id="7882358943899516840">Жабдуучунун түрү</translation> +<translation id="7895471513946376273">Сүрөт тартуу жана жасалгалоо куралдарын карап чыгыңыз</translation> <translation id="7936303884198020182">Ысым серверлери табылган жок</translation> <translation id="7960831585769876809">Температура</translation> <translation id="7994702968232966508">EAP ыкмасы</translation> +<translation id="8020238979854764615">Ката кетти. Башка сүрөттөрдү тандап, кайталап көрүңүз.</translation> <translation id="802154636333426148">Жүктөлүп алынбай калды</translation> <translation id="8041089156583427627">Пикириңизди билдириңиз</translation> <translation id="8075838845814659848">Батареянын кубаты</translation>
diff --git a/chromeos/strings/chromeos_strings_pl.xtb b/chromeos/strings/chromeos_strings_pl.xtb index e565bad1..2f8a770 100644 --- a/chromeos/strings/chromeos_strings_pl.xtb +++ b/chromeos/strings/chromeos_strings_pl.xtb
@@ -367,9 +367,11 @@ <translation id="7835501727204647447">Zainstaluj CloudReady</translation> <translation id="7881066108824108340">DNS</translation> <translation id="7882358943899516840">Typ dostawcy</translation> +<translation id="7895471513946376273">Odkryj narzędzia do rysowania i projektowania</translation> <translation id="7936303884198020182">Nie znaleziono serwerów nazw</translation> <translation id="7960831585769876809">Temperatura</translation> <translation id="7994702968232966508">Metoda EAP</translation> +<translation id="8020238979854764615">Wystąpił błąd. Wybierz inne obrazy i spróbuj jeszcze raz.</translation> <translation id="802154636333426148">Nie udało się pobrać</translation> <translation id="8041089156583427627">Prześlij opinię</translation> <translation id="8075838845814659848">Stan naładowania</translation>
diff --git a/chromeos/strings/chromeos_strings_pt-BR.xtb b/chromeos/strings/chromeos_strings_pt-BR.xtb index 97546ba..70f5879 100644 --- a/chromeos/strings/chromeos_strings_pt-BR.xtb +++ b/chromeos/strings/chromeos_strings_pt-BR.xtb
@@ -367,9 +367,11 @@ <translation id="7835501727204647447">Instalar CloudReady</translation> <translation id="7881066108824108340">DNS</translation> <translation id="7882358943899516840">Tipo de provedor</translation> +<translation id="7895471513946376273">Descubra ferramentas de desenho e design</translation> <translation id="7936303884198020182">Nenhum servidor de nomes encontrado</translation> <translation id="7960831585769876809">Temperatura</translation> <translation id="7994702968232966508">Método EAP</translation> +<translation id="8020238979854764615">Ocorreu um erro. Escolha outras imagens para tentar novamente.</translation> <translation id="802154636333426148">Falha no download</translation> <translation id="8041089156583427627">Enviar comentários</translation> <translation id="8075838845814659848">Carga restante</translation>
diff --git a/chromeos/strings/chromeos_strings_ro.xtb b/chromeos/strings/chromeos_strings_ro.xtb index 60eec00..48f43e5e 100644 --- a/chromeos/strings/chromeos_strings_ro.xtb +++ b/chromeos/strings/chromeos_strings_ro.xtb
@@ -367,9 +367,11 @@ <translation id="7835501727204647447">Instalează CloudReady</translation> <translation id="7881066108824108340">DNS</translation> <translation id="7882358943899516840">Tip furnizor</translation> +<translation id="7895471513946376273">Descoperă instrumente de desenare și design</translation> <translation id="7936303884198020182">Nu s-au găsit servere de nume</translation> <translation id="7960831585769876809">Temperatură</translation> <translation id="7994702968232966508">Metodă EAP</translation> +<translation id="8020238979854764615">A apărut o eroare. Încearcă din nou alegând alte imagini.</translation> <translation id="802154636333426148">Descărcarea nu a reușit</translation> <translation id="8041089156583427627">Trimiteți feedback</translation> <translation id="8075838845814659848">Nivel de încărcare rămas</translation>
diff --git a/chromeos/strings/chromeos_strings_sk.xtb b/chromeos/strings/chromeos_strings_sk.xtb index 725c2ed..c1e2d774 100644 --- a/chromeos/strings/chromeos_strings_sk.xtb +++ b/chromeos/strings/chromeos_strings_sk.xtb
@@ -367,9 +367,11 @@ <translation id="7835501727204647447">Inštalovať CloudReady</translation> <translation id="7881066108824108340">DNS</translation> <translation id="7882358943899516840">Typ poskytovateľa</translation> +<translation id="7895471513946376273">Nástroje na kreslenie a dizajn funkcie Objaviť</translation> <translation id="7936303884198020182">Nenašli sa žiadne servery DNS</translation> <translation id="7960831585769876809">Teplota</translation> <translation id="7994702968232966508">Metóda EAP</translation> +<translation id="8020238979854764615">Vyskytla sa chyba. Vyberte iné obrázky a skúste to znova.</translation> <translation id="802154636333426148">Stiahnutie zlyhalo</translation> <translation id="8041089156583427627">Odoslať spätnú väzbu</translation> <translation id="8075838845814659848">Zostávajúca úroveň batérie</translation>
diff --git a/chromeos/strings/chromeos_strings_sl.xtb b/chromeos/strings/chromeos_strings_sl.xtb index 82b49ba..6b5e5cf6 100644 --- a/chromeos/strings/chromeos_strings_sl.xtb +++ b/chromeos/strings/chromeos_strings_sl.xtb
@@ -367,9 +367,11 @@ <translation id="7835501727204647447">Namesti CloudReady</translation> <translation id="7881066108824108340">DNS</translation> <translation id="7882358943899516840">Vrsta ponudnika</translation> +<translation id="7895471513946376273">Odkrijte orodja za risanje in oblikovanje</translation> <translation id="7936303884198020182">Najden ni bil noben imenski strežnik</translation> <translation id="7960831585769876809">Temperatura</translation> <translation id="7994702968232966508">Način EAP</translation> +<translation id="8020238979854764615">Prišlo je do napake. Poskusite znova tako, da izberete druge slike.</translation> <translation id="802154636333426148">Prenos ni uspel</translation> <translation id="8041089156583427627">Pošlji povratne informacije</translation> <translation id="8075838845814659848">Preostanek polnjenja</translation>
diff --git a/chromeos/strings/chromeos_strings_sr-Latn.xtb b/chromeos/strings/chromeos_strings_sr-Latn.xtb index 73dfa7c..2723c9c2 100644 --- a/chromeos/strings/chromeos_strings_sr-Latn.xtb +++ b/chromeos/strings/chromeos_strings_sr-Latn.xtb
@@ -367,9 +367,11 @@ <translation id="7835501727204647447">Instaliraj CloudReady</translation> <translation id="7881066108824108340">DNS</translation> <translation id="7882358943899516840">Tip dobavljača</translation> +<translation id="7895471513946376273">Otkrijte alatke za crtanje i dizajn</translation> <translation id="7936303884198020182">Nije pronađen nijedan server za imena</translation> <translation id="7960831585769876809">Temperatura</translation> <translation id="7994702968232966508">EAP metod</translation> +<translation id="8020238979854764615">Došlo je do greške. Probajte ponovo tako što ćete odabrati druge slike.</translation> <translation id="802154636333426148">Preuzimanje nije uspelo</translation> <translation id="8041089156583427627">Pošalji povratne informacije</translation> <translation id="8075838845814659848">Preostali nivo napunjenosti baterije</translation>
diff --git a/chromeos/strings/chromeos_strings_sr.xtb b/chromeos/strings/chromeos_strings_sr.xtb index ecd48c9..0c47ddb 100644 --- a/chromeos/strings/chromeos_strings_sr.xtb +++ b/chromeos/strings/chromeos_strings_sr.xtb
@@ -367,9 +367,11 @@ <translation id="7835501727204647447">Инсталирај CloudReady</translation> <translation id="7881066108824108340">DNS</translation> <translation id="7882358943899516840">Тип добављача</translation> +<translation id="7895471513946376273">Откријте алатке за цртање и дизајн</translation> <translation id="7936303884198020182">Није пронађен ниједан сервер за имена</translation> <translation id="7960831585769876809">Температура</translation> <translation id="7994702968232966508">EAP метод</translation> +<translation id="8020238979854764615">Дошло је до грешке. Пробајте поново тако што ћете одабрати друге слике.</translation> <translation id="802154636333426148">Преузимање није успело</translation> <translation id="8041089156583427627">Пошаљи повратне информације</translation> <translation id="8075838845814659848">Преостали ниво напуњености батерије</translation>
diff --git a/chromeos/strings/chromeos_strings_uk.xtb b/chromeos/strings/chromeos_strings_uk.xtb index e39bd7d18..45b88d2 100644 --- a/chromeos/strings/chromeos_strings_uk.xtb +++ b/chromeos/strings/chromeos_strings_uk.xtb
@@ -367,9 +367,11 @@ <translation id="7835501727204647447">Установити CloudReady</translation> <translation id="7881066108824108340">DNS</translation> <translation id="7882358943899516840">Тип постачальника</translation> +<translation id="7895471513946376273">Перегляньте інструменти для малювання та дизайну</translation> <translation id="7936303884198020182">не знайдено серверів імен</translation> <translation id="7960831585769876809">Температура</translation> <translation id="7994702968232966508">Метод EAP</translation> +<translation id="8020238979854764615">Сталася помилка. Повторіть спробу, вибравши інші зображення.</translation> <translation id="802154636333426148">Не вдалося завантажити</translation> <translation id="8041089156583427627">Надіслати відгук</translation> <translation id="8075838845814659848">Рівень заряду</translation>
diff --git a/components/accuracy_tips/BUILD.gn b/components/accuracy_tips/BUILD.gn index 42aac39f..0ba56dc 100644 --- a/components/accuracy_tips/BUILD.gn +++ b/components/accuracy_tips/BUILD.gn
@@ -26,8 +26,10 @@ "//components/prefs", "//components/safe_browsing/core/browser/db:database_manager", "//components/safe_browsing/core/common", + "//components/ukm/content", "//components/unified_consent", "//content/public/browser", + "//services/metrics/public/cpp:ukm_builders", ] } @@ -46,8 +48,10 @@ "//components/safe_browsing/core/browser/db:test_database_manager", "//components/safe_browsing/core/common", "//components/sync_preferences:test_support", + "//components/ukm:test_support", "//components/unified_consent", "//content/test:test_support", + "//services/metrics/public/cpp:ukm_builders", "//testing/gmock", "//testing/gtest", ]
diff --git a/components/accuracy_tips/DEPS b/components/accuracy_tips/DEPS index 3fe7f47d..f9bfdf91 100644 --- a/components/accuracy_tips/DEPS +++ b/components/accuracy_tips/DEPS
@@ -8,5 +8,7 @@ "+components/pref_registry", "+components/prefs", "+components/sync_preferences", + "+components/ukm", "+components/unified_consent", + "+services/metrics/public/cpp", ]
diff --git a/components/accuracy_tips/accuracy_service.cc b/components/accuracy_tips/accuracy_service.cc index d8429af..3838e7db 100644 --- a/components/accuracy_tips/accuracy_service.cc +++ b/components/accuracy_tips/accuracy_service.cc
@@ -22,8 +22,11 @@ #include "components/pref_registry/pref_registry_syncable.h" #include "components/prefs/pref_service.h" #include "components/prefs/scoped_user_pref_update.h" +#include "components/ukm/content/source_url_recorder.h" #include "components/unified_consent/pref_names.h" #include "content/public/browser/web_contents.h" +#include "services/metrics/public/cpp/metrics_utils.h" +#include "services/metrics/public/cpp/ukm_builders.h" #include "url/gurl.h" namespace accuracy_tips { @@ -150,8 +153,9 @@ pref_service_->SetTime(GetLastShownPrefName(disable_ui_), clock_->Now()); if (disable_ui_) { - return OnAccuracyTipClosed(base::TimeTicks(), - AccuracyTipInteraction::kDisabledByExperiment); + return OnAccuracyTipClosed( + base::TimeTicks(), ukm::GetSourceIdForWebContentsDocument(web_contents), + AccuracyTipInteraction::kDisabledByExperiment); } bool show_opt_out = @@ -164,7 +168,8 @@ web_contents, AccuracyTipStatus::kShowAccuracyTip, /*show_opt_out=*/show_opt_out, base::BindOnce(&AccuracyService::OnAccuracyTipClosed, - weak_factory_.GetWeakPtr(), base::TimeTicks::Now())); + weak_factory_.GetWeakPtr(), base::TimeTicks::Now(), + ukm::GetSourceIdForWebContentsDocument(web_contents))); } void AccuracyService::MaybeShowSurvey() { @@ -201,6 +206,7 @@ } void AccuracyService::OnAccuracyTipClosed(base::TimeTicks time_opened, + ukm::SourceId ukm_source_id, AccuracyTipInteraction interaction) { DCHECK(ui_task_runner_->RunsTasksInCurrentSequence()); ListPrefUpdate update(pref_service_, @@ -213,11 +219,15 @@ interaction); base::UmaHistogramCounts100("Privacy.AccuracyTip.NumDialogsShown", interaction_list->GetList().size()); + ukm::builders::AccuracyTipDialog ukm_builder(ukm_source_id); + ukm_builder.SetInteraction(static_cast<int>(interaction)); if (interaction != AccuracyTipInteraction::kDisabledByExperiment) { const base::TimeDelta time_open = base::TimeTicks::Now() - time_opened; base::UmaHistogramMediumTimes("Privacy.AccuracyTip.AccuracyTipTimeOpen", time_open); + ukm_builder.SetTimeSpent( + ukm::GetExponentialBucketMinForFineUserTiming(time_open.InSeconds())); const std::string suffix = GetHistogramSuffix(interaction); base::UmaHistogramCounts100("Privacy.AccuracyTip.NumDialogsShown." + suffix, @@ -225,6 +235,7 @@ base::UmaHistogramMediumTimes( "Privacy.AccuracyTip.AccuracyTipTimeOpen." + suffix, time_open); } + ukm_builder.Record(ukm::UkmRecorder::Get()); } bool AccuracyService::CanShowSurvey() {
diff --git a/components/accuracy_tips/accuracy_service.h b/components/accuracy_tips/accuracy_service.h index ed8564b..42f1983 100644 --- a/components/accuracy_tips/accuracy_service.h +++ b/components/accuracy_tips/accuracy_service.h
@@ -18,6 +18,7 @@ #include "components/history/core/browser/history_service.h" #include "components/history/core/browser/history_service_observer.h" #include "components/keyed_service/core/keyed_service.h" +#include "services/metrics/public/cpp/ukm_source_id.h" #include "url/gurl.h" namespace base { @@ -116,6 +117,7 @@ AccuracyTipStatus status); void OnAccuracyTipClosed(base::TimeTicks time_opened, + ukm::SourceId ukm_source_id, AccuracyTipInteraction interaction); // Returns if a HaTS survey for accuracy tips can be shown based on feature
diff --git a/components/accuracy_tips/accuracy_service_unittest.cc b/components/accuracy_tips/accuracy_service_unittest.cc index 16b3d46..28c80a3c 100644 --- a/components/accuracy_tips/accuracy_service_unittest.cc +++ b/components/accuracy_tips/accuracy_service_unittest.cc
@@ -24,9 +24,11 @@ #include "components/safe_browsing/core/browser/db/test_database_manager.h" #include "components/safe_browsing/core/common/features.h" #include "components/sync_preferences/testing_pref_service_syncable.h" +#include "components/ukm/test_ukm_recorder.h" #include "components/unified_consent/pref_names.h" #include "components/unified_consent/unified_consent_service.h" #include "content/public/test/test_renderer_host.h" +#include "services/metrics/public/cpp/ukm_builders.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -203,19 +205,16 @@ TEST_F(AccuracyServiceTest, IgnoreButton) { EXPECT_CALL(*delegate(), ShowAccuracyTip(_, _, false, _)) .WillOnce(Invoke(&IgnoreClicked)); - ; service()->MaybeShowAccuracyTip(web_contents()); testing::Mock::VerifyAndClearExpectations(delegate()); EXPECT_CALL(*delegate(), ShowAccuracyTip(_, _, false, _)) .WillOnce(Invoke(&IgnoreClicked)); - ; service()->MaybeShowAccuracyTip(web_contents()); testing::Mock::VerifyAndClearExpectations(delegate()); EXPECT_CALL(*delegate(), ShowAccuracyTip(_, _, true, _)) .WillOnce(Invoke(&LearnMoreClicked)); - ; service()->MaybeShowAccuracyTip(web_contents()); testing::Mock::VerifyAndClearExpectations(delegate()); } @@ -273,7 +272,7 @@ EXPECT_EQ(CheckAccuracyStatusSync(url), AccuracyTipStatus::kHighEnagagement); } -TEST_F(AccuracyServiceTest, Histograms) { +TEST_F(AccuracyServiceTest, UmaHistograms) { { base::HistogramTester t; EXPECT_CALL(*delegate(), ShowAccuracyTip(_, _, _, _)) @@ -301,6 +300,34 @@ } } +TEST_F(AccuracyServiceTest, UkmHistograms_LearnMore) { + ukm::TestAutoSetUkmRecorder ukm_recorder; + EXPECT_CALL(*delegate(), ShowAccuracyTip(_, _, _, _)) + .WillOnce(Invoke(&LearnMoreClicked)); + service()->MaybeShowAccuracyTip(web_contents()); + + auto entries = ukm_recorder.GetEntriesByName( + ukm::builders::AccuracyTipDialog::kEntryName); + EXPECT_EQ(1u, entries.size()); + ukm_recorder.ExpectEntryMetric( + entries[0], ukm::builders::AccuracyTipDialog::kInteractionName, + static_cast<int>(AccuracyTipInteraction::kLearnMore)); +} + +TEST_F(AccuracyServiceTest, UkmHistograms_OptOut) { + ukm::TestAutoSetUkmRecorder ukm_recorder; + EXPECT_CALL(*delegate(), ShowAccuracyTip(_, _, _, _)) + .WillOnce(Invoke(&OptOutClicked)); + service()->MaybeShowAccuracyTip(web_contents()); + + auto entries = ukm_recorder.GetEntriesByName( + ukm::builders::AccuracyTipDialog::kEntryName); + EXPECT_EQ(1u, entries.size()); + ukm_recorder.ExpectEntryMetric( + entries[0], ukm::builders::AccuracyTipDialog::kInteractionName, + static_cast<int>(AccuracyTipInteraction::kOptOut)); +} + class AccuracyServiceDisabledUiTest : public AccuracyServiceTest { private: void SetUpFeatureList(base::test::ScopedFeatureList& feature_list) override {
diff --git a/components/accuracy_tips/accuracy_web_contents_observer.cc b/components/accuracy_tips/accuracy_web_contents_observer.cc index ad75fab..91510b7 100644 --- a/components/accuracy_tips/accuracy_web_contents_observer.cc +++ b/components/accuracy_tips/accuracy_web_contents_observer.cc
@@ -9,9 +9,11 @@ #include "components/accuracy_tips/accuracy_service.h" #include "components/accuracy_tips/accuracy_tip_status.h" #include "components/safe_browsing/core/common/features.h" +#include "components/ukm/content/source_url_recorder.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/navigation_handle.h" #include "content/public/common/page_visibility_state.h" +#include "services/metrics/public/cpp/ukm_builders.h" #include "url/gurl.h" namespace accuracy_tips { @@ -61,6 +63,10 @@ const GURL& url, AccuracyTipStatus result) { UMA_HISTOGRAM_ENUMERATION("Privacy.AccuracyTip.PageStatus", result); + ukm::builders::AccuracyTipStatus( + ukm::GetSourceIdForWebContentsDocument(web_contents())) + .SetStatus(static_cast<int>(result)) + .Record(ukm::UkmRecorder::Get()); if (result != AccuracyTipStatus::kShowAccuracyTip) return;
diff --git a/components/autofill/core/browser/ui/accessory_sheet_data.cc b/components/autofill/core/browser/ui/accessory_sheet_data.cc index 205030e..0d3c8f8 100644 --- a/components/autofill/core/browser/ui/accessory_sheet_data.cc +++ b/components/autofill/core/browser/ui/accessory_sheet_data.cc
@@ -85,10 +85,18 @@ : UserInfo(std::move(origin), IsPslMatch(false)) {} UserInfo::UserInfo(std::string origin, IsPslMatch is_psl_match) + : UserInfo(std::move(origin), is_psl_match, GURL()) {} + +UserInfo::UserInfo(std::string origin, GURL icon_url) + : UserInfo(std::move(origin), IsPslMatch(false), std::move(icon_url)) {} + +UserInfo::UserInfo(std::string origin, IsPslMatch is_psl_match, GURL icon_url) : origin_(std::move(origin)), is_psl_match_(is_psl_match), + icon_url_(std::move(icon_url)), estimated_dynamic_memory_use_( - base::trace_event::EstimateMemoryUsage(origin_)) {} + base::trace_event::EstimateMemoryUsage(origin_) + + base::trace_event::EstimateMemoryUsage(icon_url_)) {} UserInfo::UserInfo(const UserInfo& user_info) = default; @@ -303,16 +311,19 @@ AccessorySheetData::Builder&& AccessorySheetData::Builder::AddUserInfo( std::string origin, - UserInfo::IsPslMatch is_psl_match) && { + UserInfo::IsPslMatch is_psl_match, + GURL icon_url) && { // Calls AddUserInfo()& since |this| is an lvalue. - return std::move(AddUserInfo(std::move(origin), is_psl_match)); + return std::move( + AddUserInfo(std::move(origin), is_psl_match, std::move(icon_url))); } AccessorySheetData::Builder& AccessorySheetData::Builder::AddUserInfo( std::string origin, - UserInfo::IsPslMatch is_psl_match) & { + UserInfo::IsPslMatch is_psl_match, + GURL icon_url) & { accessory_sheet_data_.add_user_info( - UserInfo(std::move(origin), is_psl_match)); + UserInfo(std::move(origin), is_psl_match, std::move(icon_url))); return *this; }
diff --git a/components/autofill/core/browser/ui/accessory_sheet_data.h b/components/autofill/core/browser/ui/accessory_sheet_data.h index 50c1e0c3..e60eccc6 100644 --- a/components/autofill/core/browser/ui/accessory_sheet_data.h +++ b/components/autofill/core/browser/ui/accessory_sheet_data.h
@@ -12,6 +12,7 @@ #include "base/types/strong_alias.h" #include "components/autofill/core/browser/ui/accessory_sheet_enums.h" #include "third_party/abseil-cpp/absl/types/optional.h" +#include "url/gurl.h" namespace password_manager { class IsPublicSuffixMatchTag; @@ -87,6 +88,8 @@ UserInfo(); explicit UserInfo(std::string origin); UserInfo(std::string origin, IsPslMatch is_psl_match); + UserInfo(std::string origin, GURL icon_url); + UserInfo(std::string origin, IsPslMatch is_psl_match, GURL icon_url); UserInfo(const UserInfo& user_info); UserInfo(UserInfo&& field); @@ -103,6 +106,7 @@ const std::vector<AccessorySheetField>& fields() const { return fields_; } const std::string& origin() const { return origin_; } IsPslMatch is_psl_match() const { return is_psl_match_; } + const GURL icon_url() const { return icon_url_; } bool operator==(const UserInfo& user_info) const; @@ -116,6 +120,7 @@ std::string origin_; IsPslMatch is_psl_match_{false}; std::vector<AccessorySheetField> fields_; + GURL icon_url_; size_t estimated_dynamic_memory_use_ = 0; }; @@ -293,10 +298,12 @@ // Adds a new UserInfo object to |accessory_sheet_data_|. Builder&& AddUserInfo( std::string origin = std::string(), - UserInfo::IsPslMatch is_psl_match = UserInfo::IsPslMatch(false)) &&; + UserInfo::IsPslMatch is_psl_match = UserInfo::IsPslMatch(false), + GURL icon_url = GURL()) &&; Builder& AddUserInfo( std::string origin = std::string(), - UserInfo::IsPslMatch is_psl_match = UserInfo::IsPslMatch(false)) &; + UserInfo::IsPslMatch is_psl_match = UserInfo::IsPslMatch(false), + GURL icon_url = GURL()) &; // Appends a selectable, non-obfuscated field to the last UserInfo object. Builder&& AppendSimpleField(std::u16string text) &&;
diff --git a/components/browser_ui/contacts_picker/android/java/src/org/chromium/components/browser_ui/contacts_picker/ContactDetailsTest.java b/components/browser_ui/contacts_picker/android/java/src/org/chromium/components/browser_ui/contacts_picker/ContactDetailsTest.java index 2d9f625..2f9e5c9 100644 --- a/components/browser_ui/contacts_picker/android/java/src/org/chromium/components/browser_ui/contacts_picker/ContactDetailsTest.java +++ b/components/browser_ui/contacts_picker/android/java/src/org/chromium/components/browser_ui/contacts_picker/ContactDetailsTest.java
@@ -20,6 +20,7 @@ import org.junit.runner.RunWith; import org.chromium.base.test.BaseJUnit4ClassRunner; +import org.chromium.base.test.util.Batch; import org.chromium.payments.mojom.PaymentAddress; import java.util.Arrays; @@ -29,6 +30,7 @@ * Tests for the ContactDetails class. */ @RunWith(BaseJUnit4ClassRunner.class) +@Batch(Batch.PER_CLASS) public class ContactDetailsTest { Context mContext;
diff --git a/components/browser_ui/contacts_picker/android/java/src/org/chromium/components/browser_ui/contacts_picker/ContactsPickerDialogTest.java b/components/browser_ui/contacts_picker/android/java/src/org/chromium/components/browser_ui/contacts_picker/ContactsPickerDialogTest.java index bf01e34..f14f0bb9 100644 --- a/components/browser_ui/contacts_picker/android/java/src/org/chromium/components/browser_ui/contacts_picker/ContactsPickerDialogTest.java +++ b/components/browser_ui/contacts_picker/android/java/src/org/chromium/components/browser_ui/contacts_picker/ContactsPickerDialogTest.java
@@ -4,6 +4,7 @@ package org.chromium.components.browser_ui.contacts_picker; +import android.app.Activity; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; @@ -19,13 +20,16 @@ import org.junit.After; import org.junit.Assert; import org.junit.Before; +import org.junit.BeforeClass; import org.junit.ClassRule; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.chromium.base.FeatureList; +import org.chromium.base.test.BaseActivityTestRule; import org.chromium.base.test.BaseJUnit4ClassRunner; +import org.chromium.base.test.util.Batch; import org.chromium.base.test.util.CallbackHelper; import org.chromium.base.test.util.Feature; import org.chromium.blink.mojom.ContactIconBlob; @@ -41,7 +45,7 @@ import org.chromium.ui.base.IntentRequestTracker; import org.chromium.ui.base.WindowAndroid; import org.chromium.ui.test.util.DisableAnimationsTestRule; -import org.chromium.ui.test.util.DummyUiActivityTestCase; +import org.chromium.ui.test.util.DummyUiActivity; import org.chromium.ui.test.util.RenderTestRule; import java.nio.ByteBuffer; @@ -54,12 +58,17 @@ * Tests for the ContactsPickerDialog class. */ @RunWith(BaseJUnit4ClassRunner.class) -public class ContactsPickerDialogTest extends DummyUiActivityTestCase +@Batch(Batch.PER_CLASS) +public class ContactsPickerDialogTest implements ContactsPickerListener, SelectionObserver<ContactDetails> { @ClassRule public static DisableAnimationsTestRule mDisableAnimationsTestRule = new DisableAnimationsTestRule(); + @ClassRule + public static BaseActivityTestRule<DummyUiActivity> activityTestRule = + new BaseActivityTestRule<>(DummyUiActivity.class); + private Activity mActivity; private WindowAndroid mWindowAndroid; @Rule @@ -105,11 +114,17 @@ // A callback that fires when an action is taken in the dialog (cancel/done etc). public final CallbackHelper onActionCallback = new CallbackHelper(); + @BeforeClass + public static void setupSuite() { + activityTestRule.launchActivity(null); + } + @Before - public void setUp() throws Exception { + public void setupTest() throws Exception { mWindowAndroid = TestThreadUtils.runOnUiThreadBlocking(() -> { - return new ActivityWindowAndroid(getActivity(), /* listenToActivityState= */ true, - IntentRequestTracker.createFromActivity(getActivity())); + mActivity = activityTestRule.getActivity(); + return new ActivityWindowAndroid(mActivity, /* listenToActivityState= */ true, + IntentRequestTracker.createFromActivity(mActivity)); }); FeatureList.setTestFeatures(Collections.singletonMap( ContactsPickerFeatureList.CONTACTS_PICKER_SELECT_ALL, true)); @@ -123,6 +138,7 @@ @After public void tearDown() throws Exception { + if (!mClosing) dismissDialog(); TestThreadUtils.runOnUiThreadBlocking(() -> { mWindowAndroid.destroy(); }); } @@ -259,7 +275,7 @@ mLastActionRecorded = ContactsPickerAction.NUM_ENTRIES; PickerCategoryView categoryView = mDialog.getCategoryViewForTesting(); - View cancel = new View(getActivity()); + View cancel = new View(mActivity); int callCount = onActionCallback.getCallCount(); categoryView.onClick(cancel); onActionCallback.waitForCallback(callCount, 1);
diff --git a/components/download/internal/background_service/ios/BUILD.gn b/components/download/internal/background_service/ios/BUILD.gn index 5d02711..65356a8 100644 --- a/components/download/internal/background_service/ios/BUILD.gn +++ b/components/download/internal/background_service/ios/BUILD.gn
@@ -16,6 +16,7 @@ visibility = [ ":*", "//ios/chrome/browser/download/background_service", + "//ios/chrome/browser/download/background_service:unit_tests", ] deps = [
diff --git a/components/download/internal/background_service/ios/background_download_task_helper_unittest.mm b/components/download/internal/background_service/ios/background_download_task_helper_unittest.mm index 5a37ebf2..875740de6 100644 --- a/components/download/internal/background_service/ios/background_download_task_helper_unittest.mm +++ b/components/download/internal/background_service/ios/background_download_task_helper_unittest.mm
@@ -13,12 +13,11 @@ #import "base/sequence_checker.h" #import "base/test/bind.h" #import "base/test/gmock_callback_support.h" -#import "base/test/task_environment.h" +#import "components/download/internal/background_service/test/background_download_test_base.h" #import "components/download/public/background_service/download_params.h" #import "net/test/embedded_test_server/embedded_test_server.h" #import "net/test/embedded_test_server/http_request.h" #import "net/test/embedded_test_server/http_response.h" -#import "testing/platform_test.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support." @@ -28,23 +27,19 @@ using net::test_server::HttpResponse; using net::test_server::HttpMethod; -const char kDefaultResponseContent[] = "1234"; const char kHeaderValue[] = "abcd1234"; const char kGuid[] = "kale consumer"; namespace download { -class BackgroundDownloadTaskHelperTest : public PlatformTest { +class BackgroundDownloadTaskHelperTest + : public test::BackgroundDownloadTestBase { protected: BackgroundDownloadTaskHelperTest() {} ~BackgroundDownloadTaskHelperTest() override = default; void SetUp() override { - ASSERT_TRUE(dir_.CreateUniqueTempDir()); - server_.RegisterRequestHandler( - base::BindRepeating(&BackgroundDownloadTaskHelperTest::DefaultResponse, - base::Unretained(this))); - server_handle_ = server_.StartAndReturnHandle(); + BackgroundDownloadTestBase::SetUp(); helper_ = BackgroundDownloadTaskHelper::Create(); } @@ -62,7 +57,8 @@ [&](bool, const base::FilePath& file_path, int64_t file_size) { std::string content; ASSERT_TRUE(base::ReadFileToString(file_path, &content)); - EXPECT_EQ(kDefaultResponseContent, content); + EXPECT_EQ(BackgroundDownloadTestBase::kDefaultResponseContent, + content); EXPECT_EQ(file_size, static_cast<int64_t>(content.size())); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); loop.Quit(); @@ -75,26 +71,8 @@ EXPECT_EQ(HttpMethod::METHOD_POST, request_sent_->method); } - const HttpRequest* request_sent() const { return request_sent_.get(); } - const base::ScopedTempDir& dir() const { return dir_; } - private: - std::unique_ptr<HttpResponse> DefaultResponse(const HttpRequest& request) { - request_sent_.reset(new HttpRequest(request)); - auto response = std::make_unique<net::test_server::BasicHttpResponse>(); - response->set_code(net::HTTP_OK); - response->set_content(kDefaultResponseContent); - response->set_content_type("text/plain"); - return response; - } - - base::test::TaskEnvironment task_environment_; - net::EmbeddedTestServer server_; - net::test_server::EmbeddedTestServerHandle server_handle_; - std::unique_ptr<HttpRequest> request_sent_; - base::ScopedTempDir dir_; std::unique_ptr<BackgroundDownloadTaskHelper> helper_; - SEQUENCE_CHECKER(sequence_checker_); }; // Verifies download can be finished.
diff --git a/components/download/internal/background_service/test/BUILD.gn b/components/download/internal/background_service/test/BUILD.gn index d460c87..dca603f 100644 --- a/components/download/internal/background_service/test/BUILD.gn +++ b/components/download/internal/background_service/test/BUILD.gn
@@ -8,11 +8,14 @@ "//components/download/content/internal:unit_tests", "//components/download/internal/background_service:unit_tests", "//components/download/internal/background_service/ios:unit_tests", + "//ios/chrome/browser/download/background_service:unit_tests", ] testonly = true sources = [ + "background_download_test_base.cc", + "background_download_test_base.h", "black_hole_log_sink.cc", "black_hole_log_sink.h", "entry_utils.cc",
diff --git a/components/download/internal/background_service/test/background_download_test_base.cc b/components/download/internal/background_service/test/background_download_test_base.cc new file mode 100644 index 0000000..1bf303a5 --- /dev/null +++ b/components/download/internal/background_service/test/background_download_test_base.cc
@@ -0,0 +1,39 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/download/internal/background_service/test/background_download_test_base.h" + +#include "base/callback_helpers.h" + +using net::test_server::HttpMethod; +using net::test_server::HttpRequest; +using net::test_server::HttpResponse; + +namespace download { +namespace test { + +const char* BackgroundDownloadTestBase::kDefaultResponseContent = "1234"; + +BackgroundDownloadTestBase::BackgroundDownloadTestBase() = default; +BackgroundDownloadTestBase::~BackgroundDownloadTestBase() = default; + +void BackgroundDownloadTestBase::SetUp() { + ASSERT_TRUE(dir_.CreateUniqueTempDir()); + server_.RegisterRequestHandler(base::BindRepeating( + &BackgroundDownloadTestBase::DefaultResponse, base::Unretained(this))); + server_handle_ = server_.StartAndReturnHandle(); +} + +std::unique_ptr<HttpResponse> BackgroundDownloadTestBase::DefaultResponse( + const HttpRequest& request) { + request_sent_ = std::make_unique<HttpRequest>(request); + auto response = std::make_unique<net::test_server::BasicHttpResponse>(); + response->set_code(net::HTTP_OK); + response->set_content(kDefaultResponseContent); + response->set_content_type("text/plain"); + return response; +} + +} // namespace test +} // namespace download
diff --git a/components/download/internal/background_service/test/background_download_test_base.h b/components/download/internal/background_service/test/background_download_test_base.h new file mode 100644 index 0000000..ea9a3b5 --- /dev/null +++ b/components/download/internal/background_service/test/background_download_test_base.h
@@ -0,0 +1,52 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_DOWNLOAD_INTERNAL_BACKGROUND_SERVICE_TEST_BACKGROUND_DOWNLOAD_TEST_BASE_H_ +#define COMPONENTS_DOWNLOAD_INTERNAL_BACKGROUND_SERVICE_TEST_BACKGROUND_DOWNLOAD_TEST_BASE_H_ + +#include <memory> + +#include "base/files/scoped_temp_dir.h" +#include "base/sequence_checker.h" +#include "base/test/task_environment.h" +#include "net/test/embedded_test_server/embedded_test_server.h" +#include "net/test/embedded_test_server/http_request.h" +#include "net/test/embedded_test_server/http_response.h" +#include "testing/platform_test.h" + +namespace download { +namespace test { + +// Shared test harness for multiple background download tests that send real +// network requests to embedded test server. +class BackgroundDownloadTestBase : public PlatformTest { + protected: + static const char* kDefaultResponseContent; + BackgroundDownloadTestBase(); + ~BackgroundDownloadTestBase() override; + + // PlatformTest overrides. + void SetUp() override; + + const net::test_server::HttpRequest* request_sent() const { + return request_sent_.get(); + } + const base::ScopedTempDir& dir() const { return dir_; } + + protected: + std::unique_ptr<net::test_server::HttpResponse> DefaultResponse( + const net::test_server::HttpRequest& request); + + base::test::TaskEnvironment task_environment_; + net::EmbeddedTestServer server_; + net::test_server::EmbeddedTestServerHandle server_handle_; + std::unique_ptr<net::test_server::HttpRequest> request_sent_; + base::ScopedTempDir dir_; + SEQUENCE_CHECKER(sequence_checker_); +}; + +} // namespace test +} // namespace download + +#endif // COMPONENTS_DOWNLOAD_INTERNAL_BACKGROUND_SERVICE_TEST_BACKGROUND_DOWNLOAD_TEST_BASE_H_
diff --git a/components/feature_engagement/public/feature_constants.cc b/components/feature_engagement/public/feature_constants.cc index 27de340..da68e93 100644 --- a/components/feature_engagement/public/feature_constants.cc +++ b/components/feature_engagement/public/feature_constants.cc
@@ -8,7 +8,7 @@ const base::Feature kIPHDemoMode{"IPH_DemoMode", base::FEATURE_DISABLED_BY_DEFAULT}; - +const base::Feature kIPHSnooze{"IPH_Snooze", base::FEATURE_DISABLED_BY_DEFAULT}; const base::Feature kIPHDummyFeature{"IPH_Dummy", base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/components/feature_engagement/public/feature_constants.h b/components/feature_engagement/public/feature_constants.h index 95b12bb5..7fa40183 100644 --- a/components/feature_engagement/public/feature_constants.h +++ b/components/feature_engagement/public/feature_constants.h
@@ -13,6 +13,9 @@ // A feature for enabling a demonstration mode for In-Product Help (IPH). extern const base::Feature kIPHDemoMode; +// A feature for enabling a snooze mode for In-Product Help (IPH). +extern const base::Feature kIPHSnooze; + // A feature to ensure all arrays can contain at least one feature. extern const base::Feature kIPHDummyFeature;
diff --git a/components/metrics/persistent_histograms.cc b/components/metrics/persistent_histograms.cc index 202c461..312b47d 100644 --- a/components/metrics/persistent_histograms.cc +++ b/components/metrics/persistent_histograms.cc
@@ -21,6 +21,10 @@ #include "components/metrics/persistent_system_profile.h" #include "components/variations/variations_associated_data.h" +#if defined(OS_WIN) +#include <windows.h> +#endif + namespace { // Creating a "spare" file for persistent metrics involves a lot of I/O and @@ -131,6 +135,18 @@ } else if (base::GlobalHistogramAllocator::CreateWithFile( active_file, kAllocSize, kAllocId, kBrowserMetricsName)) { // TODO(crbug.com/1176977): Remove this instrumentation when bug is fixed. + // Log the drive type on Windows. +#if defined(OS_WIN) + std::vector<std::wstring> path_components; + base::MakeAbsoluteFilePath(active_file).GetComponents(&path_components); + // Get the drive path with a backslash at the end as required by the API. + // https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-getdrivetypew + path_components[0] += L"\\"; + auto drive_type = GetDriveTypeW(path_components[0].c_str()); + // Note: 6 is the max enum per the docs. + base::UmaHistogramExactLinear("UMA.PersistentHistograms.DriveType", + drive_type, 7); +#endif // defined(OS_WIN) // We don't expect there to be any histograms in the file just opened. But // if there are, log their hashes here to diagnose crbug.com/1176977. base::PersistentHistogramAllocator::Iterator it(
diff --git a/components/permissions/permission_decision_auto_blocker.cc b/components/permissions/permission_decision_auto_blocker.cc index 436e51e..c314821 100644 --- a/components/permissions/permission_decision_auto_blocker.cc +++ b/components/permissions/permission_decision_auto_blocker.cc
@@ -350,7 +350,8 @@ if (current_dismissal_count_with_quiet_ui >= g_dismissals_before_block_with_quiet_ui) { - DCHECK_EQ(permission, ContentSettingsType::NOTIFICATIONS); + DCHECK(permission == ContentSettingsType::NOTIFICATIONS || + permission == ContentSettingsType::GEOLOCATION); PlaceUnderEmbargo(url, permission, kPermissionDismissalEmbargoKey); return true; } @@ -380,7 +381,8 @@ if (current_ignore_count_with_quiet_ui >= g_ignores_before_block_with_quiet_ui) { - DCHECK_EQ(permission, ContentSettingsType::NOTIFICATIONS); + DCHECK(permission == ContentSettingsType::NOTIFICATIONS || + permission == ContentSettingsType::GEOLOCATION); PlaceUnderEmbargo(url, permission, kPermissionIgnoreEmbargoKey); return true; }
diff --git a/components/permissions/prediction_service/prediction_service.cc b/components/permissions/prediction_service/prediction_service.cc index 1a92c166..5d4f6611 100644 --- a/components/permissions/prediction_service/prediction_service.cc +++ b/components/permissions/prediction_service/prediction_service.cc
@@ -211,11 +211,14 @@ switch (entity.type) { case RequestType::kNotifications: - permission_features->mutable_notification_permission() - ->Clear(); + permission_features->mutable_notification_permission()->Clear(); + break; + case RequestType::kGeolocation: + permission_features->mutable_geolocation_permission()->Clear(); break; default: - NOTREACHED() << "CPSS only supports notifications at the moment."; + NOTREACHED() + << "CPSS only supports notifications and geolocation at the moment."; } return proto_request;
diff --git a/components/policy/resources/policy_templates.json b/components/policy/resources/policy_templates.json index f174e84..ea5bee33 100644 --- a/components/policy/resources/policy_templates.json +++ b/components/policy/resources/policy_templates.json
@@ -8797,6 +8797,7 @@ 'items': { 'type': 'string' }, }, 'supported_on': ['chrome.*:75-', 'chrome_os:75-'], + 'future_on': ['android'], 'features': { 'dynamic_refresh': True, 'per_profile': True,
diff --git a/components/policy/resources/policy_templates_de.xtb b/components/policy/resources/policy_templates_de.xtb index 16739e4..4142868 100644 --- a/components/policy/resources/policy_templates_de.xtb +++ b/components/policy/resources/policy_templates_de.xtb
@@ -106,6 +106,11 @@ Wenn die Richtlinie deaktiviert ist, erfolgt keine anonymisierte URL-Datenerfassung. Wenn Sie diese Richtlinie konfigurieren, kann sie von Nutzern nicht geändert werden. Wird sie nicht konfiguriert, ist die anonymisierte URL-Datenerfassung aktiv, kann aber von Nutzern geändert werden.</translation> +<translation id="1137096407176363892">Hiermit können Sie die Stimmen für die Sprachausgabe bei Enhanced Network in der Bedienungshilfe „Vorlesen“ zulassen. Diese Stimmen senden Text an die Server von Google, um natürlich klingende Sprache zu synthetisieren. + + Wenn diese Richtlinie auf „false“ gesetzt ist, ist die Funktion für die Stimmen der Enhanced Network-Sprachausgabe in der Funktion „Vorlesen“ immer deaktiviert. + + Ist sie auf „true“ gesetzt oder nicht konfiguriert, kann die Funktion für die Stimmen der Enhanced Network-Sprachausgabe in „Vorlesen“ vom Nutzer aktiviert oder deaktiviert werden.</translation> <translation id="1138294736309071213">Diese Richtlinie ist nur im Händlermodus aktiv. Legt fest, wie lange es dauert, bis für Geräte im Händlermodus der Bildschirmschoner auf der Anmeldeseite erscheint. @@ -1779,6 +1784,7 @@ <translation id="3128072319047570212">Keygen-Einstellungen</translation> <translation id="3142410959002029864">Durch die Richtlinie wird der standardmäßige Duplexmodus überschrieben. Wenn der Modus nicht verfügbar ist, wird die Richtlinie ignoriert.</translation> <translation id="3144173889708944482">Wenn <ph name="PRINTERS_BLOCKLIST" /> für <ph name="DEVICE_PRINTERS_ACCESS_MODE_POLICY_NAME" /> ausgewählt ist, wird durch Festlegen von <ph name="DEVICE_PRINTERS_BLOCKLIST_POLICY_NAME" /> angegeben, welche Drucker die Nutzer nicht verwenden können. Mit Ausnahme der in dieser Richtlinie aufgeführten IDs können die Nutzer auf alle Drucker zugreifen. Die IDs müssen dem Feld <ph name="ID_FIELD" /> oder dem Feld <ph name="GUID_FIELD" /> in der Datei entsprechen, die in <ph name="DEVICE_PRINTERS_POLICY_NAME" /> angegeben ist.</translation> +<translation id="3146711617256415776">Stimmen für die Sprachausgabe bei Enhanced Network nicht zulassen, wenn die Funktion „Vorlesen“ verwendet wird</translation> <translation id="3152425128389603870">Unified Desktop verfügbar machen und standardmäßig aktivieren</translation> <translation id="3159375329008977062">Nutzer darf Crostini-Container über die Benutzeroberfläche exportieren/importieren</translation> <translation id="3165808775394012744">Diese Richtlinien sind hier verfügbar, damit sie einfach entfernt werden können.</translation> @@ -3183,7 +3189,6 @@ <translation id="5055474681190962362">Tag im Monat (1–31), an dem der Neustart ausgeführt werden soll, angegeben in der lokalen Zeit des Geräts. Diese Richtlinie wird nur verwendet, wenn „frequency“ auf „MONTHLY“ gesetzt ist. Falls der Wert höher ist als die maximale Anzahl von Tagen in einem bestimmten Monat, wird der jeweils letzte Tag des Monats gewählt.</translation> <translation id="5056708224511062314">Lupe deaktiviert</translation> <translation id="5058573563327660283">Strategie auswählen, die bei der automatischen Bereinigung zur Freigabe von Festplattenspeicher verwendet wird (eingestellt)</translation> -<translation id="5059201920681374653">Verwaltete Konten müssen sich auf einem verknüpften verwalteten Gerät befinden</translation> <translation id="5061114193960158745">Mithilfe dieser Richtlinie wird die Liste der Websites verwaltet, die unter keinen Umständen einen Browserwechsel auslösen. Jedes Element wird als Regel angesehen. Wenn es eine Übereinstimmung mit der Regel gibt, wird kein alternativer Browser geöffnet. Im Gegensatz zur Richtlinie "<ph name="URL_LIST_POLICY_NAME" />" gelten die Regeln in beide Richtungen. Wenn das <ph name="IE_PRODUCT_NAME" />-Add-in aktiviert ist, wird damit auch gesteuert, ob <ph name="IE_PRODUCT_NAME" /> diese URLs in <ph name="PRODUCT_NAME" /> öffnen soll. Ist die Richtlinie nicht konfiguriert, werden der Liste keine Websites hinzugefügt. @@ -3933,6 +3938,7 @@ Diese Richtlinie wird nur angewendet, wenn das Gerät für <ph name="PRODUCT_NAME" /> mit <ph name="CLOUD_MANAGEMENT_ENROLLMENT_TOKEN" /> registriert ist. Für <ph name="PRODUCT_OS_NAME" /> wird diese Richtlinie immer angewendet.</translation> <translation id="6022948604095165524">Aktion beim Start</translation> +<translation id="602318745029752898">Stimmen für die Sprachausgabe bei Enhanced Network in der Funktion „Vorlesen“ zulassen</translation> <translation id="6025267044008029374">Schädliche Downloads blockieren (empfohlen)</translation> <translation id="6026722971789064331">Verwendung der File System API zum Schreiben steuern</translation> <translation id="602728333950205286">Google Instant-URL der Standardsuchmaschine</translation> @@ -5610,6 +5616,7 @@ <translation id="8118665053362250806">Cache-Größe für Mediendatenträger festlegen</translation> <translation id="8124468781472887384">Richtlinie für den Zugriff auf die Konfiguration von an Geräte gebundenen Druckern.</translation> <translation id="8128192446158421884">URLs, auf die AutoOpenFileTypes angewendet werden können</translation> +<translation id="8131046602440880289">Stimmen für die Sprachausgabe bei Enhanced Network zulassen, wenn die Funktion „Vorlesen“ verwendet wird</translation> <translation id="8133152694354699657">Wenn die Richtlinie auf "True" gesetzt oder nicht konfiguriert ist, steht Nutzern "Zum Suchen antippen" zur Verfügung und sie können die Funktion aktivieren oder deaktivieren. Ist sie auf "False" gesetzt, wird "Zum Suchen antippen" vollständig deaktiviert.</translation>
diff --git a/components/policy/resources/policy_templates_es-419.xtb b/components/policy/resources/policy_templates_es-419.xtb index 6ee6333..9c05aaba 100644 --- a/components/policy/resources/policy_templates_es-419.xtb +++ b/components/policy/resources/policy_templates_es-419.xtb
@@ -3218,7 +3218,6 @@ <translation id="5055474681190962362">El día del mes [1-31] en el que debe reiniciarse el dispositivo (según su zona horaria local). Solo se utiliza cuando la frecuencia ("frequency") es mensual ("MONTHLY"). Si se supera el número máximo de días de un mes, se elegirá el último día.</translation> <translation id="5056708224511062314">La lupa está inhabilitada.</translation> <translation id="5058573563327660283">Seleccionar la estrategia utilizada para liberar espacio en el disco durante el proceso de limpieza automática (dejó de estar disponible)</translation> -<translation id="5059201920681374653">Las cuentas administradas deben estar en un dispositivo administrado que esté afiliado</translation> <translation id="5061114193960158745">Si estableces esta política, se controlará la lista de sitios web que nunca obligarán a cambiar de navegador. Cada elemento será tratado como una regla. Las reglas que coincidan no se abrirán en un navegador alternativo. A diferencia de la política <ph name="URL_LIST_POLICY_NAME" />, las reglas se aplican en ambas direcciones. Si el complemento de <ph name="IE_PRODUCT_NAME" /> está activado, también controlará si <ph name="IE_PRODUCT_NAME" /> puede abrir estas URL en <ph name="PRODUCT_NAME" />. Si no estableces la política, no se agregarán sitios web a la lista.
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb index c836e968e..bac7e13 100644 --- a/components/policy/resources/policy_templates_es.xtb +++ b/components/policy/resources/policy_templates_es.xtb
@@ -510,6 +510,7 @@ Si esta política se inhabilita o no se define, se mostrarán advertencias en sistemas no compatibles.</translation> <translation id="1634989431648355062">Permitir el complemento <ph name="FLASH_PLUGIN_NAME" /> en estos sitios web</translation> +<translation id="1639468541408865385">Habilitar la caché de autenticación de HTTP con alcance global</translation> <translation id="1641394008743444477">Te permite establecer una lista con funciones de <ph name="PRODUCT_OS_NAME" /> para inhabilitarlas. Si se inhabilita cualquiera de estas funciones, el usuario no podrá acceder a ella desde la interfaz y la verá como inhabilitada por el administrador. La experiencia de usuario de las funciones inhabilitadas se decide con <ph name="SYSTEM_FEATURES_DISABLE_MODE" /> @@ -548,6 +549,7 @@ Si no se asigna ningún valor a esta política, la instalación de <ph name="PLUGIN_VM_NAME" /> fallará si el dispositivo tiene menos de 20 GB (valor predeterminado) de espacio disponible en disco. Si se le asigna un valor, la instalación de <ph name="PLUGIN_VM_NAME" /> fallará si el dispositivo tiene menos espacio disponible en disco del requerido por la política.</translation> <translation id="1690383938831887552">Evitar que se cargue contenido Signed HTTP Exchange</translation> +<translation id="169467210981344373">Inhabilitar la caché de autenticación de HTTP con alcance global</translation> <translation id="1700458869527146675">Si se establece la política, se definirá la configuración de proxy aplicable a Chrome y a las aplicaciones ARC, que ignoran todas las opciones relacionadas con el proxy especificadas en la línea de comandos. Si no se establece la política, los usuarios podrán elegir su configuración de proxy. @@ -571,6 +573,7 @@ Nota: Puedes consultar ejemplos más detallados en The Chromium Projects: https://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett.</translation> <translation id="1700811900332333712">Permite el uso de Powerwash en el dispositivo</translation> <translation id="1708496595873025510">Establecer restricción en obtención de base de variaciones</translation> +<translation id="1709154322133526432">Habilitar la comprobación predeterminada del navegador al iniciar</translation> <translation id="1713829924716792485">Si se habilita esta política o no se le asigna ningún valor, los usuarios conectados a un host de acceso remoto podrán transferir archivos entre el cliente y el host. Esto no se aplica a las conexiones de asistencia remota, ya que no admiten la transferencia de archivos. Si se inhabilita esta política, no se permitirá la transferencia de archivos.</translation> @@ -840,6 +843,7 @@ <translation id="2037214548071298156">Si se habilita la política o no se establece, los dispositivos registrados enviarán estadísticas de hardware, como el uso de CPU/RAM. Si se inhabilita la política, los dispositivos registrados no enviarán estadísticas de hardware.</translation> +<translation id="2039801473506609891">Inhabilitar la compatibilidad con HTTP/0.9 en puertos no predeterminados</translation> <translation id="2040479044912658454">Modo de rasterización de impresión</translation> <translation id="2042513383871755994">Si se establece esta política, podrás definir una lista de patrones de URL donde se especifique qué sitios no pueden pedir a los usuarios que les concedan acceso de lectura a archivos o directorios del sistema de archivos del sistema operativo del host a través de la API File System. @@ -1142,6 +1146,7 @@ Si se establece la opción <ph name="CRITICAL_VARIATIONS_ONLY_OPTION_NAME" /> (valor 1), solo se permitirá que se apliquen a <ph name="PRODUCT_NAME" /> las variaciones que se consideren correcciones críticas de seguridad o de estabilidad. Si se establece la opción <ph name="VARIATIONS_DISABLED_OPTION_NAME" /> (valor 2), no se permitirá aplicar ninguna variación al navegador. Ten en cuenta que este modo puede evitar que los desarrolladores de <ph name="PRODUCT_NAME" /> proporcionen correcciones críticas de seguridad a su debido tiempo y, por lo tanto, no se recomienda su uso.</translation> +<translation id="2402547085566757554">No usar la página Nueva pestaña como página principal</translation> <translation id="2411629345938804022">Si se asigna el valor 3 a esta política, los sitios web podrán pedir acceso a los dispositivos Bluetooth cercanos. Si se le asigna el valor 2, se denegará el acceso a los dispositivos Bluetooth cercanos. Si no se le asigna ningún valor, los sitios web podrán pedir acceso, pero los usuarios podrán cambiar esta opción.</translation> @@ -1437,6 +1442,7 @@ <translation id="2716623398185506073">Si se habilita la política, los dispositivos registrados enviarán estadísticas de hardware e identificadores relacionados con la energía. Si se inhabilita la política o no se establece, los dispositivos registrados no enviarán estadísticas de energía.</translation> +<translation id="2721185634942265347">Inhabilitar sugerencias de búsqueda</translation> <translation id="2723692978495226412">Si se habilita esta política, se mostrarán recomendaciones de aplicaciones instaladas anteriormente por el usuario en otros dispositivos. Si no se ha introducido ningún texto de búsqueda, estas recomendaciones se mostrarán en el menú de aplicaciones después de las recomendaciones de aplicaciones locales. Si se inhabilita esta política o no se le asigna ningún valor, no se mostrarán estas recomendaciones. @@ -1703,6 +1709,7 @@ Esta política no tiene ningún efecto en las políticas ya publicadas.</translation> <translation id="3016255526521614822">Aplicaciones para tomar notas incluidas en la lista blanca que están permitidas en la pantalla de bloqueo de <ph name="PRODUCT_OS_NAME" /></translation> <translation id="3017578958356048910">El visor de PDF puede anotar PDFs</translation> +<translation id="3020623128585817424">Inhabilitar la comprobación predeterminada del navegador al iniciar</translation> <translation id="3020953534071988875">Al configurar esta política, se habilita o inhabilita la autenticación pasiva para los perfiles de incógnito y de invitado en <ph name="PRODUCT_NAME" />. La autenticación pasiva permite realizar la autenticación HTTP con credenciales predeterminadas si no se proporcionan credenciales explícitas a través de estructuras de desafío-respuesta de NTLM, Kerberos o Negotiate. @@ -3233,7 +3240,6 @@ <translation id="5055474681190962362">Día del mes [1-31] en el que se debe reiniciar, interpretado en la zona horaria local del dispositivo. Solo se utiliza si el valor de "frequency" (frecuencia) es "MONTHLY" (mensual). Si este valor es superior al número máximo de días de un mes concreto, se seleccionará el último día del mes.</translation> <translation id="5056708224511062314">Lupa inhabilitada</translation> <translation id="5058573563327660283">Seleccionar la estrategia utilizada para liberar espacio en disco durante la limpieza automática (obsoleta)</translation> -<translation id="5059201920681374653">Las cuentas gestionadas deben estar en un dispositivo gestionado asociado</translation> <translation id="5061114193960158745">Si se define esta política, controlará la lista de sitios web que nunca provocarán que se cambie de navegador. Cada elemento se tratará como una regla. Las reglas para las que se encuentre una coincidencia no abrirán un navegador alternativo. A diferencia de la política <ph name="URL_LIST_POLICY_NAME" />, estas reglas se aplicarán en ambas direcciones. Si el complemento de <ph name="IE_PRODUCT_NAME" /> está activado, también controlará si <ph name="IE_PRODUCT_NAME" /> debe abrir esas URL en <ph name="PRODUCT_NAME" />. Si no se asigna ningún valor a esta política, no se añadirá ningún sitio web a la lista. @@ -3508,6 +3514,11 @@ Si se asigna una lista de identificadores de métodos de introducción a esta política, esos métodos estarán disponibles en la pantalla de inicio de sesión. El primer método de introducción estará preseleccionado. El grupo de un usuario aparece centrado en la pantalla de inicio de sesión, pero también se mostrará el último método de introducción por el usuario junto a los métodos de introducción proporcionados por esta política. Si esta política no se configura, los métodos de introducción de la pantalla de inicio de sesión procederán de la configuración regional en la que se muestre esa pantalla. Los valores que no sean identificadores de métodos de introducción válidos se ignorarán.</translation> <translation id="5407008856008996384">Permitir acceso a impresoras CUPS</translation> +<translation id="5417597818300833094">Si se establece esta política, los usuarios podrán elegir uno de los métodos de introducción de texto para las sesiones de <ph name="PRODUCT_OS_NAME" /> que especifiques. + + Si no se establece o se le asigna una lista vacía, los usuarios podrán seleccionar todos los métodos de introducción de texto admitidos. + + Nota: Si no se admite el método de introducción de texto actual, se cambiará al diseño de teclado del hardware (si se permite) o a la primera entrada válida de esta lista. Se ignorarán los métodos no válidos o no admitidos.</translation> <translation id="5417906792459853336">Enviar información sobre el uso y el inventario de aplicaciones de un dispositivo. Si se asigna el valor "false" a esta política o no se establece ninguno, no se enviará esta información. @@ -3839,6 +3850,7 @@ Los datos vitales del producto (VPD, Vital Product Data) son un conjunto de datos de configuración e informativos (como los números de serie) asociados al dispositivo.</translation> <translation id="5765780083710877561">Descripción:</translation> <translation id="5766438888216077649">No utilices <ph name="WINDOW_OPENER_PROPERTY" /> en enlaces destinados a <ph name="BLANK_PAGE_NAME" /></translation> +<translation id="5767776869128458023">Inhabilitar páginas de error alternativas</translation> <translation id="5770738360657678870">Canal de desarrolladores (puede ser inestable)</translation> <translation id="5774856474228476867">URL de búsqueda del proveedor de búsquedas predeterminadas</translation> <translation id="5775235485119094648">Carga la batería mientras está dentro de un intervalo determinado.</translation>
diff --git a/components/policy/resources/policy_templates_fr.xtb b/components/policy/resources/policy_templates_fr.xtb index 7d5420d..75a3aa0 100644 --- a/components/policy/resources/policy_templates_fr.xtb +++ b/components/policy/resources/policy_templates_fr.xtb
@@ -3203,7 +3203,6 @@ <translation id="5055474681190962362">Jour du mois [1-31] (interprété dans le fuseau horaire local de l'appareil) où l'appareil doit redémarrer. Utilisé uniquement quand "frequency" est défini sur "MONTHLY". Si le nombre maximal de jours dans un mois donné est dépassé, le dernier jour de ce mois est sélectionné.</translation> <translation id="5056708224511062314">Loupe désactivée</translation> <translation id="5058573563327660283">Sélectionner la stratégie utilisée pour libérer de l'espace disque au cours du nettoyage automatique (obsolète)</translation> -<translation id="5059201920681374653">Les comptes gérés doivent être sur un appareil géré affilié</translation> <translation id="5061114193960158745">Permet d'établir la liste des sites Web qui ne déclencheront jamais de changement de navigateur. Chaque élément est traité comme une instruction. Les instructions pour lesquelles il y a une correspondance ne déclenchent pas l'ouverture d'un navigateur secondaire. Contrairement à la règle <ph name="URL_LIST_POLICY_NAME" />, les instructions s'appliquent dans les deux sens. Lorsque le module complémentaire d'<ph name="IE_PRODUCT_NAME" /> est activé, il contrôle également si <ph name="IE_PRODUCT_NAME" /> doit ouvrir ou non ces URL dans <ph name="PRODUCT_NAME" />. Si cette règle n'est pas configurée, aucun site Web n'est ajouté à la liste.
diff --git a/components/policy/resources/policy_templates_id.xtb b/components/policy/resources/policy_templates_id.xtb index 0027d0940..31c0794 100644 --- a/components/policy/resources/policy_templates_id.xtb +++ b/components/policy/resources/policy_templates_id.xtb
@@ -3234,7 +3234,6 @@ <translation id="5055474681190962362">Hari dalam sebulan [1-31] saat mulai ulang harus dilakukan, disesuaikan dengan zona waktu lokal perangkat. Hanya digunakan saat 'frequency'-nya 'MONTHLY'. Jika lebih dari jumlah hari maksimum dalam bulan tertentu, hari terakhir bulan itu akan dipilih.</translation> <translation id="5056708224511062314">Lup dinonaktifkan</translation> <translation id="5058573563327660283">Pilih strategi yang digunakan untuk mengosongkan ruang disk selama pembersihan otomatis (tidak digunakan lagi)</translation> -<translation id="5059201920681374653">Akun terkelola harus berada di perangkat terkelola yang berafiliasi</translation> <translation id="5061114193960158745">Menyetel kebijakan akan mengontrol daftar situs yang tidak pernah menyebabkan pengalihan browser. Setiap item diperlakukan sebagai aturan. Aturan yang cocok tidak akan membuka browser alternatif. Tidak seperti kebijakan <ph name="URL_LIST_POLICY_NAME" />, aturan berlaku untuk kedua arah. Jika diaktifkan, add-in <ph name="IE_PRODUCT_NAME" /> juga akan mengontrol apakah <ph name="IE_PRODUCT_NAME" /> harus membuka URL ini di <ph name="PRODUCT_NAME" />. Jika kebijakan tidak disetel, tidak ada situs yang akan ditambahkan ke daftar.
diff --git a/components/policy/resources/policy_templates_it.xtb b/components/policy/resources/policy_templates_it.xtb index cb7b6db..6397b7e1 100644 --- a/components/policy/resources/policy_templates_it.xtb +++ b/components/policy/resources/policy_templates_it.xtb
@@ -3199,7 +3199,6 @@ <translation id="5055474681190962362">Il giorno del mese [1-31] in cui dovrebbe essere eseguito il riavvio, nel fuso orario locale del dispositivo. Questo criterio viene usato soltanto se il valore del criterio "frequency" è "MONTHLY". Se questo numero supera il numero di giorni massimo presente in un mese specifico, verrà scelto l'ultimo giorno del mese.</translation> <translation id="5056708224511062314">Ingrandimento dello schermo disattivato</translation> <translation id="5058573563327660283">Seleziona la strategia da utilizzare per liberare spazio su disco durante la pulizia automatica (obsoleta)</translation> -<translation id="5059201920681374653">Gli account gestiti devono trovarsi un su dispositivo gestito affiliato</translation> <translation id="5061114193960158745">Questo criterio consente di stabilire l'elenco di siti web che non causeranno mai un cambio di browser. Ogni elemento è considerato come una regola. Le regole con una corrispondenza non aprono un browser alternativo. A differenza del criterio <ph name="URL_LIST_POLICY_NAME" />, le regole vengono applicate in entrambe le direzioni. Quando il componente aggiuntivo <ph name="IE_PRODUCT_NAME" /> è attivo, il criterio consente di stabilire anche se <ph name="IE_PRODUCT_NAME" /> deve aprire questi URL in <ph name="PRODUCT_NAME" />. Se il criterio non viene impostato, non viene aggiunto alcun sito web all'elenco.
diff --git a/components/policy/resources/policy_templates_ja.xtb b/components/policy/resources/policy_templates_ja.xtb index e3b9d5a..4a564a6f 100644 --- a/components/policy/resources/policy_templates_ja.xtb +++ b/components/policy/resources/policy_templates_ja.xtb
@@ -3134,7 +3134,6 @@ <translation id="5055474681190962362">再起動する日付 [1-31](デバイスのローカル タイムゾーン)です。frequency が「MONTHLY」に指定されている場合にのみ使用されます。値が対象月の最大日数を上回った場合は、その月末日が使用されます。</translation> <translation id="5056708224511062314">画面拡大鏡を無効にする</translation> <translation id="5058573563327660283">自動クリーンアップ時にディスクの空き容量を増やす方法を選択する(サポート終了)</translation> -<translation id="5059201920681374653">管理対象アカウントを関連する管理対象デバイス上のアカウントのみとする</translation> <translation id="5061114193960158745">このポリシーの設定により、ブラウザの切り替えを行わないウェブサイトのリストを管理します。個々のアイテムはルールとして扱われます。このルールに一致すると、代替ブラウザは開かれません。<ph name="URL_LIST_POLICY_NAME" /> ポリシーとは異なり、ルールは双方向に適用されます。<ph name="IE_PRODUCT_NAME" /> アドインが有効になっている場合は、<ph name="IE_PRODUCT_NAME" /> でこれらの URL を開くときに <ph name="PRODUCT_NAME" /> を使用するかどうかもこのポリシーで制御されます。 このポリシーを未設定のままにした場合、リストにウェブサイトは追加されません。
diff --git a/components/policy/resources/policy_templates_ko.xtb b/components/policy/resources/policy_templates_ko.xtb index a2f0d76..191bf8d1 100644 --- a/components/policy/resources/policy_templates_ko.xtb +++ b/components/policy/resources/policy_templates_ko.xtb
@@ -3222,7 +3222,6 @@ <translation id="5055474681190962362">재부팅이 이루어져야 하는 날짜[1~31일]로, 기기의 현지 시간대로 변환됩니다. 'frequency'가 'MONTHLY'인 경우에만 사용됩니다. 특정 월에 최대 일 수보다 큰 경우 해당 월의 마지막 날이 선택됩니다.</translation> <translation id="5056708224511062314">화면 돋보기 사용 중지됨</translation> <translation id="5058573563327660283">자동 정리 중 디스크 공간 확보에 사용할 방법 선택(지원 중단됨)</translation> -<translation id="5059201920681374653">관리 계정은 연결된 관리 기기에 있어야 합니다.</translation> <translation id="5061114193960158745">이 정책을 설정하면 브라우저 전환을 실행하지 않을 웹사이트 목록을 제어합니다. 각 항목은 규칙으로 취급됩니다. 규칙이 일치하면 대체 브라우저가 열리지 않습니다. <ph name="URL_LIST_POLICY_NAME" /> 정책과 달리 규칙이 양방향으로 적용됩니다. <ph name="IE_PRODUCT_NAME" /> 부가기능이 사용 설정되어 있으면 정책이 <ph name="IE_PRODUCT_NAME" />에서 <ph name="PRODUCT_NAME" />을 통해 이러한 URL을 열어야 하는지도 제어합니다. 정책을 설정하지 않으면 목록에 아무 웹사이트도 추가되지 않습니다.
diff --git a/components/policy/resources/policy_templates_nl.xtb b/components/policy/resources/policy_templates_nl.xtb index c9510fa..806e134 100644 --- a/components/policy/resources/policy_templates_nl.xtb +++ b/components/policy/resources/policy_templates_nl.xtb
@@ -512,6 +512,7 @@ Als je dit beleid niet toepast of niet instelt, worden de waarschuwingen weergeven op niet-ondersteunde systemen.</translation> <translation id="1634989431648355062">De <ph name="FLASH_PLUGIN_NAME" />-plug-in toestaan op deze sites</translation> +<translation id="1639468541408865385">HTTP-verificatiecache met wereldwijd bereik aanzetten</translation> <translation id="1641394008743444477">Hiermee kun je een lijst van <ph name="PRODUCT_OS_NAME" />-functies instellen die worden uitgezet. Als je een van deze functies uitzet, heeft de gebruiker hiertoe geen toegang meer vanuit de UI en wordt de functie weergegeven als Uitgezet door beheerder. De gebruikerservaring voor uitgezette functies wordt bepaald door <ph name="SYSTEM_FEATURES_DISABLE_MODE" /> @@ -550,6 +551,7 @@ Als dit beleid niet is ingesteld, mislukt de installatie van <ph name="PLUGIN_VM_NAME" /> als de beschikbare vrije opslagruimte op het apparaat minder is dan 20 GB (standaardwaarde). Als dit beleid is ingesteld, mislukt de installatie van <ph name="PLUGIN_VM_NAME" /> als de beschikbare vrije opslagruimte op het apparaat minder is dan de waarde die wordt vereist door het beleid.</translation> <translation id="1690383938831887552">Niet toestaan dat Signed HTTP Exchanges worden geladen</translation> +<translation id="169467210981344373">HTTP-verificatiecache met wereldwijd bereik uitzetten</translation> <translation id="1700458869527146675">Als je het beleid instelt, bepaal je de proxyinstellingen voor Chrome en ARC-apps, die alle proxygerelateerde opties negeren die via de opdrachtregel worden opgegeven. Als je het beleid niet instelt, kunnen gebruikers hun proxyinstellingen kiezen. @@ -573,6 +575,7 @@ Opmerking: Voor gedetailleerdere voorbeelden ga je naar The Chromium Projects ( https://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett ).</translation> <translation id="1700811900332333712">Geef het apparaat toestemming om Powerwash te activeren</translation> <translation id="1708496595873025510">De beperking voor het ophalen van de seed voor varianten instellen</translation> +<translation id="1709154322133526432">De check voor de standaardbrowser bij het opstarten aanzetten</translation> <translation id="1713829924716792485">Als je dit beleid toepast of niet instelt, kunnen gebruikers die met een host voor externe toegang zijn verbonden, bestanden overzetten tussen de client en de host. Dit is niet van toepassing op verbindingen voor hulp op afstand, die geen bestandsoverdracht ondersteunen. Als je het beleid niet toepast, is er geen bestandsoverdracht toegestaan.</translation> @@ -825,6 +828,7 @@ <translation id="2037214548071298156">Als je het beleid toepast of niet instelt, rapporteren ingeschreven apparaten hardwarestatistieken, zoals het CPU/RAM-gebruik. Als je het beleid niet toepast, rapporteren ingeschreven apparaten de hardwarestatistieken niet.</translation> +<translation id="2039801473506609891">Ondersteuning voor HTTP/0.9 op niet-standaardpoorten uitzetten</translation> <translation id="2040479044912658454">Modus voor afdrukrastering</translation> <translation id="2042513383871755994">Als je het beleid instelt, kun je een lijst met URL-patronen maken om op te geven welke sites gebruikers niet mogen vragen om hun leestoegang te geven tot bestanden en directory's in het bestandssysteem van het besturingssysteem van de host via de File System API. @@ -1125,6 +1129,7 @@ Als je <ph name="CRITICAL_VARIATIONS_ONLY_OPTION_NAME" /> (waarde 1) instelt, mogen alleen varianten die worden beschouwd als essentiële beveiligings- of stabiliteitsoplossingen, worden toegepast op <ph name="PRODUCT_NAME" />. Als je <ph name="VARIATIONS_DISABLED_OPTION_NAME" /> (waarde 2) instelt, mag geen van de varianten worden toegepast op de browser. Deze modus kan er potentieel voor zorgen dat <ph name="PRODUCT_NAME" />-ontwikkelaars essentiële beveiligingsoplossingen niet tijdig kunnen leveren en wordt dus niet aanbevolen.</translation> +<translation id="2402547085566757554">Pagina Nieuw tabblad niet gebruiken als homepage</translation> <translation id="2411629345938804022">Als je het beleid instelt op 3, kunnen websites vragen om toegang tot bluetooth-apparaten in de buurt. Als je het beleid instelt op 2, wordt de toegang tot bluetooth-apparaten in de buurt geblokkeerd. Als je het beleid niet instelt, kunnen sites om toegang vragen maar kunnen gebruikers deze instelling wijzigen.</translation> @@ -1407,6 +1412,7 @@ <translation id="2716623398185506073">Als je het beleid toepast, rapporteren ingeschreven apparaten hardwarestatistieken en ID's met betrekking tot de stroomstatus. Als je dit beleid niet toepast of niet instelt, rapporteren ingeschreven apparaten geen statistieken met betrekking tot de stroomstatus.</translation> +<translation id="2721185634942265347">Zoeksuggesties uitzetten</translation> <translation id="2723692978495226412">Als je dit beleid toepast, worden aanbevelingen gedaan voor apps die de gebruiker eerder heeft geïnstalleerd op andere apparaten. Deze aanbevelingen worden in de Launcher weergegeven na de aanbevelingen voor lokale apps als er geen zoektekst is ingevoerd. Als je het beleid niet toepast of niet instelt, worden deze aanbevelingen niet weergegeven. @@ -1665,6 +1671,7 @@ Dit beleid heeft geen invloed op al uitgebrachte beleidsregels.</translation> <translation id="3016255526521614822">Notitie-apps die zijn toegestaan op het <ph name="PRODUCT_OS_NAME" />-vergrendelscherm toevoegen aan de witte lijst</translation> <translation id="3017578958356048910">De pdf-viewer mag pdf's annoteren</translation> +<translation id="3020623128585817424">De check voor de standaardbrowser bij het opstarten uitzetten</translation> <translation id="3020953534071988875">Als je dit beleid instelt, wordt Ambient-verificatie voor incognito- en gastprofielen toegestaan/niet toegestaan in <ph name="PRODUCT_NAME" />. Ambient-verificatie is HTTP-verificatie met standaardgegevens als er geen expliciete gegevens worden verstrekt via uitdaging/reactie-schema's van NTLM/Kerberos/Negotiate. @@ -3172,7 +3179,6 @@ <translation id="5055474681190962362">Dag van de maand [1-31] waarop opnieuw moet worden opgestart, geïnterpreteerd in de lokale tijdzone van het apparaat. Alleen gebruikt als 'frequency' is ingesteld op MONTHLY. Is dit meer dan het maximumaantal dagen in een bepaalde maand, dan wordt de laatste dag van de maand gekozen.</translation> <translation id="5056708224511062314">Vergrootglas staat uit</translation> <translation id="5058573563327660283">De strategie selecteren die wordt gebruikt om schijfruimte vrij te maken tijdens het automatisch opschonen (verouderd)</translation> -<translation id="5059201920681374653">Beheerde accounts moeten op een aangesloten beheerd apparaat staan</translation> <translation id="5061114193960158745">Met dit beleid wordt de lijst met websites bepaald die nooit een schakeling tussen browsers veroorzaken. Elk item wordt als regel behandeld. Bij overeenkomende regels wordt er geen alternatieve browser geopend. Anders dan bij het beleid <ph name="URL_LIST_POLICY_NAME" /> zijn de regels in beide richtingen van toepassing. Als de add-in van <ph name="IE_PRODUCT_NAME" /> aanstaat, bepaalt deze ook of <ph name="IE_PRODUCT_NAME" /> deze URL's moet openen in <ph name="PRODUCT_NAME" />. Als je het beleid niet instelt, worden er geen websites aan de lijst toegevoegd. @@ -3447,6 +3453,11 @@ Als dit beleid is ingesteld op een lijst met invoermethode-ID's, zijn de opgegeven invoermethoden beschikbaar in het inlogscherm. De eerste opgegeven invoermethode wordt vooraf geselecteerd. Hoewel een gebruikerspod is gericht op het inlogscherm, is de laatst gebruikte invoermethode van de gebruiker beschikbaar naast de invoermethoden die door dit beleid worden aangegeven. Als dit beleid niet is ingesteld, worden de invoermethoden op het inlogscherm afgeleid van de taal waarin het inlogscherm zichtbaar is. Waarden die geen geldige invoermethode-ID's zijn, worden genegeerd.</translation> <translation id="5407008856008996384">Toegang tot CUPS-printers toestaan</translation> +<translation id="5417597818300833094">Als je het beleid instelt, kunnen gebruikers een van de invoermethoden voor <ph name="PRODUCT_OS_NAME" />-sessies kiezen die je opgeeft. + + Als je het beleid niet instelt of instelt op een lege lijst, kunnen gebruikers alle ondersteunde invoermethoden selecteren. + + Opmerking: Als de huidige invoermethode niet wordt ondersteund, wordt de invoermethode overgeschakeld naar het hardwaretoetsenbord (indien toegestaan) of het eerste geldige item in deze lijst. Ongeldige of niet-ondersteunde methoden worden genegeerd.</translation> <translation id="5417906792459853336">Gegevens rapporteren over de app-voorraad en het gebruik van een apparaat. Als het beleid is ingesteld op False of niet is ingesteld, worden de gegevens niet gerapporteerd. @@ -3767,6 +3778,7 @@ VPD (Vital Product Data) is een verzameling configuratiegegevens en informatie, zoals onderdeel- en serienummers, die bij het apparaat horen.</translation> <translation id="5765780083710877561">Beschrijving:</translation> <translation id="5766438888216077649"><ph name="WINDOW_OPENER_PROPERTY" /> niet instellen voor links die <ph name="BLANK_PAGE_NAME" /> targeten</translation> +<translation id="5767776869128458023">Alternatieve foutpagina's uitzetten</translation> <translation id="5770738360657678870">Ontwikkelaarskanaal (mogelijk instabiel)</translation> <translation id="5774856474228476867">Zoek-URL voor standaardzoekprovider</translation> <translation id="5775235485119094648">Laad de batterij op wanneer de lading zich binnen een bepaald bereik bevindt.</translation>
diff --git a/components/policy/resources/policy_templates_pt-BR.xtb b/components/policy/resources/policy_templates_pt-BR.xtb index 8893045..7665946 100644 --- a/components/policy/resources/policy_templates_pt-BR.xtb +++ b/components/policy/resources/policy_templates_pt-BR.xtb
@@ -3217,7 +3217,6 @@ <translation id="5055474681190962362">Dia do mês [1-31] em que a reinicialização acontecerá, interpretado no fuso horário local do dispositivo. Usado apenas quando "frequency" for definido como "MONTHLY". Caso seja maior que o número máximo de dias de um mês específico, o último dia do mês será usado.</translation> <translation id="5056708224511062314">Lupa desativada</translation> <translation id="5058573563327660283">Selecionar a estratégia usada para liberar espaço em disco durante a limpeza automática (obsoleta)</translation> -<translation id="5059201920681374653">As contas gerenciadas precisam estar conectadas em um dispositivo gerenciado afiliado</translation> <translation id="5061114193960158745">A definição a política controla a lista de sites que nunca causarão uma troca de navegador. Cada item é tratado como uma regra. As regras correspondentes não abrirão um navegador alternativo. Ao contrário da política <ph name="URL_LIST_POLICY_NAME" />, as regras se aplicam nas duas direções. Quando o suplemento do <ph name="IE_PRODUCT_NAME" /> estiver ativado, ele também controlará se o <ph name="IE_PRODUCT_NAME" /> abrirá os URLs no <ph name="PRODUCT_NAME" />. Se a política não for definida, nenhum site será adicionado à lista.
diff --git a/components/policy/resources/policy_templates_ru.xtb b/components/policy/resources/policy_templates_ru.xtb index 8bab5f6..a498c366 100644 --- a/components/policy/resources/policy_templates_ru.xtb +++ b/components/policy/resources/policy_templates_ru.xtb
@@ -3197,7 +3197,6 @@ <translation id="5055474681190962362">День месяца [1–31], когда должна произойти перезагрузка, в соответствии с часовым поясом, заданным на устройстве. Применимо, если для частоты задано значение MONTHLY. Если значение больше, чем максимальное количество дней в данном месяце, будет выбран последний день месяца.</translation> <translation id="5056708224511062314">Экранная лупа отключена</translation> <translation id="5058573563327660283">Выбор стратегии удаления данных при автоматической очистке диска (устаревшее правило)</translation> -<translation id="5059201920681374653">Управляемые аккаунты должны располагаться на связанном управляемом устройстве</translation> <translation id="5061114193960158745">Это правило определяет список сайтов, которые никогда не должны открываться в другом браузере. Каждый элемент обрабатывается как отдельное правило. Сайты, которые соответствуют указанным элементам, не открываются в альтернативном браузере. В отличие от <ph name="URL_LIST_POLICY_NAME" /> заданные здесь элементы-правила применяются в обоих браузерах. Таким образом, если включено дополнение <ph name="IE_PRODUCT_NAME" />, оно определяет, должен ли браузер <ph name="IE_PRODUCT_NAME" /> открывать указанные сайты в <ph name="PRODUCT_NAME" />. Если правило не настроено, список остается пустым.
diff --git a/components/policy/resources/policy_templates_th.xtb b/components/policy/resources/policy_templates_th.xtb index c2fa146..ce752cb2 100644 --- a/components/policy/resources/policy_templates_th.xtb +++ b/components/policy/resources/policy_templates_th.xtb
@@ -3167,7 +3167,6 @@ <translation id="5055474681190962362">วันที่ของเดือน [1-31] ที่ควรมีการรีบูต โดยตีความในเขตเวลาท้องถิ่นของอุปกรณ์ ใช้เมื่อ "frequency" เท่ากับ "MONTHLY" เท่านั้น หากต้องการระบุจำนวนที่มากกว่าจำนวนวันสูงสุดในเดือนหนึ่งๆ ให้เลือกวันสุดท้ายของเดือน</translation> <translation id="5056708224511062314">ปิดใช้งานแว่นขยายหน้าจอ</translation> <translation id="5058573563327660283">เลือกกลยุทธ์ที่ใช้ในการเพิ่มพื้นที่ว่างของดิสก์ระหว่างการล้างข้อมูลอัตโนมัติ (เลิกใช้แล้ว)</translation> -<translation id="5059201920681374653">บัญชีที่จัดการต้องอยู่ในอุปกรณ์ที่มีการจัดการที่เชื่อมโยง</translation> <translation id="5061114193960158745">การตั้งค่านโยบายจะควบคุมรายการเว็บไซต์ที่จะไม่ทำให้มีการเปลี่ยนเบราว์เซอร์ ระบบจะถือว่ารายการย่อยแต่ละรายการเป็นกฎ กฎที่ตรงกันจะไม่เปิดเบราว์เซอร์สำรอง ซึ่งต่างจากนโยบาย <ph name="URL_LIST_POLICY_NAME" /> ที่กฎต่างๆ จะใช้กับทั้ง 2 ทาง เมื่อ Add-in ของ <ph name="IE_PRODUCT_NAME" /> เปิดอยู่ ก็จะเป็นตัวควบคุมด้วยว่า <ph name="IE_PRODUCT_NAME" /> ควรเปิด URL เหล่านี้ใน <ph name="PRODUCT_NAME" /> หรือไม่ การไม่ตั้งค่านโยบายนี้จะไม่เพิ่มเว็บไซต์ลงในรายการ
diff --git a/components/policy/resources/policy_templates_tr.xtb b/components/policy/resources/policy_templates_tr.xtb index f2069b5a..416dcce 100644 --- a/components/policy/resources/policy_templates_tr.xtb +++ b/components/policy/resources/policy_templates_tr.xtb
@@ -3198,7 +3198,6 @@ <translation id="5055474681190962362">Cihazın ayın hangi gününde [1-31] yeniden başlatılması gerektiği (cihazın yerel saat dilimine göre). Yalnızca "sıklık", "AYLIK" olarak ayarlandığında kullanılır. Bu sayı, belirli bir aydaki maksimum gün sayısından fazlaysa ayın son günü seçilir.</translation> <translation id="5056708224511062314">Ekran büyüteci devre dışı</translation> <translation id="5058573563327660283">Otomatik temizlik sırasında disk alanı boşaltmak için kullanılan stratejiyi seç (kullanımdan kaldırıldı)</translation> -<translation id="5059201920681374653">Yönetilen hesaplar, ilişkili yönetilen cihazlarda bulunlmalıdır</translation> <translation id="5061114193960158745">Bu politika, hiçbir zaman tarayıcı geçişine neden olmayacak web sitelerinin listesini kontrol eder. Her öğe bir kural olarak ele alınır. Eşleşen kurallar alternatif bir tarayıcı açmaz. <ph name="URL_LIST_POLICY_NAME" /> politikasından farklı olarak, kurallar her iki yönde de uygulanır. <ph name="IE_PRODUCT_NAME" /> eklentisi etkinse aynı zamanda <ph name="IE_PRODUCT_NAME" /> tarayıcısının bu URL'leri <ph name="PRODUCT_NAME" /> ile açıp açmayacağını da kontrol eder. Politika ayarlanmadan bırakılırsa web siteleri listeye eklenmez.
diff --git a/components/policy/resources/policy_templates_uk.xtb b/components/policy/resources/policy_templates_uk.xtb index c30e9abf..2ffb314e 100644 --- a/components/policy/resources/policy_templates_uk.xtb +++ b/components/policy/resources/policy_templates_uk.xtb
@@ -510,6 +510,7 @@ Якщо це правило вимкнено або не налаштовано, у непідтримуваних системах з'являтиметься попередження.</translation> <translation id="1634989431648355062">Дозволити плагін <ph name="FLASH_PLUGIN_NAME" /> на цих сайтах</translation> +<translation id="1639468541408865385">Увімкнути глобальний кеш автентифікації HTTP</translation> <translation id="1641394008743444477">Дає змогу налаштувати перелік функцій <ph name="PRODUCT_OS_NAME" />, які буде вимкнено. Якщо вимкнути ці функції, користувач не матиме доступу до них в інтерфейсі й бачитиме повідомлення "Вимкнено адміністратором". Взаємодію вимкнених функцій із користувачами визначає правило <ph name="SYSTEM_FEATURES_DISABLE_MODE" /> @@ -548,6 +549,7 @@ Якщо це правило не налаштовано, а на диску є менше ніж 20 ГБ (значення за умовчанням) вільного місця, <ph name="PLUGIN_VM_NAME" /> не буде встановлено. Якщо це правило налаштовано, <ph name="PLUGIN_VM_NAME" /> не буде встановлено, коли на диску буде менше вільного місця, ніж указано в правилі.</translation> <translation id="1690383938831887552">Заборонити завантаження за допомогою технології Signed HTTP Exchange</translation> +<translation id="169467210981344373">Вимкнути глобальний кеш автентифікації HTTP</translation> <translation id="1700458869527146675">За допомогою налаштувань цього правила можна вибрати параметри проксі для Chrome і додатків ARC, які ігнорують усі опції проксі, указані в командному рядку. Якщо не налаштувати це правило, користувачі зможуть самостійно вибирати параметри проксі. @@ -571,6 +573,7 @@ Примітка: щоб переглянути детальніші приклади, відвідайте веб-сайт проектів Chromium (https://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett).</translation> <translation id="1700811900332333712">Дозволити пристрою надсилати запит на запуск Powerwash</translation> <translation id="1708496595873025510">Установити обмеження щодо отримання початкового числа Варіацій</translation> +<translation id="1709154322133526432">Увімкнути перевірку веб-переглядача за умовчанням під час запуску</translation> <translation id="1713829924716792485">Якщо це правило ввімкнено або не налаштовано, користувачі з віддаленим доступом до хосту можуть переносити файли між клієнтом і хостом. Це не стосується з'єднань для віддаленої допомоги, що не підтримують перенесення файлів. Якщо це правило вимкнено, перенесення файлів заборонене.</translation> @@ -840,6 +843,7 @@ <translation id="2037214548071298156">Якщо це правило ввімкнено або не налаштовано, зареєстровані пристрої надсилатимуть статистику апаратного забезпечення, наприклад дані про використання ЦП чи оперативної пам'яті. Якщо це правило вимкнено, зареєстровані пристрої не надсилатимуть такі дані.</translation> +<translation id="2039801473506609891">Вимкнути підтримку протоколу HTTP/0.9 для нестандартних портів</translation> <translation id="2040479044912658454">Режим растеризації друку</translation> <translation id="2042513383871755994">За допомогою цього правила можна вказати список шаблонів URL-адрес, що визначають сайти, яким заборонено запитувати дозвіл на перегляд файлів чи каталогів у файловій системі ОС хосту через File System API. @@ -1142,6 +1146,7 @@ Якщо вибрано параметр <ph name="CRITICAL_VARIATIONS_ONLY_OPTION_NAME" /> (значення 1), до <ph name="PRODUCT_NAME" /> можна застосовувати лише варіанти, які вважаються важливими виправленнями системи безпеки або стабільності. Якщо вибрано параметр <ph name="VARIATIONS_DISABLED_OPTION_NAME" /> (значення 2), жодний варіант не застосовуватиметься до веб-переглядача. Зауважте, що в цьому режимі розробники <ph name="PRODUCT_NAME" /> можуть не мати змоги вчасно надавати важливі виправлення системи безпеки, тому ми не радимо його вмикати.</translation> +<translation id="2402547085566757554">Не робити сторінку нової вкладки головною сторінкою</translation> <translation id="2411629345938804022">Якщо для цього правила вибрано значення 3, веб-сайти зможуть запитувати дозвіл на доступ до пристроїв із Bluetooth неподалік. Якщо для нього вибрано начення 2, доступ до пристроїв із Bluetooth неподалік буде заблоковано. Якщо це правило не налаштовано, сайти зможуть запитувати дозвіл, але користувачі матимуть можливість змінити цей параметр.</translation> @@ -1437,6 +1442,7 @@ <translation id="2716623398185506073">Якщо це правило ввімкнено, зареєстровані пристрої надсилатимуть статистику апаратного забезпечення й ідентифікатори, пов'язані з живленням. Якщо це правило вимкнено або не налаштовано, зареєстровані пристрої не надсилатимуть такі дані.</translation> +<translation id="2721185634942265347">Вимкнути підказки в пошуку</translation> <translation id="2723692978495226412">Якщо це правило ввімкнено, з'являтимуться рекомендації додатків, які користувач раніше встановив на інших пристроях. Вони відображатимуться на панелі запуску після рекомендацій локальних додатків, якщо користувач не введе пошуковий запит. Якщо це правило вимкнено або не налаштовано, ці рекомендації не з'являтимуться. @@ -1702,6 +1708,7 @@ Це правило не впливає на вже випущені правила.</translation> <translation id="3016255526521614822">Додатки для нотаток, дозволені на заблокованому екрані <ph name="PRODUCT_OS_NAME" /></translation> <translation id="3017578958356048910">Засіб перегляду PDF може додавати примітки у файлах PDF</translation> +<translation id="3020623128585817424">Вимкнути перевірку веб-переглядача за умовчанням під час запуску</translation> <translation id="3020953534071988875">Якщо налаштувати це правило, у <ph name="PRODUCT_NAME" /> буде ввімкнено/вимкнено фонову автентифікацію для гостьових і анонімних профілів. Фонова автентифікація – це автентифікація HTTP за допомогою облікових даних за умовчанням, якщо конкретні облікові дані не надано через схему виклик-відповідь NTLM, Kerberos або Negotiate. @@ -3231,7 +3238,6 @@ <translation id="5055474681190962362">День місяця [1–31], коли має відбутися перезапуск (за встановленим на пристрої місцевим часовим поясом). Використовується, лише якщо для параметра frequency вибрано значення MONTHLY. Якщо значення більше за максимальну кількість днів у певному місяці, буде вибрано його останній день.</translation> <translation id="5056708224511062314">Лупу вимкнено</translation> <translation id="5058573563327660283">Вибирати, які дані видалятимуться під час автоматичного очищення диска (більше не підтримується)</translation> -<translation id="5059201920681374653">Керовані облікові записи мають бути на афілійованому керованому пристрої</translation> <translation id="5061114193960158745">Налаштування цього правила керують списком веб-сайтів, які ніколи не ініціюють перехід в інший веб-переглядач. Кожний елемент вважається правилом. Правила, які збігаються, не відкриватимуть альтернативний веб-переглядач. На відміну від <ph name="URL_LIST_POLICY_NAME" />, правила застосовуються в обох напрямках. Якщо доповнення <ph name="IE_PRODUCT_NAME" /> увімкнено, воно також визначає, чи <ph name="IE_PRODUCT_NAME" /> відкриватиме ці URL-адреси в <ph name="PRODUCT_NAME" />. Якщо це правило не налаштовано, у список не додається жодний веб-сайт. @@ -3506,6 +3512,11 @@ Якщо для правила вказано список ідентифікаторів методів введення, ці методи будуть доступні на екрані входу. Перший указаний метод буде вибрано за умовчанням. Коли рядок введення на екрані входу активний, разом із дозволеними цим правилом методами введення буде доступний останній метод введення, вибраний користувачем. Якщо правило не налаштовано, методи введення буде вибрано на основі мовного коду, який використовується на екрані входу. Недійсні ідентифікатори методів введення ігноруються.</translation> <translation id="5407008856008996384">Дозволити доступ до принтерів CUPS</translation> +<translation id="5417597818300833094">Якщо налаштувати це правило, користувачі зможуть вибирати один з указаних вами методів введення для <ph name="PRODUCT_OS_NAME" />. + + Якщо це правило не налаштувати або вказати для нього порожній список, користувачі можуть вибрати будь-який підтримуваний метод введення. + + Примітка: якщо поточний метод введення не підтримується, вмикається розкладка клавіатури апаратного забезпечення (якщо це дозволено) або перший дійсний метод у списку. Недійсні або непідтримувані методи ігноруються.</translation> <translation id="5417906792459853336">Повідомляти дані про використання пристрою та додатки на ньому. Якщо для цього правила вибрано значення false або його не налаштовано, інформація не надсилатиметься. @@ -3836,6 +3847,7 @@ Важливі дані про продукт (VPD) – це набір пов'язаних із пристроєм параметрів та інформації (як-от номер деталі або серійний номер).</translation> <translation id="5765780083710877561">Опис:</translation> <translation id="5766438888216077649">Не вказуйте для параметра <ph name="WINDOW_OPENER_PROPERTY" /> посилання, націлені на <ph name="BLANK_PAGE_NAME" /></translation> +<translation id="5767776869128458023">Вимкнути альтернативні сторінки з помилками</translation> <translation id="5770738360657678870">Версія для розробників (може бути нестабільною)</translation> <translation id="5774856474228476867">URL-адреса для пошуку пошукової служби за умовчанням</translation> <translation id="5775235485119094648">Заряджати акумулятор, коли досягнуто вказаного діапазону.</translation>
diff --git a/components/policy/resources/policy_templates_vi.xtb b/components/policy/resources/policy_templates_vi.xtb index 33c1249..a6b059cf 100644 --- a/components/policy/resources/policy_templates_vi.xtb +++ b/components/policy/resources/policy_templates_vi.xtb
@@ -3230,7 +3230,6 @@ <translation id="5055474681190962362">Ngày trong tháng [1-31] nên khởi động lại thiết bị (diễn giải theo múi giờ địa phương trên thiết bị). Chỉ được dùng khi "tần suất" là "MONTHLY". Nếu con số này lớn hơn số ngày tối đa trong một tháng cụ thể, thì ngày cuối cùng trong tháng đó sẽ được chọn.</translation> <translation id="5056708224511062314">Đã tắt kính lúp màn hình</translation> <translation id="5058573563327660283">Lựa chọn chiến lược dùng để giải phóng dung lượng đĩa trong khi dọn sạch tự động (không dùng nữa)</translation> -<translation id="5059201920681374653">Các tài khoản được quản lý phải ở trên một thiết bị liên kết được quản lý</translation> <translation id="5061114193960158745">Nếu bạn đặt chính sách này, thì hệ thống sẽ kiểm soát danh sách các trang web không bao giờ gây ra tình trạng chuyển đổi trình duyệt. Mỗi mục được coi là một quy tắc. Những quy tắc trùng khớp sẽ không mở trình duyệt thay thế. Không giống như chính sách <ph name="URL_LIST_POLICY_NAME" />, các quy tắc sẽ được áp dụng cho cả hai chiều. Khi phần bổ trợ <ph name="IE_PRODUCT_NAME" /> đang bật, chính sách này cũng sẽ kiểm soát việc <ph name="IE_PRODUCT_NAME" /> có mở những URL này trong <ph name="PRODUCT_NAME" /> hay không. Nếu bạn không đặt chính sách này, thì hệ thống sẽ không thêm trang web nào vào danh sách này.
diff --git a/components/policy/resources/policy_templates_zh-CN.xtb b/components/policy/resources/policy_templates_zh-CN.xtb index d5bb3b9..b38285b8 100644 --- a/components/policy/resources/policy_templates_zh-CN.xtb +++ b/components/policy/resources/policy_templates_zh-CN.xtb
@@ -3164,7 +3164,6 @@ <translation id="5055474681190962362">应在每月的哪一天 [1-31](以设备的本地时区表示)重新启动设备。仅在“频率”设为“MONTHLY”时使用。如果此值超出给定月份的天数上限,系统将选择该月的最后一天。</translation> <translation id="5056708224511062314">放大镜已停用</translation> <translation id="5058573563327660283">选择在自动清理期间释放磁盘空间时采用的策略(已弃用)</translation> -<translation id="5059201920681374653">受管理的帐号必须在关联的受管设备上</translation> <translation id="5061114193960158745">通过设置此政策,您可以控制哪些网站始终不会导致切换浏览器。网站列表中的每项内容都会被视为一条规则。有匹配项的规则将不会打开备用浏览器。与 <ph name="URL_LIST_POLICY_NAME" /> 政策不同的是,此政策中的规则双向适用。如果 <ph name="IE_PRODUCT_NAME" /> 插件已开启,此政策还可控制 <ph name="IE_PRODUCT_NAME" /> 是否应在 <ph name="PRODUCT_NAME" /> 中打开这些网址。 如果您不设置此政策,系统不会将任何网站加入列表。
diff --git a/components/policy/resources/policy_templates_zh-TW.xtb b/components/policy/resources/policy_templates_zh-TW.xtb index 03cf5d7..f72bf14b 100644 --- a/components/policy/resources/policy_templates_zh-TW.xtb +++ b/components/policy/resources/policy_templates_zh-TW.xtb
@@ -3166,7 +3166,6 @@ <translation id="5055474681190962362">每月應重新啟動的日期 [1-31] (根據裝置當地時區),僅適用於「frequency」設為「MONTHLY」的情況。如果這個值大於指定月份的天數上限,系統會選擇當月的最後一天。</translation> <translation id="5056708224511062314">已停用螢幕放大鏡</translation> <translation id="5058573563327660283">選取自動清理時用來釋出磁碟空間的策略 (已不適用)</translation> -<translation id="5059201920681374653">必須在關聯的受管理裝置上使用受管理帳戶</translation> <translation id="5061114193960158745">你可以透過這項政策,控管一律不觸發瀏覽器切換的網站清單。系統會將每個項目視為規則。相符的規則不會開啟替代瀏覽器。這項政策與 <ph name="URL_LIST_POLICY_NAME" /> 政策的不同之處在於,規則為雙向適用。如果 <ph name="IE_PRODUCT_NAME" /> 增益集已啟用,這項政策也會控管 <ph name="IE_PRODUCT_NAME" /> 是否應在 <ph name="PRODUCT_NAME" /> 中開啟這些網址。
diff --git a/components/services/storage/indexed_db/leveldb/leveldb_state.h b/components/services/storage/indexed_db/leveldb/leveldb_state.h index e2bfa1bb..c349f3c 100644 --- a/components/services/storage/indexed_db/leveldb/leveldb_state.h +++ b/components/services/storage/indexed_db/leveldb/leveldb_state.h
@@ -24,6 +24,9 @@ // Encapsulates a leveldb database and comparator, allowing them to be used // safely across thread boundaries. +// Because the `RequestDestruction` method is called on shutdown, and blocks +// shutdown, all references to this object MUST be on task runner that +// BLOCK_SHUTDOWN. Otherwise it introduces a potential hang on shutdown. class LevelDBState : public base::RefCountedThreadSafe<LevelDBState> { public: static scoped_refptr<LevelDBState> CreateForDiskDB(
diff --git a/components/services/storage/indexed_db/scopes/leveldb_scopes.cc b/components/services/storage/indexed_db/scopes/leveldb_scopes.cc index f5c2d9ec..297b2300 100644 --- a/components/services/storage/indexed_db/scopes/leveldb_scopes.cc +++ b/components/services/storage/indexed_db/scopes/leveldb_scopes.cc
@@ -190,15 +190,20 @@ // as long as each task type only uses one sequence. This makes sure that the // tasks cannot monopolize the entire thread pool, and that they will be run // reasonably soon. + // Finally, it is also required that these block shutdown. This is because + // these tasks will own a reference to a LevelDBState object, which is MUST be + // destructed on shutdown as it will be joined with the IO thread on shutdown. + // To compensate here, all tasks cooperatively exit by checking + // `LevelDBState::is_destruction_requested()` switch (mode) { case TaskRunnerMode::kNewCleanupAndRevertSequences: revert_runner_ = base::ThreadPool::CreateSequencedTaskRunner( {base::MayBlock(), base::WithBaseSyncPrimitives(), - base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN, + base::TaskShutdownBehavior::BLOCK_SHUTDOWN, base::TaskPriority::USER_BLOCKING}); cleanup_runner_ = base::ThreadPool::CreateSequencedTaskRunner( {base::MayBlock(), base::WithBaseSyncPrimitives(), - base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN, + base::TaskShutdownBehavior::BLOCK_SHUTDOWN, base::TaskPriority::USER_VISIBLE}); break; case TaskRunnerMode::kUseCurrentSequence:
diff --git a/components/signin/internal/identity_manager/primary_account_manager.cc b/components/signin/internal/identity_manager/primary_account_manager.cc index 331e36aa..8e380c5b 100644 --- a/components/signin/internal/identity_manager/primary_account_manager.cc +++ b/components/signin/internal/identity_manager/primary_account_manager.cc
@@ -295,20 +295,12 @@ VLOG(1) << "StartSignOut: " << static_cast<int>(signout_source_metric) << ", " << static_cast<int>(signout_delete_metric) << ", " << static_cast<int>(remove_option); - if (HasPrimaryAccount(signin::ConsentLevel::kSync)) { - client_->PreSignOut( - base::BindOnce(&PrimaryAccountManager::OnSignoutDecisionReached, - base::Unretained(this), signout_source_metric, - signout_delete_metric, remove_option, - assert_signout_allowed), - signout_source_metric); - } else { - // Sign-out is always allowed if there's only unconsented primary account - // without sync consent, so skip calling PreSignOut. - OnSignoutDecisionReached(signout_source_metric, signout_delete_metric, - remove_option, assert_signout_allowed, - SigninClient::SignoutDecision::ALLOW_SIGNOUT); - } + client_->PreSignOut( + base::BindOnce(&PrimaryAccountManager::OnSignoutDecisionReached, + base::Unretained(this), signout_source_metric, + signout_delete_metric, remove_option, + assert_signout_allowed), + signout_source_metric); } void PrimaryAccountManager::OnSignoutDecisionReached(
diff --git a/components/signin/internal/identity_manager/primary_account_manager_unittest.cc b/components/signin/internal/identity_manager/primary_account_manager_unittest.cc index 55118ce..0f8bdda 100644 --- a/components/signin/internal/identity_manager/primary_account_manager_unittest.cc +++ b/components/signin/internal/identity_manager/primary_account_manager_unittest.cc
@@ -235,6 +235,10 @@ signin_client()->set_is_signout_allowed(false); manager_->ClearPrimaryAccount(signin_metrics::SIGNOUT_TEST, signin_metrics::SignoutDelete::kIgnoreMetric); + EXPECT_TRUE(manager_->HasPrimaryAccount(ConsentLevel::kSignin)); + signin_client()->set_is_signout_allowed(true); + manager_->ClearPrimaryAccount(signin_metrics::SIGNOUT_TEST, + signin_metrics::SignoutDelete::kIgnoreMetric); EXPECT_FALSE(manager_->HasPrimaryAccount(ConsentLevel::kSignin)); }
diff --git a/components/strings/components_strings_af.xtb b/components/strings/components_strings_af.xtb index fc19bd6..35f2d86a 100644 --- a/components/strings/components_strings_af.xtb +++ b/components/strings/components_strings_af.xtb
@@ -1627,7 +1627,6 @@ <translation id="6689249931105087298">Relatief met swartpuntsaampersing</translation> <translation id="6689271823431384964">Chrome bied aan om jou kaarte in jou Google-rekening te stoor omdat jy aangemeld is. Jy kan hierdie gedrag in instellings verander. Die kaarthouernaam kom van jou rekening af.</translation> <translation id="6698381487523150993">Geskep:</translation> -<translation id="6699188552522342100">Is hierdie webwerf akkuraat?</translation> <translation id="6702919718839027939">Bied aan</translation> <translation id="6710213216561001401">Vorige</translation> <translation id="6710594484020273272"><Tik soekterm in></translation> @@ -2333,7 +2332,6 @@ <translation id="961663415146723894">Gebind onder</translation> <translation id="962484866189421427">Hierdie inhoud kan probeer om misleidende programme te installeer wat voorgee om iets anders te wees of wat data insamel wat gebruik kan word om jou na te spoor. <ph name="BEGIN_LINK" />Wys in elk geval<ph name="END_LINK" /></translation> <translation id="969892804517981540">Amptelike bou</translation> -<translation id="973473557718930265">Gaan uit</translation> <translation id="973773823069644502">Voeg afleweringadres by</translation> <translation id="975560348586398090">{COUNT,plural, =0{Geen}=1{1 item}other{# items}}</translation> <translation id="981121421437150478">Vanlyn</translation>
diff --git a/components/strings/components_strings_am.xtb b/components/strings/components_strings_am.xtb index af05626..256d094 100644 --- a/components/strings/components_strings_am.xtb +++ b/components/strings/components_strings_am.xtb
@@ -96,6 +96,7 @@ <translation id="129863573139666797"><ph name="BEGIN_LINK" />ኩኪዎችዎን ማጽዳት ይሞክሩ<ph name="END_LINK" /></translation> <translation id="1301324364792935241">ደህንነታቸው የተጠበቁ የዲኤንኤስ ቅንብሮችዎን ይፈትሹ።</translation> <translation id="1307966114820526988">የተቋረጡ ባህሪያት</translation> +<translation id="1312803275555673949">ምን ማስረጃ ይደግፈዋል?</translation> <translation id="131405271941274527"><ph name="URL" /> የእርስዎን የNFC መሣሪያ መታ በሚያደርጉበት ጊዜ መረጃ መላክ እና መቀበል ይፈልጋል</translation> <translation id="1314509827145471431">ወደቀኝ እጠፍ</translation> <translation id="1319245136674974084">ለዚህ መተግበሪያ ዳግም አትጠይቅ</translation> @@ -636,6 +637,7 @@ <translation id="3240791268468473923">ደህንነቱ የተጠበቀ የመግቢያ ማስረጃ ምንም ተዛማጅ የመግቢያ ማስረጃ ሉህ አልተከፈተም</translation> <translation id="3249845759089040423">ቅጥ ያለው</translation> <translation id="3252266817569339921">ፈረንሳይኛ</translation> +<translation id="3257954757204451555">ከዚህ መረጃ በስተጀርባ ያለው ማነው?</translation> <translation id="3259648571731540213"><ph name="CREATE_GOOGLE_CALENDAR_EVENT_FOCUSED_FRIENDLY_MATCH_TEXT" />፣ በGoogle ቀን መቁጠሪያ ውስጥ አዲስ ክስተት በፍጥነት ለመፍጠር ትርን ከዚያ አስገባን ይጫኑ</translation> <translation id="3266793032086590337">እሴት (ግጭት)</translation> <translation id="3268451620468152448">ክፍት ትሮች</translation> @@ -1032,6 +1034,7 @@ <translation id="455113658016510503">A9</translation> <translation id="4558551763791394412">ቅጥያዎችዎን አሰናክለው ይሞክሩ።</translation> <translation id="4559332380232738994">10x11</translation> +<translation id="4567686777917670400">የእርስዎ አስተዳዳሪ በርቀት የአሳሽዎን ውቅረት መቀየር ይችላል። በዚህ መሣሪያ ላይ ያለ እንቅስቃሴ እንዲሁም ከChromium ውጭ ሊተዳደር ይችላል። <ph name="BEGIN_LINK" />የበለጠ ለመረዳት<ph name="END_LINK" /></translation> <translation id="457875822857220463">ማድረስ</translation> <translation id="4579056131138995126">የግል (የደብዳቤ ፖስታ)</translation> <translation id="4582204425268416675">ካርድ አስወግድ</translation> @@ -1524,6 +1527,7 @@ <translation id="6337534724793800597">መምሪያዎችን በስም አጣራ</translation> <translation id="6349101878882523185"><ph name="APP_NAME" />ን ይጫኑ</translation> <translation id="6353505687280762741">{COUNT,plural, =0{ምንም}=1{1 ይለፍ ቃል (ለ<ph name="DOMAIN_LIST" />፣ ሰምሯል)}=2{2 ይለፍ ቃላት (ለ<ph name="DOMAIN_LIST" />፣ ሰምሯል)}one{# ይለፍ ቃላት (ለ<ph name="DOMAIN_LIST" />፣ ሰምሯል)}other{# ይለፍ ቃላት (ለ<ph name="DOMAIN_LIST" />፣ ሰምሯል)}}</translation> +<translation id="6355392890578844978">ይህ አሳሽ በኩባንያ ወይም በሌላ ድርጅት አይተዳደርም። በዚህ መሣሪያ ላይ ያለ እንቅስቃሴ ከChromium ውጭ ሊተዳደር ይችላል። <ph name="BEGIN_LINK" />የበለጠ ለመረዳት<ph name="END_LINK" /></translation> <translation id="6358450015545214790">እነዚህ ምን ማለት ናቸው?</translation> <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />ተኪውን፣ ኬላውን እና ደህንነቱ የተጠበቀ የዲኤንኤስ ውቅረትን በመፈተሽ ላይ<ph name="END_LINK" /></translation> @@ -1619,7 +1623,6 @@ <translation id="6689249931105087298">አንጻራዊ ከጥቁር ነጥብ እመቃ ጋር</translation> <translation id="6689271823431384964">በመለያ ስለገቡ Chrome ካርዶችዎን በGoogle መለያዎ ሊያስቀምጥልዎ እየጠየቀ ነው። ይህን ባህሪ በቅንብሮች ውስጥ መቀየር ይችላሉ። የካርድ ያዢው ስም ከመለያዎ ነው የመጣው።</translation> <translation id="6698381487523150993">ተፈጠረ:</translation> -<translation id="6699188552522342100">ይህ ድር ጣቢያ ትክክለኛ ነው?</translation> <translation id="6702919718839027939">አቅርብ</translation> <translation id="6710213216561001401">ቀዳሚ</translation> <translation id="6710594484020273272"><የፍለጋ ቃል ይተይቡ></translation> @@ -1976,6 +1979,7 @@ <translation id="7961015016161918242">በፍጹም</translation> <translation id="7966803981046576691">የስራ መለያ አይነት</translation> <translation id="79682505114836835">እሴት «<ph name="VALUE" />» ልክ ያልሆነ የአስራስድስትዮሽ ቀለም ነው።</translation> +<translation id="7970392640816874403">ሌሎች ምንጮች ምን ይላሉ?</translation> <translation id="7976214039405368314">በጣም ብዙ ጥያቄዎች</translation> <translation id="7977538094055660992">የውጽዓት መሣሪያ</translation> <translation id="7977894662897852582">Edp</translation> @@ -2326,7 +2330,6 @@ <translation id="961663415146723894">ከታች ጠርዝ</translation> <translation id="962484866189421427">ይህ ይዘት የሆነ ሌላ ነገር እንደሆኑ የሚያስመስሉ አጭበርባሪ መተግበሪያዎችን ወይም እርስዎን ለመከታተል ጥቅም ላይ ሊውል የሚችል ውሂብን የሚሰበስቡ መተግበሪያዎችን ለመጫን ሊሞክር ይችል ይሆናል። <ph name="BEGIN_LINK" />የሆነው ሆኖ አሳይ<ph name="END_LINK" /></translation> <translation id="969892804517981540">ይፋ ግንባታ</translation> -<translation id="973473557718930265">አቋርጥ</translation> <translation id="973773823069644502">የማድረሻ አድራሻ ያክሉ</translation> <translation id="975560348586398090">{COUNT,plural, =0{ምንም}=1{1 ንጥል}one{# ንጥሎች}other{# ንጥሎች}}</translation> <translation id="981121421437150478">ከመስመር ውጪ</translation>
diff --git a/components/strings/components_strings_ar.xtb b/components/strings/components_strings_ar.xtb index f9b4ab0..4432a2f 100644 --- a/components/strings/components_strings_ar.xtb +++ b/components/strings/components_strings_ar.xtb
@@ -96,6 +96,7 @@ <translation id="129863573139666797"><ph name="BEGIN_LINK" />جرّب محو ملفات تعريف الارتباط<ph name="END_LINK" /></translation> <translation id="1301324364792935241">التحقّق من إعدادات نظام أسماء النطاقات الآمن</translation> <translation id="1307966114820526988">الميزات المتوقفة</translation> +<translation id="1312803275555673949">ما الدليل الذي يؤيد ذلك؟</translation> <translation id="131405271941274527">يريد <ph name="URL" /> إرسال المعلومات وتلقّيها عند النقر على جهاز NFC الظاهر على هاتفك.</translation> <translation id="1314509827145471431">التجليد من الناحية اليمنى</translation> <translation id="1319245136674974084">عدم السؤال مرة أخرى عند استخدام هذا التطبيق</translation> @@ -641,6 +642,7 @@ <translation id="3240791268468473923">تم فتح صفحة عدم تطابق بيانات اعتماد الدفع الآمن.</translation> <translation id="3249845759089040423">أنيق</translation> <translation id="3252266817569339921">الفرنسية</translation> +<translation id="3257954757204451555">ما الجهة التي توفّر هذه المعلومات؟</translation> <translation id="3259648571731540213"><ph name="CREATE_GOOGLE_CALENDAR_EVENT_FOCUSED_FRIENDLY_MATCH_TEXT" />: اضغط على مفتاح التبويب (Tab) ثم Enter لإنشاء حدث جديد في "تقويم Google" بسرعة.</translation> <translation id="3266793032086590337">القيمة (المتعارضة)</translation> <translation id="3268451620468152448">علامات التبويب المفتوحة</translation> @@ -1040,6 +1042,7 @@ <translation id="455113658016510503">A9</translation> <translation id="4558551763791394412">جرّب إيقاف الإضافات.</translation> <translation id="4559332380232738994">10x11</translation> +<translation id="4567686777917670400">يمكن لمشرفك تغيير إعدادات المتصفِّح عن بُعد. وقد تتم أيضًا إدارة النشاط على هذا الجهاز خارج Chromium. <ph name="BEGIN_LINK" />مزيد من المعلومات<ph name="END_LINK" /></translation> <translation id="457875822857220463">التسليم</translation> <translation id="4579056131138995126">شخصي (مغلف)</translation> <translation id="4582204425268416675">إزالة البطاقة</translation> @@ -1532,6 +1535,7 @@ <translation id="6337534724793800597">تصفية السياسات بحسب الاسم</translation> <translation id="6349101878882523185">تثبيت <ph name="APP_NAME" /></translation> <translation id="6353505687280762741">{COUNT,plural, =0{ما من كلمات مرور}=1{كلمة مرور واحدة (للقائمة <ph name="DOMAIN_LIST" />، تمت المزامنة)}=2{كلمتا مرور (للقائمة <ph name="DOMAIN_LIST" />، تمت المزامنة)}few{# كلمات مرور (للقائمة <ph name="DOMAIN_LIST" />، تمت المزامنة)}many{# كلمة مرور (للقائمة <ph name="DOMAIN_LIST" />، تمت المزامنة)}other{# كلمة مرور (للقائمة <ph name="DOMAIN_LIST" />، تمت المزامنة)}}</translation> +<translation id="6355392890578844978">لا تتم إدارة هذا المتصفِّح من خلال شركة أو مؤسسة أخرى. وقد تتم إدارة النشاط على هذا الجهاز خارج Chromium. <ph name="BEGIN_LINK" />مزيد من المعلومات<ph name="END_LINK" /></translation> <translation id="6358450015545214790">ماذا تعني هذه الأقسام؟</translation> <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />التحقّق من ضبط الخادم الوكيل والجدار الناري ونظام أسماء النطاقات الآمن<ph name="END_LINK" /></translation> @@ -1627,7 +1631,6 @@ <translation id="6689249931105087298">طباعة نسبية باستخدام ميزة "تعويض النقاط السوداء"</translation> <translation id="6689271823431384964">يتيح لك Chrome حفظ بطاقاتك في حسابك على Google لأنك سجَّلت الدخول. يمكنك تغيير هذا السلوك في الإعدادات. ويتم الحصول على اسم حامل البطاقة من حسابك.</translation> <translation id="6698381487523150993">تاريخ الإنشاء:</translation> -<translation id="6699188552522342100">هل المعلومات الواردة في هذا الموقع الإلكتروني دقيقة؟</translation> <translation id="6702919718839027939">وضع العرض التقديمي</translation> <translation id="6710213216561001401">السابق</translation> <translation id="6710594484020273272"><إدخال عبارة البحث></translation> @@ -1984,6 +1987,7 @@ <translation id="7961015016161918242">مطلقًا</translation> <translation id="7966803981046576691">نوع حساب المهمة</translation> <translation id="79682505114836835">القيمة "<ph name="VALUE" />" هي لون سداسي عشري غير صالح.</translation> +<translation id="7970392640816874403">ماذا تعرض المصادر الأخرى؟</translation> <translation id="7976214039405368314">عدد الطلبات كبير جدًا.</translation> <translation id="7977538094055660992">جهاز إخراج</translation> <translation id="7977894662897852582">Edp</translation> @@ -2334,7 +2338,6 @@ <translation id="961663415146723894">التجليد من الأسفل</translation> <translation id="962484866189421427">قد يحاول هذا المحتوى تثبيت تطبيقات مضللة تظهر كبرامج أخرى أو تجمع بيانات قد تُستخدم لتتبعك. <ph name="BEGIN_LINK" />العرض على أي حال<ph name="END_LINK" /></translation> <translation id="969892804517981540">البنية الرسمية</translation> -<translation id="973473557718930265">إنهاء</translation> <translation id="973773823069644502">إضافة عنوان التسليم للمستخدم</translation> <translation id="975560348586398090">{COUNT,plural, =0{بدون}=1{عنصر واحد}two{عنصران (#)}few{# عناصر}many{# عنصرًا}other{# عنصر}}</translation> <translation id="981121421437150478">بلا اتصال</translation>
diff --git a/components/strings/components_strings_as.xtb b/components/strings/components_strings_as.xtb index 1ec2c682..e5496fb2 100644 --- a/components/strings/components_strings_as.xtb +++ b/components/strings/components_strings_as.xtb
@@ -1619,7 +1619,6 @@ <translation id="6689249931105087298">ক’লা পইণ্টৰ কমপ্ৰেশ্বনৰ সৈতে আপেক্ষিক</translation> <translation id="6689271823431384964">আপুনি ছাইন ইন কৰি থোৱাৰ বাবে Chromeএ আপোনাৰ Google একাউণ্টত আপোনাৰ কার্ডসমূহ ছেভ কৰাৰ সুবিধা দিছে। আপুনি ছেটিংসমূহত এই আচৰণ সলনি কৰিব পাৰে। কাৰ্ডৰ ধাৰকৰ নামটো আপোনাৰ একাউণ্টৰ পৰা আহে।</translation> <translation id="6698381487523150993">সৃষ্টি কৰাৰ সময়:</translation> -<translation id="6699188552522342100">এই ৱেবছাইটটো সঠিক হয়নে?</translation> <translation id="6702919718839027939">উপস্থাপন ম’ড</translation> <translation id="6710213216561001401">পূৰ্বৱৰ্তী</translation> <translation id="6710594484020273272"><সন্ধান কৰিবলগীয়া শব্দ টাইপ কৰক></translation> @@ -2322,7 +2321,6 @@ <translation id="961663415146723894">তলৰ অংশত সংযুক্ত কৰক</translation> <translation id="962484866189421427">এই সমলে বিভ্ৰান্তিকৰ এপ্ ইনষ্টল কৰিবলৈ চেষ্টা কৰিব পাৰে যি আন ছদ্মৱেশ ধাৰণ কৰিব পাৰে বা আপোনাৰ কাৰ্যকলাপৰ ওপৰত চকু ৰাখিবলৈ ব্যৱহাৰ কৰা ডেটা সংগ্ৰহ কৰিব পাৰে। <ph name="BEGIN_LINK" />যিকোনো প্ৰকাৰে দেখুৱাওক<ph name="END_LINK" /></translation> <translation id="969892804517981540">আনুষ্ঠানিক বিল্ড</translation> -<translation id="973473557718930265">বাহিৰ হওক</translation> <translation id="973773823069644502">ডেলিভাৰীৰ ঠিকনা যোগ কৰক</translation> <translation id="975560348586398090">{COUNT,plural, =0{এটাও নহয়}=1{১টা বস্তু}one{#টা বস্তু}other{#টা বস্তু}}</translation> <translation id="981121421437150478">অফলাইন</translation>
diff --git a/components/strings/components_strings_az.xtb b/components/strings/components_strings_az.xtb index 54412c5..6cf20f4 100644 --- a/components/strings/components_strings_az.xtb +++ b/components/strings/components_strings_az.xtb
@@ -1622,7 +1622,6 @@ <translation id="6689249931105087298">Qara nöqtə sıxılması ilə nisbi</translation> <translation id="6689271823431384964">Daxil olduğunuza görə Chrome kartları Google Hesabında yadda saxlamağı təklif edir. Bunu ayarlarda dəyişə bilərsiniz. Kart sahibinin adı hesabınızdan götürülüb.</translation> <translation id="6698381487523150993">Yaradılıb:</translation> -<translation id="6699188552522342100">Bu vebsayt doğrudur?</translation> <translation id="6702919718839027939">Təqdim edin</translation> <translation id="6710213216561001401">Əvvəlki</translation> <translation id="6710594484020273272"><Axtarış sözünü yazın></translation> @@ -2328,7 +2327,6 @@ <translation id="961663415146723894">Aşağıdan uclarını qovuşdurun</translation> <translation id="962484866189421427">Bu kontent başqa tətbiqə oxşayan və ya Sizi izləmək məqsədilə data əldə edən aldadıcı tətbiqləri quraşdırmağa cəhd edə bilər. <ph name="BEGIN_LINK" />İstənilən halda göstərin<ph name="END_LINK" /></translation> <translation id="969892804517981540">Rəsmi Quruluş</translation> -<translation id="973473557718930265">Tərk edin</translation> <translation id="973773823069644502">Çatdırılma Ünvanı əlavə edin</translation> <translation id="975560348586398090">{COUNT,plural, =0{Yoxdur}=1{1 element}other{# element}}</translation> <translation id="981121421437150478">Oflayn</translation>
diff --git a/components/strings/components_strings_be.xtb b/components/strings/components_strings_be.xtb index 5a39f28..ef44082 100644 --- a/components/strings/components_strings_be.xtb +++ b/components/strings/components_strings_be.xtb
@@ -1626,7 +1626,6 @@ <translation id="6689249931105087298">Адносны са сцісканнем чорных пунктаў</translation> <translation id="6689271823431384964">Chrome прапаноўвае захоўваць карткі ва Уліковым запісе Google, бо вы ўвайшлі ў сістэму. Гэту функцыю можна выключыць у наладах. Імя ўладальніка карткі ўзята з вашага ўліковага запісу.</translation> <translation id="6698381487523150993">Створаны:</translation> -<translation id="6699188552522342100">Ці з'яўляецца інфармацыя на гэтым вэб-сайце праўдзівай?</translation> <translation id="6702919718839027939">Прэзентацыя</translation> <translation id="6710213216561001401">Назад</translation> <translation id="6710594484020273272"><Увядзіце пошукавы запыт></translation> @@ -2333,7 +2332,6 @@ <translation id="961663415146723894">Пераплёт знізу</translation> <translation id="962484866189421427">Праз гэта змесціва могуць усталявацца падманныя праграмы, якія спрабуюць выдаваць сябе за нешта іншае або збіраюць даныя, што могуць быць выкарыстаны для сачэння за вамі. <ph name="BEGIN_LINK" />Усё роўна паказаць<ph name="END_LINK" /></translation> <translation id="969892804517981540">Афіцыйная зборка</translation> -<translation id="973473557718930265">Выйсці</translation> <translation id="973773823069644502">Дадаць адрас дастаўкі</translation> <translation id="975560348586398090">{COUNT,plural, =0{Няма}=1{1 элемент}one{# элемент}few{# элементы}many{# элементаў}other{# элемента}}</translation> <translation id="981121421437150478">Па-за сеткай</translation>
diff --git a/components/strings/components_strings_bg.xtb b/components/strings/components_strings_bg.xtb index 56a0d79..fe407fd 100644 --- a/components/strings/components_strings_bg.xtb +++ b/components/strings/components_strings_bg.xtb
@@ -96,6 +96,7 @@ <translation id="129863573139666797"><ph name="BEGIN_LINK" />Опитайте да изчистите „бисквитките“ си<ph name="END_LINK" /></translation> <translation id="1301324364792935241">Проверете настройките си за защитен DNS</translation> <translation id="1307966114820526988">Оттеглени функции</translation> +<translation id="1312803275555673949">Какви доказателства подкрепят твърдението?</translation> <translation id="131405271941274527"><ph name="URL" /> иска да изпраща и да получава информация при докосване на телефона ви до устройства с NFC</translation> <translation id="1314509827145471431">Подвързване отдясно</translation> <translation id="1319245136674974084">Да не се пита отново за това приложение</translation> @@ -639,6 +640,7 @@ <translation id="3240791268468473923">Листът за несъответстващи идентификационни данни за сигурни плащания е отворен</translation> <translation id="3249845759089040423">Приятно</translation> <translation id="3252266817569339921">френски</translation> +<translation id="3257954757204451555">Кой е източникът на тази информация?</translation> <translation id="3259648571731540213"><ph name="CREATE_GOOGLE_CALENDAR_EVENT_FOCUSED_FRIENDLY_MATCH_TEXT" />. Натиснете Tab и след това Enter, за да създадете бързо събитие в Google Календар</translation> <translation id="3266793032086590337">Стойност (несъвместима)</translation> <translation id="3268451620468152448">Отворени раздели</translation> @@ -1038,6 +1040,7 @@ <translation id="455113658016510503">A9</translation> <translation id="4558551763791394412">Опитайте да деактивирате разширенията.</translation> <translation id="4559332380232738994">10 x 11</translation> +<translation id="4567686777917670400">Администраторът ви може отдалечено да променя настройките на браузъра. Възможно е активността на това устройство да се управлява и извън Chromium. <ph name="BEGIN_LINK" />Научете повече<ph name="END_LINK" /></translation> <translation id="457875822857220463">Бърза доставка</translation> <translation id="4579056131138995126">Personal (плик)</translation> <translation id="4582204425268416675">Премахване на картата</translation> @@ -1530,6 +1533,7 @@ <translation id="6337534724793800597">Филтриране на правилата по име</translation> <translation id="6349101878882523185">Инсталиране на <ph name="APP_NAME" /></translation> <translation id="6353505687280762741">{COUNT,plural, =0{Няма}=1{1 парола (за <ph name="DOMAIN_LIST" />, синхронизирана)}=2{2 пароли (за <ph name="DOMAIN_LIST" />, синхронизирани)}other{# пароли (за <ph name="DOMAIN_LIST" />, синхронизирани)}}</translation> +<translation id="6355392890578844978">Този браузър не се управлява от дружество или друга организация. Възможно е активността на устройството да се управлява извън Chromium. <ph name="BEGIN_LINK" />Научете повече<ph name="END_LINK" /></translation> <translation id="6358450015545214790">Какво означават тези неща?</translation> <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />Проверете конфигурацията на прокси сървъра, защитната стена и защитения DNS<ph name="END_LINK" />.</translation> @@ -1625,7 +1629,6 @@ <translation id="6689249931105087298">Относително с компенсиране на черните точки</translation> <translation id="6689271823431384964">Chrome предлага да запази картите ви в профила ви в Google, защото сте влезли в него. Можете да промените това поведение от настройките. Името на картодържателя е от профила ви.</translation> <translation id="6698381487523150993">Създадено:</translation> -<translation id="6699188552522342100">Вярна ли е информацията на този уебсайт?</translation> <translation id="6702919718839027939">Представяне</translation> <translation id="6710213216561001401">Предишно</translation> <translation id="6710594484020273272"><Въведете дума за търсене></translation> @@ -1982,6 +1985,7 @@ <translation id="7961015016161918242">Никога</translation> <translation id="7966803981046576691">Тип отчитане на задания</translation> <translation id="79682505114836835">Стойността „<ph name="VALUE" />“ е невалиден шестнадесетичен цвят.</translation> +<translation id="7970392640816874403">Какво казват другите източници?</translation> <translation id="7976214039405368314">Твърде много заявки</translation> <translation id="7977538094055660992">Изходно устройство</translation> <translation id="7977894662897852582">Edp</translation> @@ -2331,7 +2335,6 @@ <translation id="961663415146723894">Подвързване на долната част</translation> <translation id="962484866189421427">Въпросното съдържание може да се опита да инсталира измамни приложения, които се представят за нещо друго или събират данни, които може да се използват за проследяването ви. <ph name="BEGIN_LINK" />Научете повече<ph name="END_LINK" /></translation> <translation id="969892804517981540">Официално издание</translation> -<translation id="973473557718930265">Изход</translation> <translation id="973773823069644502">Добавяне на адрес за бърза доставка</translation> <translation id="975560348586398090">{COUNT,plural, =0{Няма}=1{1 елемент}other{# елемента}}</translation> <translation id="981121421437150478">Офлайн</translation>
diff --git a/components/strings/components_strings_bn.xtb b/components/strings/components_strings_bn.xtb index 94d80fa..8f3241c 100644 --- a/components/strings/components_strings_bn.xtb +++ b/components/strings/components_strings_bn.xtb
@@ -1626,7 +1626,6 @@ <translation id="6689249931105087298">ব্ল্যাক পয়েন্ট কম্প্রেশনের সাথে রিলেটিভ</translation> <translation id="6689271823431384964">আপনি সাইন-ইন করে আছেন বলে, Chrome আপনার কার্ডগুলি Google অ্যাকাউন্টে সেভ করতে চান কিনা তা জানতে চাইছে। সেটিংস থেকে আপনি এই বিকল্প পরিবর্তন করতে পারেন। আপনার অ্যাকাউন্ট থেকেই কার্ডহোল্ডারের নাম পাওয়া গেছে।</translation> <translation id="6698381487523150993">তৈরি হয়েছে:</translation> -<translation id="6699188552522342100">এই ওয়েবসাইটটি কি সঠিক?</translation> <translation id="6702919718839027939">প্রেজেন্টেশন মোড</translation> <translation id="6710213216561001401">আগের</translation> <translation id="6710594484020273272"><সার্চের পদ লিখুন></translation> @@ -2332,7 +2331,6 @@ <translation id="961663415146723894">নিচে বাঁধাই করুন</translation> <translation id="962484866189421427">এই কন্টেন্টটি প্রতারণামূলক অ্যাপ ইনস্টল করে দিতে পারে যেগুলি অন্যান্য আপের থেকে আলাদা করা যায় না অথবা যেগুলি এমন ডেটা সংগ্রহ করে যা দিয়ে আপনার উপরে নজর রাখা যাবে। <ph name="BEGIN_LINK" />তবুও এটি দেখতে চাই<ph name="END_LINK" /></translation> <translation id="969892804517981540">অফিসিয়াল বিল্ড</translation> -<translation id="973473557718930265">প্রস্থান করুন</translation> <translation id="973773823069644502">ডেলিভারি ঠিকানা যোগ করুন</translation> <translation id="975560348586398090">{COUNT,plural, =0{কিছুই নয়}=1{১টি আইটেম}one{#টি আইটেম}other{#টি আইটেম}}</translation> <translation id="981121421437150478">অফলাইন</translation>
diff --git a/components/strings/components_strings_bs.xtb b/components/strings/components_strings_bs.xtb index cbef267..379ba4b 100644 --- a/components/strings/components_strings_bs.xtb +++ b/components/strings/components_strings_bs.xtb
@@ -96,6 +96,7 @@ <translation id="129863573139666797"><ph name="BEGIN_LINK" />Pokušajte obrisati kolačiće<ph name="END_LINK" /></translation> <translation id="1301324364792935241">Provjerite postavke sigurnosnog DNS-a</translation> <translation id="1307966114820526988">Zastarjele funkcije</translation> +<translation id="1312803275555673949">Koji dokazi idu tome u prilog?</translation> <translation id="131405271941274527"><ph name="URL" /> želi slati i primati informacije kada svojim telefonom dodirnete NFC uređaj</translation> <translation id="1314509827145471431">Povezivanje desne strane</translation> <translation id="1319245136674974084">Ne pitaj me više za ovu aplikaciju</translation> @@ -641,6 +642,7 @@ <translation id="3240791268468473923">Otvorena je tabela obavještenja da nema akreditiva za sigurno plaćanje koji se podudaraju</translation> <translation id="3249845759089040423">Cool</translation> <translation id="3252266817569339921">Francuska</translation> +<translation id="3257954757204451555">Ko stoji iza ovih informacija?</translation> <translation id="3259648571731540213"><ph name="CREATE_GOOGLE_CALENDAR_EVENT_FOCUSED_FRIENDLY_MATCH_TEXT" />, pritisnite Tab, a zatim Enter da brzo kreirate novi događaj u Google Kalendaru</translation> <translation id="3266793032086590337">Vrijednost (konflikt)</translation> <translation id="3268451620468152448">Otvorene kartice</translation> @@ -1040,6 +1042,7 @@ <translation id="455113658016510503">A9</translation> <translation id="4558551763791394412">Pokušajte onemogućiti ekstenzije.</translation> <translation id="4559332380232738994">10 x 11</translation> +<translation id="4567686777917670400">Vaš administrator može promijeniti postavke preglednika daljinskim putem. Aktivnostima na ovom uređaju se može upravljati i van Chromiuma. <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation> <translation id="457875822857220463">Isporuka</translation> <translation id="4579056131138995126">Lično (koverta)</translation> <translation id="4582204425268416675">Uklonite karticu</translation> @@ -1532,6 +1535,7 @@ <translation id="6337534724793800597">Filtriraj pravila po nazivu</translation> <translation id="6349101878882523185">Instalirajte <ph name="APP_NAME" /></translation> <translation id="6353505687280762741">{COUNT,plural, =0{Ništa}=1{1 lozinka (za <ph name="DOMAIN_LIST" />, sinhronizirano)}=2{2 lozinke (za <ph name="DOMAIN_LIST" />, sinhronizirano)}one{# lozinka (za <ph name="DOMAIN_LIST" />, sinhronizirano)}few{# lozinke (za <ph name="DOMAIN_LIST" />, sinhronizirano)}other{# lozinki (za <ph name="DOMAIN_LIST" />, sinhronizirano)}}</translation> +<translation id="6355392890578844978">Ovim preglednikom ne upravlja kompanija ili neka druga organizacija. Aktivnostima na ovom uređaju se može upravljati van Chromiuma. <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation> <translation id="6358450015545214790">Šta ovo znači?</translation> <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />provjeriti konfiguraciju proksi servera, zaštitnog zida i sigurnosnog DNS-a<ph name="END_LINK" /></translation> @@ -1627,7 +1631,6 @@ <translation id="6689249931105087298">Relativno s kompresijom crne tačke</translation> <translation id="6689271823431384964">Chrome vam nudi pohranjivanje kartica na Google računu zato što ste prijavljeni. Ovo ponašanje možete promjeniti u postavkama. Ime vlasnika kartice je ime s vašeg računa.</translation> <translation id="6698381487523150993">Autor/ica:</translation> -<translation id="6699188552522342100">Je li ova web lokacija tačna?</translation> <translation id="6702919718839027939">Prezentacija</translation> <translation id="6710213216561001401">Nazad</translation> <translation id="6710594484020273272"><Unesite pojam za pretraživanje></translation> @@ -1984,6 +1987,7 @@ <translation id="7961015016161918242">Nikada</translation> <translation id="7966803981046576691">Vrsta računa za posao</translation> <translation id="79682505114836835">Vrijednost "<ph name="VALUE" />" je nevažeći kôd heksadecimalne boje.</translation> +<translation id="7970392640816874403">Šta kažu drugi izvori?</translation> <translation id="7976214039405368314">Previše zahtjeva</translation> <translation id="7977538094055660992">Izlazni uređaj</translation> <translation id="7977894662897852582">Edp</translation> @@ -2333,7 +2337,6 @@ <translation id="961663415146723894">Povezivanje donje strane</translation> <translation id="962484866189421427">Sadržaj može pokušati instalirati obmanjujuće aplikacije koje se pretvaraju da predstavljaju nešto drugo ili koje prikupljaju podatke koji se mogu iskoristiti za vaše praćenje. <ph name="BEGIN_LINK" />Ipak prikaži<ph name="END_LINK" /></translation> <translation id="969892804517981540">Zvanična verzija</translation> -<translation id="973473557718930265">Napusti</translation> <translation id="973773823069644502">Dodaj adresu za isporuku</translation> <translation id="975560348586398090">{COUNT,plural, =0{Nijedna}=1{1 stavka}one{# stavka}few{# stavke}other{# stavki}}</translation> <translation id="981121421437150478">Van mreže</translation>
diff --git a/components/strings/components_strings_ca.xtb b/components/strings/components_strings_ca.xtb index 09482c7c..33da4fc 100644 --- a/components/strings/components_strings_ca.xtb +++ b/components/strings/components_strings_ca.xtb
@@ -96,6 +96,7 @@ <translation id="129863573139666797"><ph name="BEGIN_LINK" />Esborreu les galetes<ph name="END_LINK" /></translation> <translation id="1301324364792935241">Revisa la configuració de DNS segur</translation> <translation id="1307966114820526988">Funcions obsoletes</translation> +<translation id="1312803275555673949">Quines proves hi ha?</translation> <translation id="131405271941274527"><ph name="URL" /> vol enviar i rebre informació quan el teu telèfon toca un dispositiu NFC</translation> <translation id="1314509827145471431">Enquadernació a la dreta</translation> <translation id="1319245136674974084">No ho tornis a preguntar per a aquesta aplicació</translation> @@ -637,6 +638,7 @@ <translation id="3240791268468473923">S'ha obert el full de credencials no coincidents de credencials de pagament segur</translation> <translation id="3249845759089040423">Atrevida</translation> <translation id="3252266817569339921">Francès</translation> +<translation id="3257954757204451555">Qui hi ha darrere d'aquesta informació?</translation> <translation id="3259648571731540213"><ph name="CREATE_GOOGLE_CALENDAR_EVENT_FOCUSED_FRIENDLY_MATCH_TEXT" />: prem Tab i després Retorn per crear un esdeveniment ràpidament a Google Calendar</translation> <translation id="3266793032086590337">Valor (en conflicte)</translation> <translation id="3268451620468152448">Pestanyes obertes</translation> @@ -1031,6 +1033,7 @@ <translation id="455113658016510503">A9</translation> <translation id="4558551763791394412">Desactiva les extensions</translation> <translation id="4559332380232738994">10x11</translation> +<translation id="4567686777917670400">L'administrador pot modificar la configuració del navegador de manera remota. És possible que l'activitat d'aquest dispositiu també es gestioni fora de Chromium. <ph name="BEGIN_LINK" />Més informació<ph name="END_LINK" /></translation> <translation id="457875822857220463">Entrega</translation> <translation id="4579056131138995126">Personal (sobre)</translation> <translation id="4582204425268416675">Suprimeix la targeta</translation> @@ -1523,6 +1526,7 @@ <translation id="6337534724793800597">Filtra les polítiques pel nom</translation> <translation id="6349101878882523185">Instal·la <ph name="APP_NAME" /></translation> <translation id="6353505687280762741">{COUNT,plural, =0{Cap}=1{1 contrasenya per a <ph name="DOMAIN_LIST" /> (sincronitzats)}=2{2 contrasenyes per a <ph name="DOMAIN_LIST" /> (sincronitzats)}other{# contrasenyes per a <ph name="DOMAIN_LIST" /> (sincronitzats)}}</translation> +<translation id="6355392890578844978">Cap empresa ni cap altra organització no gestiona aquest navegador. És possible que l'activitat d'aquest dispositiu es gestioni fora de Chromium. <ph name="BEGIN_LINK" />Més informació<ph name="END_LINK" /></translation> <translation id="6358450015545214790">Què vol dir tot això?</translation> <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />Comprova el servidor intermediari, el tallafoc i la configuració de DNS segur<ph name="END_LINK" /></translation> @@ -1618,7 +1622,6 @@ <translation id="6689249931105087298">Relatiu amb compressió de punts negres</translation> <translation id="6689271823431384964">Chrome t'està oferint desar les targetes al Compte de Google perquè tens la sessió iniciada. Pots canviar aquest comportament a la configuració. El nom del titular de la targeta s'obté del teu compte.</translation> <translation id="6698381487523150993">Creat:</translation> -<translation id="6699188552522342100">És precís aquest lloc web?</translation> <translation id="6702919718839027939">Presenta</translation> <translation id="6710213216561001401">Anterior</translation> <translation id="6710594484020273272"><Escriviu el terme de cerca></translation> @@ -1975,6 +1978,7 @@ <translation id="7961015016161918242">Mai</translation> <translation id="7966803981046576691">Tipus de compte de treball</translation> <translation id="79682505114836835">El valor "<ph name="VALUE" />" no és un color hexadecimal vàlid.</translation> +<translation id="7970392640816874403">Què diuen altres fonts?</translation> <translation id="7976214039405368314">Hi ha massa sol·licituds</translation> <translation id="7977538094055660992">Dispositiu de sortida</translation> <translation id="7977894662897852582">Edp</translation> @@ -2324,7 +2328,6 @@ <translation id="961663415146723894">Enquadernació per la part inferior</translation> <translation id="962484866189421427">Pot ser que aquest contingut provi d'instal·lar aplicacions enganyoses que es facin passar per d'altres o que recullin dades que podrien utilitzar-se per fer un seguiment de la teva activitat. <ph name="BEGIN_LINK" />Mostra igualment<ph name="END_LINK" /></translation> <translation id="969892804517981540">Muntatge oficial</translation> -<translation id="973473557718930265">Surt</translation> <translation id="973773823069644502">Afegeix una adreça d'entrega</translation> <translation id="975560348586398090">{COUNT,plural, =0{Cap}=1{1 element}other{# elements}}</translation> <translation id="981121421437150478">Sense connexió</translation>
diff --git a/components/strings/components_strings_cs.xtb b/components/strings/components_strings_cs.xtb index 5f9fa3a..c2cc66e9 100644 --- a/components/strings/components_strings_cs.xtb +++ b/components/strings/components_strings_cs.xtb
@@ -1613,7 +1613,6 @@ <translation id="6689249931105087298">Relativní s kompresí černého bodu</translation> <translation id="6689271823431384964">Chrome vám nabízí uložení karet do účtu Google, protože jste přihlášeni. Toto chování můžete změnit v Nastavení. Jméno držitele karty pochází z vašeho účtu.</translation> <translation id="6698381487523150993">Vytvořil:</translation> -<translation id="6699188552522342100">Je tento web přesný?</translation> <translation id="6702919718839027939">Prezentovat</translation> <translation id="6710213216561001401">Předchozí</translation> <translation id="6710594484020273272"><Zadejte vyhledávací dotaz></translation> @@ -2319,7 +2318,6 @@ <translation id="961663415146723894">Vazba dole</translation> <translation id="962484866189421427">Tento obsah by se mohl pokusit instalovat klamavé aplikace, které se vydávají za něco jiného nebo shromažďují data ke sledování vaší aktivity. <ph name="BEGIN_LINK" />Přesto zobrazit<ph name="END_LINK" /></translation> <translation id="969892804517981540">Oficiální sestavení</translation> -<translation id="973473557718930265">Ukončit</translation> <translation id="973773823069644502">Přidat adresu doručení</translation> <translation id="975560348586398090">{COUNT,plural, =0{Žádné}=1{1 položka}few{# položky}many{# položky}other{# položek}}</translation> <translation id="981121421437150478">Offline</translation>
diff --git a/components/strings/components_strings_da.xtb b/components/strings/components_strings_da.xtb index 543bf7f..d6ebc63b 100644 --- a/components/strings/components_strings_da.xtb +++ b/components/strings/components_strings_da.xtb
@@ -96,6 +96,7 @@ <translation id="129863573139666797"><ph name="BEGIN_LINK" />Prøv at rydde dine cookies<ph name="END_LINK" /></translation> <translation id="1301324364792935241">Tjek indstillingerne for din sikre DNS</translation> <translation id="1307966114820526988">Udfasede funktioner</translation> +<translation id="1312803275555673949">Hvilke beviser underbygger dette?</translation> <translation id="131405271941274527"><ph name="URL" /> ønsker at sende og modtage oplysninger, når du parrer din telefon med en NFC-enhed</translation> <translation id="1314509827145471431">Bind i højre side</translation> <translation id="1319245136674974084">Spørg ikke igen for denne app</translation> @@ -641,6 +642,7 @@ <translation id="3240791268468473923">Regneark uden matchende loginoplysninger til sikker betaling er åbent</translation> <translation id="3249845759089040423">Groovy</translation> <translation id="3252266817569339921">Fransk</translation> +<translation id="3257954757204451555">Hvor stammer disse oplysninger fra?</translation> <translation id="3259648571731540213"><ph name="CREATE_GOOGLE_CALENDAR_EVENT_FOCUSED_FRIENDLY_MATCH_TEXT" />, tryk på Tab-tasten efterfulgt af Enter for hurtigt at oprette en ny begivenhed i Google Kalender</translation> <translation id="3266793032086590337">Værdi (modstridende)</translation> <translation id="3268451620468152448">Åbne faner</translation> @@ -1040,6 +1042,7 @@ <translation id="455113658016510503">A9</translation> <translation id="4558551763791394412">Prøv at deaktivere dine udvidelser.</translation> <translation id="4559332380232738994">10x11</translation> +<translation id="4567686777917670400">Din administrator kan ændre konfigurationen af din browser via fjernadgang. Aktivitet på denne enhed administreres muligvis også uden for Chromium. <ph name="BEGIN_LINK" />Få flere oplysninger<ph name="END_LINK" /></translation> <translation id="457875822857220463">Levering</translation> <translation id="4579056131138995126">Personal (Envelope)</translation> <translation id="4582204425268416675">Fjern kort</translation> @@ -1532,6 +1535,7 @@ <translation id="6337534724793800597">Filtrér politikker efter navn</translation> <translation id="6349101878882523185">Installer <ph name="APP_NAME" /></translation> <translation id="6353505687280762741">{COUNT,plural, =0{Ingen}=1{1 adgangskode (til <ph name="DOMAIN_LIST" /> – synkroniseret)}=2{2 adgangskoder (til <ph name="DOMAIN_LIST" /> – synkroniseret)}one{# adgangskode (til <ph name="DOMAIN_LIST" /> – synkroniseret)}other{# adgangskoder (til <ph name="DOMAIN_LIST" /> – synkroniseret)}}</translation> +<translation id="6355392890578844978">Denne browser administreres ikke af en virksomhed eller en anden organisation. Aktivitet på denne enhed administreres muligvis uden for Chromium. <ph name="BEGIN_LINK" />Få flere oplysninger<ph name="END_LINK" /></translation> <translation id="6358450015545214790">Hvad betyder dette?</translation> <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />Tjekker konfigurationen af proxy, firewall og sikker DNS<ph name="END_LINK" /></translation> @@ -1627,7 +1631,6 @@ <translation id="6689249931105087298">Relativ komprimering med sorte punkter</translation> <translation id="6689271823431384964">Chrome tilbyder at gemme dine kort på din Google-konto, fordi du er logget ind. Du kan ændre dette i indstillingerne. Kortindehaverens navn hentes fra din konto.</translation> <translation id="6698381487523150993">Oprettet:</translation> -<translation id="6699188552522342100">Er dette website korrekt?</translation> <translation id="6702919718839027939">Nutid</translation> <translation id="6710213216561001401">Forrige</translation> <translation id="6710594484020273272"><Indtast søgeterm></translation> @@ -1984,6 +1987,7 @@ <translation id="7961015016161918242">Aldrig</translation> <translation id="7966803981046576691">Jobkontotype</translation> <translation id="79682505114836835">Værdien "<ph name="VALUE" />" er en ugyldig hex-farve.</translation> +<translation id="7970392640816874403">Hvad siger andre kilder?</translation> <translation id="7976214039405368314">For mange anmodninger</translation> <translation id="7977538094055660992">Outputenhed</translation> <translation id="7977894662897852582">Edp</translation> @@ -2334,7 +2338,6 @@ <translation id="961663415146723894">Bind nederst</translation> <translation id="962484866189421427">Dette indhold kan forsøge at installere vildledende apps, der foregiver at være noget andet, eller som indsamler data, der kan anvendes til at overvåge dig. <ph name="BEGIN_LINK" />Vis alligevel<ph name="END_LINK" /></translation> <translation id="969892804517981540">Officiel version</translation> -<translation id="973473557718930265">Afslut</translation> <translation id="973773823069644502">Tilføj leveringsadresse</translation> <translation id="975560348586398090">{COUNT,plural, =0{Ingen}=1{1 element}one{# element}other{# elementer}}</translation> <translation id="981121421437150478">Offline</translation>
diff --git a/components/strings/components_strings_de.xtb b/components/strings/components_strings_de.xtb index d656802..2801882 100644 --- a/components/strings/components_strings_de.xtb +++ b/components/strings/components_strings_de.xtb
@@ -470,6 +470,7 @@ <translation id="2596415276201385844">Zum Aufbau einer sicheren Verbindung muss die Uhrzeit richtig eingestellt sein. Der Grund hierfür ist, dass Websites sich mithilfe von Zertifikaten identifizieren, die nur für einen bestimmten Zeitraum gelten. Da die Uhrzeit Ihres Geräts falsch ist, kann Chrome diese Zertifikate nicht bestätigen.</translation> <translation id="2597378329261239068">Dieses Dokument ist passwortgeschützt. Geben Sie ein Passwort ein.</translation> <translation id="2609632851001447353">Varianten</translation> +<translation id="2610561535971892504">Zum Kopieren klicken</translation> <translation id="2618023639789766142">C10 (Umschlag)</translation> <translation id="2625385379895617796">Ihre Uhr geht vor</translation> <translation id="262745152991669301">Darf nachfragen, wenn sie eine Verbindung mit USB-Geräten herstellen möchte</translation> @@ -1615,7 +1616,6 @@ <translation id="6689249931105087298">Relativ mit Schwarzpunktkompensation</translation> <translation id="6689271823431384964">Chrome bietet Ihnen die Möglichkeit, die Karten in Ihrem Google-Konto zu speichern, weil Sie angemeldet sind. Sie können dies in den Einstellungen ändern. Der Name des Karteninhabers stammt aus Ihrem Konto.</translation> <translation id="6698381487523150993">Erstellt:</translation> -<translation id="6699188552522342100">Ist diese Website fehlerfrei?</translation> <translation id="6702919718839027939">Präsentieren</translation> <translation id="6710213216561001401">Zurück</translation> <translation id="6710594484020273272"><Suchbegriff eingeben></translation> @@ -2323,7 +2323,6 @@ <translation id="961663415146723894">Bindung unten</translation> <translation id="962484866189421427">Dieser Inhalt könnte betrügerische Apps installieren, die scheinbar einem anderen Zweck dienen oder Daten erfassen, um Sie auszuspionieren. <ph name="BEGIN_LINK" />Trotzdem zeigen<ph name="END_LINK" /></translation> <translation id="969892804517981540">Offizieller Build</translation> -<translation id="973473557718930265">Beenden</translation> <translation id="973773823069644502">Lieferadresse hinzufügen</translation> <translation id="975560348586398090">{COUNT,plural, =0{Keine}=1{1 Eintrag}other{# Einträge}}</translation> <translation id="981121421437150478">Offline</translation>
diff --git a/components/strings/components_strings_el.xtb b/components/strings/components_strings_el.xtb index 53cf79d3..6dc37d5 100644 --- a/components/strings/components_strings_el.xtb +++ b/components/strings/components_strings_el.xtb
@@ -96,6 +96,7 @@ <translation id="129863573139666797"><ph name="BEGIN_LINK" />Δοκιμάστε να διαγράψετε τα cookie σας<ph name="END_LINK" /></translation> <translation id="1301324364792935241">Ελέγξτε τις ρυθμίσεις ασφαλούς DNS</translation> <translation id="1307966114820526988">Λειτουργίες που καταργήθηκαν</translation> +<translation id="1312803275555673949">Υπάρχουν αποδεικτικά στοιχεία;</translation> <translation id="131405271941274527">Η διεύθυνση <ph name="URL" /> θέλει να στέλνει και να λαμβάνει πληροφορίες όταν ακουμπάτε το τηλέφωνό σας σε μια συσκευή NFC</translation> <translation id="1314509827145471431">Δέσιμο δεξιά</translation> <translation id="1319245136674974084">Να μην ερωτηθώ ξανά για αυτήν την εφαρμογή</translation> @@ -642,6 +643,7 @@ <translation id="3249845759089040423">Μοδάτο</translation> <translation id="3252266817569339921">Γαλλικά </translation> +<translation id="3257954757204451555">Από πού προέρχονται αυτές οι πληροφορίες;</translation> <translation id="3259648571731540213"><ph name="CREATE_GOOGLE_CALENDAR_EVENT_FOCUSED_FRIENDLY_MATCH_TEXT" />, πατήστε το πλήκτρο Tab και έπειτα το πλήκτρο Enter για να δημιουργήσετε γρήγορα ένα νέο συμβάν στο Ημερολόγιο Google</translation> <translation id="3266793032086590337">Τιμή (διένεξη)</translation> <translation id="3268451620468152448">Ανοικτές καρτέλες</translation> @@ -1042,6 +1044,7 @@ <translation id="455113658016510503">A9</translation> <translation id="4558551763791394412">Δοκιμάστε να απενεργοποιήσετε τις επεκτάσεις σας.</translation> <translation id="4559332380232738994">10x11</translation> +<translation id="4567686777917670400">Ο διαχειριστής σας μπορεί να αλλάξει τη ρύθμιση του προγράμματος περιήγησής σας απομακρυσμένα. Η διαχείριση της δραστηριότητας σε αυτήν τη συσκευή μπορεί επίσης να πραγματοποιηθεί εκτός Chromium. <ph name="BEGIN_LINK" />Μάθετε περισσότερα<ph name="END_LINK" /></translation> <translation id="457875822857220463">Παράδοση</translation> <translation id="4579056131138995126">Προσωπικό (Φάκελος)</translation> <translation id="4582204425268416675">Κατάργηση κάρτας</translation> @@ -1536,6 +1539,7 @@ <translation id="6337534724793800597">Φιλτράρισμα πολιτικών με βάση το όνομα</translation> <translation id="6349101878882523185">Εγκατάσταση εφαρμογής <ph name="APP_NAME" /></translation> <translation id="6353505687280762741">{COUNT,plural, =0{Κανένας}=1{1 κωδικός πρόσβασης (για <ph name="DOMAIN_LIST" />, συγχρονισμένος)}=2{2 κωδικοί πρόσβασης (για <ph name="DOMAIN_LIST" />, συγχρονισμένοι)}other{# κωδικοί πρόσβασης (για <ph name="DOMAIN_LIST" />, συγχρονισμένοι)}}</translation> +<translation id="6355392890578844978">Αυτό το πρόγραμμα περιήγησης δεν είναι διαχειριζόμενο από κάποια εταιρεία ή άλλον οργανισμό. Η διαχείριση της δραστηριότητας σε αυτήν τη συσκευή μπορεί να πραγματοποιηθεί εκτός Chromium. <ph name="BEGIN_LINK" />Μάθετε περισσότερα<ph name="END_LINK" /></translation> <translation id="6358450015545214790">Τι σημαίνουν αυτά;</translation> <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />Έλεγχος του διακομιστή μεσολάβησης, του τείχους προστασίας και της διαμόρφωσης ασφαλούς DNS<ph name="END_LINK" /></translation> @@ -1631,7 +1635,6 @@ <translation id="6689249931105087298">Σχετική με τη συμπίεση μαύρου σημείου</translation> <translation id="6689271823431384964">Το Chrome προσφέρεται να αποθηκεύσει τις κάρτες σας στον Λογαριασμό σας Google, επειδή έχετε συνδεθεί. Μπορείτε να αλλάξετε αυτήν τη συμπεριφορά στις ρυθμίσεις. Το όνομα του κατόχου κάρτας προέρχεται από τον λογαριασμό σας.</translation> <translation id="6698381487523150993">Δημιουργήθηκε:</translation> -<translation id="6699188552522342100">Είναι ακριβείς οι πληροφορίες αυτού του ιστοτόπου;</translation> <translation id="6702919718839027939">Παρουσίαση</translation> <translation id="6710213216561001401">Προηγούμενο</translation> <translation id="6710594484020273272"><Πληκτρολογήστε όρο αναζήτησης></translation> @@ -1988,6 +1991,7 @@ <translation id="7961015016161918242">Ποτέ</translation> <translation id="7966803981046576691">Τύπος λογαριασμού εργασίας</translation> <translation id="79682505114836835">Η τιμή <ph name="VALUE" /> δεν είναι ένας έγκυρος δεκαεξαδικός κωδικός χρώματος.</translation> +<translation id="7970392640816874403">Τι λένε άλλες πηγές;</translation> <translation id="7976214039405368314">Πάρα πολλά αιτήματα</translation> <translation id="7977538094055660992">Συσκευή εξόδου</translation> <translation id="7977894662897852582">Edp</translation> @@ -2340,7 +2344,6 @@ <translation id="961663415146723894">Δέσιμο στο κάτω μέρος</translation> <translation id="962484866189421427">Αυτό το περιεχόμενο μπορεί να επιχειρήσει να εγκαταστήσει παραπλανητικές εφαρμογές που προσποιούνται ότι είναι κάτι άλλο ή συλλέγουν δεδομένα τα οποία μπορεί να χρησιμοποιηθούν για την παρακολούθησή σας. <ph name="BEGIN_LINK" />Να εμφανίζεται ούτως ή άλλως<ph name="END_LINK" /></translation> <translation id="969892804517981540">Επίσημη έκδοση</translation> -<translation id="973473557718930265">Έξοδος</translation> <translation id="973773823069644502">Προσθήκη διεύθυνσης παράδοσης</translation> <translation id="975560348586398090">{COUNT,plural, =0{Κανένα}=1{1 στοιχείο}other{# στοιχεία}}</translation> <translation id="981121421437150478">Εκτός σύνδεσης</translation>
diff --git a/components/strings/components_strings_en-GB.xtb b/components/strings/components_strings_en-GB.xtb index aabc3e2e..d657efecd 100644 --- a/components/strings/components_strings_en-GB.xtb +++ b/components/strings/components_strings_en-GB.xtb
@@ -96,6 +96,7 @@ <translation id="129863573139666797"><ph name="BEGIN_LINK" />Try clearing your cookies<ph name="END_LINK" /></translation> <translation id="1301324364792935241">Check your secure DNS settings</translation> <translation id="1307966114820526988">Deprecated features</translation> +<translation id="1312803275555673949">What evidence supports it?</translation> <translation id="131405271941274527"><ph name="URL" /> wants to send and receive info when you tap your phone on an NFC device</translation> <translation id="1314509827145471431">Bind right</translation> <translation id="1319245136674974084">Don’t ask again for this app</translation> @@ -640,6 +641,7 @@ <translation id="3240791268468473923">Secure payment credential no matching credential sheet is opened</translation> <translation id="3249845759089040423">Groovy</translation> <translation id="3252266817569339921">French</translation> +<translation id="3257954757204451555">Who’s behind this information?</translation> <translation id="3259648571731540213"><ph name="CREATE_GOOGLE_CALENDAR_EVENT_FOCUSED_FRIENDLY_MATCH_TEXT" />: press Tab then Enter to create a new event in Google Calendar quickly</translation> <translation id="3266793032086590337">Value (conflict)</translation> <translation id="3268451620468152448">Open tabs</translation> @@ -1039,6 +1041,7 @@ <translation id="455113658016510503">A9</translation> <translation id="4558551763791394412">Try disabling your extensions.</translation> <translation id="4559332380232738994">10x11</translation> +<translation id="4567686777917670400">Your administrator can change your browser setup remotely. Activity on this device may also be managed outside of Chromium. <ph name="BEGIN_LINK" />Learn more<ph name="END_LINK" /></translation> <translation id="457875822857220463">Delivery</translation> <translation id="4579056131138995126">Personal (Envelope)</translation> <translation id="4582204425268416675">Remove card</translation> @@ -1531,6 +1534,7 @@ <translation id="6337534724793800597">Filter policies by name</translation> <translation id="6349101878882523185">Install <ph name="APP_NAME" /></translation> <translation id="6353505687280762741">{COUNT,plural, =0{None}=1{1 password (for <ph name="DOMAIN_LIST" />, synced)}=2{2 passwords (for <ph name="DOMAIN_LIST" />, synced)}other{# passwords (for <ph name="DOMAIN_LIST" />, synced)}}</translation> +<translation id="6355392890578844978">This browser is not managed by a company or other organisation. Activity on this device may be managed outside of Chromium. <ph name="BEGIN_LINK" />Learn more<ph name="END_LINK" /></translation> <translation id="6358450015545214790">What do these mean?</translation> <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />Checking the proxy, firewall and secure DNS configuration<ph name="END_LINK" /></translation> @@ -1626,7 +1630,6 @@ <translation id="6689249931105087298">Relative with black point compression</translation> <translation id="6689271823431384964">Chrome is offering to save your cards in your Google account because you are signed in. You can change this behaviour in settings. The cardholder name comes from your account.</translation> <translation id="6698381487523150993">Created:</translation> -<translation id="6699188552522342100">Is this website accurate?</translation> <translation id="6702919718839027939">Present</translation> <translation id="6710213216561001401">Previous</translation> <translation id="6710594484020273272"><Type search term></translation> @@ -1983,6 +1986,7 @@ <translation id="7961015016161918242">Never</translation> <translation id="7966803981046576691">Job account type</translation> <translation id="79682505114836835">Value '<ph name="VALUE" />' is an invalid hex colour.</translation> +<translation id="7970392640816874403">What do other sources say?</translation> <translation id="7976214039405368314">Too many requests</translation> <translation id="7977538094055660992">Output device</translation> <translation id="7977894662897852582">Edp</translation> @@ -2332,7 +2336,6 @@ <translation id="961663415146723894">Bind bottom</translation> <translation id="962484866189421427">This content might try to install deceptive apps that pretend to be something else or collect data that may be used to track you. <ph name="BEGIN_LINK" />Show anyway<ph name="END_LINK" /></translation> <translation id="969892804517981540">Official Build</translation> -<translation id="973473557718930265">Quit</translation> <translation id="973773823069644502">Add delivery address</translation> <translation id="975560348586398090">{COUNT,plural, =0{None}=1{1 item}other{# items}}</translation> <translation id="981121421437150478">Offline</translation>
diff --git a/components/strings/components_strings_es-419.xtb b/components/strings/components_strings_es-419.xtb index cfad4a9..1f70f8b 100644 --- a/components/strings/components_strings_es-419.xtb +++ b/components/strings/components_strings_es-419.xtb
@@ -1619,7 +1619,6 @@ <translation id="6689249931105087298">Relativo con la compresión de puntos negros</translation> <translation id="6689271823431384964">Como accediste a tu Cuenta de Google, Chrome te ofrece guardar tus tarjetas allí. Puedes modificar este comportamiento en la configuración. El nombre del titular de la tarjeta se obtiene de tu cuenta.</translation> <translation id="6698381487523150993">Creado:</translation> -<translation id="6699188552522342100">¿Este sitio web es preciso?</translation> <translation id="6702919718839027939">Presente</translation> <translation id="6710213216561001401">Anterior</translation> <translation id="6710594484020273272"><Escribe el término de búsqueda></translation> @@ -2326,7 +2325,6 @@ <translation id="961663415146723894">Encuadernado en la parte inferior</translation> <translation id="962484866189421427">Este contenido podría intentar instalar apps engañosas que se hagan pasar por otro tipo de contenido o que recopilen datos que se usen para rastrearte. <ph name="BEGIN_LINK" />Mostrar de todos modos<ph name="END_LINK" /></translation> <translation id="969892804517981540">Build oficial</translation> -<translation id="973473557718930265">Salir</translation> <translation id="973773823069644502">Agregar dirección de entrega</translation> <translation id="975560348586398090">{COUNT,plural, =0{Ninguno}=1{1 elemento}other{# elementos}}</translation> <translation id="981121421437150478">Sin conexión</translation>
diff --git a/components/strings/components_strings_es.xtb b/components/strings/components_strings_es.xtb index 2d98868..e6aae1c0 100644 --- a/components/strings/components_strings_es.xtb +++ b/components/strings/components_strings_es.xtb
@@ -96,6 +96,7 @@ <translation id="129863573139666797"><ph name="BEGIN_LINK" />Borrar las cookies<ph name="END_LINK" /></translation> <translation id="1301324364792935241">Revisa tu configuración de DNS seguro</translation> <translation id="1307966114820526988">Funciones obsoletas</translation> +<translation id="1312803275555673949">¿Qué pruebas la respaldan?</translation> <translation id="131405271941274527"><ph name="URL" /> quiere enviar y recibir información cuando tu teléfono toque un dispositivo NFC</translation> <translation id="1314509827145471431">Encuadernar por la derecha</translation> <translation id="1319245136674974084">No volver a preguntar para esta aplicación</translation> @@ -641,6 +642,7 @@ <translation id="3240791268468473923">Se ha abierto la hoja de credenciales de pago seguro con una credencial que no coincide</translation> <translation id="3249845759089040423">Estilosa</translation> <translation id="3252266817569339921">Francés</translation> +<translation id="3257954757204451555">¿Quién está detrás de esta información?</translation> <translation id="3259648571731540213"><ph name="CREATE_GOOGLE_CALENDAR_EVENT_FOCUSED_FRIENDLY_MATCH_TEXT" />, pulsa Tabulador y luego Intro para crear un nuevo evento en Google Calendar rápidamente</translation> <translation id="3266793032086590337">Valor (en conflicto)</translation> <translation id="3268451620468152448">Pestañas abiertas</translation> @@ -1040,6 +1042,7 @@ <translation id="455113658016510503">A9</translation> <translation id="4558551763791394412">Inhabilita las extensiones.</translation> <translation id="4559332380232738994">10x11</translation> +<translation id="4567686777917670400">El administrador puede cambiar la configuración del navegador de forma remota. Es posible que la actividad de este dispositivo también se gestione fuera de Chromium. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation> <translation id="457875822857220463">Envío</translation> <translation id="4579056131138995126">Personal (sobre)</translation> <translation id="4582204425268416675">Eliminar tarjeta</translation> @@ -1532,6 +1535,7 @@ <translation id="6337534724793800597">Filtrar políticas por nombre</translation> <translation id="6349101878882523185">Instalar <ph name="APP_NAME" /></translation> <translation id="6353505687280762741">{COUNT,plural, =0{Ninguna}=1{1 contraseña de <ph name="DOMAIN_LIST" /> (sincronizada)}=2{2 contraseñas de <ph name="DOMAIN_LIST" /> (sincronizadas)}other{# contraseñas de <ph name="DOMAIN_LIST" /> (sincronizadas)}}</translation> +<translation id="6355392890578844978">Ninguna empresa u organización gestiona este navegador. Es posible que la actividad de este dispositivo se gestione fuera de Chromium. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation> <translation id="6358450015545214790">¿Necesitas ayuda?</translation> <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />Comprobar la configuración de proxy, cortafuegos y DNS seguro<ph name="END_LINK" /></translation> @@ -1627,7 +1631,6 @@ <translation id="6689249931105087298">Relativo con compresión de puntos negros</translation> <translation id="6689271823431384964">Chrome te ofrece guardar las tarjetas en tu cuenta de Google porque has iniciado sesión. Puedes cambiar esta opción en los ajustes. El nombre del titular procede de tu cuenta.</translation> <translation id="6698381487523150993">Creado:</translation> -<translation id="6699188552522342100">¿Este sitio web es preciso?</translation> <translation id="6702919718839027939">Presentar</translation> <translation id="6710213216561001401">Anterior</translation> <translation id="6710594484020273272"><Introducir término de búsqueda></translation> @@ -1984,6 +1987,7 @@ <translation id="7961015016161918242">Nunca</translation> <translation id="7966803981046576691">Tipo de cuenta de tarea</translation> <translation id="79682505114836835">El valor "<ph name="VALUE" />" no es un color hexadecimal válido.</translation> +<translation id="7970392640816874403">¿Qué dicen otras fuentes?</translation> <translation id="7976214039405368314">Demasiadas solicitudes</translation> <translation id="7977538094055660992">Dispositivo de salida</translation> <translation id="7977894662897852582">Edp</translation> @@ -2333,7 +2337,6 @@ <translation id="961663415146723894">Encuadernar por la parte inferior</translation> <translation id="962484866189421427">Este contenido podría intentar instalar aplicaciones engañosas que se hagan pasar por otra persona o recojan datos que podrían usarse para realizar un seguimiento de tu actividad. <ph name="BEGIN_LINK" />Mostrar de todos modos<ph name="END_LINK" /></translation> <translation id="969892804517981540">Build oficial</translation> -<translation id="973473557718930265">Salir</translation> <translation id="973773823069644502">Añadir dirección de entrega</translation> <translation id="975560348586398090">{COUNT,plural, =0{Ninguno}=1{1 elemento}other{# elementos}}</translation> <translation id="981121421437150478">Sin conexión</translation>
diff --git a/components/strings/components_strings_et.xtb b/components/strings/components_strings_et.xtb index 41128cc..8d01a87 100644 --- a/components/strings/components_strings_et.xtb +++ b/components/strings/components_strings_et.xtb
@@ -96,6 +96,7 @@ <translation id="129863573139666797"><ph name="BEGIN_LINK" />Kustutage küpsisefailid<ph name="END_LINK" /></translation> <translation id="1301324364792935241">Kontrollige turvalise DNS-i seadeid</translation> <translation id="1307966114820526988">Katkestatud toega funktsioonid</translation> +<translation id="1312803275555673949">Millised tõendid seda toetavad?</translation> <translation id="131405271941274527"><ph name="URL" /> soovib andmeid saata ja vastu võtta, kui puudutate telefoniga NFC-seadet</translation> <translation id="1314509827145471431">Köide paremal</translation> <translation id="1319245136674974084">Ära enam selle rakenduse kohta küsi</translation> @@ -640,6 +641,7 @@ <translation id="3240791268468473923">Turvalise maksemandaadi leht selle kohta, et pole ühtegi sobivat mandaati, on avatud</translation> <translation id="3249845759089040423">Särtsakas</translation> <translation id="3252266817569339921">prantsuse keel</translation> +<translation id="3257954757204451555">Kelle selle teabe taga on?</translation> <translation id="3259648571731540213"><ph name="CREATE_GOOGLE_CALENDAR_EVENT_FOCUSED_FRIENDLY_MATCH_TEXT" />, rakenduses Google'i kalender kiirelt uue sündmuse loomiseks vajutage tabulaatorit ja seejärel sisestusklahvi</translation> <translation id="3266793032086590337">Väärtus (konflikt)</translation> <translation id="3268451620468152448">Avatud vahelehed</translation> @@ -1039,6 +1041,7 @@ <translation id="455113658016510503">A9</translation> <translation id="4558551763791394412">Keelake laiendused.</translation> <translation id="4559332380232738994">10x11</translation> +<translation id="4567686777917670400">Teie administraator saab brauseri seadistust kaugühenduse kaudu muuta. Selle seadme tegevusi võidakse hallata ka väljaspool Chromiumi. <ph name="BEGIN_LINK" />Lisateave<ph name="END_LINK" /></translation> <translation id="457875822857220463">Kohaletoimetamine</translation> <translation id="4579056131138995126">Personal (ümbrik)</translation> <translation id="4582204425268416675">Kaardi eemaldamine</translation> @@ -1531,6 +1534,7 @@ <translation id="6337534724793800597">Reeglite filtreerimine nime järgi</translation> <translation id="6349101878882523185">Installi <ph name="APP_NAME" /></translation> <translation id="6353505687280762741">{COUNT,plural, =0{Puudub}=1{1 parool (loendile <ph name="DOMAIN_LIST" />, sünkroonitud)}=2{2 parooli (loendile <ph name="DOMAIN_LIST" />, sünkroonitud)}other{# parooli (loendile <ph name="DOMAIN_LIST" />, sünkroonitud)}}</translation> +<translation id="6355392890578844978">Seda brauserit ei halda ettevõte ega muu organisatsioon. Selle seadme tegevusi võidakse hallata ka väljaspool Chromiumi. <ph name="BEGIN_LINK" />Lisateave<ph name="END_LINK" /></translation> <translation id="6358450015545214790">Mida need tähendavad?</translation> <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />Kontrollitakse puhverserveri, tulemüüri ja turvalise DNS-i seadistust<ph name="END_LINK" /></translation> @@ -1626,7 +1630,6 @@ <translation id="6689249931105087298">Suhteline, musta punkti tihendamisega</translation> <translation id="6689271823431384964">Chrome pakub kaartide salvestamist teie Google'i kontole, kuna olete sisse logitud. Seda käitumist saab seadetes muuta. Kaardiomaniku nimi pärineb teie kontolt.</translation> <translation id="6698381487523150993">Loodud:</translation> -<translation id="6699188552522342100">Kas see veebisait on õige?</translation> <translation id="6702919718839027939">Esitlemine</translation> <translation id="6710213216561001401">Eelmine</translation> <translation id="6710594484020273272"><Sisestage otsingutermin></translation> @@ -1983,6 +1986,7 @@ <translation id="7961015016161918242">Mitte kunagi</translation> <translation id="7966803981046576691">Töökonto tüüp</translation> <translation id="79682505114836835">Väärtus „<ph name="VALUE" />“ on sobimatu kuueteistkümnendsüsteemis värvikood.</translation> +<translation id="7970392640816874403">Mida teised allikad ütlevad?</translation> <translation id="7976214039405368314">Liiga palju päringuid</translation> <translation id="7977538094055660992">Väljundseade</translation> <translation id="7977894662897852582">Edp</translation> @@ -2332,7 +2336,6 @@ <translation id="961663415146723894">Köide all</translation> <translation id="962484866189421427">Sisu võib üritada installida petturlikke rakendusi, mis esinevad millegi muuna või koguvad andmeid, mida saab kasutada teie jälgimiseks. <ph name="BEGIN_LINK" />Kuva siiski<ph name="END_LINK" /></translation> <translation id="969892804517981540">Ametlik järk</translation> -<translation id="973473557718930265">Välju</translation> <translation id="973773823069644502">Lisage kohaletoimetamisaadress</translation> <translation id="975560348586398090">{COUNT,plural, =0{Ühtegi}=1{1 üksus}other{# üksust}}</translation> <translation id="981121421437150478">Võrguühenduseta</translation>
diff --git a/components/strings/components_strings_eu.xtb b/components/strings/components_strings_eu.xtb index 238da23..36100ee8 100644 --- a/components/strings/components_strings_eu.xtb +++ b/components/strings/components_strings_eu.xtb
@@ -1613,7 +1613,6 @@ <translation id="6689249931105087298">Erlatiboa, puntu beltzen konprimaketarekin</translation> <translation id="6689271823431384964">Saioa hasita duzunez, txartelak Google-ko kontuan gordetzeko aukera ematen dizu Chrome-k. Aukera hori aldatzeko, joan Ezarpenak atalera. Txartelaren titularraren izena kontutik hartu da.</translation> <translation id="6698381487523150993">Sortze-data:</translation> -<translation id="6699188552522342100">Zuzena al da webgunea?</translation> <translation id="6702919718839027939">Aurkeztu</translation> <translation id="6710213216561001401">Aurrekoa</translation> <translation id="6710594484020273272"><Idatzi bilaketa-hitza></translation> @@ -2319,7 +2318,6 @@ <translation id="961663415146723894">Koadernatu behetik</translation> <translation id="962484866189421427">Eduki hau beste zerbaiten plantak egiten dituzten aplikazio iruzurtiak instalatzen saia daiteke edo datuak bil ditzake zure jarraipena egiteko. <ph name="BEGIN_LINK" />Erakutsi hala ere<ph name="END_LINK" /></translation> <translation id="969892804517981540">Konpilazio ofiziala</translation> -<translation id="973473557718930265">Irten</translation> <translation id="973773823069644502">Gehitu entrega-helbidea</translation> <translation id="975560348586398090">{COUNT,plural, =0{Bat ere ez}=1{1 elementu}other{# elementu}}</translation> <translation id="981121421437150478">Konexiorik gabekoak</translation>
diff --git a/components/strings/components_strings_fa.xtb b/components/strings/components_strings_fa.xtb index 4c4ccefb..4423847 100644 --- a/components/strings/components_strings_fa.xtb +++ b/components/strings/components_strings_fa.xtb
@@ -96,6 +96,7 @@ <translation id="129863573139666797"><ph name="BEGIN_LINK" />کوکیها را پاک کنید<ph name="END_LINK" /></translation> <translation id="1301324364792935241">تنظیمات DNS امن را بررسی کنید</translation> <translation id="1307966114820526988">ویژگیهای منسوخشده</translation> +<translation id="1312803275555673949">چه شواهدی آن را تأیید میکند؟</translation> <translation id="131405271941274527"><ph name="URL" /> میخواهد وقتی با تلفنتان روی دستگاه NFC ضربه میزنید، اطلاعات را ارسال و دریافت کند</translation> <translation id="1314509827145471431">بههم چسباندن از راست</translation> <translation id="1319245136674974084">دیگر برای این برنامه سؤال نشود</translation> @@ -641,6 +642,7 @@ <translation id="3240791268468473923">برگ «اطلاعات کاربری مطابقت ندارد» در روند وارد کردن اطلاعات کاربری پرداخت امن باز شد</translation> <translation id="3249845759089040423">شیک</translation> <translation id="3252266817569339921">فرانسوی</translation> +<translation id="3257954757204451555">چه کسی مسئول این اطلاعات است؟</translation> <translation id="3259648571731540213"><ph name="CREATE_GOOGLE_CALENDAR_EVENT_FOCUSED_FRIENDLY_MATCH_TEXT" />؛ برای ایجاد سریع رویداد جدید در «تقویم Google»، کلید «جهش» و سپس «ورود» را فشار دهید</translation> <translation id="3266793032086590337">مقدار (مغایر)</translation> <translation id="3268451620468152448">برگههای باز</translation> @@ -1040,6 +1042,7 @@ <translation id="455113658016510503">A9</translation> <translation id="4558551763791394412">افزونهها را غیرفعال کنید.</translation> <translation id="4559332380232738994">10x11</translation> +<translation id="4567686777917670400">سرپرستتان میتواند تنظیمات مرورگرتان را ازراهدور تغییر دهد. ممکن است فعالیتهای انجامشده در این دستگاه خارج از Chromium هم مدیریت شود. <ph name="BEGIN_LINK" />بیشتر بدانید<ph name="END_LINK" /></translation> <translation id="457875822857220463">ارسال</translation> <translation id="4579056131138995126">Personal (Envelope)</translation> <translation id="4582204425268416675">برداشتن کارت</translation> @@ -1532,6 +1535,7 @@ <translation id="6337534724793800597">فیلتر کردن خطمشیها براساس نام</translation> <translation id="6349101878882523185">نصب <ph name="APP_NAME" /></translation> <translation id="6353505687280762741">{COUNT,plural, =0{هیچکدام}=1{۱ گذرواژه (برای <ph name="DOMAIN_LIST" />، همگامسازیشده)}=2{۲ گذرواژه (برای <ph name="DOMAIN_LIST" />، همگامسازیشده)}one{# گذرواژه (برای <ph name="DOMAIN_LIST" />، همگامسازیشده)}other{# گذرواژه (برای <ph name="DOMAIN_LIST" />، همگامسازیشده)}}</translation> +<translation id="6355392890578844978">شرکت یا سازمان دیگری این مرورگر را مدیریت نمیکند. ممکن است فعالیتهای انجامشده در این دستگاه خارج از Chromium مدیریت شود. <ph name="BEGIN_LINK" />بیشتر بدانید<ph name="END_LINK" /></translation> <translation id="6358450015545214790">معنی اینها چیست؟</translation> <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />بررسی پیکربندی پراکسی، دیوار آتش و DNS امن<ph name="END_LINK" /></translation> @@ -1627,7 +1631,6 @@ <translation id="6689249931105087298">نسبی با فشردهسازی نقطه سیاه</translation> <translation id="6689271823431384964">چون به سیستم وارد شدهاید، Chrome پیشنهاد میکند کارتها را در حساب Google ذخیره کنید. در تنظیمات میتوانید این رفتار را تغییر دهید. نام دارنده کارت از حساب شما گرفته شده است.</translation> <translation id="6698381487523150993">ایجاد شده:</translation> -<translation id="6699188552522342100">این وبسایت درست است؟</translation> <translation id="6702919718839027939">ارائه کردن</translation> <translation id="6710213216561001401">قبلی</translation> <translation id="6710594484020273272"><عبارت جستجو را تایپ کنید></translation> @@ -1984,6 +1987,7 @@ <translation id="7961015016161918242">هرگز</translation> <translation id="7966803981046576691">نوع حساب کار</translation> <translation id="79682505114836835">مقدار «<ph name="VALUE" />» رنگ hex نامعتبر است.</translation> +<translation id="7970392640816874403">منابع دیگر چه میگویند؟</translation> <translation id="7976214039405368314">تعداد درخواستها بیش از حد است</translation> <translation id="7977538094055660992">دستگاه خروجی</translation> <translation id="7977894662897852582">Edp</translation> @@ -2333,7 +2337,6 @@ <translation id="961663415146723894">بههم چسباندن از پایین</translation> <translation id="962484866189421427">این محتوا ممکن است برنامههای فریبدهندهای نصب کند که وانمود میکنند برنامه دیگری هستند یا اینکه دادههایی برای ردیابی شما جمعآوری میکنند. <ph name="BEGIN_LINK" />درهرصورت نشان داده شود<ph name="END_LINK" /></translation> <translation id="969892804517981540">ساخت رسمی</translation> -<translation id="973473557718930265">خروج</translation> <translation id="973773823069644502">افزودن نشانی ارسال</translation> <translation id="975560348586398090">{COUNT,plural, =0{هیچکدام}=1{۱ مورد}one{# مورد}other{# مورد}}</translation> <translation id="981121421437150478">آفلاین</translation>
diff --git a/components/strings/components_strings_fi.xtb b/components/strings/components_strings_fi.xtb index 53aaf449..00d8e216 100644 --- a/components/strings/components_strings_fi.xtb +++ b/components/strings/components_strings_fi.xtb
@@ -1628,7 +1628,6 @@ <translation id="6689249931105087298">Suhteellinen mustan pisteen pakkauksella</translation> <translation id="6689271823431384964">Chrome tarjoaa korttien tallentamista Google-tilillesi, koska olet kirjautuneena sisään. Voit muuttaa tätä koska tahansa asetuksista. Kortinhaltijan nimi on peräisin tililtäsi.</translation> <translation id="6698381487523150993">Luomispvm:</translation> -<translation id="6699188552522342100">Ovatko sivuston tiedot oikein?</translation> <translation id="6702919718839027939">Esitystila</translation> <translation id="6710213216561001401">Edellinen</translation> <translation id="6710594484020273272"><Anna hakukysely></translation> @@ -2335,7 +2334,6 @@ <translation id="961663415146723894">Alareuna sidottu</translation> <translation id="962484866189421427">Tämä sisältö voi yrittää asentaa petollisia sovelluksia, jotka esiintyvät jonakin muuna tai keräävät tietoja, joilla sinua voidaan seurata. <ph name="BEGIN_LINK" />Näytä silti<ph name="END_LINK" /></translation> <translation id="969892804517981540">Virallinen koontiversio</translation> -<translation id="973473557718930265">Sulje</translation> <translation id="973773823069644502">Lisää jakeluosoite</translation> <translation id="975560348586398090">{COUNT,plural, =0{Ei mitään}=1{1 kohde}other{# kohdetta}}</translation> <translation id="981121421437150478">Offline</translation>
diff --git a/components/strings/components_strings_fil.xtb b/components/strings/components_strings_fil.xtb index fd07dc2..5b9d94c 100644 --- a/components/strings/components_strings_fil.xtb +++ b/components/strings/components_strings_fil.xtb
@@ -1627,7 +1627,6 @@ <translation id="6689249931105087298">Kaugnay sa black point compression</translation> <translation id="6689271823431384964">Nag-aalok ang Chrome na i-save ang iyong mga card sa Google Account mo dahil naka-sign in ka. Puwede mong baguhin ang gawing ito sa mga setting. Mula sa iyong account ang pangalan ng cardholder.</translation> <translation id="6698381487523150993">Nalikha:</translation> -<translation id="6699188552522342100">Tumpak ba ang website na ito?</translation> <translation id="6702919718839027939">I-present</translation> <translation id="6710213216561001401">Nauna</translation> <translation id="6710594484020273272"><I-type ang termino para sa paghahanap></translation> @@ -2333,7 +2332,6 @@ <translation id="961663415146723894">Bind bottom</translation> <translation id="962484866189421427">Maaaring subukan ng content na itong mag-install ng mga mapanlinlang na app na nagpapanggap na ibang bagay o nangongolekta ng data na maaaring gamitin para subaybayan ka. <ph name="BEGIN_LINK" />Ipakita pa rin<ph name="END_LINK" /></translation> <translation id="969892804517981540">Official Build</translation> -<translation id="973473557718930265">Isara</translation> <translation id="973773823069644502">Magdagdag ng Address sa Paghahatid</translation> <translation id="975560348586398090">{COUNT,plural, =0{Wala}=1{1 item}one{# item}other{# na item}}</translation> <translation id="981121421437150478">Offline</translation>
diff --git a/components/strings/components_strings_fr-CA.xtb b/components/strings/components_strings_fr-CA.xtb index 51fb8c1..5a62a767 100644 --- a/components/strings/components_strings_fr-CA.xtb +++ b/components/strings/components_strings_fr-CA.xtb
@@ -1618,7 +1618,6 @@ <translation id="6689249931105087298">Valeur relative avec compression des points noirs</translation> <translation id="6689271823431384964">Chrome vous propose d'enregistrer vos cartes dans votre compte Google parce que vous y êtes connecté. Vous pouvez modifier ce comportement dans les paramètres. Le nom du détenteur de la carte provient de votre compte.</translation> <translation id="6698381487523150993">Créé :</translation> -<translation id="6699188552522342100">S'agit-il du bon site Web?</translation> <translation id="6702919718839027939">Présentation</translation> <translation id="6710213216561001401">Précédent</translation> <translation id="6710594484020273272"><Entrez un terme de recherche></translation> @@ -2324,7 +2323,6 @@ <translation id="961663415146723894">Reliure en bas</translation> <translation id="962484866189421427">Ce contenu peut essayer d'installer des applications trompeuses qui prétendent être autre chose que ce qu'elles sont ou qui collectent des données pouvant être utilisées pour effectuer le suivi de votre activité. <ph name="BEGIN_LINK" />Afficher quand même<ph name="END_LINK" /></translation> <translation id="969892804517981540">Version officielle</translation> -<translation id="973473557718930265">Quitter</translation> <translation id="973773823069644502">Ajouter une adresse de livraison</translation> <translation id="975560348586398090">{COUNT,plural, =0{Aucun}=1{1 élément}one{# élément}other{# éléments}}</translation> <translation id="981121421437150478">Hors ligne</translation>
diff --git a/components/strings/components_strings_fr.xtb b/components/strings/components_strings_fr.xtb index 3a4aa73d..6539a81 100644 --- a/components/strings/components_strings_fr.xtb +++ b/components/strings/components_strings_fr.xtb
@@ -96,6 +96,7 @@ <translation id="129863573139666797"><ph name="BEGIN_LINK" />Essayez de supprimer les cookies.<ph name="END_LINK" /></translation> <translation id="1301324364792935241">Vérifier les paramètres du DNS sécurisé</translation> <translation id="1307966114820526988">Fonctionnalités obsolètes</translation> +<translation id="1312803275555673949">Quelle est la preuve à l'appui ?</translation> <translation id="131405271941274527"><ph name="URL" /> souhaite envoyer et recevoir des informations lorsque votre téléphone entre en contact avec un appareil NFC</translation> <translation id="1314509827145471431">Reliure à droite</translation> <translation id="1319245136674974084">Ne plus me demander pour cette appli</translation> @@ -641,6 +642,7 @@ <translation id="3240791268468473923">La bottom sheet indiquant qu'aucun identifiant ne correspond pour le paiement sécurisé est ouverte</translation> <translation id="3249845759089040423">Tendance</translation> <translation id="3252266817569339921">Français</translation> +<translation id="3257954757204451555">Qui est à l'origine de ces infos ?</translation> <translation id="3259648571731540213"><ph name="CREATE_GOOGLE_CALENDAR_EVENT_FOCUSED_FRIENDLY_MATCH_TEXT" />, appuyez sur Tabulation, puis sur Entrée pour créer rapidement un événement dans Google Agenda</translation> <translation id="3266793032086590337">Valeur (conflit)</translation> <translation id="3268451620468152448">Onglets ouverts</translation> @@ -1040,6 +1042,7 @@ <translation id="455113658016510503">A9</translation> <translation id="4558551763791394412">Essayez de désactiver les extensions.</translation> <translation id="4559332380232738994">10x11</translation> +<translation id="4567686777917670400">Votre administrateur peut modifier à distance la configuration de votre navigateur. Il se peut que l'activité sur cet appareil soit gérée en dehors de Chromium. <ph name="BEGIN_LINK" />En savoir plus<ph name="END_LINK" /></translation> <translation id="457875822857220463">Livraison</translation> <translation id="4579056131138995126">Personal (enveloppe)</translation> <translation id="4582204425268416675">Supprimer la carte</translation> @@ -1532,6 +1535,7 @@ <translation id="6337534724793800597">Filtrer les règles par nom</translation> <translation id="6349101878882523185">Installer <ph name="APP_NAME" /></translation> <translation id="6353505687280762741">{COUNT,plural, =0{Aucun}=1{1 mot de passe (associé à <ph name="DOMAIN_LIST" /> ; synchronisé)}=2{2 mots de passe (associés à <ph name="DOMAIN_LIST" /> ; synchronisés)}one{# mot de passe (associé à <ph name="DOMAIN_LIST" /> ; synchronisé)}other{# mots de passe (associés à <ph name="DOMAIN_LIST" /> ; synchronisés)}}</translation> +<translation id="6355392890578844978">Ce navigateur n'est géré par aucune entreprise ni aucune autre organisation. Il se peut que l'activité sur cet appareil soit gérée en dehors de Chromium. <ph name="BEGIN_LINK" />En savoir plus<ph name="END_LINK" /></translation> <translation id="6358450015545214790">Qu'est-ce que c'est ?</translation> <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />Vérifier les configurations du proxy, du pare-feu et du DNS sécurisé<ph name="END_LINK" /></translation> @@ -1627,7 +1631,6 @@ <translation id="6689249931105087298">Valeur relative avec compression des points noirs</translation> <translation id="6689271823431384964">Chrome propose d'enregistrer vos cartes dans votre compte Google, car vous êtes connecté. Vous pouvez modifier ce comportement dans les paramètres. Le nom du titulaire de la carte provient de votre compte.</translation> <translation id="6698381487523150993">Créé :</translation> -<translation id="6699188552522342100">Ce site Web est-il correct ?</translation> <translation id="6702919718839027939">Présenter</translation> <translation id="6710213216561001401">Précédent</translation> <translation id="6710594484020273272"><Saisissez le terme de recherche></translation> @@ -1985,6 +1988,7 @@ <translation id="7961015016161918242">Jamais</translation> <translation id="7966803981046576691">Type de compte de travail</translation> <translation id="79682505114836835">La couleur hexadécimale "<ph name="VALUE" />" n'est pas valide.</translation> +<translation id="7970392640816874403">Qu'en disent les autres sources ?</translation> <translation id="7976214039405368314">Trop de demandes</translation> <translation id="7977538094055660992">Périphérique de sortie</translation> <translation id="7977894662897852582">Edp</translation> @@ -2334,7 +2338,6 @@ <translation id="961663415146723894">Reliure en bas</translation> <translation id="962484866189421427">Ce contenu peut essayer d'installer des applications trompeuses se faisant passer pour d'autres, ou de collecter des données afin de vous surveiller. <ph name="BEGIN_LINK" />Je souhaite y accéder malgré tout.<ph name="END_LINK" /></translation> <translation id="969892804517981540">Build officiel</translation> -<translation id="973473557718930265">Quitter</translation> <translation id="973773823069644502">Ajouter une adresse d'expédition</translation> <translation id="975560348586398090">{COUNT,plural, =0{Aucun}=1{1 élément}one{# élément}other{# éléments}}</translation> <translation id="981121421437150478">Hors connexion</translation>
diff --git a/components/strings/components_strings_gl.xtb b/components/strings/components_strings_gl.xtb index 19810efd..e87cff0 100644 --- a/components/strings/components_strings_gl.xtb +++ b/components/strings/components_strings_gl.xtb
@@ -1626,7 +1626,6 @@ <translation id="6689249931105087298">Relativo con compresión de puntos negros</translation> <translation id="6689271823431384964">Chrome permíteche gardar as túas tarxetas na túa Conta de Google porque tes a sesión iniciada. Podes cambiar esta opción na configuración cando queiras. O nome do titular da tarxeta procede da túa conta.</translation> <translation id="6698381487523150993">Creada:</translation> -<translation id="6699188552522342100">Este sitio web é exacto?</translation> <translation id="6702919718839027939">Presentar</translation> <translation id="6710213216561001401">Anterior</translation> <translation id="6710594484020273272"><Escribe un termo de busca></translation> @@ -2332,7 +2331,6 @@ <translation id="961663415146723894">Encadernación na parte inferior</translation> <translation id="962484866189421427">Este contido pode tentar instalar aplicacións enganosas que pretenden pasar por algo que non son ou recompilar datos que se poden utilizar para facer un seguimento das túas accións. <ph name="BEGIN_LINK" />Mostrar igualmente<ph name="END_LINK" /></translation> <translation id="969892804517981540">Compilación oficial</translation> -<translation id="973473557718930265">Saír</translation> <translation id="973773823069644502">Engadir enderezo de entrega</translation> <translation id="975560348586398090">{COUNT,plural, =0{Ningún}=1{1 elemento}other{# elementos}}</translation> <translation id="981121421437150478">Sen conexión</translation>
diff --git a/components/strings/components_strings_gu.xtb b/components/strings/components_strings_gu.xtb index 4b3db27..85e49a6 100644 --- a/components/strings/components_strings_gu.xtb +++ b/components/strings/components_strings_gu.xtb
@@ -1625,7 +1625,6 @@ <translation id="6689249931105087298">કાળા પૉઇન્ટને નાનો કરવા સંબંધિત</translation> <translation id="6689271823431384964">તમે સાઇન ઇન કરેલું છે તેથી Chrome તમને તમારા કાર્ડ તમારા Google એકાઉન્ટમાં સાચવવાની ઑફર કરે છે. તમે સેટિંગમાં આ વર્તણૂકને બદલી શકો છો. કાર્ડધારકનું નામ તમારા એકાઉન્ટમાંથી આવે છે.</translation> <translation id="6698381487523150993">બનાવેલા:</translation> -<translation id="6699188552522342100">શું આ વેબસાઇટ સચોટ છે?</translation> <translation id="6702919718839027939">પ્રસ્તુત કરો</translation> <translation id="6710213216561001401">પાછલી</translation> <translation id="6710594484020273272"><શોધ શબ્દ લખો></translation> @@ -2331,7 +2330,6 @@ <translation id="961663415146723894">નીચેની બાજુએ જોડો</translation> <translation id="962484866189421427">આ કન્ટેન્ટ કદાચ ભ્રામક ઍપ ઇન્સ્ટૉલ કરવાનો પ્રયાસ કરે છે કે જે પોતાની ખોટી ઓળખ આપે છે અથવા તમને ટ્રૅક કરવા માટે ઉપયોગમાં લઈ શકાય તેવો ડેટા મેળવે છે. <ph name="BEGIN_LINK" />તો પણ બતાવો<ph name="END_LINK" /></translation> <translation id="969892804517981540">આધિકારિક બિલ્ડ</translation> -<translation id="973473557718930265">છોડી દો</translation> <translation id="973773823069644502">વિતરણ માટેનું સરનામું ઉમેરો</translation> <translation id="975560348586398090">{COUNT,plural, =0{કોઈ નહીં}=1{1 આઇટમ}one{# આઇટમ}other{# આઇટમ}}</translation> <translation id="981121421437150478">ઑફલાઇન</translation>
diff --git a/components/strings/components_strings_hi.xtb b/components/strings/components_strings_hi.xtb index 78c5c02..d94348c 100644 --- a/components/strings/components_strings_hi.xtb +++ b/components/strings/components_strings_hi.xtb
@@ -1627,7 +1627,6 @@ <translation id="6689249931105087298">ब्लैक पॉइंट कंप्रेशन से मिलता-जुलता</translation> <translation id="6689271823431384964">आपके साइन इन किए होने की वजह से, Chrome आपको Google खाते में कार्ड सेव करने की सुविधा देता है. आप 'सेटिंग' में जाकर इसे बदल सकते हैं. कार्डधारक का नाम आपके खाते से लिया जाता है.</translation> <translation id="6698381487523150993">निर्मित:</translation> -<translation id="6699188552522342100">क्या यह वेबसाइट सही है?</translation> <translation id="6702919718839027939">प्रज़ेंट</translation> <translation id="6710213216561001401">पिछला</translation> <translation id="6710594484020273272"><खोज शब्द लिखें></translation> @@ -2334,7 +2333,6 @@ <translation id="961663415146723894">नीचे की ओर बाइंड</translation> <translation id="962484866189421427">यह सामग्री ऐसे धोखा देने वाले ऐप्लिकेशन इंस्टॉल कर सकती है जो कुछ और होने का दावा करते हैं या ऐसा डेटा इकट्ठा करते हैं जिसका इस्तेमाल आप पर नज़र रखने के लिए किया जा सके. <ph name="BEGIN_LINK" />फिर भी दिखाएं<ph name="END_LINK" /></translation> <translation id="969892804517981540">आधिकारिक बिल्ड</translation> -<translation id="973473557718930265">छोड़ें</translation> <translation id="973773823069644502">डिलीवरी का पता जोड़ें</translation> <translation id="975560348586398090">{COUNT,plural, =0{कुछ नहीं}=1{1 आइटम}one{# आइटम}other{# आइटम}}</translation> <translation id="981121421437150478">ऑफ़लाइन</translation>
diff --git a/components/strings/components_strings_hr.xtb b/components/strings/components_strings_hr.xtb index 2bb7762..91f0c489 100644 --- a/components/strings/components_strings_hr.xtb +++ b/components/strings/components_strings_hr.xtb
@@ -96,6 +96,7 @@ <translation id="129863573139666797"><ph name="BEGIN_LINK" />Izbrišite kolačiće<ph name="END_LINK" /></translation> <translation id="1301324364792935241">Provjerite postavke sigurnog DNS-a</translation> <translation id="1307966114820526988">Ukinute značajke</translation> +<translation id="1312803275555673949">Koji to dokazi podržavaju?</translation> <translation id="131405271941274527"><ph name="URL" /> želi slati i primati informacije kad telefonom dodirnete NFC uređaj</translation> <translation id="1314509827145471431">Uvez s desne strane</translation> <translation id="1319245136674974084">Ne pitaj ponovno za ovu aplikaciju</translation> @@ -641,6 +642,7 @@ <translation id="3240791268468473923">Otvoren je list obavijesti da nema podudarnih vjerodajnica za sigurno plaćanje</translation> <translation id="3249845759089040423">Živopisno</translation> <translation id="3252266817569339921">Francuski</translation> +<translation id="3257954757204451555">Tko stoji iza ovih podataka?</translation> <translation id="3259648571731540213"><ph name="CREATE_GOOGLE_CALENDAR_EVENT_FOCUSED_FRIENDLY_MATCH_TEXT" />, pritisnite Tab, a zatim Enter da biste brzo izradili novi događaj u Google kalendaru</translation> <translation id="3266793032086590337">Vrijednost (sukob)</translation> <translation id="3268451620468152448">Otvorene kartice</translation> @@ -1040,6 +1042,7 @@ <translation id="455113658016510503">A9</translation> <translation id="4558551763791394412">Pokušajte onemogućiti proširenja.</translation> <translation id="4559332380232738994">10x11</translation> +<translation id="4567686777917670400">Vaš administrator može daljinski promijeniti postavke preglednika. Aktivnostima na ovom uređaju može se upravljati i izvan Chromiuma. <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation> <translation id="457875822857220463">Dostava</translation> <translation id="4579056131138995126">Personal (omotnica)</translation> <translation id="4582204425268416675">Uklonite karticu</translation> @@ -1532,6 +1535,7 @@ <translation id="6337534724793800597">Filtriranje pravila prema nazivu</translation> <translation id="6349101878882523185">Instalirajte aplikaciju <ph name="APP_NAME" /></translation> <translation id="6353505687280762741">{COUNT,plural, =0{Nijedna}=1{Jedna zaporka (za <ph name="DOMAIN_LIST" />, sinkronizirano)}=2{Dvije zaporke (za <ph name="DOMAIN_LIST" />, sinkronizirano)}one{# zaporka (za <ph name="DOMAIN_LIST" />, sinkronizirano)}few{# zaporke (za <ph name="DOMAIN_LIST" />, sinkronizirano)}other{# zaporki (za <ph name="DOMAIN_LIST" />, sinkronizirano)}}</translation> +<translation id="6355392890578844978">Preglednikom ne upravlja tvrtka ili neka druga organizacija. Aktivnostima na ovom uređaju možda se upravlja izvan Chromiuma. <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation> <translation id="6358450015545214790">Što to znači?</translation> <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />provjeriti proxy, vatrozid i konfiguraciju sigurnog DNS-a<ph name="END_LINK" /></translation> @@ -1627,7 +1631,6 @@ <translation id="6689249931105087298">Relativno s kompresijom crne točke</translation> <translation id="6689271823431384964">Chrome vam nudi spremanje vaših kartica na vaš Google račun jer ste prijavljeni. To ponašanje možete promijeniti u postavkama. Ime nositelja kartice preuzeto je s vašeg računa.</translation> <translation id="6698381487523150993">Autor/ica:</translation> -<translation id="6699188552522342100">Je li ta web-lokacija točna?</translation> <translation id="6702919718839027939">Prezentacija</translation> <translation id="6710213216561001401">Prethodno</translation> <translation id="6710594484020273272"><Upišite pojam za pretraživanje></translation> @@ -1984,6 +1987,7 @@ <translation id="7961015016161918242">Nikad</translation> <translation id="7966803981046576691">Vrsta poslovnog računa</translation> <translation id="79682505114836835">Vrijednost "<ph name="VALUE" />" nije važeća heksadecimalna boja.</translation> +<translation id="7970392640816874403">Što kažu drugi izvori?</translation> <translation id="7976214039405368314">Previše zahtjeva</translation> <translation id="7977538094055660992">Izlazni uređaj</translation> <translation id="7977894662897852582">Edp</translation> @@ -2335,7 +2339,6 @@ <translation id="961663415146723894">Uvez pri dnu</translation> <translation id="962484866189421427">Ovaj sadržaj može pokušati instalirati obmanjujuće aplikacije koje se pretvaraju da su nešto drugo ili prikupljaju podatke na temelju kojih vas je moguće pratiti. <ph name="BEGIN_LINK" />Ipak prikaži<ph name="END_LINK" /></translation> <translation id="969892804517981540">Službeni sastavak</translation> -<translation id="973473557718930265">Odustani</translation> <translation id="973773823069644502">Dodajte adresu za isporuku</translation> <translation id="975560348586398090">{COUNT,plural, =0{Nijedna}=1{1 stavka}one{# stavka}few{# stavke}other{# stavki}}</translation> <translation id="981121421437150478">Izvanmrežno</translation>
diff --git a/components/strings/components_strings_hu.xtb b/components/strings/components_strings_hu.xtb index f262632e..6c9383a 100644 --- a/components/strings/components_strings_hu.xtb +++ b/components/strings/components_strings_hu.xtb
@@ -96,6 +96,7 @@ <translation id="129863573139666797"><ph name="BEGIN_LINK" />Próbálkozzon a cookie-k törlésével<ph name="END_LINK" /></translation> <translation id="1301324364792935241">Ellenőrizze a biztonságos DNS beállításait</translation> <translation id="1307966114820526988">Elavult funkciók</translation> +<translation id="1312803275555673949">Milyen bizonyíték támasztja alá?</translation> <translation id="131405271941274527">A(z) <ph name="URL" /> adatokat akar küldeni, amikor Ön rákoppint telefonjára egy NFC-eszközön</translation> <translation id="1314509827145471431">Kötés a jobb oldalon</translation> <translation id="1319245136674974084">Ne legyen több kérdés ennél az alkalmazásnál</translation> @@ -639,6 +640,7 @@ <translation id="3240791268468473923">A biztonságos fizetés hitelesítési adataihoz tartozó nem egyező hitelesítési adatok űrlapja megnyitva</translation> <translation id="3249845759089040423">Izgalmas</translation> <translation id="3252266817569339921">francia</translation> +<translation id="3257954757204451555">Kitől származik ez az információ?</translation> <translation id="3259648571731540213"><ph name="CREATE_GOOGLE_CALENDAR_EVENT_FOCUSED_FRIENDLY_MATCH_TEXT" />, tartsa lenyomva a Tab billentyűt, majd nyomja meg az Enter billentyűt új esemény gyors létrehozásához a Google Naptár szolgáltatással</translation> <translation id="3266793032086590337">Érték (ütközés)</translation> <translation id="3268451620468152448">Megnyitott lapok</translation> @@ -1038,6 +1040,7 @@ <translation id="455113658016510503">A9</translation> <translation id="4558551763791394412">Próbálkozzon a bővítmények letiltásával.</translation> <translation id="4559332380232738994">10x11</translation> +<translation id="4567686777917670400">A rendszergazda távolról módosítani tudja a böngészőbeállításokat. Az is lehetséges, hogy az eszközön végzett tevékenységeket a Chromiumon kívülről felügyelik. <ph name="BEGIN_LINK" />További információ<ph name="END_LINK" /></translation> <translation id="457875822857220463">Szállítás</translation> <translation id="4579056131138995126">Personal (boríték)</translation> <translation id="4582204425268416675">Kártya eltávolítása</translation> @@ -1530,6 +1533,7 @@ <translation id="6337534724793800597">Házirendek szűrése név szerint</translation> <translation id="6349101878882523185"><ph name="APP_NAME" /> telepítése</translation> <translation id="6353505687280762741">{COUNT,plural, =0{Nincs}=1{1 jelszó (a következő domainekhez: <ph name="DOMAIN_LIST" />, szinkronizálva)}=2{2 jelszó (a következő domainekhez: <ph name="DOMAIN_LIST" />, szinkronizálva)}other{# jelszó (a következő domainekhez: <ph name="DOMAIN_LIST" />, szinkronizálva)}}</translation> +<translation id="6355392890578844978">Ezt a böngészőt nem kezeli cég vagy más szervezet. Lehetséges, hogy az eszközön végzett tevékenységeket a Chromiumon kívülről felügyelik. <ph name="BEGIN_LINK" />További információ<ph name="END_LINK" /></translation> <translation id="6358450015545214790">Mit jelent ez?</translation> <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />A proxy, a tűzfal és a biztonságos DNS-szerver konfigurációjának ellenőrzése<ph name="END_LINK" /></translation> @@ -1625,7 +1629,6 @@ <translation id="6689249931105087298">Relatív, feketepontos tömörítéssel</translation> <translation id="6689271823431384964">A Chrome felajánlja a kártyák mentését az Ön Google-fiókjába, mert be van jelentkezve. A beállítások között ezt bármikor módosíthatja. A kártyatulajdonos nevének forrása az Ön fiókja.</translation> <translation id="6698381487523150993">Létrehozva:</translation> -<translation id="6699188552522342100">Pontosak a webhely információi?</translation> <translation id="6702919718839027939">Prezentáció</translation> <translation id="6710213216561001401">Előző</translation> <translation id="6710594484020273272"><Írja be a keresési kifejezést></translation> @@ -1982,6 +1985,7 @@ <translation id="7961015016161918242">Soha</translation> <translation id="7966803981046576691">Munka fióktípusa</translation> <translation id="79682505114836835">A(z) „<ph name="VALUE" />” érvénytelen hexadecimális színkód.</translation> +<translation id="7970392640816874403">Mit mondanak más források?</translation> <translation id="7976214039405368314">Túl sok kérelem</translation> <translation id="7977538094055660992">Kimeneti eszköz</translation> <translation id="7977894662897852582">Edp</translation> @@ -2332,7 +2336,6 @@ <translation id="961663415146723894">Kötés alul</translation> <translation id="962484866189421427">Ez a tartalom megtévesztő alkalmazásokat telepíthet, amelyek más alkalmazásnak tettethetik magukat, illetve az Ön nyomon követésére alkalmas adatokat gyűjthetnek. <ph name="BEGIN_LINK" />Megjelenítés mindenképpen<ph name="END_LINK" /></translation> <translation id="969892804517981540">Hivatalos verzió</translation> -<translation id="973473557718930265">Kilépés</translation> <translation id="973773823069644502">Kézbesítési cím hozzáadása</translation> <translation id="975560348586398090">{COUNT,plural, =0{Nincs}=1{1 elem}other{# elem}}</translation> <translation id="981121421437150478">Offline</translation>
diff --git a/components/strings/components_strings_hy.xtb b/components/strings/components_strings_hy.xtb index 2d61132..0e05fa1 100644 --- a/components/strings/components_strings_hy.xtb +++ b/components/strings/components_strings_hy.xtb
@@ -1627,7 +1627,6 @@ <translation id="6689249931105087298">Հարաբերական՝ սև կետի սեղմումով</translation> <translation id="6689271823431384964">Chrome-ն առաջարկում է պահել քարտերը ձեր Google հաշվում, քանի որ դուք մտել եք հաշիվ: Այս գործառույթը կարող եք փոխել կարգավորումներում։ Քարտապանի անունը վերցվել է ձեր հաշվից:</translation> <translation id="6698381487523150993">Ստեղծվել է`</translation> -<translation id="6699188552522342100">Այս կայքի տեղեկությունները ճի՞շտ են:</translation> <translation id="6702919718839027939">Ներկայացում</translation> <translation id="6710213216561001401">Նախորդը</translation> <translation id="6710594484020273272"><Մուտքագրեք որոնման հարցումը></translation> @@ -2333,7 +2332,6 @@ <translation id="961663415146723894">Ամրակար ներքևում</translation> <translation id="962484866189421427">Այս բովանդակությունը կարող է փորձել կեղծ հավելվածներ տեղադրել կամ տվյալներ հավաքել՝ ձեզ հետևելու համար։ <ph name="BEGIN_LINK" />Միևնույն է ցուցադրել<ph name="END_LINK" /></translation> <translation id="969892804517981540">Պաշտոնական տարբերակ</translation> -<translation id="973473557718930265">Դուրս գալ</translation> <translation id="973773823069644502">Ավելացրեք առաքման հասցեն</translation> <translation id="975560348586398090">{COUNT,plural, =0{Ոչինչ չկա}=1{1 տարր}one{# տարր}other{# տարր}}</translation> <translation id="981121421437150478">Անցանց</translation>
diff --git a/components/strings/components_strings_id.xtb b/components/strings/components_strings_id.xtb index d278b990..dd37a531 100644 --- a/components/strings/components_strings_id.xtb +++ b/components/strings/components_strings_id.xtb
@@ -1617,7 +1617,6 @@ <translation id="6689249931105087298">Relatif dengan kompresi titik hitam</translation> <translation id="6689271823431384964">Chrome menawarkan untuk menyimpan informasi kartu ke Akun Google Anda karena Anda sedang login. Anda dapat mengubah perilaku ini di setelan. Nama pemegang kartu berasal dari akun Anda.</translation> <translation id="6698381487523150993">Dibuat:</translation> -<translation id="6699188552522342100">Apakah situs ini akurat?</translation> <translation id="6702919718839027939">Presentasi</translation> <translation id="6710213216561001401">Sebelumnya</translation> <translation id="6710594484020273272"><Ketik istilah penelusuran></translation> @@ -2319,7 +2318,6 @@ <translation id="961663415146723894">Jilid bawah</translation> <translation id="962484866189421427">Konten ini mungkin mencoba menginstal aplikasi penipuan dengan berpura-pura menjadi sesuatu yang lain atau mengumpulkan data yang dapat digunakan untuk melacak Anda. <ph name="BEGIN_LINK" />Tampilkan saja<ph name="END_LINK" /></translation> <translation id="969892804517981540">Build Resmi</translation> -<translation id="973473557718930265">Keluar</translation> <translation id="973773823069644502">Tambahkan Alamat Pengiriman</translation> <translation id="975560348586398090">{COUNT,plural, =0{Tidak ada}=1{1 item}other{# item}}</translation> <translation id="981121421437150478">Offline</translation>
diff --git a/components/strings/components_strings_is.xtb b/components/strings/components_strings_is.xtb index 58c56cc6..a2afe8c4 100644 --- a/components/strings/components_strings_is.xtb +++ b/components/strings/components_strings_is.xtb
@@ -1627,7 +1627,6 @@ <translation id="6689249931105087298">Háð með þjöppun svartra punkta</translation> <translation id="6689271823431384964">Chrome býður þér að vista kortin þín á Google reikningnum vegna þess að þú ert innskráð(ur). Þú getur breytt þessu í stillingunum. Nafn korthafa er sótt af reikningnum þínum.</translation> <translation id="6698381487523150993">Búið til:</translation> -<translation id="6699188552522342100">Er þetta vefsvæði rétt?</translation> <translation id="6702919718839027939">Kynna</translation> <translation id="6710213216561001401">Til baka</translation> <translation id="6710594484020273272"><Sláðu inn leitarorð></translation> @@ -2333,7 +2332,6 @@ <translation id="961663415146723894">Bundið neðst</translation> <translation id="962484866189421427">Þetta efni gæti verið að reyna að setja upp villandi forrit sem virðast vera eitthvað annað en þau eru eða safna gögnum sem má nota til að fylgjast með þér. <ph name="BEGIN_LINK" />Sýna samt<ph name="END_LINK" /></translation> <translation id="969892804517981540">Opinber smíði</translation> -<translation id="973473557718930265">Hætta</translation> <translation id="973773823069644502">Bæta við heimilisfangi til afhendingar</translation> <translation id="975560348586398090">{COUNT,plural, =0{Ekkert}=1{Eitt atriði}one{# atriði}other{# atriði}}</translation> <translation id="981121421437150478">Ónettengt</translation>
diff --git a/components/strings/components_strings_it.xtb b/components/strings/components_strings_it.xtb index 8f09135..1db71a1 100644 --- a/components/strings/components_strings_it.xtb +++ b/components/strings/components_strings_it.xtb
@@ -1623,7 +1623,6 @@ <translation id="6689249931105087298">Relativo con compressione del punto nero</translation> <translation id="6689271823431384964">Chrome chiede se vuoi salvare le tue carte nel tuo Account Google perché hai eseguito l'accesso. Puoi modificare questo comportamento nelle impostazioni. Il nome del titolare della carta proviene dal tuo account.</translation> <translation id="6698381487523150993">Data creazione:</translation> -<translation id="6699188552522342100">Questo sito web è accurato?</translation> <translation id="6702919718839027939">Presentazione</translation> <translation id="6710213216561001401">Precedente</translation> <translation id="6710594484020273272"><Digita un termine di ricerca></translation> @@ -2329,7 +2328,6 @@ <translation id="961663415146723894">Rilegatura in basso</translation> <translation id="962484866189421427">Questi contenuti potrebbero installare app ingannevoli che si spacciano per qualcos'altro o raccolgono dati che potrebbero essere usati per monitorare la tua attività. <ph name="BEGIN_LINK" />Mostra comunque<ph name="END_LINK" /></translation> <translation id="969892804517981540">Build ufficiale</translation> -<translation id="973473557718930265">Esci</translation> <translation id="973773823069644502">Aggiungi l'indirizzo di consegna</translation> <translation id="975560348586398090">{COUNT,plural, =0{Nessuno}=1{1 elemento}other{# elementi}}</translation> <translation id="981121421437150478">Offline</translation>
diff --git a/components/strings/components_strings_iw.xtb b/components/strings/components_strings_iw.xtb index a4daf799..23ad7ef5 100644 --- a/components/strings/components_strings_iw.xtb +++ b/components/strings/components_strings_iw.xtb
@@ -1630,7 +1630,6 @@ <translation id="6689249931105087298">יחסי עם דחיסת נקודות שחורות</translation> <translation id="6689271823431384964">מאחר שנכנסת לחשבון, Chrome מציע לשמור את הכרטיסים שלך בחשבון Google. אפשר לשנות את ההתנהגות הזאת בהגדרות. שם בעל הכרטיס מגיע מהחשבון שלך.</translation> <translation id="6698381487523150993">נוצר:</translation> -<translation id="6699188552522342100">האם האתר הזה מדויק?</translation> <translation id="6702919718839027939">הצגה</translation> <translation id="6710213216561001401">הקודם</translation> <translation id="6710594484020273272"><יש להקליד מונח חיפוש></translation> @@ -2336,7 +2335,6 @@ <translation id="961663415146723894">כריכה בקצה התחתון</translation> <translation id="962484866189421427">ייתכן שבתוכן הזה יש קוד להתקנת אפליקציות מטעות שמתחזות למשהו אחר או שאוספות נתונים המאפשרים לעקוב אחריך. <ph name="BEGIN_LINK" />אני רוצה לראות בכל זאת<ph name="END_LINK" /></translation> <translation id="969892804517981540">גרסה רשמית</translation> -<translation id="973473557718930265">יציאה</translation> <translation id="973773823069644502">הוספת כתובת למסירה</translation> <translation id="975560348586398090">{COUNT,plural, =0{ללא}=1{פריט אחד}two{שני פריטים}many{# פריטים}other{# פריטים}}</translation> <translation id="981121421437150478">לא מקוון</translation>
diff --git a/components/strings/components_strings_ja.xtb b/components/strings/components_strings_ja.xtb index 2557ab3..3d7f196b 100644 --- a/components/strings/components_strings_ja.xtb +++ b/components/strings/components_strings_ja.xtb
@@ -1618,7 +1618,6 @@ <translation id="6689249931105087298">相対的(黒点の補正あり)</translation> <translation id="6689271823431384964">ログインしている場合は、その Google アカウントにカードを保存できます。この動作は設定で変更できます。カード名義人はアカウントから取得されます。</translation> <translation id="6698381487523150993">作成:</translation> -<translation id="6699188552522342100">ウェブサイトの情報は正確ですか?</translation> <translation id="6702919718839027939">プレゼンテーション</translation> <translation id="6710213216561001401">前へ</translation> <translation id="6710594484020273272"><検索キーワードを入力></translation> @@ -2325,7 +2324,6 @@ <translation id="961663415146723894">製本(下綴じ)</translation> <translation id="962484866189421427">このコンテンツを表示すると、詐欺的なアプリ(他のものに成りすましたり、ユーザーの追跡などに使用可能なデータを収集したりするアプリ)のインストールが試行される可能性があります。<ph name="BEGIN_LINK" />危険性を理解したうえで表示する<ph name="END_LINK" /></translation> <translation id="969892804517981540">Official Build</translation> -<translation id="973473557718930265">終了</translation> <translation id="973773823069644502">配達先住所を追加</translation> <translation id="975560348586398090">{COUNT,plural, =0{なし}=1{1 件のアイテム}other{# 件のアイテム}}</translation> <translation id="981121421437150478">オフライン</translation>
diff --git a/components/strings/components_strings_ka.xtb b/components/strings/components_strings_ka.xtb index 878bbd1..cf209531 100644 --- a/components/strings/components_strings_ka.xtb +++ b/components/strings/components_strings_ka.xtb
@@ -1618,7 +1618,6 @@ <translation id="6689249931105087298">ფარდობითი, შავი წერტილის შეკუმშვით</translation> <translation id="6689271823431384964">თქვენს Google ანგარიშში ბარათების შენახვას Chrome გთავაზობთ, ვინაიდან შესული ხართ სისტემაში. ამ ქცევის შეცვლა შეგიძლიათ პარამეტრებიდან. ბარათის მფლობელის სახელი მიღებულია თქვენი ანგარიშიდან.</translation> <translation id="6698381487523150993">შექმნილია:</translation> -<translation id="6699188552522342100">ეს ვებსაიტი ზუსტია?</translation> <translation id="6702919718839027939">პრეზენტირება</translation> <translation id="6710213216561001401">წინა</translation> <translation id="6710594484020273272"><აკრიფეთ საძიებო ფრაზა></translation> @@ -2324,7 +2323,6 @@ <translation id="961663415146723894">აკინძვა ქვემოთ</translation> <translation id="962484866189421427">ამ კონტენტის მეშვეობით შეიძლება დაინსტალირდეს შეცდომაში შემყვანი აპები, რომლებსაც შეუძლია თავის გასაღება სხვა აპებად ან ისეთი მონაცემების შეგროვება, რომელთა მეშვეობითაც შესაძლებელი იქნება თქვენთვის თვალის მიდევნება. <ph name="BEGIN_LINK" />მაინც ჩვენება<ph name="END_LINK" /></translation> <translation id="969892804517981540">ოფიციალური კონსტრუქცია</translation> -<translation id="973473557718930265">გამოსვლა</translation> <translation id="973773823069644502">მიწოდების მისამართის დამატება</translation> <translation id="975560348586398090">{COUNT,plural, =0{არცერთი}=1{1 ერთეული}other{# ერთეული}}</translation> <translation id="981121421437150478">ოფლაინი</translation>
diff --git a/components/strings/components_strings_kk.xtb b/components/strings/components_strings_kk.xtb index 84877af..0d4e16c 100644 --- a/components/strings/components_strings_kk.xtb +++ b/components/strings/components_strings_kk.xtb
@@ -96,6 +96,7 @@ <translation id="129863573139666797"><ph name="BEGIN_LINK" />Сookie файлдарын жоюға тырысыңыз<ph name="END_LINK" /></translation> <translation id="1301324364792935241">Қауіпсіз DNS параметрлерін тексеріңіз.</translation> <translation id="1307966114820526988">Ескі функциялар</translation> +<translation id="1312803275555673949">Оған қандай дәлел бар?</translation> <translation id="131405271941274527">NFC құрылғыңыздағы телефоныңызды түрткенде, <ph name="URL" /> ақпарат алмасуға рұқсат сұрайды.</translation> <translation id="1314509827145471431">Оң жақты байлау</translation> <translation id="1319245136674974084">Бұдан былай бұл қолданба үшін сұралмасын</translation> @@ -640,6 +641,7 @@ <translation id="3240791268468473923">Қауіпсіз төлемге арналған деректердің сәйкес келмейтіндігі көрсетілген парақ ашылды.</translation> <translation id="3249845759089040423">Заманауи</translation> <translation id="3252266817569339921">француз</translation> +<translation id="3257954757204451555">Бұл ақпараттың артында кім тұр?</translation> <translation id="3259648571731540213"><ph name="CREATE_GOOGLE_CALENDAR_EVENT_FOCUSED_FRIENDLY_MATCH_TEXT" />, Google Calendar-да жылдам жаңа іс-шара жасау үшін Tab, содан кейін Enter пернесін басыңыз.</translation> <translation id="3266793032086590337">Мән (қарама-қайшы)</translation> <translation id="3268451620468152448">Ашық қойындылар</translation> @@ -1039,6 +1041,7 @@ <translation id="455113658016510503">A9</translation> <translation id="4558551763791394412">Кеңейтімдерді ажыратып көріңіз.</translation> <translation id="4559332380232738994">10x11</translation> +<translation id="4567686777917670400">Браузер параметрін әкімші қашықтан өзгерте алады. Құрылғыдағы әрекеттерді Chromium браузерінен тыс та басқаруға болады. <ph name="BEGIN_LINK" />Толығырақ<ph name="END_LINK" /></translation> <translation id="457875822857220463">Жеткізу</translation> <translation id="4579056131138995126">Personal (Envelope)</translation> <translation id="4582204425268416675">Картаны өшіру</translation> @@ -1531,6 +1534,7 @@ <translation id="6337534724793800597">Атауы бойынша сүзгі саясаттары</translation> <translation id="6349101878882523185"><ph name="APP_NAME" /> қолданбасын орнату</translation> <translation id="6353505687280762741">{COUNT,plural, =0{Жоқ}=1{1 құпия сөз (<ph name="DOMAIN_LIST" />, синхрондалды)}=2{2 құпия сөз (<ph name="DOMAIN_LIST" />, синхрондалды)}other{# құпия сөз (<ph name="DOMAIN_LIST" />, синхрондалды)}}</translation> +<translation id="6355392890578844978">Бұл браузер компания немесе басқа ұйым арқылы басқарылмайды. Құрылғыдағы әрекет Chromium браузерінен тыс басқарылуы мүмкін. <ph name="BEGIN_LINK" />Толығырақ<ph name="END_LINK" /></translation> <translation id="6358450015545214790">Бұл нені білдіреді?</translation> <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />Прокси-серверді, брандмауэрді және қауіпсіз DNS конфигурациясын тексеру<ph name="END_LINK" /></translation> @@ -1626,7 +1630,6 @@ <translation id="6689249931105087298">Қара нүктені сығуға қатысты</translation> <translation id="6689271823431384964">Сіз есептік жазбаға кіргендіктен, Chrome браузері карталарыңызды Google есептік жазбасына сақтауды ұсынып отыр. Мұны "Параметрлер" бөлімінен өзгертуіңізге болады. Карта иесінің аты-жөнін есептік жазбаңыздан алынады.</translation> <translation id="6698381487523150993">Жасалған кезі:</translation> -<translation id="6699188552522342100">Осы веб-сайттағы ақпарат дұрыс па?</translation> <translation id="6702919718839027939">Презентация</translation> <translation id="6710213216561001401">Алдыңғы</translation> <translation id="6710594484020273272"><Іздеу терминін теру></translation> @@ -1983,6 +1986,7 @@ <translation id="7961015016161918242">Ешқашан</translation> <translation id="7966803981046576691">Тапсырмадағы есептік жазбаның түрі</translation> <translation id="79682505114836835">"<ph name="VALUE" />" мәні – жарамсыз он алтылық түс.</translation> +<translation id="7970392640816874403">Басқа дереккөздер не дейді?</translation> <translation id="7976214039405368314">Сұраулар саны өте көп.</translation> <translation id="7977538094055660992">Шығару құрылғысы</translation> <translation id="7977894662897852582">Edp</translation> @@ -2332,7 +2336,6 @@ <translation id="961663415146723894">Төменгі жағын байлау</translation> <translation id="962484866189421427">Бұл мазмұн жалған қолданбалар орнатуы мүмкін, олар басқа біреудің атын жамылуы немесе сізді бақылау үшін пайдаланылатын деректерді жинауы мүмкін. <ph name="BEGIN_LINK" />Бәрібір көрсету<ph name="END_LINK" /></translation> <translation id="969892804517981540">Ресми жинақ</translation> -<translation id="973473557718930265">Шығу</translation> <translation id="973773823069644502">Жеткізу мекенжайын енгізу</translation> <translation id="975560348586398090">{COUNT,plural, =0{Жоқ}=1{1 элемент}other{# элемент}}</translation> <translation id="981121421437150478">Желіден тыс</translation>
diff --git a/components/strings/components_strings_km.xtb b/components/strings/components_strings_km.xtb index 10f1747f..51ae933 100644 --- a/components/strings/components_strings_km.xtb +++ b/components/strings/components_strings_km.xtb
@@ -1631,7 +1631,6 @@ <translation id="6689249931105087298">ពាក់ព័ន្ធនឹងការបង្ហាប់ចំណុចខ្មៅ</translation> <translation id="6689271823431384964">Chrome ផ្ដល់ជូនជម្រើសរក្សាទុកបណ្ណរបស់អ្នកនៅក្នុងគណនី Google របស់អ្នក ដោយសារអ្នកចូលគណនី។ អ្នកអាចប្ដូរសកម្មភាពនេះបាននៅក្នុងការកំណត់។ ឈ្មោះម្ចាស់បណ្ណគឺបានមកពីគណនីរបស់អ្នក។</translation> <translation id="6698381487523150993">បានបង្កើត៖</translation> -<translation id="6699188552522342100">តើគេហទំព័រនេះត្រឹមត្រូវដែរទេ?</translation> <translation id="6702919718839027939">បង្ហាញ</translation> <translation id="6710213216561001401">មុន</translation> <translation id="6710594484020273272"><វាយបញ្ចូលពាក្យដែលត្រូវស្វែងរក></translation> @@ -2339,7 +2338,6 @@ <translation id="961663415146723894">ភ្ជាប់ខាងក្រោម</translation> <translation id="962484866189421427">ខ្លឹមសារនេះអាចព្យាយាមដំឡើងកម្មវិធីបោកប្រាស់ ដែលក្លែងធ្វើជាអ្វីម្យ៉ាង ឬប្រមូលទិន្នន័យដែលអាចប្រើដើម្បីតាមដានអ្នក។ <ph name="BEGIN_LINK" />បង្ហាញចុះមិនអីទេ<ph name="END_LINK" /></translation> <translation id="969892804517981540">លេខកំណែផ្លូវការ</translation> -<translation id="973473557718930265">ចាកចេញ</translation> <translation id="973773823069644502">បញ្ចូលអាសយដ្ឋានចែកចាយ</translation> <translation id="975560348586398090">{COUNT,plural, =0{គ្មាន}=1{ធាតុ 1}other{ធាតុ #}}</translation> <translation id="981121421437150478">ក្រៅបណ្តាញ</translation>
diff --git a/components/strings/components_strings_kn.xtb b/components/strings/components_strings_kn.xtb index afc82e3..5c93887 100644 --- a/components/strings/components_strings_kn.xtb +++ b/components/strings/components_strings_kn.xtb
@@ -1616,7 +1616,6 @@ <translation id="6689249931105087298">ಕಪ್ಪು ಬಿಂದು ಕಂಪ್ರೆಶ್ಶನ್ಗೆ ಸಂಬಂಧಿಸಿದ</translation> <translation id="6689271823431384964">ನೀವು ಸೈನ್ ಇನ್ ಮಾಡಿರುವ ಕಾರಣದಿಂದಾಗಿ, ನಿಮ್ಮ Google ಖಾತೆಯಲ್ಲಿ ನಿಮ್ಮ ಕಾರ್ಡ್ಗಳನ್ನು ಉಳಿಸಲು Chrome ಅವಕಾಶ ನೀಡುತ್ತಿದೆ. ಸೆಟ್ಟಿಂಗ್ಗಳಲ್ಲಿ ನೀವು ಈ ವರ್ತನೆಯನ್ನು ಬದಲಿಸಬಹುದು. ಕಾರ್ಡ್ ಹೋಲ್ಡರ್ ಹೆಸರು ನಿಮ್ಮ ಖಾತೆಯಿಂದ ಬರುತ್ತದೆ.</translation> <translation id="6698381487523150993">ರಚಿಸಲಾಗಿದೆ:</translation> -<translation id="6699188552522342100">ಈ ವೆಬ್ಸೈಟ್ ನಿಖರವಾಗಿದೆಯೇ?</translation> <translation id="6702919718839027939">ಪ್ರಸ್ತುತಿ ಮೋಡ್</translation> <translation id="6710213216561001401">ಹಿಂದಿನದು</translation> <translation id="6710594484020273272"><ಹುಡುಕಾಟದ ಪದ ಟೈಪ್ ಮಾಡಿ></translation> @@ -2322,7 +2321,6 @@ <translation id="961663415146723894">ಕೆಳಭಾಗದಲ್ಲಿ ಬೈಂಡ್ ಮಾಡಿ</translation> <translation id="962484866189421427">ಈ ವಿಷಯವು ವಂಚಕ ಆ್ಯಪ್ಗಳನ್ನು ಇನ್ಸ್ಟಾಲ್ ಮಾಡಲು ಪ್ರಯತ್ನಿಸಬಹುದು. ಈ ಆ್ಯಪ್ಗಳು ಬೇರೆ ಯಾವುದರಂತೆಯೋ ಸೋಗು ಹಾಕುವ ಅಥವಾ ನಿಮ್ಮನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡಲು ಬಳಸಬಹುದಾದ ಡೇಟಾವನ್ನು ಸಂಗ್ರಹಿಸುವ ಸಾಧ್ಯತೆಯಿದೆ. <ph name="BEGIN_LINK" />ಹೇಗಿದ್ದರೂ ತೋರಿಸಿ<ph name="END_LINK" /></translation> <translation id="969892804517981540">ಅಧಿಕೃತವಾಗಿ ನಿರ್ಮಿಸಿ</translation> -<translation id="973473557718930265">ತ್ಯಜಿಸು</translation> <translation id="973773823069644502">ವಿತರಣೆ ವಿಳಾಸವನ್ನು ಸೇರಿಸಿ</translation> <translation id="975560348586398090">{COUNT,plural, =0{ಯಾವುದೂ ಇಲ್ಲ}=1{1 ಐಟಂ}one{# ಐಟಂಗಳು}other{# ಐಟಂಗಳು}}</translation> <translation id="981121421437150478">ಆಫ್ಲೈನ್</translation>
diff --git a/components/strings/components_strings_ko.xtb b/components/strings/components_strings_ko.xtb index 21ad388..61047d1 100644 --- a/components/strings/components_strings_ko.xtb +++ b/components/strings/components_strings_ko.xtb
@@ -1618,7 +1618,6 @@ <translation id="6689249931105087298">상대적이며 흑점 보정 포함</translation> <translation id="6689271823431384964">Google 계정에 로그인되어 있기 때문에 Chrome에서 계정에 카드를 저장할지 묻는 메시지가 표시됩니다. 설정에서 이 동작을 변경할 수 있습니다. 카드 소지자 이름은 계정에서 가져온 것입니다.</translation> <translation id="6698381487523150993">생성됨:</translation> -<translation id="6699188552522342100">웹사이트가 정확한가요?</translation> <translation id="6702919718839027939">발표</translation> <translation id="6710213216561001401">이전</translation> <translation id="6710594484020273272"><검색어 입력></translation> @@ -2323,7 +2322,6 @@ <translation id="961663415146723894">하단 바인드</translation> <translation id="962484866189421427">이 콘텐츠에서 다른 앱인 것처럼 가장하거나 사용자를 추적하는 데 사용될 수 있는 데이터를 수집하는 사기성 앱을 설치할 수도 있습니다. <ph name="BEGIN_LINK" />그래도 표시하기<ph name="END_LINK" /></translation> <translation id="969892804517981540">공식 빌드</translation> -<translation id="973473557718930265">종료</translation> <translation id="973773823069644502">배달 주소 추가</translation> <translation id="975560348586398090">{COUNT,plural, =0{없음}=1{항목 1개}other{항목 #개}}</translation> <translation id="981121421437150478">오프라인</translation>
diff --git a/components/strings/components_strings_ky.xtb b/components/strings/components_strings_ky.xtb index 712de05..2084512 100644 --- a/components/strings/components_strings_ky.xtb +++ b/components/strings/components_strings_ky.xtb
@@ -96,6 +96,7 @@ <translation id="129863573139666797"><ph name="BEGIN_LINK" />Кукилериңизди тазалап көрүңүз<ph name="END_LINK" /></translation> <translation id="1301324364792935241">Коопсуз DNS жөндөөлөрүңүздү текшериңиз</translation> <translation id="1307966114820526988">Жоюлган функциялар</translation> +<translation id="1312803275555673949">Кандай далили бар?</translation> <translation id="131405271941274527">NFC түзмөгүндө телефонуңузду таптаганда <ph name="URL" /> маалыматты жөнөтүүгө жана алууга уруксат сурап жатат</translation> <translation id="1314509827145471431">Оң жагын байлоо</translation> <translation id="1319245136674974084">Бул карточка экинчи суралбасын</translation> @@ -641,6 +642,7 @@ <translation id="3240791268468473923">Коопсуз төлөө үчүн дал келбеген эсептик дайындар барагы ачылды</translation> <translation id="3249845759089040423">Көркөм</translation> <translation id="3252266817569339921">Французча</translation> +<translation id="3257954757204451555">Бул маалыматты ким берди?</translation> <translation id="3259648571731540213"><ph name="CREATE_GOOGLE_CALENDAR_EVENT_FOCUSED_FRIENDLY_MATCH_TEXT" />, Google Жылнаамада жаңы иш-чараны тез түзүү Tab, андан кийин Enter баскычын басыңыз</translation> <translation id="3266793032086590337">Маани (карама-каршы)</translation> <translation id="3268451620468152448">Ачык өтмөктөр</translation> @@ -1039,6 +1041,7 @@ <translation id="455113658016510503">A9</translation> <translation id="4558551763791394412">Кеңейтүүлөрүңүздү өчүрүп көрүңүз.</translation> <translation id="4559332380232738994">10x11</translation> +<translation id="4567686777917670400">Администраторуңуз серепчини алыстан жөндөй алат. Бул түзмөктө аткарылган аракеттер Chromium'дан тышкары да башкарылышы мүмкүн. <ph name="BEGIN_LINK" />Кеңири маалымат<ph name="END_LINK" /></translation> <translation id="457875822857220463">Жеткирүү</translation> <translation id="4579056131138995126">Personal (Конверт)</translation> <translation id="4582204425268416675">Картаны алып салуу</translation> @@ -1531,6 +1534,7 @@ <translation id="6337534724793800597">Саясаттарды аталышы боюнча чыпкалоо</translation> <translation id="6349101878882523185"><ph name="APP_NAME" /> колдонмосун орнотуу</translation> <translation id="6353505687280762741">{COUNT,plural, =0{Жок}=1{1 сырсөз (<ph name="DOMAIN_LIST" /> доменде, шайкештирилген)}=2{2 сырсөз (<ph name="DOMAIN_LIST" /> доменде, шайкештирилген)}other{# сырсөз (<ph name="DOMAIN_LIST" /> доменде, шайкештирилген)}}</translation> +<translation id="6355392890578844978">Бул серепчи компанияңыз же башка уюм тарабынан башкарылбайт. Бул түзмөктө аткарылган аракеттер Chromium'дан тышкары башкарылышы мүмкүн. <ph name="BEGIN_LINK" />Кеңири маалымат<ph name="END_LINK" /></translation> <translation id="6358450015545214790">Бул эмнени билдирет?</translation> <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />Прокси, брандауэр жана DNS конфигурациясын текшерип көрүңүз<ph name="END_LINK" /></translation> @@ -1626,7 +1630,6 @@ <translation id="6689249931105087298">Кара чекит кысуусуна тийиштүү</translation> <translation id="6689271823431384964">Аккаунтуңузга кирип турганыңыздан улам, Chrome карталарыңызды Google аккаунтуңузга сактап коюуну сунуштап жатат. Бул параметрди жөндөөлөргө өтүп, өзгөртүп койсоңуз болот. Картанын ээси – аккаунттун ээси болуп эсептелет.</translation> <translation id="6698381487523150993">Түзүлгөн:</translation> -<translation id="6699188552522342100">Бул сайттагы маалымат такпы?</translation> <translation id="6702919718839027939">Презентация</translation> <translation id="6710213216561001401">Мурунку</translation> <translation id="6710594484020273272"><Изделүүчү сөздү териңиз></translation> @@ -1983,6 +1986,7 @@ <translation id="7961015016161918242">Эч качан</translation> <translation id="7966803981046576691">Тапшырманын түрү</translation> <translation id="79682505114836835">"<ph name="VALUE" />" маанисинин он алтылык түсү жараксыз.</translation> +<translation id="7970392640816874403">Башка булактарда эмне деп айтылган?</translation> <translation id="7976214039405368314">Өтүнүчтөр өтө көп жөнөтүлдү</translation> <translation id="7977538094055660992">Чыгаруу түзмөгү</translation> <translation id="7977894662897852582">Edp</translation> @@ -2332,7 +2336,6 @@ <translation id="961663415146723894">Төмөн жагын байлоо</translation> <translation id="962484866189421427">Бул мазмун башка колдонмолорго окшош жасалма колдонмолорду орнотуп коюшу же сизге көз салуу үчүн дайындарды чогултуп алышы мүмкүн. <ph name="BEGIN_LINK" />Баары бир көрүнсүн<ph name="END_LINK" /></translation> <translation id="969892804517981540">Расмий курама</translation> -<translation id="973473557718930265">Чыгуу</translation> <translation id="973773823069644502">Жеткирүү дарегин кошуу</translation> <translation id="975560348586398090">{COUNT,plural, =0{Бирөө жа жок}=1{1 нерсе}other{# нерсе}}</translation> <translation id="981121421437150478">Офлайн</translation>
diff --git a/components/strings/components_strings_lo.xtb b/components/strings/components_strings_lo.xtb index 1e3881b..9b78979 100644 --- a/components/strings/components_strings_lo.xtb +++ b/components/strings/components_strings_lo.xtb
@@ -1627,7 +1627,6 @@ <translation id="6689249931105087298">ສຳພັນກັບການບີບຈຸດສີດຳ</translation> <translation id="6689271823431384964">Chrome ກຳລັງສະເໜີບັນທຶກບັດຂອງທ່ານໄວ້ໃນບັນຊີ Google ຂອງທ່ານ ເພາະວ່າທ່ານເຂົ້າສູ່ລະບົບຢູ່. ທ່ານສາມາດປ່ຽນພຶດຕິກຳນີ້ໄດ້ໃນການຕັ້ງຄ່າ. ຊື່ຜູ້ຖືບັດມາຈາກບັນຊີຂອງທ່ານ.</translation> <translation id="6698381487523150993">ສ້າງຂຶ້ນແລ້ວ:</translation> -<translation id="6699188552522342100">ເວັບໄຊນີ້ຖືກຕ້ອງບໍ່?</translation> <translation id="6702919718839027939">ປັດຈຸບັນ</translation> <translation id="6710213216561001401">ຜ່ານມາ</translation> <translation id="6710594484020273272"><ພິມຄຳສັບການຄົ້ນຫາ></translation> @@ -2333,7 +2332,6 @@ <translation id="961663415146723894">ຫຍິບເຫຼັ້ມລຸ່ມສຸດ</translation> <translation id="962484866189421427">ເນື້ອຫານີ້ອາດຈະພະຍາຍາມຕິດຕັ້ງແອັບຫຼອກລວງທີ່ປອມເປັນສິ່ງອື່ນ ຫຼື ເກັບກຳຂໍ້ມູນທີ່ອາດຈະຖືກໃຊ້ເພື່ອຕິດຕາມທ່ານ. <ph name="BEGIN_LINK" />ຢືນຢັນການສະແດງ<ph name="END_LINK" /></translation> <translation id="969892804517981540">ສ້າງເປັນທາງການ</translation> -<translation id="973473557718930265">ອອກ</translation> <translation id="973773823069644502">ເພີ່ມທີ່ຢູ່ການຈັດສົ່ງ</translation> <translation id="975560348586398090">{COUNT,plural, =0{ບໍ່ມີ}=1{1 ລາຍການ}other{# ລາຍການ}}</translation> <translation id="981121421437150478">ອອຟລາຍນ໌</translation>
diff --git a/components/strings/components_strings_lt.xtb b/components/strings/components_strings_lt.xtb index 794cca74..7a617b0 100644 --- a/components/strings/components_strings_lt.xtb +++ b/components/strings/components_strings_lt.xtb
@@ -1628,7 +1628,6 @@ <translation id="6689249931105087298">Santykinis su juodų taškų sutankinimu</translation> <translation id="6689271823431384964">„Chrome“ siūlo išsaugoti korteles „Google“ paskyroje, nes esate prisijungę. Šią elgseną galite pakeisti nustatymuose. Kortelės savininko vardas gaunamas iš jūsų paskyros.</translation> <translation id="6698381487523150993">Sukurta:</translation> -<translation id="6699188552522342100">Ar šios svetainės informacija tiksli?</translation> <translation id="6702919718839027939">Rodyti</translation> <translation id="6710213216561001401">Ankstesnė</translation> <translation id="6710594484020273272"><Įveskite paieškos terminą></translation> @@ -2335,7 +2334,6 @@ <translation id="961663415146723894">Įrišimas apačioje</translation> <translation id="962484866189421427">Šis turinys gali bandyti įdiegti klaidinančių programų, kurios apsimeta kitomis programomis, arba rinkti duomenis, naudojamus jums stebėti. <ph name="BEGIN_LINK" />Rodyti vis tiek<ph name="END_LINK" /></translation> <translation id="969892804517981540">Oficialiai pagaminta</translation> -<translation id="973473557718930265">Išeiti</translation> <translation id="973773823069644502">Pridėti pristatymo adresą</translation> <translation id="975560348586398090">{COUNT,plural, =0{Nėra}=1{1 elementas}one{# elementas}few{# elementai}many{# elemento}other{# elementų}}</translation> <translation id="981121421437150478">Neprisijungus</translation>
diff --git a/components/strings/components_strings_lv.xtb b/components/strings/components_strings_lv.xtb index fbe8220..2522e4f2 100644 --- a/components/strings/components_strings_lv.xtb +++ b/components/strings/components_strings_lv.xtb
@@ -1626,7 +1626,6 @@ <translation id="6689249931105087298">Relatīva, ar melno punktu saspiešanu</translation> <translation id="6689271823431384964">Pārlūkprogrammā Chrome tiek piedāvāts saglabāt jūsu kartes Google kontā, jo esat pierakstījies. Varat mainīt šo darbību iestatījumos. Kartes īpašnieka vārds tiek iegūts no jūsu konta.</translation> <translation id="6698381487523150993">Izveidots:</translation> -<translation id="6699188552522342100">Vai šīs vietnes informācija ir precīza?</translation> <translation id="6702919718839027939">Prezentācija</translation> <translation id="6710213216561001401">Iepriekšējais</translation> <translation id="6710594484020273272"><Ierakstiet meklēšanas vienumu></translation> @@ -2333,7 +2332,6 @@ <translation id="961663415146723894">Iesējums apakšdaļā</translation> <translation id="962484866189421427">Šis saturs jūsu ierīcē var mēģināt instalēt maldinošas lietotnes, kas tiek uzdodas par cita veida saturu, vai vākt datus, kas var tikt izmantoti jūsu izsekošanai. <ph name="BEGIN_LINK" />Tāpat rādīt<ph name="END_LINK" />.</translation> <translation id="969892804517981540">Oficiālā Uzbūve</translation> -<translation id="973473557718930265">Iziet</translation> <translation id="973773823069644502">Pievienot piegādes adresi</translation> <translation id="975560348586398090">{COUNT,plural, =0{Nav}=1{1 vienums}zero{# vienumi}one{# vienums}other{# vienumi}}</translation> <translation id="981121421437150478">Bezsaistē</translation>
diff --git a/components/strings/components_strings_mk.xtb b/components/strings/components_strings_mk.xtb index cd76334..35fcb29 100644 --- a/components/strings/components_strings_mk.xtb +++ b/components/strings/components_strings_mk.xtb
@@ -1627,7 +1627,6 @@ <translation id="6689249931105087298">Релативна, со компресија на црни точки</translation> <translation id="6689271823431384964">Chrome нуди да ви ги зачува картичките во вашата сметка на Google бидејќи сте најавени. Ваквото однесување може да го смените во поставки. Името на сопственикот на картичката доаѓа од сметката.</translation> <translation id="6698381487523150993">Создадено:</translation> -<translation id="6699188552522342100">Дали веб-сајтов е точен?</translation> <translation id="6702919718839027939">Презентација</translation> <translation id="6710213216561001401">Претходно</translation> <translation id="6710594484020273272"><Внесете поим за пребарување></translation> @@ -2333,7 +2332,6 @@ <translation id="961663415146723894">Врзување долу</translation> <translation id="962484866189421427">Содржиниве може да се обидат да инсталираат лажни апликации што се преправаат дека се нешто друго или да собираат податоци што може да ги користат за да ве следат. <ph name="BEGIN_LINK" />Сепак прикажи<ph name="END_LINK" /></translation> <translation id="969892804517981540">Официјална верзија</translation> -<translation id="973473557718930265">Излези</translation> <translation id="973773823069644502">Додајте адреса за достава</translation> <translation id="975560348586398090">{COUNT,plural, =0{Ниту една}=1{1 ставка}one{# ставка}other{# ставки}}</translation> <translation id="981121421437150478">Без мрежа</translation>
diff --git a/components/strings/components_strings_ml.xtb b/components/strings/components_strings_ml.xtb index 5c9eb1a..2d89a9b3 100644 --- a/components/strings/components_strings_ml.xtb +++ b/components/strings/components_strings_ml.xtb
@@ -1623,7 +1623,6 @@ <translation id="6689249931105087298">ബ്ലാക്ക് പോയിന്റ് കംപ്രഷനോട് കൂടിയ റിലേറ്റീവ്</translation> <translation id="6689271823431384964">നിങ്ങൾ സൈൻ ഇൻ ചെയ്തിരിക്കുന്നതിനാലാണ് നിങ്ങളുടെ Google അക്കൗണ്ടിൽ കാർഡുകൾ സംരക്ഷിക്കാമെന്ന് Chrome വാഗ്ദാനം ചെയ്യുന്നത്. ക്രമീകരണത്തിൽ ഈ രീതി മാറ്റാനാകും. കാർഡുടമയുടെ പേര് നിങ്ങളുടെ അക്കൗണ്ടിൽ നിന്നുമാണ് വന്നത്.</translation> <translation id="6698381487523150993">സൃഷ്ടിച്ചു:</translation> -<translation id="6699188552522342100">ഈ വെബ്സൈറ്റ് കൃത്യമാണോ?</translation> <translation id="6702919718839027939">ദൃശ്യമാക്കുക</translation> <translation id="6710213216561001401">മുമ്പത്തേത്</translation> <translation id="6710594484020273272"><തിരയൽ പദം നൽകുക></translation> @@ -2327,7 +2326,6 @@ <translation id="961663415146723894">താഴെ ബൈൻഡ് ചെയ്യുക</translation> <translation id="962484866189421427">മറ്റെന്തെങ്കിലും ആണെന്ന് അവകാശപ്പെടുന്ന അല്ലെങ്കിൽ നിങ്ങളെ ട്രാക്ക് ചെയ്യാൻ ഉപയോഗിച്ചേക്കാവുന്ന ഡാറ്റ ശേഖരിക്കുന്ന, തെറ്റിദ്ധരിപ്പിക്കുന്ന ആപ്പുകൾ ഇൻസ്റ്റാൾ ചെയ്യാൻ ഈ ഉള്ളടക്കം ശ്രമിച്ചേക്കാം. <ph name="BEGIN_LINK" />എന്തായാലും കാണിക്കുക<ph name="END_LINK" /></translation> <translation id="969892804517981540">ഔദ്യോഗിക ബില്ഡ്</translation> -<translation id="973473557718930265">പുറത്തുകടക്കുക</translation> <translation id="973773823069644502">ഡെലിവറി നൽകേണ്ട വിലാസം ചേർക്കുക</translation> <translation id="975560348586398090">{COUNT,plural, =0{ഒന്നുമില്ല}=1{ഒരു ഇനം}other{# ഇനങ്ങൾ}}</translation> <translation id="981121421437150478">ഓഫ്ലൈൻ</translation>
diff --git a/components/strings/components_strings_mn.xtb b/components/strings/components_strings_mn.xtb index bec23ab0..63dc2be 100644 --- a/components/strings/components_strings_mn.xtb +++ b/components/strings/components_strings_mn.xtb
@@ -1627,7 +1627,6 @@ <translation id="6689249931105087298">Хар цэгийн шахалттай харьцангуй</translation> <translation id="6689271823431384964">Та нэвтэрсэн тул Chrome таны картыг таны Google бүртгэлд хадгалахыг санал болгож байна. Та энэ ажиллах төлөвийг тохиргоонд өөрчилж болно. Карт эзэмшигчийн нэр таны бүртгэлээс гаралтай.</translation> <translation id="6698381487523150993">Үүсгэсэн:</translation> -<translation id="6699188552522342100">Энэ вебсайт оновчтой байна уу?</translation> <translation id="6702919718839027939">Үзүүлэн</translation> <translation id="6710213216561001401">Өмнөх</translation> <translation id="6710594484020273272"><Хайх зүйлээ шивнэ үү></translation> @@ -2333,7 +2332,6 @@ <translation id="961663415146723894">Доод булан дагуу үдэж хавтаслах</translation> <translation id="962484866189421427">Энэ контент ямар нэг дүр эсгэсэн эсвэл таныг хянахын тулд өгөгдөл цуглуулах зорилготой хуурамч апп суулгахыг оролдож болзошгүй. <ph name="BEGIN_LINK" />Ямартай ч харуулах<ph name="END_LINK" /></translation> <translation id="969892804517981540">Албан ёсоор бий болгох</translation> -<translation id="973473557718930265">Гарах</translation> <translation id="973773823069644502">Хүргэлтийн хаяг нэмэх</translation> <translation id="975560348586398090">{COUNT,plural, =0{Байхгүй}=1{1 зүйл}other{# зүйл}}</translation> <translation id="981121421437150478">Offline</translation>
diff --git a/components/strings/components_strings_mr.xtb b/components/strings/components_strings_mr.xtb index 8d985585..80c684c 100644 --- a/components/strings/components_strings_mr.xtb +++ b/components/strings/components_strings_mr.xtb
@@ -1627,7 +1627,6 @@ <translation id="6689249931105087298">काळ्या पॉइंटच्या काँप्रेशनशी संबंंधित</translation> <translation id="6689271823431384964">तुम्ही साइन इन केले असल्यामुळे Chrome तुमच्या Google खात्यामध्ये तुमची कार्डे सेव्ह करत आहे. तुम्ही हे वर्तन सेटिंग्जमध्ये बदलू शकता. कार्डधारकाचे नाव तुमच्या खात्यामधून घेतले जाते.</translation> <translation id="6698381487523150993">तयार केलेले:</translation> -<translation id="6699188552522342100">ही वेबसाइट योग्य आहे का?</translation> <translation id="6702919718839027939">सादर करा</translation> <translation id="6710213216561001401">मागील</translation> <translation id="6710594484020273272"><शोध संज्ञा एंटर करा></translation> @@ -2333,7 +2332,6 @@ <translation id="961663415146723894">बाइंड बॉटम</translation> <translation id="962484866189421427">हा आशय काहीतरी दुसरे असण्याची बतावणी करणारी फसवी ॲप्स इंस्टॉल करण्याचा किंवा तुमचा माग ठेवण्यासाठी वापरला जाऊ शकणारा डेटा गोळा करण्याचा प्रयत्न करू शकतो. <ph name="BEGIN_LINK" />तरीही दाखवा<ph name="END_LINK" /></translation> <translation id="969892804517981540">अधिकृत बिल्ड</translation> -<translation id="973473557718930265">बाहेर पडा</translation> <translation id="973773823069644502">वितरणाचा पत्ता जोडा</translation> <translation id="975560348586398090">{COUNT,plural, =0{काहीही नाही}=1{1 आयटम}other{# आयटम}}</translation> <translation id="981121421437150478">ऑफलाइन</translation>
diff --git a/components/strings/components_strings_ms.xtb b/components/strings/components_strings_ms.xtb index 9bd3d324..2cec734 100644 --- a/components/strings/components_strings_ms.xtb +++ b/components/strings/components_strings_ms.xtb
@@ -1628,7 +1628,6 @@ <translation id="6689249931105087298">Relatif dengan mampatan mata hitam</translation> <translation id="6689271823431384964">Chrome menawarkan penyimpanan kad dalam Akaun Google anda kerana anda telah log masuk. Anda boleh menukar gelagat ini dalam tetapan. Nama pemegang kad diambil daripada akaun anda.</translation> <translation id="6698381487523150993">Dicipta:</translation> -<translation id="6699188552522342100">Adakah laman web ini tepat?</translation> <translation id="6702919718839027939">Pembentangan</translation> <translation id="6710213216561001401">Sebelumnya</translation> <translation id="6710594484020273272"><Taip istilah carian></translation> @@ -2335,7 +2334,6 @@ <translation id="961663415146723894">Ikatan bawah</translation> <translation id="962484866189421427">Kandungan ini mungkin cuba memasang apl mengelirukan yang berpura-pura menjadi sesuatu yang lain atau mengumpulkan data yang mungkin digunakan untuk menjejak anda. <ph name="BEGIN_LINK" />Tunjukkan juga <ph name="END_LINK" /></translation> <translation id="969892804517981540">Binaan Rasmi</translation> -<translation id="973473557718930265">Keluar</translation> <translation id="973773823069644502">Tambahkan Alamat Penghantaran</translation> <translation id="975560348586398090">{COUNT,plural, =0{Tiada}=1{1 item}other{# item}}</translation> <translation id="981121421437150478">Luar talian</translation>
diff --git a/components/strings/components_strings_my.xtb b/components/strings/components_strings_my.xtb index 1cf7b9c..396c8be 100644 --- a/components/strings/components_strings_my.xtb +++ b/components/strings/components_strings_my.xtb
@@ -1627,7 +1627,6 @@ <translation id="6689249931105087298">အနက်ရောင်အမှတ် အချိုင့်နှင့် အညီ</translation> <translation id="6689271823431384964">လက်မှတ်ထိုးဝင်ထားသဖြင့် သင်၏ကတ်များကို သင့် Google အကောင့်တွင် သိမ်းရန် Chrome က ကမ်းလှမ်းထားပါသည်။ ဤလုပ်ဆောင်ပုံကို ဆက်တင်များတွင် ပြောင်းနိုင်သည်။ ကတ်ကိုင်ဆောင်သူ အမည်ကို သင့်အကောင့်မှ ရရှိပါသည်။</translation> <translation id="6698381487523150993">ဖန်တီးခဲ့:</translation> -<translation id="6699188552522342100">ဤဝဘ်ဆိုက်သည် တိကျမှန်ကန်သလား။</translation> <translation id="6702919718839027939">တင်ပြရန်</translation> <translation id="6710213216561001401">အရင်</translation> <translation id="6710594484020273272"><ရှာဖွေရန် အကြောင်းအရာကို ရိုက်ထည့်ပါ></translation> @@ -2335,7 +2334,6 @@ <translation id="961663415146723894">အောက်ခြေတွင် တွဲချုပ်ရန်</translation> <translation id="962484866189421427">ဤအကြောင်းအရာသည် အယောင်ဆောင်သော သို့မဟုတ် သင့်ကိုခြေရာခံရာတွင် အသုံးပြုနိုင်သော ဒေတာများကို စုစည်းသော လိမ်လည်လှည့်ဖျားသည့် အက်ပ်များကို ထည့်သွင်းနိုင်သည်။ <ph name="BEGIN_LINK" />မည်သို့ဖြစ်စေ ပြပါ<ph name="END_LINK" /></translation> <translation id="969892804517981540">တရားဝင် တည်ဆောက်မှု</translation> -<translation id="973473557718930265">ရပ်ပစ်ရန်</translation> <translation id="973773823069644502">ပေးပို့ရမည့်လိပ်စာ ထည့်ရန်</translation> <translation id="975560348586398090">{COUNT,plural, =0{တစ်ခုမျှမရှိပါ}=1{အကြောင်းအရာ ၁ ခု}other{အကြောင်းအရာ # ခု}}</translation> <translation id="981121421437150478">အော့ဖ်လိုင်း</translation>
diff --git a/components/strings/components_strings_ne.xtb b/components/strings/components_strings_ne.xtb index 87693116..9b850dd 100644 --- a/components/strings/components_strings_ne.xtb +++ b/components/strings/components_strings_ne.xtb
@@ -1623,7 +1623,6 @@ <translation id="6689249931105087298">कालो बिन्दुको कम्प्रेसनसँग सापेक्ष</translation> <translation id="6689271823431384964">तपाईं साइन इन हुनुभएकाले Chrome ले तपाईंको Google खातामा तपाईंका कार्डहरू सुरक्षित गरिदिने प्रस्ताव गर्दै छ। तपाईं सेटिङहरूमा गई उक्त व्यवहार परिवर्तन गर्न सक्नुहुन्छ। कार्डवाहकको नामका रूपमा तपाईंको खातामा भएको नाम प्रयोग गरिन्छ।</translation> <translation id="6698381487523150993">सिर्जना गरिएको:</translation> -<translation id="6699188552522342100">यो वेबसाइट सही छ?</translation> <translation id="6702919718839027939">प्रस्तुति दिनुहोस्</translation> <translation id="6710213216561001401">अघिल्लो</translation> <translation id="6710594484020273272"><खोज पदलाई टाइप गर्नुहोस्></translation> @@ -2329,7 +2328,6 @@ <translation id="961663415146723894">फेदको बाइन्ड</translation> <translation id="962484866189421427">यो सामग्रीले आफूलाई अर्कै रूपमा प्रस्तुत गर्ने भ्रामक अनुप्रयोगहरूको स्थापना गर्न वा तपाईंलाई ट्र्याक गर्ने कार्यमा प्रयोग गर्न सकिने डेटाको सङ्कलन गर्ने प्रयास गर्न सक्छ। <ph name="BEGIN_LINK" />जे भए पनि देखाउनुहोस्<ph name="END_LINK" /></translation> <translation id="969892804517981540">आधिकारिक निर्माण</translation> -<translation id="973473557718930265">छोड्नुहोस्</translation> <translation id="973773823069644502">डेलिभरी ठेगाना थप्नुहोस्</translation> <translation id="975560348586398090">{COUNT,plural, =0{कुनै पनि होइन}=1{१ वस्तु}other{# वस्तुहरू}}</translation> <translation id="981121421437150478">अफलाइन</translation>
diff --git a/components/strings/components_strings_nl.xtb b/components/strings/components_strings_nl.xtb index 4d51798..0d458a8 100644 --- a/components/strings/components_strings_nl.xtb +++ b/components/strings/components_strings_nl.xtb
@@ -484,7 +484,6 @@ <translation id="2649259151839507861"><ph name="CLEAR_BROWSING_DATA_FOCUSED_FRIENDLY_MATCH_TEXT" />. Druk op Tab en vervolgens op Enter om je browsegeschiedenis, cookies, cache en meer te wissen in de Chrome-instellingen.</translation> <translation id="2650446666397867134">Toegang tot het bestand is geweigerd</translation> <translation id="2653659639078652383">Verzenden</translation> -<translation id="2659158170294587313">Als je de app op de achtergrond wilt blijven uitvoeren, verberg je deze.</translation> <translation id="2660779039299703961">Gebeurtenis</translation> <translation id="2664887757054927933">{COUNT,plural, =0{Geen}=1{1 wachtwoord (voor <ph name="DOMAIN_LIST" />)}=2{2 wachtwoorden (voor <ph name="DOMAIN_LIST" />)}other{# wachtwoorden (voor <ph name="DOMAIN_LIST" />)}}</translation> <translation id="2666092431469916601">Boven</translation> @@ -605,7 +604,6 @@ <translation id="31207688938192855"><ph name="BEGIN_LINK" />Voer Verbindingsdiagnose uit<ph name="END_LINK" />.</translation> <translation id="3121994479408824897">Naar <ph name="DOMAIN" /></translation> <translation id="3137507986424712703">{COUNT,plural, =0{Geen}=1{inloggegevens voor één account}other{inloggegevens voor # accounts}}</translation> -<translation id="314433506352260835"><ph name="APP" /> sluiten?</translation> <translation id="3145945101586104090">Kan reactie niet decoderen</translation> <translation id="3150653042067488994">Tijdelijke serverfout</translation> <translation id="3154506275960390542">Deze pagina bevat een formulier dat mogelijk niet beveiligd wordt verzonden. Gegevens die je verzendt, kunnen tijdens de overdracht worden bekeken door anderen of kunnen worden aangepast door een aanvaller om te wijzigen wat de server ontvangt.</translation> @@ -1624,7 +1622,6 @@ <translation id="6689249931105087298">Relatief met zwartpuntcompressie</translation> <translation id="6689271823431384964">Chrome biedt aan je kaarten in je Google-account op te slaan omdat je bent ingelogd. Je kunt dit wijzigen in de instellingen. De naam van de kaarthouder is afkomstig uit je account.</translation> <translation id="6698381487523150993">Gemaakt:</translation> -<translation id="6699188552522342100">Is de informatie op deze website nauwkeurig?</translation> <translation id="6702919718839027939">Presenteren</translation> <translation id="6710213216561001401">Vorige</translation> <translation id="6710594484020273272"><Typ een zoekterm></translation> @@ -2331,7 +2328,6 @@ <translation id="961663415146723894">Onder inbinden</translation> <translation id="962484866189421427">Deze content kan mogelijk proberen misleidende apps te installeren die zich voordoen als iets anders of gegevens verzamelen die kunnen worden gebruikt om je te volgen. <ph name="BEGIN_LINK" />Toch tonen<ph name="END_LINK" /></translation> <translation id="969892804517981540">Officiële build</translation> -<translation id="973473557718930265">Sluiten</translation> <translation id="973773823069644502">Afleveradres toevoegen</translation> <translation id="975560348586398090">{COUNT,plural, =0{Geen}=1{1 item}other{# items}}</translation> <translation id="981121421437150478">Offline</translation>
diff --git a/components/strings/components_strings_no.xtb b/components/strings/components_strings_no.xtb index 13792bd..28397d9 100644 --- a/components/strings/components_strings_no.xtb +++ b/components/strings/components_strings_no.xtb
@@ -1627,7 +1627,6 @@ <translation id="6689249931105087298">Relativ med svartpunktkomprimering</translation> <translation id="6689271823431384964">Chrome tilbyr å lagre kort i Google-kontoen din fordi du er logget på. Du kan endre dette i innstillingene. Kortinnehaverens navn kommer fra kontoen din.</translation> <translation id="6698381487523150993">Opprettet:</translation> -<translation id="6699188552522342100">Er informasjonen på dette nettstedet riktig?</translation> <translation id="6702919718839027939">Presenter</translation> <translation id="6710213216561001401">Forrige</translation> <translation id="6710594484020273272"><Skriv inn en søketerm></translation> @@ -2332,7 +2331,6 @@ <translation id="961663415146723894">Innbinding bunn</translation> <translation id="962484866189421427">Dette innholdet kan prøve å installere villedende apper som gir seg ut for å være noe annet, eller samle inn data som kan brukes til å spore deg. <ph name="BEGIN_LINK" />Vis det likevel<ph name="END_LINK" /></translation> <translation id="969892804517981540">Offisiell delversjon</translation> -<translation id="973473557718930265">Avslutt</translation> <translation id="973773823069644502">Legg til leveringsadresse</translation> <translation id="975560348586398090">{COUNT,plural, =0{Ingen}=1{1 element}other{# elementer}}</translation> <translation id="981121421437150478">Uten nett</translation>
diff --git a/components/strings/components_strings_or.xtb b/components/strings/components_strings_or.xtb index e1a5255..e18abe5 100644 --- a/components/strings/components_strings_or.xtb +++ b/components/strings/components_strings_or.xtb
@@ -1614,7 +1614,6 @@ <translation id="6689249931105087298">ବ୍ଲାକ୍ ପଏଣ୍ଟ କମ୍ପ୍ରେସନ୍ ସହିତ ରିଲେଟିଭ୍</translation> <translation id="6689271823431384964">ଆପଣ ସାଇନ୍ ଇନ୍ କରିଥିବା ଯୋଗୁଁ ଆପଣଙ୍କର Google ଆକାଉଣ୍ଟରେ ଆପଣଙ୍କ କାର୍ଡଗୁଡ଼ିକ ସେଭ୍ କରିବାକୁ Chrome ଅଫର୍ ଦେଉଛି। ଆପଣ ସେଟିଂସ୍ରେ ଏହି ଆଚରଣ ପରିବର୍ତ୍ତନ କରିପାରିବେ। ଆପଣଙ୍କ ଆକାଉଣ୍ଟରୁ କାର୍ଡ ଧାରକଙ୍କ ନାମ ଆସିଛି।</translation> <translation id="6698381487523150993">ସୃଷ୍ଟିହେଲା:</translation> -<translation id="6699188552522342100">ଏହି ୱେବସାଇଟ୍ ସଠିକ୍ ଅଟେ କି?</translation> <translation id="6702919718839027939">ବର୍ତ୍ତମାନ</translation> <translation id="6710213216561001401">ପୂର୍ବବର୍ତ୍ତୀ</translation> <translation id="6710594484020273272"><ସନ୍ଧାନ ପଦ ଟାଇପ୍ କରନ୍ତୁ></translation> @@ -2320,7 +2319,6 @@ <translation id="961663415146723894">ତଳ ପଟରେ ବାଇଣ୍ଡ</translation> <translation id="962484866189421427">ଏହି ବିଷୟବସ୍ତୁ ପ୍ରତାରଣାତ୍ମକ ଆପ୍ସ ଇନ୍ଷ୍ଟଲ୍ କରିପାରେ ଯାହା ଅନ୍ୟ କିଛି ହେବାର ଛଳନା କରନ୍ତି କିମ୍ବା ଏପରି ଡାଟା ସଂଗ୍ରହ କରିପାରନ୍ତି ଯାହା ଆପଣଙ୍କୁ ଟ୍ରାକ୍ କରିବା ପାଇଁ ବ୍ୟବହାର କରାଯାଇପାରେ। <ph name="BEGIN_LINK" />ଯେକୌଣସି ଉପାୟରେ ଦେଖାନ୍ତୁ<ph name="END_LINK" /></translation> <translation id="969892804517981540">ଅଫିସିଆଲ୍ ବିଲ୍ଡ</translation> -<translation id="973473557718930265">ଛାଡ଼ିଦିଅନ୍ତୁ</translation> <translation id="973773823069644502">ପହଞ୍ଚାଇବା ଠିକଣା ଯୋଗ କରନ୍ତୁ</translation> <translation id="975560348586398090">{COUNT,plural, =0{କିଛିନାହିଁ}=1{1ଟି ଆଇଟମ୍}other{#ଟି ଆଇଟମ୍}}</translation> <translation id="981121421437150478">ଅଫ୍ଲାଇନ୍</translation>
diff --git a/components/strings/components_strings_pa.xtb b/components/strings/components_strings_pa.xtb index 1562c0c..c401f45 100644 --- a/components/strings/components_strings_pa.xtb +++ b/components/strings/components_strings_pa.xtb
@@ -470,6 +470,7 @@ <translation id="2596415276201385844">ਇੱਕ ਸੁਰੱਖਿਅਤ ਕਨੈਕਸ਼ਨ ਸਥਾਪਿਤ ਕਰਨ ਲਈ, ਤੁਹਾਡੀ ਘੜੀ ਨੂੰ ਸਹੀ ਢੰਗ ਨਾਲ ਸੈਟ ਕਰਨ ਦੀ ਲੋੜ ਹੈ।To ਅਜਿਹਾ ਇਸਲਈ ਕਿਉਂਕਿ ਸਰਟੀਫਿਕੇਟ, ਜਿਸਨੂੰ ਵੈਬਸਾਈਟਾਂ ਖੁਦ ਦੀ ਪਛਾਣ ਕਰਨ ਲਈ ਵਰਤਦੀਆਂ ਹਨ, ਕੇਵਲ ਖ਼ਾਸ ਮਿਆਦ ਲਈ ਪ੍ਰਮਾਣਿਕ ਹੁੰਦੇ ਹਨ। ਕਿਉਂਕਿ ਤੁਹਾਡੀ ਡੀਵਾਈਸ ਦੀ ਘੜੀ ਦਾ ਸਮਾਂ ਗ਼ਲਤ ਹੈ, Chrome ਇਹਨਾਂ ਸਰਟੀਫਿਕੇਟਾਂ ਦੀ ਜਾਂਚ ਨਹੀਂ ਕਰ ਸਕਦਾ।</translation> <translation id="2597378329261239068">ਇਹ ਦਸਤਾਵੇਜ਼ ਪਾਸਵਰਡ ਰੱਖਿਅਤ ਹੈ। ਕਿਰਪਾ ਕਰਕੇ ਇੱਕ ਪਾਸਵਰਡ ਦਰਜ ਕਰੋ।</translation> <translation id="2609632851001447353">ਵੈਰੀਏਸ਼ੰਸ</translation> +<translation id="2610561535971892504">ਕਾਪੀ ਕਰਨ ਲਈ ਕਲਿੱਕ ਕਰੋ</translation> <translation id="2618023639789766142">C10 (ਲਿਫ਼ਾਫ਼ਾ)</translation> <translation id="2625385379895617796">ਤੁਹਾਡੀ ਘੜੀ ਅੱਗੇ ਹੈ</translation> <translation id="262745152991669301">ਸਾਈਟ USB ਡੀਵਾਈਸਾਂ ਨਾਲ ਕਨੈਕਟ ਕਰਨ ਲਈ ਪੁੱਛ ਸਕਦੀ ਹੈ</translation> @@ -1613,7 +1614,6 @@ <translation id="6689249931105087298">ਕਾਲੇ ਬਿੰਦੂ ਨਪੀੜਨ ਨਾਲ ਸੰਬੰਧਿਤ</translation> <translation id="6689271823431384964">ਤੁਹਾਡੇ ਸਾਈਨ-ਇਨ ਹੋਣ ਕਰਕੇ Chrome ਤੁਹਾਡੇ ਕਾਰਡਾਂ ਨੂੰ ਤੁਹਾਡੇ Google ਖਾਤੇ ਵਿੱਚ ਰੱਖਿਅਤ ਕਰਨ ਦੀ ਪੇਸ਼ਕਸ਼ ਕਰ ਰਿਹਾ ਹੈ। ਤੁਸੀਂ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਇਸ ਵਤੀਰੇ ਨੂੰ ਬਦਲ ਸਕਦੇ ਹੋ। ਕਾਰਡਧਾਰਕ ਦੇ ਨਾਮ ਦੀ ਜਾਣਕਾਰੀ ਤੁਹਾਡੇ ਖਾਤੇ ਤੋਂ ਮਿਲਦੀ ਹੈ।</translation> <translation id="6698381487523150993">ਬਣਾਇਆ:</translation> -<translation id="6699188552522342100">ਕੀ ਇਹ ਵੈੱਬਸਾਈਟ ਸਟੀਕ ਹੈ?</translation> <translation id="6702919718839027939">ਪੇਸ਼ਕਾਰੀ ਮੋਡ</translation> <translation id="6710213216561001401">ਪਿਛਲਾ</translation> <translation id="6710594484020273272"><ਖੋਜ ਸ਼ਬਦ ਟਾਈਪ ਕਰੋ></translation> @@ -2319,7 +2319,6 @@ <translation id="961663415146723894">ਹੇਠਾਂ ਜਿਲਦਬੰਦ</translation> <translation id="962484866189421427">ਇਹ ਸਮੱਗਰੀ ਭਰਮਪੂਰਨ ਐਪਾਂ ਨੂੰ ਸਥਾਪਤ ਕਰ ਸਕਦੀ ਹੈ, ਜੋ ਕੁਝ ਹੋਰ ਹੋਣ ਦਾ ਦਾਅਵਾ ਕਰਦੀਆਂ ਹਨ ਜਾਂ ਅਜਿਹਾ ਡਾਟਾ ਇਕੱਠਾ ਕਰਦੀਆਂ ਹਨ ਜਿਸਦੀ ਵਰਤੋਂ ਨਾਲ ਤੁਹਾਡੇ 'ਤੇ ਨਜ਼ਰ ਰੱਖੀ ਜਾ ਸਕਦੀ ਹੈ। <ph name="BEGIN_LINK" />ਫਿਰ ਵੀ ਦਿਖਾਓ<ph name="END_LINK" /></translation> <translation id="969892804517981540">ਅਧਿਕਾਰਿਤ ਬਿਲਡ</translation> -<translation id="973473557718930265">ਛੱਡੋ</translation> <translation id="973773823069644502">ਡਿਲੀਵਰੀ ਪਤਾ ਸ਼ਾਮਲ ਕਰੋ</translation> <translation id="975560348586398090">{COUNT,plural, =0{ਕੋਈ ਨਹੀਂ}=1{1 ਆਈਟਮ}other{# ਆਈਟਮਾਂ}}</translation> <translation id="981121421437150478">ਆਫ਼ਲਾਈਨ</translation>
diff --git a/components/strings/components_strings_pl.xtb b/components/strings/components_strings_pl.xtb index 3bbd94b..660476e7 100644 --- a/components/strings/components_strings_pl.xtb +++ b/components/strings/components_strings_pl.xtb
@@ -96,6 +96,7 @@ <translation id="129863573139666797"><ph name="BEGIN_LINK" />Usuń pliki cookie<ph name="END_LINK" /></translation> <translation id="1301324364792935241">Sprawdź ustawienia bezpiecznego DNS</translation> <translation id="1307966114820526988">Funkcje wycofane</translation> +<translation id="1312803275555673949">Co o tym świadczy?</translation> <translation id="131405271941274527"><ph name="URL" /> chce wysyłać i odbierać informacje po dotknięciu telefonem urządzenia z NFC</translation> <translation id="1314509827145471431">Wiązanie przy prawej krawędzi</translation> <translation id="1319245136674974084">Nie pytaj ponownie dla tej aplikacji</translation> @@ -637,6 +638,7 @@ <translation id="3240791268468473923">Arkusz dotyczący braku pasujących danych uwierzytelniających na potrzeby bezpiecznych płatności jest otwarty</translation> <translation id="3249845759089040423">Dynamiczny</translation> <translation id="3252266817569339921">Francuski</translation> +<translation id="3257954757204451555">Od kogo pochodzi ta informacja?</translation> <translation id="3259648571731540213"><ph name="CREATE_GOOGLE_CALENDAR_EVENT_FOCUSED_FRIENDLY_MATCH_TEXT" />; naciśnij Tab, a potem Enter, aby szybko utworzyć nowe wydarzenie w Kalendarzu Google</translation> <translation id="3266793032086590337">Wartość (konflikt)</translation> <translation id="3268451620468152448">Otwarte karty</translation> @@ -1031,6 +1033,7 @@ <translation id="455113658016510503">A9</translation> <translation id="4558551763791394412">Spróbuj wyłączyć rozszerzenia.</translation> <translation id="4559332380232738994">10x11</translation> +<translation id="4567686777917670400">Administrator może zdalnie zmienić konfigurację przeglądarki. Aktywność na tym urządzeniu może być zarządzana również poza Chromium. <ph name="BEGIN_LINK" />Więcej informacji<ph name="END_LINK" /></translation> <translation id="457875822857220463">Dostawa</translation> <translation id="4579056131138995126">Personal (koperta)</translation> <translation id="4582204425268416675">Usuń kartę</translation> @@ -1523,6 +1526,7 @@ <translation id="6337534724793800597">Filtruj zasady według nazwy</translation> <translation id="6349101878882523185">Zainstaluj aplikację <ph name="APP_NAME" /></translation> <translation id="6353505687280762741">{COUNT,plural, =0{Brak}=1{1 hasło (do <ph name="DOMAIN_LIST" />, zsynchronizowano)}=2{2 hasła (do <ph name="DOMAIN_LIST" />, zsynchronizowano)}few{# hasła (do <ph name="DOMAIN_LIST" />, zsynchronizowano)}many{# haseł (do <ph name="DOMAIN_LIST" />, zsynchronizowano)}other{# hasła (do <ph name="DOMAIN_LIST" />, zsynchronizowano)}}</translation> +<translation id="6355392890578844978">Ta przeglądarka nie jest zarządzana przez firmę ani inną organizację. Aktywność na tym urządzeniu może być zarządzana poza Chromium. <ph name="BEGIN_LINK" />Więcej informacji<ph name="END_LINK" /></translation> <translation id="6358450015545214790">Co to oznacza?</translation> <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />sprawdzić konfigurację serwera proxy, zapory sieciowej i bezpiecznego DNS<ph name="END_LINK" /></translation> @@ -1618,7 +1622,6 @@ <translation id="6689249931105087298">Względna z kompresją punktu czerni</translation> <translation id="6689271823431384964">Chrome proponuje zalogowanym użytkownikom zapisywanie kart na koncie Google. Możesz to zmienić w ustawieniach. Imię i nazwisko posiadacza karty pochodzi z Twojego konta.</translation> <translation id="6698381487523150993">Utworzono:</translation> -<translation id="6699188552522342100">Czy ta witryna jest prawidłowa?</translation> <translation id="6702919718839027939">Tryb prezentacji</translation> <translation id="6710213216561001401">Poprzedni</translation> <translation id="6710594484020273272"><Wpisz wyszukiwane słowa></translation> @@ -1975,6 +1978,7 @@ <translation id="7961015016161918242">Nigdy</translation> <translation id="7966803981046576691">Rodzaj konta zadania</translation> <translation id="79682505114836835">Wartość „<ph name="VALUE" />” jest nieprawidłowym kodem szesnastkowym koloru.</translation> +<translation id="7970392640816874403">Co mówią inne źródła?</translation> <translation id="7976214039405368314">Zbyt wiele żądań</translation> <translation id="7977538094055660992">Urządzenie wyjściowe</translation> <translation id="7977894662897852582">Edp</translation> @@ -2324,7 +2328,6 @@ <translation id="961663415146723894">Wiązanie na dole</translation> <translation id="962484866189421427">Te treści mogą próbować zainstalować wprowadzające w błąd aplikacje, które udają, że są przeznaczone do czegoś innego niż w rzeczywistości, lub zbierają dane, na podstawie których można Cię śledzić. <ph name="BEGIN_LINK" />Pokaż mimo to<ph name="END_LINK" /></translation> <translation id="969892804517981540">Oficjalna wersja</translation> -<translation id="973473557718930265">Zakończ</translation> <translation id="973773823069644502">Dodaj adres dostawy</translation> <translation id="975560348586398090">{COUNT,plural, =0{Brak}=1{1 element}few{# elementy}many{# elementów}other{# elementu}}</translation> <translation id="981121421437150478">Offline</translation>
diff --git a/components/strings/components_strings_pt-BR.xtb b/components/strings/components_strings_pt-BR.xtb index aa6fac19..9b2fa4a 100644 --- a/components/strings/components_strings_pt-BR.xtb +++ b/components/strings/components_strings_pt-BR.xtb
@@ -96,6 +96,7 @@ <translation id="129863573139666797"><ph name="BEGIN_LINK" />Tente limpar os cookies<ph name="END_LINK" /></translation> <translation id="1301324364792935241">Verifique suas configurações de DNS seguro</translation> <translation id="1307966114820526988">Recursos obsoletos</translation> +<translation id="1312803275555673949">Quais são as evidências?</translation> <translation id="131405271941274527"><ph name="URL" /> quer enviar e receber informações quando você encostar seu smartphone em um dispositivo NFC</translation> <translation id="1314509827145471431">Encadernação do lado direito</translation> <translation id="1319245136674974084">Não perguntar novamente para este app</translation> @@ -637,6 +638,7 @@ <translation id="3240791268468473923">A página de credenciais para pagamento seguro sem correspondência está aberta</translation> <translation id="3249845759089040423">Maravilhoso</translation> <translation id="3252266817569339921">Francês</translation> +<translation id="3257954757204451555">Quem está por trás dessa informação?</translation> <translation id="3259648571731540213"><ph name="CREATE_GOOGLE_CALENDAR_EVENT_FOCUSED_FRIENDLY_MATCH_TEXT" />. Pressione Tab e depois Enter para criar rapidamente um novo evento no Google Agenda</translation> <translation id="3266793032086590337">Valor (conflitante)</translation> <translation id="3268451620468152448">Guias abertas</translation> @@ -1031,6 +1033,7 @@ <translation id="455113658016510503">A9</translation> <translation id="4558551763791394412">Tente desativar suas extensões.</translation> <translation id="4559332380232738994">10x11</translation> +<translation id="4567686777917670400">O administrador pode mudar as configurações do navegador remotamente. A atividade deste dispositivo também pode ser gerenciada fora do Chromium. <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /></translation> <translation id="457875822857220463">Entrega</translation> <translation id="4579056131138995126">Personal (Envelope)</translation> <translation id="4582204425268416675">Remover cartão</translation> @@ -1523,6 +1526,7 @@ <translation id="6337534724793800597">Filtrar políticas por nome</translation> <translation id="6349101878882523185">Instalar <ph name="APP_NAME" /></translation> <translation id="6353505687280762741">{COUNT,plural, =0{Nenhuma}=1{1 senha (para <ph name="DOMAIN_LIST" />, sincronizada)}=2{2 senhas (para <ph name="DOMAIN_LIST" />, sincronizadas)}one{# senha (para <ph name="DOMAIN_LIST" />, sincronizada)}other{# senhas (para <ph name="DOMAIN_LIST" />, sincronizadas)}}</translation> +<translation id="6355392890578844978">Este navegador não é gerenciado por uma empresa ou outra organização. A atividade deste dispositivo pode ser gerenciada fora do Chromium. <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /></translation> <translation id="6358450015545214790">O que são essas informações?</translation> <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />verificar o proxy, o firewall e a configuração de DNS seguro<ph name="END_LINK" /></translation> @@ -1618,7 +1622,6 @@ <translation id="6689249931105087298">Relativa com compressão de pontos pretos</translation> <translation id="6689271823431384964">A opção de salvar seus cartões na Conta do Google está disponível no Chrome porque você fez login. É possível alterar esse comportamento nas configurações. O nome do titular do cartão vem da sua conta.</translation> <translation id="6698381487523150993">Criado em:</translation> -<translation id="6699188552522342100">O site está correto?</translation> <translation id="6702919718839027939">Apresentação</translation> <translation id="6710213216561001401">Anterior</translation> <translation id="6710594484020273272"><Digitar termo de pesquisa></translation> @@ -1975,6 +1978,7 @@ <translation id="7961015016161918242">Nunca</translation> <translation id="7966803981046576691">Tipo de conta da tarefa</translation> <translation id="79682505114836835">O valor "<ph name="VALUE" />" é uma cor hexadecimal inválida.</translation> +<translation id="7970392640816874403">O que outras fontes dizem?</translation> <translation id="7976214039405368314">Excesso de solicitações</translation> <translation id="7977538094055660992">Dispositivo de saída</translation> <translation id="7977894662897852582">Edp</translation> @@ -2326,7 +2330,6 @@ <translation id="961663415146723894">Encadernação na parte inferior</translation> <translation id="962484866189421427">Este conteúdo pode tentar instalar apps enganosos que fingem ser outra coisa ou coletam dados que podem ser usados para rastrear você. <ph name="BEGIN_LINK" />Mostrar mesmo assim<ph name="END_LINK" /></translation> <translation id="969892804517981540">Versão oficial</translation> -<translation id="973473557718930265">Sair</translation> <translation id="973773823069644502">Adicionar endereço de entrega</translation> <translation id="975560348586398090">{COUNT,plural, =0{Nenhum}=1{1 item}one{# item}other{# itens}}</translation> <translation id="981121421437150478">Off-line</translation>
diff --git a/components/strings/components_strings_pt-PT.xtb b/components/strings/components_strings_pt-PT.xtb index 722f9cf..ac29d08 100644 --- a/components/strings/components_strings_pt-PT.xtb +++ b/components/strings/components_strings_pt-PT.xtb
@@ -1627,7 +1627,6 @@ <translation id="6689249931105087298">Relativa com compressão do ponto preto</translation> <translation id="6689271823431384964">O Chrome está a disponibilizar a opção de guardar os seus cartões na sua Conta Google porque tem sessão iniciada. Pode alterar este comportamento nas definições. O nome do titular do cartão vem da sua conta.</translation> <translation id="6698381487523150993">Criado:</translation> -<translation id="6699188552522342100">Este Website está correto?</translation> <translation id="6702919718839027939">Apresentar</translation> <translation id="6710213216561001401">Anterior</translation> <translation id="6710594484020273272"><Introduzir termo de pesquisa></translation> @@ -2333,7 +2332,6 @@ <translation id="961663415146723894">Encadernar parte inferior</translation> <translation id="962484866189421427">Este conteúdo poderá tentar instalar aplicações fraudulentas que se fazem passar por algo diferente ou que recolhem dados que podem ser utilizados para o monitorizar. <ph name="BEGIN_LINK" />Mostrar, mesmo assim<ph name="END_LINK" /></translation> <translation id="969892804517981540">Compilação oficial</translation> -<translation id="973473557718930265">Sair</translation> <translation id="973773823069644502">Adicionar endereço de entrega</translation> <translation id="975560348586398090">{COUNT,plural, =0{Nenhum}=1{1 item}other{# itens}}</translation> <translation id="981121421437150478">Offline</translation>
diff --git a/components/strings/components_strings_ro.xtb b/components/strings/components_strings_ro.xtb index f8f3961..431c922 100644 --- a/components/strings/components_strings_ro.xtb +++ b/components/strings/components_strings_ro.xtb
@@ -96,6 +96,7 @@ <translation id="129863573139666797"><ph name="BEGIN_LINK" />Șterge cookie-urile<ph name="END_LINK" /></translation> <translation id="1301324364792935241">Verifică setările pentru DNS securizat</translation> <translation id="1307966114820526988">Funcții învechite</translation> +<translation id="1312803275555673949">Ce dovezi există?</translation> <translation id="131405271941274527"><ph name="URL" /> dorește să trimită și să primească informații când atingi telefonul de pe un dispozitiv NFC</translation> <translation id="1314509827145471431">Legare în dreapta</translation> <translation id="1319245136674974084">Nu mai întreba pentru această aplicație</translation> @@ -641,6 +642,7 @@ <translation id="3240791268468473923">Foaia „Datele de conectare pentru plăți securizate nu corespund datelor de conectare” este deschisă</translation> <translation id="3249845759089040423">Șic</translation> <translation id="3252266817569339921">Franceză</translation> +<translation id="3257954757204451555">De unde provin aceste informații?</translation> <translation id="3259648571731540213"><ph name="CREATE_GOOGLE_CALENDAR_EVENT_FOCUSED_FRIENDLY_MATCH_TEXT" />, apasă pe Tab, apoi pe Enter pentru a crea rapid un eveniment în Google Calendar</translation> <translation id="3266793032086590337">Valoare (conflictuală)</translation> <translation id="3268451620468152448">File deschise</translation> @@ -1040,6 +1042,7 @@ <translation id="455113658016510503">A9</translation> <translation id="4558551763791394412">Dezactivează extensiile.</translation> <translation id="4559332380232738994">10x11</translation> +<translation id="4567686777917670400">Administratorul poate schimba configurația browserului de la distanță. Este posibil ca activitatea de pe acest dispozitiv să fie gestionată și din afara Chromium. <ph name="BEGIN_LINK" />Află mai multe<ph name="END_LINK" /></translation> <translation id="457875822857220463">Livrare</translation> <translation id="4579056131138995126">Personal (Plic)</translation> <translation id="4582204425268416675">Elimină cardul</translation> @@ -1532,6 +1535,7 @@ <translation id="6337534724793800597">Filtrați politicile după nume</translation> <translation id="6349101878882523185">Instalează <ph name="APP_NAME" /></translation> <translation id="6353505687280762741">{COUNT,plural, =0{Niciuna}=1{O parolă (pentru <ph name="DOMAIN_LIST" />, sincronizată)}=2{2 parole (pentru <ph name="DOMAIN_LIST" />, sincronizate)}few{# parole (pentru <ph name="DOMAIN_LIST" />, sincronizate)}other{# de parole (pentru <ph name="DOMAIN_LIST" />, sincronizate)}}</translation> +<translation id="6355392890578844978">Browserul nu este gestionat de o companie sau o altă organizație. Este posibil ca activitatea de pe acest dispozitiv să fie gestionată în afara Chromium. <ph name="BEGIN_LINK" />Află mai multe<ph name="END_LINK" /></translation> <translation id="6358450015545214790">Ce înseamnă acestea?</translation> <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />să verifici configurația pentru proxy, firewall și DNS-ul securizat;<ph name="END_LINK" /></translation> @@ -1627,7 +1631,6 @@ <translation id="6689249931105087298">Relativă cu comprimarea punctelor negre</translation> <translation id="6689271823431384964">Chrome oferă salvarea cardurilor în Contul Google pentru că te-ai conectat. Poți schimba acest comportament în setări. Numele titularului de card vine din contul tău.</translation> <translation id="6698381487523150993">Creat:</translation> -<translation id="6699188552522342100">Site-ul oferă informații corecte?</translation> <translation id="6702919718839027939">Prezentare</translation> <translation id="6710213216561001401">Înapoi</translation> <translation id="6710594484020273272"><Introdu termenul de căutare></translation> @@ -1984,6 +1987,7 @@ <translation id="7961015016161918242">Niciodată</translation> <translation id="7966803981046576691">Tipul contului sarcinii</translation> <translation id="79682505114836835">Valoarea <ph name="VALUE" /> este o culoare hexazecimală nevalidă.</translation> +<translation id="7970392640816874403">Ce spun alte surse?</translation> <translation id="7976214039405368314">Prea multe solicitări</translation> <translation id="7977538094055660992">Dispozitiv de ieșire</translation> <translation id="7977894662897852582">Edp</translation> @@ -2334,7 +2338,6 @@ <translation id="961663415146723894">Legare în partea de jos</translation> <translation id="962484866189421427">Acest conținut poate încerca să instaleze aplicații înșelătoare care pretind a fi altceva sau colectează date care pot fi folosite pentru a te urmări. <ph name="BEGIN_LINK" />Afișează oricum<ph name="END_LINK" /></translation> <translation id="969892804517981540">Versiune oficială</translation> -<translation id="973473557718930265">Ieșiți</translation> <translation id="973773823069644502">Adaugă o adresă de livrare</translation> <translation id="975560348586398090">{COUNT,plural, =0{Niciunul}=1{1 element}few{# elemente}other{# de elemente}}</translation> <translation id="981121421437150478">Offline</translation>
diff --git a/components/strings/components_strings_ru.xtb b/components/strings/components_strings_ru.xtb index 59d7e8e..5797f8e 100644 --- a/components/strings/components_strings_ru.xtb +++ b/components/strings/components_strings_ru.xtb
@@ -1617,7 +1617,6 @@ <translation id="6689249931105087298">Относительный со сжатием точки черного цвета</translation> <translation id="6689271823431384964">Chrome предлагает вам сохранить карты в аккаунте Google, поскольку вы вошли в систему. Этот параметр можно изменить в разделе настроек. Имя владельца карты взято из вашего аккаунта.</translation> <translation id="6698381487523150993">Создано:</translation> -<translation id="6699188552522342100">Информация на этом сайте точна?</translation> <translation id="6702919718839027939">Режим презентации</translation> <translation id="6710213216561001401">Назад</translation> <translation id="6710594484020273272"><Введите поисковый запрос></translation> @@ -2323,7 +2322,6 @@ <translation id="961663415146723894">Скрепление снизу</translation> <translation id="962484866189421427">Переход на эту страницу может привести к установке вредоносных приложений, маскирующихся под безопасные программы или собирающих данные, по которым вас можно отследить. <ph name="BEGIN_LINK" />Все равно продолжить<ph name="END_LINK" /></translation> <translation id="969892804517981540">Официальная сборка</translation> -<translation id="973473557718930265">Выйти</translation> <translation id="973773823069644502">Добавить адрес доставки</translation> <translation id="975560348586398090">{COUNT,plural, =0{Нет}=1{1 запись}one{# запись}few{# записи}many{# записей}other{# записи}}</translation> <translation id="981121421437150478">Офлайн</translation>
diff --git a/components/strings/components_strings_si.xtb b/components/strings/components_strings_si.xtb index 60b47b3..1a8da16 100644 --- a/components/strings/components_strings_si.xtb +++ b/components/strings/components_strings_si.xtb
@@ -1624,7 +1624,6 @@ <translation id="6689249931105087298">කළු ලක්ෂ්ය සම්පීඩනයට අදාළ</translation> <translation id="6689271823431384964">ඔබ පුරනය වී සිටින බැවින් Chrome ඔබට ඔබේ කාඩ්පත් ඔබේ Google ගිණුමට සුරැකීම පිරිනමයි. ඔබට මෙම හැසිරීම සැකසීම් තුළ වෙනස් කළ හැක. කාඩ්පත් හිමිකරුගේ නම ඔබේ ගිණුමෙන් ලැබේ.</translation> <translation id="6698381487523150993">නිර්මිත:</translation> -<translation id="6699188552522342100">මෙම වෙබ් අඩවිය නිවැරදිද?</translation> <translation id="6702919718839027939">ඉදිරිපත් කරන්න</translation> <translation id="6710213216561001401">පෙර</translation> <translation id="6710594484020273272"><සෙවීම් පදය ටයිප් කරන්න></translation> @@ -2330,7 +2329,6 @@ <translation id="961663415146723894">පහළ බඳින්න</translation> <translation id="962484866189421427">වෙනත් දෙයක් බවට පෙන්වීමට උත්සාහ කරන හෝ ඔබට හඹා යාමට භාවිතා කළ හැකි දත්ත එකතු කරන රැවටිලිකාර යෙදුම් ස්ථාපනය කිරීමට මෙම අන්තර්ගතය මගින් උත්සාහ කිරීමට හැකිය. <ph name="BEGIN_LINK" />කෙසේ වුවත් පෙන්වන්න<ph name="END_LINK" /></translation> <translation id="969892804517981540">නිල තැනුම</translation> -<translation id="973473557718930265">ඉවත් වන්න</translation> <translation id="973773823069644502">බෙදා හැරීමේ ලිපිනය එක් කරන්න</translation> <translation id="975560348586398090">{COUNT,plural, =0{කිසිවක් නැත}=1{අයිතම 1ක්}one{අයිතම #ක්}other{අයිතම #ක්}}</translation> <translation id="981121421437150478">ඕෆ්ලයින්</translation>
diff --git a/components/strings/components_strings_sk.xtb b/components/strings/components_strings_sk.xtb index 4a7bdcab..79a7527 100644 --- a/components/strings/components_strings_sk.xtb +++ b/components/strings/components_strings_sk.xtb
@@ -96,6 +96,7 @@ <translation id="129863573139666797"><ph name="BEGIN_LINK" />Skúste vymazať súbory cookie<ph name="END_LINK" /></translation> <translation id="1301324364792935241">Skontrolujte svoje nastavenia zabezpečeného servera DNS</translation> <translation id="1307966114820526988">Funkcie s ukončenou podporou</translation> +<translation id="1312803275555673949">Aký dôkaz to podporuje?</translation> <translation id="131405271941274527"><ph name="URL" /> chce odosielať a prijímať informácie, keď klepnete na svoj telefón v zariadení NFC</translation> <translation id="1314509827145471431">Zviazať vpravo</translation> <translation id="1319245136674974084">V prípade tejto aplikácie sa nabudúce nepýtať</translation> @@ -634,6 +635,7 @@ <translation id="3240791268468473923">Hárok s nezodpovedajúcim poverením pre prihlasovací údaj zabezpečenej platby je otvorený</translation> <translation id="3249845759089040423">Štýlové</translation> <translation id="3252266817569339921">Francúzština</translation> +<translation id="3257954757204451555">Kto stojí za touto informáciou?</translation> <translation id="3259648571731540213"><ph name="CREATE_GOOGLE_CALENDAR_EVENT_FOCUSED_FRIENDLY_MATCH_TEXT" />, postupným stlačením klávesov Tab a Enter vytvoríte rýchlym spôsobom novú udalosť v Kalendári Google</translation> <translation id="3266793032086590337">Hodnota (konflikt)</translation> <translation id="3268451620468152448">Otvorené karty</translation> @@ -1027,6 +1029,7 @@ <translation id="455113658016510503">A9</translation> <translation id="4558551763791394412">Skúste deaktivovať rozšírenia.</translation> <translation id="4559332380232738994">10 x 11</translation> +<translation id="4567686777917670400">Nastavenia prehliadača môže na diaľku zmeniť správca. Aktivita v tomto zariadení môže byť spravovaná aj mimo prehliadača Chromium. <ph name="BEGIN_LINK" />Ďalšie informácie<ph name="END_LINK" /></translation> <translation id="457875822857220463">Doručenie</translation> <translation id="4579056131138995126">Personal (obálka)</translation> <translation id="4582204425268416675">Odstrániť kartu</translation> @@ -1518,6 +1521,7 @@ <translation id="6337534724793800597">Filtrovať pravidlá podľa mena</translation> <translation id="6349101878882523185">Inštalovať aplikáciu <ph name="APP_NAME" /></translation> <translation id="6353505687280762741">{COUNT,plural, =0{Žiadne}=1{Jedno heslo (pre zoznam domén <ph name="DOMAIN_LIST" />, synchronizované)}=2{Dve heslá (pre zoznam domén <ph name="DOMAIN_LIST" />, synchronizované)}few{# heslá (pre zoznam domén <ph name="DOMAIN_LIST" />, synchronizované)}many{# passwords (for <ph name="DOMAIN_LIST" />, synced)}other{# hesiel (pre zoznam domén <ph name="DOMAIN_LIST" />, synchronizovaných)}}</translation> +<translation id="6355392890578844978">Tento prehliadač nespravuje firma ani iná organizácia. Aktivita v tomto zariadení môže byť spravovaná mimo prehliadača Chromium. <ph name="BEGIN_LINK" />Ďalšie informácie<ph name="END_LINK" /></translation> <translation id="6358450015545214790">Čo znamenajú tieto položky?</translation> <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />Skontrolujte proxy server, bránu firewall a konfiguráciu zabezpečeného servera DNS<ph name="END_LINK" /></translation> @@ -1613,7 +1617,6 @@ <translation id="6689249931105087298">Relatívne s kompresiou čierneho bodu</translation> <translation id="6689271823431384964">Chrome poskytuje možnosť uložiť karty v účte Google, pretože ste sa prihlásili. Toto správanie môžete zmeniť v nastaveniach. Toto meno majiteľa karty pochádza z vášho účtu.</translation> <translation id="6698381487523150993">Vytvorené:</translation> -<translation id="6699188552522342100">Je tento web presný?</translation> <translation id="6702919718839027939">Prezentovať</translation> <translation id="6710213216561001401">Späť</translation> <translation id="6710594484020273272"><Zadajte hľadaný výraz></translation> @@ -1970,6 +1973,7 @@ <translation id="7961015016161918242">Nikdy</translation> <translation id="7966803981046576691">Typ účtu úlohy</translation> <translation id="79682505114836835">Hodnota <ph name="VALUE" /> nie je platný hex kód farby.</translation> +<translation id="7970392640816874403">Čo hovoria iné zdroje?</translation> <translation id="7976214039405368314">Príliš veľa žiadostí</translation> <translation id="7977538094055660992">Zariadenie výstupu</translation> <translation id="7977894662897852582">Edp</translation> @@ -2320,7 +2324,6 @@ <translation id="961663415146723894">Zviazať dolu</translation> <translation id="962484866189421427">Tento obsah sa môže pokúsiť nainštalovať klamlivé aplikácie vydávajúce sa za iné aplikácie alebo zhromažďovať údaje, ktoré sa dajú použiť na sledovanie vašej osoby. <ph name="BEGIN_LINK" />Napriek tomu zobraziť<ph name="END_LINK" /></translation> <translation id="969892804517981540">oficiálna zostava</translation> -<translation id="973473557718930265">Ukončiť</translation> <translation id="973773823069644502">Pridať adresu doručenia</translation> <translation id="975560348586398090">{COUNT,plural, =0{Žiadne}=1{1 položka}few{# položky}many{# položky}other{# položiek}}</translation> <translation id="981121421437150478">Offline</translation>
diff --git a/components/strings/components_strings_sl.xtb b/components/strings/components_strings_sl.xtb index be7d7a7..bb37e65 100644 --- a/components/strings/components_strings_sl.xtb +++ b/components/strings/components_strings_sl.xtb
@@ -96,6 +96,7 @@ <translation id="129863573139666797"><ph name="BEGIN_LINK" />Poskusite izbrisati piškotke<ph name="END_LINK" /></translation> <translation id="1301324364792935241">Preverite nastavitve za varni DNS</translation> <translation id="1307966114820526988">Zastarele funkcije</translation> +<translation id="1312803275555673949">Kateri dokazi to potrjujejo?</translation> <translation id="131405271941274527"><ph name="URL" /> želi pošiljati in prejemati podatke, ko se dotaknete telefona v napravi s tehnologijo NFC</translation> <translation id="1314509827145471431">Vezava na desni</translation> <translation id="1319245136674974084">Ne sprašuj več za to aplikacijo</translation> @@ -641,6 +642,7 @@ <translation id="3240791268468473923">Preglednica za neujemanje poverilnic poverilnice za varno plačilo je odprta</translation> <translation id="3249845759089040423">Razgibano</translation> <translation id="3252266817569339921">francoščina</translation> +<translation id="3257954757204451555">Kdo stoji za temi informacijami?</translation> <translation id="3259648571731540213"><ph name="CREATE_GOOGLE_CALENDAR_EVENT_FOCUSED_FRIENDLY_MATCH_TEXT" />, pritisnite tabulatorko, nato Enter, če želite hitro ustvariti nov dogodek v Google Koledarju</translation> <translation id="3266793032086590337">Vrednost (v sporu)</translation> <translation id="3268451620468152448">Odprti zavihki</translation> @@ -1040,6 +1042,7 @@ <translation id="455113658016510503">A9</translation> <translation id="4558551763791394412">Poskusite onemogočiti razširitve.</translation> <translation id="4559332380232738994">10x11</translation> +<translation id="4567686777917670400">Skrbnik lahko spremeni nastavitev brskalnika na daljavo. Dejavnost v tej napravi morda tudi upravljajo zunaj Chromiuma. <ph name="BEGIN_LINK" />Več o tem<ph name="END_LINK" /></translation> <translation id="457875822857220463">Dostava</translation> <translation id="4579056131138995126">Personal (Envelope)</translation> <translation id="4582204425268416675">Odstranitev kartice</translation> @@ -1532,6 +1535,7 @@ <translation id="6337534724793800597">Filtriraj pravilnike po imenu</translation> <translation id="6349101878882523185">Namestite <ph name="APP_NAME" /></translation> <translation id="6353505687280762741">{COUNT,plural, =0{Nič}=1{Eno geslo (za <ph name="DOMAIN_LIST" />, sinhronizirano)}=2{Dve gesli (za <ph name="DOMAIN_LIST" />, sinhronizirano)}one{# geslo (za <ph name="DOMAIN_LIST" />, sinhronizirano)}two{# gesli (za <ph name="DOMAIN_LIST" />, sinhronizirano)}few{# gesla (za <ph name="DOMAIN_LIST" />, sinhronizirano)}other{# gesel (za <ph name="DOMAIN_LIST" />, sinhronizirano)}}</translation> +<translation id="6355392890578844978">Tega brskalnika ne upravlja podjetje ali druga organizacija. Dejavnost v tej napravi morda upravljajo zunaj Chromiuma. <ph name="BEGIN_LINK" />Več o tem<ph name="END_LINK" /></translation> <translation id="6358450015545214790">Več o teh nastavitvah</translation> <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />Preveriti strežnik proxy, požarni zid in konfiguracijo varnega strežnika DNS<ph name="END_LINK" /></translation> @@ -1627,7 +1631,6 @@ <translation id="6689249931105087298">Relativno s stiskanjem črnih pik</translation> <translation id="6689271823431384964">Chrome ponuja shranjevanje kartic v račun za Google, ker ste prijavljeni. To lahko spremenite v nastavitvah. Ime imetnika računa je iz vašega računa.</translation> <translation id="6698381487523150993">Ustvarjeno:</translation> -<translation id="6699188552522342100">Je to spletno mesto točno?</translation> <translation id="6702919718839027939">Predstavitev</translation> <translation id="6710213216561001401">Prejšnji</translation> <translation id="6710594484020273272"><Vnesite iskalno poizvedbo></translation> @@ -1984,6 +1987,7 @@ <translation id="7961015016161918242">Nikoli</translation> <translation id="7966803981046576691">Vrsta računa za opravilo</translation> <translation id="79682505114836835">Vrednost »<ph name="VALUE" />« je neveljavna šestnajstiška barva.</translation> +<translation id="7970392640816874403">Kaj pravijo drugi viri?</translation> <translation id="7976214039405368314">Preveč zahtev.</translation> <translation id="7977538094055660992">Izhodna naprava</translation> <translation id="7977894662897852582">Edp</translation> @@ -2333,7 +2337,6 @@ <translation id="961663415146723894">Vezava spodaj</translation> <translation id="962484866189421427">Ta vsebina lahko poskusi namestiti zavajajoče aplikacije, ki se izdajajo za kaj drugega ali zbirajo podatke, s katerimi vas je mogoče spremljati. <ph name="BEGIN_LINK" />Vseeno pokaži<ph name="END_LINK" /></translation> <translation id="969892804517981540">Uradna različica</translation> -<translation id="973473557718930265">Zapri</translation> <translation id="973773823069644502">Dodajanje naslova za dostavo</translation> <translation id="975560348586398090">{COUNT,plural, =0{Brez}=1{1 element}one{# element}two{# elementa}few{# elementi}other{# elementov}}</translation> <translation id="981121421437150478">Brez povezave</translation>
diff --git a/components/strings/components_strings_sq.xtb b/components/strings/components_strings_sq.xtb index 1abf51b3..183e46fb 100644 --- a/components/strings/components_strings_sq.xtb +++ b/components/strings/components_strings_sq.xtb
@@ -1623,7 +1623,6 @@ <translation id="6689249931105087298">Relative me ngjeshjen e pikës së zezë</translation> <translation id="6689271823431384964">Chrome po ofron që të ruash kartat e tua në "Llogarinë tënde të Google" sepse je identifikuar. Mund ta ndryshosh këtë sjellje te cilësimet. Emri i mbajtësit të kartës vjen nga llogaria jote.</translation> <translation id="6698381487523150993">Krijuar:</translation> -<translation id="6699188552522342100">A është e saktë kjo faqe interneti?</translation> <translation id="6702919718839027939">Prezantim</translation> <translation id="6710213216561001401">Prapa</translation> <translation id="6710594484020273272"><Shkruaj termin e kërkimit></translation> @@ -2329,7 +2328,6 @@ <translation id="961663415146723894">Lidhje poshtë</translation> <translation id="962484866189421427">Kjo përmbajtje mund të përpiqet të instalojë aplikacione mashtruese që pretendojnë se janë diçka tjetër ose që mbledhin të dhëna që mund të përdoren për të të gjurmuar. <ph name="BEGIN_LINK" />Shfaq gjithsesi<ph name="END_LINK" /></translation> <translation id="969892804517981540">Ndërtimi zyrtar</translation> -<translation id="973473557718930265">Dil</translation> <translation id="973773823069644502">Shto adresën e dorëzimit</translation> <translation id="975560348586398090">{COUNT,plural, =0{Asnjë}=1{1 artikull}other{# artikuj}}</translation> <translation id="981121421437150478">Jashtë linje</translation>
diff --git a/components/strings/components_strings_sr-Latn.xtb b/components/strings/components_strings_sr-Latn.xtb index 108ed30b..f8b9da9 100644 --- a/components/strings/components_strings_sr-Latn.xtb +++ b/components/strings/components_strings_sr-Latn.xtb
@@ -96,6 +96,7 @@ <translation id="129863573139666797"><ph name="BEGIN_LINK" />Pokušajte da obrišete kolačiće<ph name="END_LINK" /></translation> <translation id="1301324364792935241">Proverite podešavanja za bezbedan DNS</translation> <translation id="1307966114820526988">Zastarele funkcije</translation> +<translation id="1312803275555673949">Koji dokazi podržavaju ovo?</translation> <translation id="131405271941274527"><ph name="URL" /> želi da šalje i dobija informacije kada telefonom dodirnete NFC uređaj</translation> <translation id="1314509827145471431">Povez na desnoj strani</translation> <translation id="1319245136674974084">Ne pitaj ponovo za ovu aplikaciju</translation> @@ -641,6 +642,7 @@ <translation id="3240791268468473923">Otvoreno je obaveštenje da nema akreditiva koji se podudaraju za bezbedno plaćanje</translation> <translation id="3249845759089040423">Hipi</translation> <translation id="3252266817569339921">francuski</translation> +<translation id="3257954757204451555">Ko je izvor ovih informacija?</translation> <translation id="3259648571731540213"><ph name="CREATE_GOOGLE_CALENDAR_EVENT_FOCUSED_FRIENDLY_MATCH_TEXT" />, pritisnite Tab, pa Enter da biste brzo napravili nov događaj u Google kalendaru</translation> <translation id="3266793032086590337">Vrednost (neusaglašena)</translation> <translation id="3268451620468152448">Otvorene kartice</translation> @@ -1040,6 +1042,7 @@ <translation id="455113658016510503">A9</translation> <translation id="4558551763791394412">Pokušajte da onemogućite dodatke.</translation> <translation id="4559332380232738994">10x11</translation> +<translation id="4567686777917670400">Administrator može daljinski da promeni podešavanje pregledača. Aktivnostima na ovom uređaju može da se upravlja i van Chromium-a. <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation> <translation id="457875822857220463">Isporuka</translation> <translation id="4579056131138995126">Personal (koverat)</translation> <translation id="4582204425268416675">Ukloni karticu</translation> @@ -1531,6 +1534,7 @@ <translation id="6337534724793800597">Filtriraj smernice prema nazivu</translation> <translation id="6349101878882523185">Instalirajte <ph name="APP_NAME" /></translation> <translation id="6353505687280762741">{COUNT,plural, =0{Nijedna}=1{1 lozinka (za <ph name="DOMAIN_LIST" />, sinhronizovano)}=2{2 lozinke (za <ph name="DOMAIN_LIST" />, sinhronizovano)}one{# lozinka (za <ph name="DOMAIN_LIST" />, sinhronizovano)}few{# lozinke (za <ph name="DOMAIN_LIST" />, sinhronizovano)}other{# lozinki (za <ph name="DOMAIN_LIST" />, sinhronizovano)}}</translation> +<translation id="6355392890578844978">Ovim pregledačem ne upravlja kompanija niti druga organizacija. Aktivnostima na ovom uređaju se možda upravlja van Chromium-a. <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation> <translation id="6358450015545214790">Šta ovo znači?</translation> <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />da proverite konfiguraciju proksija, zaštitnog zida i bezbednog DNS-a<ph name="END_LINK" /></translation> @@ -1626,7 +1630,6 @@ <translation id="6689249931105087298">Relativno sa kompresijom crnih tačaka</translation> <translation id="6689271823431384964">Chrome vam nudi čuvanje kartica na Google nalogu zato što ste prijavljeni. To možete da promenite u podešavanjima. Ime vlasnika kartice smo uzeli sa naloga.</translation> <translation id="6698381487523150993">Napravljeno:</translation> -<translation id="6699188552522342100">Da li je veb-sajt tačan?</translation> <translation id="6702919718839027939">Prezentacija</translation> <translation id="6710213216561001401">Prethodno</translation> <translation id="6710594484020273272"><Unesite termin za pretragu></translation> @@ -1983,6 +1986,7 @@ <translation id="7961015016161918242">Nikad</translation> <translation id="7966803981046576691">Tip naloga zadatka</translation> <translation id="79682505114836835">Vrednost <ph name="VALUE" /> je nevažeća heksadecimalna boja.</translation> +<translation id="7970392640816874403">Šta drugi izvori kažu?</translation> <translation id="7976214039405368314">Previše je zahteva</translation> <translation id="7977538094055660992">Izlazni uređaj</translation> <translation id="7977894662897852582">Edp</translation> @@ -2333,7 +2337,6 @@ <translation id="961663415146723894">Povez na dnu</translation> <translation id="962484866189421427">Ovaj sadržaj možda pokušava da instalira obmanjujuće aplikacije koje se pretvaraju da su nešto drugo ili da prikupljaju podatke koji mogu da se koriste za praćenje. <ph name="BEGIN_LINK" />Prikaži<ph name="END_LINK" /></translation> <translation id="969892804517981540">Zvanična verzija</translation> -<translation id="973473557718930265">Izađi</translation> <translation id="973773823069644502">Dodaj adresu za dostavu</translation> <translation id="975560348586398090">{COUNT,plural, =0{None}=1{1 stavka}one{# stavka}few{# stavke}other{# stavki}}</translation> <translation id="981121421437150478">Oflajn</translation>
diff --git a/components/strings/components_strings_sr.xtb b/components/strings/components_strings_sr.xtb index cc1629f..b27cc1d 100644 --- a/components/strings/components_strings_sr.xtb +++ b/components/strings/components_strings_sr.xtb
@@ -96,6 +96,7 @@ <translation id="129863573139666797"><ph name="BEGIN_LINK" />Покушајте да обришете колачиће<ph name="END_LINK" /></translation> <translation id="1301324364792935241">Проверите подешавања за безбедан DNS</translation> <translation id="1307966114820526988">Застареле функције</translation> +<translation id="1312803275555673949">Који докази подржавају ово?</translation> <translation id="131405271941274527"><ph name="URL" /> жели да шаље и добија информације када телефоном додирнете NFC уређај</translation> <translation id="1314509827145471431">Повез на десној страни</translation> <translation id="1319245136674974084">Не питај поново за ову апликацију</translation> @@ -641,6 +642,7 @@ <translation id="3240791268468473923">Отворено је обавештење да нема акредитива који се подударају за безбедно плаћање</translation> <translation id="3249845759089040423">Хипи</translation> <translation id="3252266817569339921">француски</translation> +<translation id="3257954757204451555">Ко је извор ових информација?</translation> <translation id="3259648571731540213"><ph name="CREATE_GOOGLE_CALENDAR_EVENT_FOCUSED_FRIENDLY_MATCH_TEXT" />, притисните Tab, па Enter да бисте брзо направили нов догађај у Google календару</translation> <translation id="3266793032086590337">Вредност (неусаглашена)</translation> <translation id="3268451620468152448">Отворене картице</translation> @@ -1040,6 +1042,7 @@ <translation id="455113658016510503">A9</translation> <translation id="4558551763791394412">Покушајте да онемогућите додатке.</translation> <translation id="4559332380232738994">10x11</translation> +<translation id="4567686777917670400">Администратор може даљински да промени подешавање прегледача. Активностима на овом уређају може да се управља и ван Chromium-а. <ph name="BEGIN_LINK" />Сазнајте више<ph name="END_LINK" /></translation> <translation id="457875822857220463">Испорука</translation> <translation id="4579056131138995126">Personal (коверат)</translation> <translation id="4582204425268416675">Уклони картицу</translation> @@ -1531,6 +1534,7 @@ <translation id="6337534724793800597">Филтрирај смернице према називу</translation> <translation id="6349101878882523185">Инсталирајте <ph name="APP_NAME" /></translation> <translation id="6353505687280762741">{COUNT,plural, =0{Ниједна}=1{1 лозинка (за <ph name="DOMAIN_LIST" />, синхронизовано)}=2{2 лозинке (за <ph name="DOMAIN_LIST" />, синхронизовано)}one{# лозинка (за <ph name="DOMAIN_LIST" />, синхронизовано)}few{# лозинке (за <ph name="DOMAIN_LIST" />, синхронизовано)}other{# лозинки (за <ph name="DOMAIN_LIST" />, синхронизовано)}}</translation> +<translation id="6355392890578844978">Овим прегледачем не управља компанија нити друга организација. Активностима на овом уређају се можда управља ван Chromium-а. <ph name="BEGIN_LINK" />Сазнајте више<ph name="END_LINK" /></translation> <translation id="6358450015545214790">Шта ово значи?</translation> <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />да проверите конфигурацију проксија, заштитног зида и безбедног DNS-а<ph name="END_LINK" /></translation> @@ -1626,7 +1630,6 @@ <translation id="6689249931105087298">Релативно са компресијом црних тачака</translation> <translation id="6689271823431384964">Chrome вам нуди чување картица на Google налогу зато што сте пријављени. То можете да промените у подешавањима. Име власника картице смо узели са налога.</translation> <translation id="6698381487523150993">Направљено:</translation> -<translation id="6699188552522342100">Да ли је веб-сајт тачан?</translation> <translation id="6702919718839027939">Презентација</translation> <translation id="6710213216561001401">Претходно</translation> <translation id="6710594484020273272"><Унесите термин за претрагу></translation> @@ -1983,6 +1986,7 @@ <translation id="7961015016161918242">Никад</translation> <translation id="7966803981046576691">Тип налога задатка</translation> <translation id="79682505114836835">Вредност <ph name="VALUE" /> је неважећа хексадецимална боја.</translation> +<translation id="7970392640816874403">Шта други извори кажу?</translation> <translation id="7976214039405368314">Превише је захтева</translation> <translation id="7977538094055660992">Излазни уређај</translation> <translation id="7977894662897852582">Edp</translation> @@ -2333,7 +2337,6 @@ <translation id="961663415146723894">Повез на дну</translation> <translation id="962484866189421427">Овај садржај можда покушава да инсталира обмањујуће апликације које се претварају да су нешто друго или да прикупљају податке који могу да се користе за праћење. <ph name="BEGIN_LINK" />Прикажи<ph name="END_LINK" /></translation> <translation id="969892804517981540">Званична верзија</translation> -<translation id="973473557718930265">Изађи</translation> <translation id="973773823069644502">Додај адресу за доставу</translation> <translation id="975560348586398090">{COUNT,plural, =0{None}=1{1 ставка}one{# ставка}few{# ставке}other{# ставки}}</translation> <translation id="981121421437150478">Офлајн</translation>
diff --git a/components/strings/components_strings_sv.xtb b/components/strings/components_strings_sv.xtb index 5b008859..43c2655 100644 --- a/components/strings/components_strings_sv.xtb +++ b/components/strings/components_strings_sv.xtb
@@ -1627,7 +1627,6 @@ <translation id="6689249931105087298">Relativ med svartpunktskomprimering</translation> <translation id="6689271823431384964">Chrome ger möjlighet att spara dina kort i ditt Google-konto eftersom du är inloggad. Du kan ändra detta i inställningarna. Kortinnehavarens namn hämtas från ditt konto.</translation> <translation id="6698381487523150993">Skapad av:</translation> -<translation id="6699188552522342100">Stämmer den här webbplatsen?</translation> <translation id="6702919718839027939">Presentera</translation> <translation id="6710213216561001401">Föregående</translation> <translation id="6710594484020273272"><Ange sökterm></translation> @@ -2334,7 +2333,6 @@ <translation id="961663415146723894">Bindning längst ned</translation> <translation id="962484866189421427">Bedrägliga appar som inte gör vad de påstås göra eller insamling av data som används för att spåra dig skulle kunna installeras via innehållet. <ph name="BEGIN_LINK" />Visa ändå<ph name="END_LINK" /></translation> <translation id="969892804517981540">Officiell version</translation> -<translation id="973473557718930265">Avsluta</translation> <translation id="973773823069644502">Lägg till leveransadress</translation> <translation id="975560348586398090">{COUNT,plural, =0{Ingen}=1{1 objekt}other{# objekt}}</translation> <translation id="981121421437150478">Offline</translation>
diff --git a/components/strings/components_strings_sw.xtb b/components/strings/components_strings_sw.xtb index 2f7906b..b29c7e20 100644 --- a/components/strings/components_strings_sw.xtb +++ b/components/strings/components_strings_sw.xtb
@@ -1626,7 +1626,6 @@ <translation id="6689249931105087298">Ya kiwango cha kati yenye sehemu nyeusi iliyobanwa</translation> <translation id="6689271823431384964">Chrome itakuhifadhia kadi zako katika Akaunti yako ya Google kwa sababu umeingia katika akaunti. Unaweza kubadilisha hali hii katika mipangilio. Jina la mwenye kadi linatoka kwenye akaunti yako.</translation> <translation id="6698381487523150993">Imeundwa</translation> -<translation id="6699188552522342100">Je, tovuti hii ni sahihi?</translation> <translation id="6702919718839027939">Wasilisha</translation> <translation id="6710213216561001401">Iliyopita</translation> <translation id="6710594484020273272"><Andika neno unalotaka kutafuta></translation> @@ -2329,7 +2328,6 @@ <translation id="961663415146723894">Unganisha chini</translation> <translation id="962484866189421427">Huenda maudhui haya yakajaribu kusakinisha programu za udanganyifu zinazojifanya kuwa kitu kingine au kukusanya data inayoweza kutumika kukufuatilia. <ph name="BEGIN_LINK" />Onyesha tu<ph name="END_LINK" /></translation> <translation id="969892804517981540">Muundo Rasmi</translation> -<translation id="973473557718930265">Acha</translation> <translation id="973773823069644502">Chagua Mahali Bidhaa Itakapopelekwa</translation> <translation id="975560348586398090">{COUNT,plural, =0{Hamna}=1{Kipengee 1}other{Vipengee #}}</translation> <translation id="981121421437150478">Nje ya mtandao</translation>
diff --git a/components/strings/components_strings_ta.xtb b/components/strings/components_strings_ta.xtb index 8def5c4..5ca18ec 100644 --- a/components/strings/components_strings_ta.xtb +++ b/components/strings/components_strings_ta.xtb
@@ -474,6 +474,7 @@ <translation id="2596415276201385844">பாதுகாப்பான இணைப்பை அமைக்க, கடிகாரம் சரியாக அமைக்கப்பட வேண்டும். இதற்குக் காரணம், இணையதளங்கள் தங்களைத் தானே அடையாளப்படுத்த பயன்படுத்தும் சான்றிதழ்கள் குறிப்பிட்ட காலநேரத்திற்கே செல்லுபடியாகும். உங்கள் சாதனத்தின் கடிகாரம் தவறாக இருந்தால், Chrome இந்தச் சான்றிதழ்களைச் சரிபார்க்காது.</translation> <translation id="2597378329261239068">இந்த ஆவணம் கடவுச்சொல் பாதுகாக்கப்பட்ட ஒன்று. தயவுசெய்து ஒரு கடவுச்சொல்லை உள்ளிடுக.</translation> <translation id="2609632851001447353">வேறுபாடுகள்</translation> +<translation id="2610561535971892504">கிளிக் செய்து நகலெடுக்கவும்</translation> <translation id="2618023639789766142">C10 (என்வலப்)</translation> <translation id="2625385379895617796">உங்கள் கடிகாரம் மிகவும் முன்னோக்கி இருக்கிறது</translation> <translation id="262745152991669301">USB சாதனங்களுடன் இணைய முயலும்போது அனுமதி கேட்க வேண்டும்</translation> @@ -1621,7 +1622,6 @@ <translation id="6689249931105087298">கறுப்புப் புள்ளிச் சுருக்கத்துடன் சார்புடையது</translation> <translation id="6689271823431384964">நீங்கள் உள்நுழைந்துள்ளதால் Google கணக்கில் உங்கள் கார்டு விவரங்களைச் சேமிக்கும் விருப்பத்தை Chrome வழங்குகிறது. இதை நீங்கள் அமைப்புகளில் மாற்றலாம். கார்டு உரிமையாளரின் பெயர் உங்கள் கணக்கிலிருந்து பெறப்படுகிறது.</translation> <translation id="6698381487523150993">உருவாக்கப்பட்டது:</translation> -<translation id="6699188552522342100">இந்த இணையதளத்தில் உள்ள தகவல்கள் துல்லியமானவையா?</translation> <translation id="6702919718839027939">ஸ்கிரீனைப் பகிர்</translation> <translation id="6710213216561001401">முந்தையது</translation> <translation id="6710594484020273272"><தேடல் வார்த்தையை உள்ளிடுக></translation> @@ -2328,7 +2328,6 @@ <translation id="961663415146723894">பைண்டு பாட்டம்</translation> <translation id="962484866189421427">இந்த உள்ளடக்கம், வேறொரு பிரபல ஆப்ஸ் போலத் தோற்றமளிக்கக்கூடிய அல்லது உங்களைக் கண்காணிக்கப் பயன்படுத்தக்கூடிய தரவைச் சேகரிக்கும் போலியான ஆப்ஸை நிறுவ முயலலாம். <ph name="BEGIN_LINK" />பரவாயில்லை, பக்கத்தைக் காட்டு<ph name="END_LINK" /></translation> <translation id="969892804517981540">அதிகாரப்பூர்வ கட்டமைப்பு</translation> -<translation id="973473557718930265">வெளியேறு</translation> <translation id="973773823069644502">டெலிவரி முகவரியைச் சேர்</translation> <translation id="975560348586398090">{COUNT,plural, =0{ஏதுமில்லை}=1{1 உருப்படி}other{# உருப்படிகள்}}</translation> <translation id="981121421437150478">ஆஃப்லைன்</translation>
diff --git a/components/strings/components_strings_te.xtb b/components/strings/components_strings_te.xtb index b69d6af..b0742c8 100644 --- a/components/strings/components_strings_te.xtb +++ b/components/strings/components_strings_te.xtb
@@ -150,7 +150,7 @@ <translation id="1453974140256777690">మీరు పేస్ట్ చేసిన లేదా జోడించిన టెక్స్ట్ Google క్లౌడ్ లేదా థర్డ్ పార్టీలకు విశ్లేషణ కోసం పంపబడుతుంది. ఉదాహరణకు, ఇది సున్నితమైన వ్యక్తిగత సమాచారం కోసం స్కాన్ చేయబడవచ్చు.</translation> <translation id="1455413310270022028">ఎరేజర్</translation> <translation id="1462245070427461050">JIS B9</translation> -<translation id="1462951478840426066">మీ కంప్యూటర్లోని ఫాంట్లను ఉపయోగించండి, తద్వారా మీరు అధిక నాణ్యత గల కంటెంట్ను క్రియేట్ చేయవచ్చు</translation> +<translation id="1462951478840426066">మీ కంప్యూటర్లోని ఫాంట్లను ఉపయోగించండి, తద్వారా మీరు అధిక క్వాలిటీ గల కంటెంట్ను క్రియేట్ చేయవచ్చు</translation> <translation id="1463543813647160932">5x7</translation> <translation id="1467432559032391204">ఎడమ</translation> <translation id="1468653229182955856"><ph name="EMBEDDED_ORIGIN" /> ను <ph name="TOP_ORIGIN" />కు కొనసాగేలా చేయడానికి మీకు కావాల్సిన కోడ్ <ph name="ONE_TIME_CODE" /></translation> @@ -346,12 +346,12 @@ <translation id="2129079103035905234">మోషన్ సెన్సార్లు</translation> <translation id="2130448033692577677">DnsOverHttpsMode విధానాన్ని సెట్ చేయని కారణంగా, మీరు పేర్కొన్న టెంప్లేట్లను వర్తింపజేయడం వీలుకాకపోవచ్చు.</translation> <translation id="213826338245044447">మొబైల్ బుక్మార్క్లు</translation> -<translation id="214556005048008348">చెల్లింపును రద్దు చేయి</translation> +<translation id="214556005048008348">పేమెంట్ను రద్దు చేయి</translation> <translation id="2147827593068025794">బ్యాక్గ్రౌండ్ సింక్</translation> <translation id="2148613324460538318">కార్డ్ని జోడించు</translation> <translation id="2149968176347646218">కనెక్షన్ సురక్షితంగా లేదు</translation> <translation id="2154054054215849342">సింక్ మీ డొమైన్కు అందుబాటులో లేదు</translation> -<translation id="2154484045852737596">కార్డ్ను సవరించండి</translation> +<translation id="2154484045852737596">కార్డ్ను ఎడిట్ చేయండి</translation> <translation id="2161656808144014275">వచనం</translation> <translation id="2164510882479075877"><ph name="HOST_NAME" />లో అక్షర దోషం ఉందేమో చెక్ చేయండి.</translation> <translation id="2166049586286450108">పూర్తి నిర్వాహక యాక్సెస్</translation> @@ -545,7 +545,7 @@ <translation id="2880660355386638022">విండో స్థలం</translation> <translation id="2881276955470682203">కార్డ్ను సేవ్ చేయాలా?</translation> <translation id="2882949212241984732">డబుల్-గేట్ ఫోల్డ్</translation> -<translation id="2900528713135656174">ఈవెంట్ను సృష్టించండి</translation> +<translation id="2900528713135656174">ఈవెంట్ను క్రియేట్ చేయండి</translation> <translation id="2903493209154104877">అడ్రస్లు</translation> <translation id="290376772003165898">పేజీ <ph name="LANGUAGE" />లో లేదా?</translation> <translation id="2909946352844186028">నెట్వర్క్ మార్పు గుర్తించబడింది.</translation> @@ -626,7 +626,7 @@ <translation id="3195213714973468956"><ph name="SERVER_NAME" />లో <ph name="PRINTER_NAME" /></translation> <translation id="3197136577151645743">మీరు ఈ పరికరాన్ని యాక్టివ్గా ఉపయోగించే సమయాలను తెలుసుకోవడానికి సైట్ అనుమతి అడగవచ్చు</translation> <translation id="3202497928925179914"><ph name="MANAGE_SYNC_FOCUSED_FRIENDLY_MATCH_TEXT" />, Chrome సెట్టింగ్లలో మీరు ఏ సమాచారాన్ని సింక్ చేయాలనుకుంటున్నారో మేనేజ్ చేయడానికి 'Tab'ను నొక్కి, ఆపై 'Enter'ను నొక్కండి</translation> -<translation id="320323717674993345">చెల్లింపును రద్దు చేయండి</translation> +<translation id="320323717674993345">పేమెంట్ను రద్దు చేయండి</translation> <translation id="3207960819495026254">బుక్మార్క్ చేయబడింది</translation> <translation id="3209034400446768650">పేజీ, నగదును ఛార్జ్ చేయవచ్చు</translation> <translation id="3212581601480735796"><ph name="HOSTNAME" />లోని మీ కార్యకలాపం పర్యవేక్షించబడుతోంది</translation> @@ -889,7 +889,7 @@ <translation id="4101413244023615925">టెక్స్ట్, గ్రాఫిక్స్</translation> <translation id="4103249731201008433">పరికరం క్రమ సంఖ్య చెల్లదు</translation> <translation id="4106133539597032659">'సైట్ను క్రియేట్ చేయండి' బటన్, Google Sitesలో త్వరగా కొత్త సైట్ను క్రియేట్ చేయడానికి Enterను నొక్కండి</translation> -<translation id="4110652170750985508">మీ చెల్లింపును రివ్యూ చేయండి</translation> +<translation id="4110652170750985508">మీ పేమెంట్ను రివ్యూ చేయండి</translation> <translation id="4112140312785995938">వెనుకకు జరుపు</translation> <translation id="4114146879518089587">సైట్కు కొనసాగండి</translation> <translation id="4116663294526079822">ఈ సైట్లో ఎల్లప్పుడూ అనుమతించు</translation> @@ -1429,7 +1429,7 @@ <translation id="5946937721014915347"><ph name="SITE_NAME" /> తెరవబడుతోంది…</translation> <translation id="5951495562196540101">వినియోగదారు ఖాతాతో నమోదు చేయడం సాధ్యపడదు (ప్యాకేజ్డ్ లైసెన్స్ అందుబాటులో ఉంది).</translation> <translation id="5963413905009737549">విభాగం</translation> -<translation id="5967592137238574583">సంప్రదింపు సమాచారాన్ని సవరించండి</translation> +<translation id="5967592137238574583">సంప్రదింపు సమాచారాన్ని ఎడిట్ చేయండి</translation> <translation id="5967867314010545767">చరిత్ర నుండి తీసివేయి</translation> <translation id="5968793460449681917">ప్రతి సందర్శనలో</translation> <translation id="5975083100439434680">దూరంగా జూమ్ చేయి</translation> @@ -1561,7 +1561,7 @@ <translation id="6428146287756735566">మీ Chrome హిస్టరీలో సందర్భోచితమైన యాక్టివిటీని చూడటానికి వెతకడాన్ని కొనసాగించండి</translation> <translation id="6428450836711225518">మీ ఫోన్ నంబర్ను ధృవీకరించండి</translation> <translation id="643051589346665201">Google పాస్వర్డ్ను మార్చండి</translation> -<translation id="6433490469411711332">సంప్రదింపు సమాచారాన్ని సవరించండి</translation> +<translation id="6433490469411711332">సంప్రదింపు సమాచారాన్ని ఎడిట్ చేయండి</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> కనెక్ట్ కావడానికి నిరాకరించింది.</translation> <translation id="6440503408713884761">విస్మరించబడింది</translation> <translation id="6443406338865242315">ఏ ఎక్స్టెన్షన్లు మరియు ప్లగిన్లను మీరు ఇన్స్టాల్ చేశారు</translation> @@ -1629,7 +1629,6 @@ <translation id="6689249931105087298">సంబంధిత బ్లాక్ పాయింట్ కంప్రెషన్</translation> <translation id="6689271823431384964">మీరు సైన్ ఇన్ చేసి ఉన్నందున, మీ కార్డ్లను మీ Google ఖాతాలో సేవ్ చేసుకోగల అవకాశాన్ని Chrome మీకు అందిస్తోంది. మీరు సెట్టింగ్లలో ఈ ప్రవర్తనను మార్చవచ్చు. కార్డుదారుడి పేరు మీ ఖాతా నుండి అందించబడింది.</translation> <translation id="6698381487523150993">సృష్టించబడింది:</translation> -<translation id="6699188552522342100">ఈ వెబ్సైట్ ఖచ్చితమైనదేనా?</translation> <translation id="6702919718839027939">పిన్ చేయండి</translation> <translation id="6710213216561001401">మునుపటి</translation> <translation id="6710594484020273272"><శోధన పదాన్ని టైప్ చేయండి></translation> @@ -1874,7 +1873,7 @@ <translation id="7569952961197462199">Chrome నుండి క్రెడిట్ కార్డ్ను తీసివేయాలా?</translation> <translation id="7569983096843329377">నలుపు</translation> <translation id="7575207903026901870">సూచన బటన్ను తీసివేసి, ఈ సూచనను తీసివేయడానికి ఎంటర్ నొక్కండి</translation> -<translation id="7578104083680115302">మీరు Googleతో సేవ్ చేసిన కార్డ్లను ఉపయోగించి పరికరాల్లోని సైట్లు మరియు అనువర్తనాల్లో శీఘ్రంగా చెల్లించండి.</translation> +<translation id="7578104083680115302">మీరు Googleతో సేవ్ చేసిన కార్డ్లను ఉపయోగించి పరికరాల్లోని సైట్లు మరియు అనువర్తనాల్లో శీఘ్రంగా పేమెంట్ చేయండి.</translation> <translation id="7581199239021537589">2వ వైపు ప్రింట్లో చిత్రాన్ని Y అక్షంలో జరపు</translation> <translation id="7582602800368606489">Google Calendarలో త్వరగా కొత్త ఈవెంట్ను క్రియేట్ చేయండి</translation> <translation id="7591636454931265313"><ph name="TOP_LEVEL_URL" />లోని కుక్కీలను, సైట్ డేటాను వినియోగించడానికి <ph name="EMBEDDED_URL" /> అనుమతి అడుగుతోంది</translation> @@ -1893,7 +1892,7 @@ <translation id="7637586430889951925">{COUNT,plural, =0{ఏవీ లేవు}=1{మీ ఖాతాలో 1 పాస్వర్డ్ (<ph name="DOMAIN_LIST" /> కోసం)}other{మీ ఖాతాలో # పాస్వర్డ్లు (<ph name="DOMAIN_LIST" /> కోసం)}}</translation> <translation id="7638605456503525968">సీరియల్ పోర్ట్లు</translation> <translation id="7639968568612851608">ముదురు బూడిద రంగు</translation> -<translation id="7647206758853451655">ప్రింట్ నాణ్యత</translation> +<translation id="7647206758853451655">ప్రింట్ క్వాలిటీ</translation> <translation id="7648992873808071793">ఈ పరికరంలో ఫైళ్లను నిల్వ చేయాలనుకుంటోంది</translation> <translation id="7653957176542370971">చెల్లింపు హ్యాండ్లర్ షీట్ మూసివేయబడింది</translation> <translation id="7654909834015434372">మీరు అదనపు గమనికలను ఎడిట్ చేసినప్పుడు, ఈ డాక్యుమెంట్, దాని ఒరిజినల్ రొటేషన్కు తిరిగి వస్తుంది</translation> @@ -1920,7 +1919,7 @@ <translation id="7716147886133743102">మీ నిర్వాహకుల ద్వారా బ్లాక్ చేయబడింది</translation> <translation id="7716375162095500223">ఇంకా అప్లోడ్ చేయలేదు లేదా విస్మరించబడింది</translation> <translation id="7716424297397655342">కాష్ నుండి ఈ సైట్ను లోడ్ చేయలేకపోయాము</translation> -<translation id="7723047071702270851">కార్డ్ను సవరించండి</translation> +<translation id="7723047071702270851">కార్డ్ను ఎడిట్ చేయండి</translation> <translation id="7734285854693414638">Google Formsలో త్వరగా కొత్త ఫారమ్ను క్రియేట్ చేయండి</translation> <translation id="773466115871691567"><ph name="SOURCE_LANGUAGE" />లో ఉన్న పేజీలను ఎల్లప్పుడూ అనువదించు</translation> <translation id="7740996059027112821">ప్రామాణికం</translation> @@ -2099,7 +2098,7 @@ <translation id="8340095855084055290"><ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> <translation id="834457929814110454">మీ భద్రతకు వాటిల్లే ఆపదల గురించి మీకు అర్థం అయ్యి ఉంటే, హానికర ప్రోగ్రామ్లు తీసివేయబడటానికి ముందే మీరు <ph name="BEGIN_LINK" />ఈ సైట్ను సందర్శించవచ్చు<ph name="END_LINK" />.</translation> <translation id="8349305172487531364">బుక్మార్క్ల పట్టీ</translation> -<translation id="8351131234907093545">గమనికను సృష్టించండి</translation> +<translation id="8351131234907093545">గమనికను క్రియేట్ చేయండి</translation> <translation id="8355270400102541638">స్థానిక క్రాష్ సందర్భం:</translation> <translation id="8363502534493474904">ఎయిర్ప్లైన్ మోడ్ను ఆఫ్ చేయడం</translation> <translation id="8364627913115013041">సెట్ చేయలేదు.</translation> @@ -2156,7 +2155,7 @@ <translation id="8574899947864779331">కార్డ్లను వేగంగా నిర్ధారించడానికి Touch IDని ఉపయోగించండి</translation> <translation id="8577348305244205642">వర్చువల్ కార్డ్ అందుబాటులో లేదు</translation> <translation id="858637041960032120">ఫోన్ నం. జోడిం.</translation> -<translation id="8589998999637048520">ఉత్తమ నాణ్యత</translation> +<translation id="8589998999637048520">ఉత్తమ క్వాలిటీ</translation> <translation id="8600271352425265729">ఈ ఒక్కసారి మాత్రమే</translation> <translation id="860043288473659153">కార్డుదారుని పేరు</translation> <translation id="8606726445206553943">మీ MIDI పరికరాలను ఉపయోగించాలనుకుంటోంది</translation> @@ -2335,7 +2334,6 @@ <translation id="961663415146723894">దిగువ భాగంలో బైండ్</translation> <translation id="962484866189421427">ఈ కంటెంట్ వేరేవాటిలా కనిపించే మోసపూరిత యాప్లను ఇన్స్టాల్ చేయడానికి ప్రయత్నించవచ్చు లేదా మిమ్మల్ని ట్రాక్ చేయడానికి ఉపయోగించే డేటాని సేకరించవచ్చు. <ph name="BEGIN_LINK" />అయినప్పటికీ, చూపించు<ph name="END_LINK" /></translation> <translation id="969892804517981540">అధికారిక బిల్డ్</translation> -<translation id="973473557718930265">నిష్క్రమించు</translation> <translation id="973773823069644502">డెలివరీ చిరునామాను జోడించండి</translation> <translation id="975560348586398090">{COUNT,plural, =0{ఏమీ లేవు}=1{1 అంశం}other{# అంశాలు}}</translation> <translation id="981121421437150478">ఆఫ్లైన్</translation>
diff --git a/components/strings/components_strings_th.xtb b/components/strings/components_strings_th.xtb index d1ee118..e67ce1c5e 100644 --- a/components/strings/components_strings_th.xtb +++ b/components/strings/components_strings_th.xtb
@@ -1617,7 +1617,6 @@ <translation id="6689249931105087298">สัมพัทธ์กับการบีบจุดสีดำ</translation> <translation id="6689271823431384964">Chrome เสนอที่จะบันทึกบัตรลงในบัญชี Google ของคุณเพราะคุณลงชื่อเข้าใช้อยู่ คุณปรับเปลี่ยนลักษณะการทำงานนี้ได้ในการตั้งค่า ชื่อผู้ถือบัตรมาจากบัญชีของคุณ</translation> <translation id="6698381487523150993">สร้าง:</translation> -<translation id="6699188552522342100">เว็บไซต์นี้ถูกต้องไหม</translation> <translation id="6702919718839027939">การนำเสนอ</translation> <translation id="6710213216561001401">ก่อนหน้า</translation> <translation id="6710594484020273272"><พิมพ์ข้อความค้นหา></translation> @@ -2324,7 +2323,6 @@ <translation id="961663415146723894">เย็บเล่มด้านล่าง</translation> <translation id="962484866189421427">เนื้อหานี้อาจพยายามติดตั้งแอปที่หลอกลวงซึ่งปลอมเป็นเนื้อหาอย่างอื่นหรือรวบรวมข้อมูลที่อาจนำไปใช้ติดตามคุณ <ph name="BEGIN_LINK" />แสดงเนื้อหา<ph name="END_LINK" /></translation> <translation id="969892804517981540">รุ่นที่เป็นทางการ</translation> -<translation id="973473557718930265">ออก</translation> <translation id="973773823069644502">เพิ่มที่อยู่สำหรับนำส่งสินค้า</translation> <translation id="975560348586398090">{COUNT,plural, =0{ไม่มี}=1{1 รายการ}other{# รายการ}}</translation> <translation id="981121421437150478">ออฟไลน์</translation>
diff --git a/components/strings/components_strings_tr.xtb b/components/strings/components_strings_tr.xtb index 0ae98f9..deb31df0 100644 --- a/components/strings/components_strings_tr.xtb +++ b/components/strings/components_strings_tr.xtb
@@ -1620,7 +1620,6 @@ <translation id="6689249931105087298">Siyah nokta sıkıştırma ile göreli</translation> <translation id="6689271823431384964">Chrome, oturumunuz açık olduğu için kartlarınızı Google Hesabınıza kaydetmeyi öneriyor. Bu davranışı ayarlardan değiştirebilirsiniz. Kart sahibinin adı hesabınızdan gelir.</translation> <translation id="6698381487523150993">Oluşturma tarihi:</translation> -<translation id="6699188552522342100">Bu web sitesindeki bilgiler doğru mu?</translation> <translation id="6702919718839027939">Sunum</translation> <translation id="6710213216561001401">Önceki</translation> <translation id="6710594484020273272"><Arama terimini yazın></translation> @@ -2327,7 +2326,6 @@ <translation id="961663415146723894">Alttan bağlı</translation> <translation id="962484866189421427">Bu içerik başka bir şeyi taklit eden aldatıcı uygulamalar yükleyebilir veya sizi izlemek için kullanılabilecek veriler toplayabilir. <ph name="BEGIN_LINK" />Yine de göster<ph name="END_LINK" /></translation> <translation id="969892804517981540">Resmi Derleme</translation> -<translation id="973473557718930265">Çık</translation> <translation id="973773823069644502">Teslimat Adresi Ekle</translation> <translation id="975560348586398090">{COUNT,plural, =0{Yok}=1{1 öğe}other{# öğe}}</translation> <translation id="981121421437150478">Çevrimdışı</translation>
diff --git a/components/strings/components_strings_uk.xtb b/components/strings/components_strings_uk.xtb index bcdecf6..14941d3 100644 --- a/components/strings/components_strings_uk.xtb +++ b/components/strings/components_strings_uk.xtb
@@ -96,6 +96,7 @@ <translation id="129863573139666797"><ph name="BEGIN_LINK" />Спробуйте видалити файли cookie<ph name="END_LINK" /></translation> <translation id="1301324364792935241">Перевірте налаштування безпеки DNS</translation> <translation id="1307966114820526988">Функції не підтримуються</translation> +<translation id="1312803275555673949">Які є докази?</translation> <translation id="131405271941274527">Сайт <ph name="URL" /> хоче обмінюватися даними з телефоном через NFC</translation> <translation id="1314509827145471431">Зшити праворуч</translation> <translation id="1319245136674974084">Не запитувати знову для цього додатка</translation> @@ -641,6 +642,7 @@ <translation id="3240791268468473923">Відкрито нижній екран невідповідності облікових даних для безпечних платежів</translation> <translation id="3249845759089040423">Чудовий</translation> <translation id="3252266817569339921">Французька</translation> +<translation id="3257954757204451555">Звідки надійшла ця інформація?</translation> <translation id="3259648571731540213"><ph name="CREATE_GOOGLE_CALENDAR_EVENT_FOCUSED_FRIENDLY_MATCH_TEXT" />; натисніть Tab, а потім – Enter, щоб швидко створити нову подію в Google Календарі</translation> <translation id="3266793032086590337">Значення (конфліктне)</translation> <translation id="3268451620468152448">Відкриті вкладки</translation> @@ -1040,6 +1042,7 @@ <translation id="455113658016510503">A9</translation> <translation id="4558551763791394412">Спробуйте вимкнути розширення.</translation> <translation id="4559332380232738994">10x11</translation> +<translation id="4567686777917670400">Адміністратор може змінити налаштування веб-переглядача віддалено. Діями на цьому пристрої можна керувати за межами Chromium. <ph name="BEGIN_LINK" />Докладніше<ph name="END_LINK" /></translation> <translation id="457875822857220463">Доставка</translation> <translation id="4579056131138995126">Особистий (конверт)</translation> <translation id="4582204425268416675">Видалити картку</translation> @@ -1532,6 +1535,7 @@ <translation id="6337534724793800597">Фільтрувати правила за назвою</translation> <translation id="6349101878882523185">Установіть додаток <ph name="APP_NAME" /></translation> <translation id="6353505687280762741">{COUNT,plural, =0{Немає}=1{1 пароль (для <ph name="DOMAIN_LIST" />, синхронізовано)}=2{2 паролі (для <ph name="DOMAIN_LIST" />, синхронізовано)}one{# пароль (для <ph name="DOMAIN_LIST" />, синхронізовано)}few{# паролі (для <ph name="DOMAIN_LIST" />, синхронізовано)}many{# паролів (для <ph name="DOMAIN_LIST" />, синхронізовано)}other{# пароля (для <ph name="DOMAIN_LIST" />, синхронізовано)}}</translation> +<translation id="6355392890578844978">Цим веб-переглядачем не керує адміністратор компанії чи іншої організації. Діями на цьому пристрої можна керувати за межами Chromium. <ph name="BEGIN_LINK" />Докладніше<ph name="END_LINK" /></translation> <translation id="6358450015545214790">Що це означає?</translation> <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />перевірити конфігурацію проксі-сервера, брандмауера та DNS-сервера<ph name="END_LINK" /></translation> @@ -1627,7 +1631,6 @@ <translation id="6689249931105087298">Відносно стиснення чорної точки</translation> <translation id="6689271823431384964">Chrome пропонує вам зберегти картки в обліковому записі Google, оскільки ви ввійшли в нього. Це можна змінити в налаштуваннях. Ім'я власника картки взято з вашого облікового запису.</translation> <translation id="6698381487523150993">Створено:</translation> -<translation id="6699188552522342100">Чи точна інформація на цьому веб-сайті?</translation> <translation id="6702919718839027939">Презентація</translation> <translation id="6710213216561001401">Назад</translation> <translation id="6710594484020273272"><Введіть пошуковий термін></translation> @@ -1984,6 +1987,7 @@ <translation id="7961015016161918242">Ніколи</translation> <translation id="7966803981046576691">Тип робочого облікового запису</translation> <translation id="79682505114836835">Значення "<ph name="VALUE" />" – недійсний колір у форматі hex.</translation> +<translation id="7970392640816874403">Яку інформацію подають інші джерела?</translation> <translation id="7976214039405368314">Забагато запитів</translation> <translation id="7977538094055660992">Пристрій виведення</translation> <translation id="7977894662897852582">Edp</translation> @@ -2334,7 +2338,6 @@ <translation id="961663415146723894">Зшити внизу</translation> <translation id="962484866189421427">Ця сторінка може намагатися встановлювати оманливі додатки, які видають себе за інший вміст, або збирати дані для відстеження ваших дій. <ph name="BEGIN_LINK" />Усе одно показати<ph name="END_LINK" /></translation> <translation id="969892804517981540">Розробка</translation> -<translation id="973473557718930265">Вийти</translation> <translation id="973773823069644502">Додати адресу доставки</translation> <translation id="975560348586398090">{COUNT,plural, =0{Немає}=1{1 запис}one{# запис}few{# записи}many{# записів}other{# запису}}</translation> <translation id="981121421437150478">Офлайн</translation>
diff --git a/components/strings/components_strings_ur.xtb b/components/strings/components_strings_ur.xtb index 6aa0419..047761ad 100644 --- a/components/strings/components_strings_ur.xtb +++ b/components/strings/components_strings_ur.xtb
@@ -1628,7 +1628,6 @@ <translation id="6689249931105087298">سیاہ پوائنٹ کمپریشن کے ساتھ متعلقہ</translation> <translation id="6689271823431384964">آپ کے سائن ان ہونے کی وجہ سے Chrome آپ کے کارڈز کو آپ کے Google اکاؤنٹ میں محفوظ کرنے کی پیشکش کر رہا ہے۔ آپ اس برتاؤ کو ترتیبات میں تبدیل کر سکتے ہیں۔ کارڈ ہولڈر کے نام کا تعلق آپ کے اکاؤنٹ سے ہے۔</translation> <translation id="6698381487523150993">بنا دی گئی:</translation> -<translation id="6699188552522342100">کیا یہ ویب سائٹ درست ہے؟</translation> <translation id="6702919718839027939">پیش کریں</translation> <translation id="6710213216561001401">گزشتہ</translation> <translation id="6710594484020273272"><تلاش کی اصطلاح ٹائپ کریں></translation> @@ -2335,7 +2334,6 @@ <translation id="961663415146723894">نیچے باندھیں</translation> <translation id="962484866189421427">ہو سکتا ہے کہ یہ مواد ایسی پُر فریب ایپس انسٹال کرنے کی کوشش کرے جو کچھ اور ہونے کا دکھاوا کریں یا آپ کی براؤزنگ سرگرمیوں پر نظر رکھنے کیلئے استعمال کیا جانے والا ڈیٹا جمع کریں۔ <ph name="BEGIN_LINK" />مزید جانیں<ph name="END_LINK" /></translation> <translation id="969892804517981540">آفیشل بلڈ</translation> -<translation id="973473557718930265">چھوڑیں</translation> <translation id="973773823069644502">ڈیلیوری کا پتہ شامل کریں</translation> <translation id="975560348586398090">{COUNT,plural, =0{کوئی سائٹ نہیں}=1{1 آئٹم}other{# آئٹمز}}</translation> <translation id="981121421437150478">آف لائن</translation>
diff --git a/components/strings/components_strings_uz.xtb b/components/strings/components_strings_uz.xtb index 6e5567c..7872fc6 100644 --- a/components/strings/components_strings_uz.xtb +++ b/components/strings/components_strings_uz.xtb
@@ -486,7 +486,6 @@ <translation id="2649259151839507861"><ph name="CLEAR_BROWSING_DATA_FOCUSED_FRIENDLY_MATCH_TEXT" />, Chrome sozlamalari orqali brauzer tarixi, cookie fayllari, kesh va boshqa maʼlumotlarni tozalash uchun Enter tugmasini bosing</translation> <translation id="2650446666397867134">Faylga kirish taqiqlandi</translation> <translation id="2653659639078652383">Yuborish</translation> -<translation id="2659158170294587313">Fonda ishlashda davom etishi uchun bu ilovani berkiting.</translation> <translation id="2660779039299703961">Hodisa</translation> <translation id="2664887757054927933">{COUNT,plural, =0{Hech qanday}=1{1 ta parol (<ph name="DOMAIN_LIST" /> uchun)}=2{2 ta parol (<ph name="DOMAIN_LIST" /> uchun)}other{# ta parol (<ph name="DOMAIN_LIST" /> uchun)}}</translation> <translation id="2666092431469916601">Tepaga</translation> @@ -607,7 +606,6 @@ <translation id="31207688938192855"><ph name="BEGIN_LINK" />Aloqa diagnostikasi bilan tekshirib ko‘ring<ph name="END_LINK" /></translation> <translation id="3121994479408824897"><ph name="DOMAIN" /> sahifasini ochish</translation> <translation id="3137507986424712703">{COUNT,plural, =0{Mavjud emas}=1{1 ta tizimga kirgan hisob axborotlari}other{# ta tizimga kirgan hisob axborotlari}}</translation> -<translation id="314433506352260835"><ph name="APP" /> ilovasidan chiqasizmi?</translation> <translation id="3145945101586104090">Javobni dekodlab bo‘lmadi</translation> <translation id="3150653042067488994">Server vaqtinchalik xatosi</translation> <translation id="3154506275960390542">Bu sahifada himoyalanmagan forma mavjud. Unga to‘ldiriluvchi axborot boshqalarga ko‘rinishi va firibgarlar tomonidan o‘zgartirilishi mumkin.</translation> @@ -1627,7 +1625,6 @@ <translation id="6689249931105087298">Qora nuqta tejalishiga aloqador</translation> <translation id="6689271823431384964">Hisobingizga kirganingiz uchun Chrome kartalarni Google hisobingizga saqlashni taklif qilmoqda. Buni sozlamalar orqali oʻzgartirish mumkin. Karta egasining ismi hisobingizdan olinadi.</translation> <translation id="6698381487523150993">Yaratilgan sanasi:</translation> -<translation id="6699188552522342100">Bu saytdagi axborot aniqmi?</translation> <translation id="6702919718839027939">Taqdimot</translation> <translation id="6710213216561001401">Avvalgi</translation> <translation id="6710594484020273272"><Qidiruv so‘rovini kiriting></translation> @@ -2334,7 +2331,6 @@ <translation id="961663415146723894">Quyi chekkasini belgilash</translation> <translation id="962484866189421427">Bu kontent soxta ilovalarni o‘rnatishga urinishi mumkin. Shuningdek, sizni kuzatishi yoki axborot yig‘ishi mumkin. <ph name="BEGIN_LINK" />Baribir ko‘rsatilsin<ph name="END_LINK" /></translation> <translation id="969892804517981540">Rasmiy versiya</translation> -<translation id="973473557718930265">Chiqish</translation> <translation id="973773823069644502">Yetkazib berish manzilini qo‘shing</translation> <translation id="975560348586398090">{COUNT,plural, =0{Yo‘q}=1{1 ta element}other{# ta element}}</translation> <translation id="981121421437150478">Oflayn</translation>
diff --git a/components/strings/components_strings_vi.xtb b/components/strings/components_strings_vi.xtb index 11381c7..4bc2ae10 100644 --- a/components/strings/components_strings_vi.xtb +++ b/components/strings/components_strings_vi.xtb
@@ -1627,7 +1627,6 @@ <translation id="6689249931105087298">Tương đối có nén điểm đen</translation> <translation id="6689271823431384964">Chrome đang đề xuất lưu thẻ của bạn vào Tài khoản Google vì bạn đã đăng nhập. Bạn có thể thay đổi hoạt động này trong phần cài đặt. Tên chủ thẻ được lấy từ tài khoản của bạn.</translation> <translation id="6698381487523150993">Tạo:</translation> -<translation id="6699188552522342100">Trang web này có chính xác không?</translation> <translation id="6702919718839027939">Thuyết trình</translation> <translation id="6710213216561001401">Trước</translation> <translation id="6710594484020273272"><Nhập cụm từ tìm kiếm></translation> @@ -2334,7 +2333,6 @@ <translation id="961663415146723894">Đóng gáy dưới cùng</translation> <translation id="962484866189421427">Nội dung này có thể tìm cách cài đặt ứng dụng lừa đảo giả mạo nội dung khác hoặc thu thập dữ liệu có thể được dùng để theo dõi bạn. <ph name="BEGIN_LINK" />Vẫn hiển thị<ph name="END_LINK" /></translation> <translation id="969892804517981540">Phiên bản Chính thức</translation> -<translation id="973473557718930265">Thoát</translation> <translation id="973773823069644502">Thêm địa chỉ giao hàng</translation> <translation id="975560348586398090">{COUNT,plural, =0{Không có}=1{1 mục}other{# mục}}</translation> <translation id="981121421437150478">Ngoại tuyến</translation>
diff --git a/components/strings/components_strings_zh-CN.xtb b/components/strings/components_strings_zh-CN.xtb index 68abb33..b394cfa 100644 --- a/components/strings/components_strings_zh-CN.xtb +++ b/components/strings/components_strings_zh-CN.xtb
@@ -1612,7 +1612,6 @@ <translation id="6689249931105087298">相对(使用黑点压缩)</translation> <translation id="6689271823431384964">Chrome 正在询问是否要将卡保存到您的 Google 帐号中,因为您已登录。您可在“设置”中更改此行为。持卡人姓名来自您的帐号。</translation> <translation id="6698381487523150993">创建时间:</translation> -<translation id="6699188552522342100">此网站上的信息准确无误吗?</translation> <translation id="6702919718839027939">演示</translation> <translation id="6710213216561001401">上一项</translation> <translation id="6710594484020273272"><输入搜索字词></translation> @@ -2319,7 +2318,6 @@ <translation id="961663415146723894">装订(底部)</translation> <translation id="962484866189421427">此内容可能会尝试安装欺骗性应用,而这些应用能够冒充其他内容或收集可用于对您进行跟踪的数据。<ph name="BEGIN_LINK" />仍然显示<ph name="END_LINK" /></translation> <translation id="969892804517981540">正式版本</translation> -<translation id="973473557718930265">退出</translation> <translation id="973773823069644502">添加速递地址</translation> <translation id="975560348586398090">{COUNT,plural, =0{无}=1{1 项内容}other{# 项内容}}</translation> <translation id="981121421437150478">离线</translation>
diff --git a/components/strings/components_strings_zh-HK.xtb b/components/strings/components_strings_zh-HK.xtb index dfec01d..e5184eb 100644 --- a/components/strings/components_strings_zh-HK.xtb +++ b/components/strings/components_strings_zh-HK.xtb
@@ -1617,7 +1617,6 @@ <translation id="6689249931105087298">與黑點壓縮相對</translation> <translation id="6689271823431384964">由於您已登入,因此 Chrome 提議將您的付款卡儲存至 Google 帳戶。您可在設定中變更此行為。持卡人姓名來自您的帳戶。</translation> <translation id="6698381487523150993">已建立:</translation> -<translation id="6699188552522342100">此網站的內容正確嗎?</translation> <translation id="6702919718839027939">簡報</translation> <translation id="6710213216561001401">上一個</translation> <translation id="6710594484020273272"><輸入搜尋字詞></translation> @@ -2323,7 +2322,6 @@ <translation id="961663415146723894">釘裝 (底部)</translation> <translation id="962484866189421427">此內容可能會嘗試安裝欺詐應用程式來冒充其他內容,或收集可用來追蹤您的資料。<ph name="BEGIN_LINK" />一律顯示<ph name="END_LINK" /></translation> <translation id="969892804517981540">正式版本</translation> -<translation id="973473557718930265">離開</translation> <translation id="973773823069644502">新增速遞地址</translation> <translation id="975560348586398090">{COUNT,plural, =0{無}=1{1 個項目}other{# 個項目}}</translation> <translation id="981121421437150478">離線</translation>
diff --git a/components/strings/components_strings_zh-TW.xtb b/components/strings/components_strings_zh-TW.xtb index 89745d1b..96042b9 100644 --- a/components/strings/components_strings_zh-TW.xtb +++ b/components/strings/components_strings_zh-TW.xtb
@@ -1618,7 +1618,6 @@ <translation id="6689249931105087298">與黑點壓縮相對</translation> <translation id="6689271823431384964">你已登入帳戶,因此 Chrome 詢問你是否要將卡片儲存至 Google 帳戶。你可以在設定中變更這項行為。持卡人姓名來自你的帳戶。</translation> <translation id="6698381487523150993">建立於:</translation> -<translation id="6699188552522342100">這個網站的資訊正確嗎?</translation> <translation id="6702919718839027939">簡報</translation> <translation id="6710213216561001401">返回</translation> <translation id="6710594484020273272"><輸入搜尋字詞></translation> @@ -2324,7 +2323,6 @@ <translation id="961663415146723894">裝訂 (底部)</translation> <translation id="962484866189421427">這項內容可能會試圖讓你安裝身分不實的欺騙性應用程式,或是收集可用於追蹤你的資料。<ph name="BEGIN_LINK" />仍要顯示<ph name="END_LINK" /></translation> <translation id="969892804517981540">正式版本</translation> -<translation id="973473557718930265">結束</translation> <translation id="973773823069644502">新增快遞地址</translation> <translation id="975560348586398090">{COUNT,plural, =0{無}=1{1 個項目}other{# 個項目}}</translation> <translation id="981121421437150478">離線</translation>
diff --git a/components/strings/components_strings_zu.xtb b/components/strings/components_strings_zu.xtb index 18853921..59e241fd 100644 --- a/components/strings/components_strings_zu.xtb +++ b/components/strings/components_strings_zu.xtb
@@ -1624,7 +1624,6 @@ <translation id="6689249931105087298">Kuhlobene nephoyinti elimnyama lokucindezela</translation> <translation id="6689271823431384964">I-Chrome inikeza ngokulondoloza amakhadi akho ku-akhawunti yakho ye-Google ngoba ungene ngemvume. Ungashintsha le mpatho kuzilungiselelo. Igama lomnikazi wekhadi livela ku-akhawunti yakho.</translation> <translation id="6698381487523150993">Idalwe:</translation> -<translation id="6699188552522342100">Ingabe le webhusayithi inembile?</translation> <translation id="6702919718839027939">Okwamanje</translation> <translation id="6710213216561001401">Okwedlule</translation> <translation id="6710594484020273272"><Thayipha itemu lokusesha></translation> @@ -2330,7 +2329,6 @@ <translation id="961663415146723894">Ukubophezela phansi</translation> <translation id="962484866189421427">Lokhu okuqukethwe kungazama ukufaka izinhlelo zokusebenza ezilahlekisayo ezenza ngathi okunye noma ziqoqe idatha engasetshenziswa ukukulandela. <ph name="BEGIN_LINK" />Bonisa noma kunjalo<ph name="END_LINK" /></translation> <translation id="969892804517981540">Ukwakha okusemthethweni</translation> -<translation id="973473557718930265">Yeka</translation> <translation id="973773823069644502">Engeza ikheli lokulethwa</translation> <translation id="975560348586398090">{COUNT,plural, =0{Lutho}=1{1 into}one{# izinto}other{# izinto}}</translation> <translation id="981121421437150478">Ayixhunyiwe ku-inthanethi</translation>
diff --git a/components/sync/driver/sync_auth_manager.cc b/components/sync/driver/sync_auth_manager.cc index 5c44dc7c..cb9a9c6 100644 --- a/components/sync/driver/sync_auth_manager.cc +++ b/components/sync/driver/sync_auth_manager.cc
@@ -419,7 +419,7 @@ // TODO(crbug.com/1156584): Should we stop Sync in this case? DCHECK_EQ( sync_account_.account_info.account_id, - identity_manager_->GetPrimaryAccountId(signin::ConsentLevel::kSync)); + identity_manager_->GetPrimaryAccountId(signin::ConsentLevel::kSignin)); // TODO(crbug.com/839834): REQUEST_CANCELED doesn't seem like the right auth // error to use here. Maybe INVALID_GAIA_CREDENTIALS?
diff --git a/components/ukm/content/source_url_recorder.cc b/components/ukm/content/source_url_recorder.cc index 994405f..b2b709a7 100644 --- a/components/ukm/content/source_url_recorder.cc +++ b/components/ukm/content/source_url_recorder.cc
@@ -13,7 +13,6 @@ #include "content/public/browser/navigation_handle.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents_observer.h" -#include "content/public/browser/web_contents_receiver_set.h" #include "content/public/browser/web_contents_user_data.h" #include "services/metrics/public/cpp/delegating_ukm_recorder.h" #include "services/metrics/public/cpp/ukm_builders.h"
diff --git a/components/variations/BUILD.gn b/components/variations/BUILD.gn index 2a437d1..eabd779 100644 --- a/components/variations/BUILD.gn +++ b/components/variations/BUILD.gn
@@ -5,6 +5,7 @@ import("//build/buildflag_header.gni") import("//build/config/chromecast_build.gni") import("//mojo/public/tools/bindings/mojom.gni") +import("//testing/libfuzzer/fuzzer_test.gni") import("//testing/test.gni") mojom("variations_mojom") { @@ -259,3 +260,15 @@ "//components/variations/service:unit_tests", ] } + +if (use_libfuzzer) { + fuzzer_test("create_trial_from_study_fuzzer") { + sources = [ "fuzzers/create_trial_from_study_fuzzer.cc" ] + deps = [ + ":variations", + "proto", + "//base/test:test_support", + "//third_party/libprotobuf-mutator", + ] + } +}
diff --git a/components/variations/fuzzers/create_trial_from_study_fuzzer.cc b/components/variations/fuzzers/create_trial_from_study_fuzzer.cc new file mode 100644 index 0000000..4a432da --- /dev/null +++ b/components/variations/fuzzers/create_trial_from_study_fuzzer.cc
@@ -0,0 +1,79 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/variations/variations_seed_processor.h" + +#include "base/command_line.h" +#include "base/feature_list.h" +#include "base/metrics/field_trial.h" +#include "base/test/mock_entropy_provider.h" +#include "base/test/scoped_command_line.h" +#include "components/variations/entropy_provider.h" +#include "components/variations/processed_study.h" +#include "components/variations/proto/study.pb.h" +#include "components/variations/study_filtering.h" +#include "testing/libfuzzer/proto/lpm_interface.h" + +namespace variations { +namespace { + +class TestOverrideStringCallback { + public: + typedef std::map<uint32_t, std::u16string> OverrideMap; + + TestOverrideStringCallback() + : callback_(base::BindRepeating(&TestOverrideStringCallback::Override, + base::Unretained(this))) {} + TestOverrideStringCallback(const TestOverrideStringCallback&) = delete; + TestOverrideStringCallback& operator=(const TestOverrideStringCallback&) = + delete; + + virtual ~TestOverrideStringCallback() {} + + const VariationsSeedProcessor::UIStringOverrideCallback& callback() const { + return callback_; + } + + const OverrideMap& overrides() const { return overrides_; } + + private: + void Override(uint32_t hash, const std::u16string& string) { + overrides_[hash] = string; + } + + VariationsSeedProcessor::UIStringOverrideCallback callback_; + OverrideMap overrides_; +}; + +struct Environment { + Environment() + : field_trial_list_(std::make_unique<SHA1EntropyProvider>("client_id")) { + base::CommandLine::Init(0, nullptr); + base::FeatureList::InitializeInstance(std::string(), std::string()); + } + + base::FieldTrialList field_trial_list_; +}; + +} // namespace + +void CreateTrialFromStudyFuzzer(const Study& study) { + TestOverrideStringCallback override_callback; + base::MockEntropyProvider mock_low_entropy_provider(0.9); + + ProcessedStudy processed_study; + const bool is_expired = internal::IsStudyExpired(study, base::Time::Now()); + if (processed_study.Init(&study, is_expired)) { + VariationsSeedProcessor().CreateTrialFromStudy( + processed_study, override_callback.callback(), + &mock_low_entropy_provider, base::FeatureList::GetInstance()); + } +} + +DEFINE_PROTO_FUZZER(const Study& study) { + static Environment env; + CreateTrialFromStudyFuzzer(study); +} + +} // namespace variations
diff --git a/components/variations/proto/BUILD.gn b/components/variations/proto/BUILD.gn index aea3500e..3118460 100644 --- a/components/variations/proto/BUILD.gn +++ b/components/variations/proto/BUILD.gn
@@ -3,6 +3,8 @@ # found in the LICENSE file. import("//build/config/chromeos/ui_mode.gni") +import("//testing/libfuzzer/fuzzer_test.gni") +import("//third_party/libprotobuf-mutator/fuzzable_proto_library.gni") import("//third_party/protobuf/proto_library.gni") if (is_android) { @@ -19,7 +21,7 @@ } } -proto_library("proto") { +fuzzable_proto_library("proto") { sources = [ "client_variations.proto", "layer.proto", @@ -30,13 +32,15 @@ # The generated JavaScript bindings are used to build a small, self-contained # parser for ClientVariations in Dev Tools. This parser is used to decode the # X-Client-Data header. + # Note: This doesn't do anything when use_libfuzzer is true. generate_javascript = true } # Some of the Windows builders do not support Java, which is a required -# dependency for this build target. This target is only built manually, so it's -# fine to limit it to Linux. -if (is_linux) { +# dependency for this build target. The fuzzable_proto_library doesn't support +# building JS protos when use_libfuzzer is true.This target is only built +# manually, so it's fine to limit it to Linux non-fuzzer builds. +if (is_linux && !use_libfuzzer) { group("devtools") { deps = [ "devtools" ] }
diff --git a/components/variations/proto/devtools/BUILD.gn b/components/variations/proto/devtools/BUILD.gn index 16685d8..2a31bb7d 100644 --- a/components/variations/proto/devtools/BUILD.gn +++ b/components/variations/proto/devtools/BUILD.gn
@@ -3,13 +3,15 @@ # found in the LICENSE file. import("//build/config/chromeos/ui_mode.gni") +import("//testing/libfuzzer/fuzzer_test.gni") import("//third_party/closure_compiler/closure_args.gni") import("//third_party/closure_compiler/compile_js.gni") # Some of the Windows builders do not support Java, which is a required -# dependency for these build targets. These targets are only built manually, so -# it's fine to limit them to Linux. -if (is_linux) { +# dependency for this build target. The fuzzable_proto_library doesn't support +# building JS protos when use_libfuzzer is true.This target is only built +# manually, so it's fine to limit it to Linux non-fuzzer builds. +if (is_linux && !use_libfuzzer) { # Build this target to generate a small, self-contained utility for parsing a # serialized ClientVariations proto from the X-Client-Data header. #
diff --git a/components/variations/variations_seed_processor.h b/components/variations/variations_seed_processor.h index 4d79d600..c8cca04 100644 --- a/components/variations/variations_seed_processor.h +++ b/components/variations/variations_seed_processor.h
@@ -53,6 +53,7 @@ static bool ShouldStudyUseLowEntropy(const Study& study); private: + friend void CreateTrialFromStudyFuzzer(const Study& study); friend class VariationsSeedProcessorTest; FRIEND_TEST_ALL_PREFIXES(VariationsSeedProcessorTest, AllowForceGroupAndVariationId);
diff --git a/components/viz/service/display/overlay_candidate_temporal_tracker.cc b/components/viz/service/display/overlay_candidate_temporal_tracker.cc index 0019ea42..c2c6ae5 100644 --- a/components/viz/service/display/overlay_candidate_temporal_tracker.cc +++ b/components/viz/service/display/overlay_candidate_temporal_tracker.cc
@@ -4,12 +4,16 @@ #include "components/viz/service/display/overlay_candidate_temporal_tracker.h" +#include <algorithm> + +#include "base/cxx17_backports.h" + namespace viz { OverlayCandidateTemporalTracker::OverlayCandidateTemporalTracker() = default; void OverlayCandidateTemporalTracker::Reset() { - ratio_rate_category = 0; + num_samples_ = 0; } int OverlayCandidateTemporalTracker::GetModeledPowerGain( @@ -17,8 +21,8 @@ const OverlayCandidateTemporalTracker::Config& config, int display_area) { // Model of proportional power gained by hw overlay promotion. - return static_cast<int>((ratio_rate_category - config.damage_rate_threshold) * - display_area); + return static_cast<int>( + (ratio_rate_category_ - config.damage_rate_threshold) * display_area); } void OverlayCandidateTemporalTracker::CategorizeDamageRatioRate( @@ -27,16 +31,25 @@ float mean_ratio_rate = MeanFrameRatioRate(config); // Simple implementation of hysteresis. If the value is far enough away from // the stored value it will be updated. - if (std::abs(mean_ratio_rate - ratio_rate_category) >= - config.damage_rate_hysteresis_range) { - ratio_rate_category = mean_ratio_rate; + // Hysteresis range is derived from the maximum value impact of a single + // sample on the total mean. + const float damage_rate_hysteresis_range = 1.0f / config.max_num_frames_avg; + if (std::abs(mean_ratio_rate - ratio_rate_category_) >= + damage_rate_hysteresis_range) { + ratio_rate_category_ = mean_ratio_rate; } } bool OverlayCandidateTemporalTracker::IsActivelyChanging( uint64_t curr_frame, const OverlayCandidateTemporalTracker::Config& config) const { - return LastChangeFrameCount(curr_frame) < config.max_frames_inactive; + return LastChangeFrameCount(curr_frame) < + static_cast<uint64_t>(config.max_num_frames_avg); +} + +float OverlayCandidateTemporalTracker::MeanFrameRatioRate( + const OverlayCandidateTemporalTracker::Config& config) const { + return damage_record_avg_; } void OverlayCandidateTemporalTracker::AddRecord( @@ -45,60 +58,38 @@ ResourceId resource_id, const OverlayCandidateTemporalTracker::Config& config, bool force_resource_update) { - if ((prev_resource_id != resource_id || force_resource_update) && - frame_record[(next_index + kNumRecords - 1) % kNumRecords] != - curr_frame) { - frame_record[next_index] = curr_frame; - damage_record[next_index] = damage_area_ratio; - next_index = (next_index + 1) % kNumRecords; - prev_resource_id = resource_id; + if ((prev_resource_id_ != resource_id || force_resource_update) && + frame_record_prev_ != curr_frame) { + float damage_area_ratio_rate = + damage_area_ratio / (curr_frame - frame_record_prev_); + + frame_record_prev_ = curr_frame; + prev_resource_id_ = resource_id; + // Construct a new average from the previous average and this new sample. + // This computation is mathematically equivalent to the mean formula however + // we need store each of the previous |num_samples_|. + damage_record_avg_ = + ((damage_record_avg_ * num_samples_) + damage_area_ratio_rate) / + (num_samples_ + 1); + + // After a fixed number of samples we cap the divisor and transform the + // average into an exponential averaging function. Unlike the mean formula, + // the exponential smoothing formula will always remain sensitive to recent + // sample data. + num_samples_ = std::min(config.max_num_frames_avg, num_samples_ + 1); CategorizeDamageRatioRate(curr_frame, config); } - absent = false; + absent_ = false; } uint64_t OverlayCandidateTemporalTracker::LastChangeFrameCount( uint64_t curr_frame) const { - uint64_t diff_now_prev = - (curr_frame - - frame_record[((next_index - 1) + kNumRecords) % kNumRecords]); - - return diff_now_prev; -} - -float OverlayCandidateTemporalTracker::MeanFrameRatioRate( - const OverlayCandidateTemporalTracker::Config& config) const { - float mean_ratio_rate = 0.f; - int num_records = (kNumRecords - 1); - // We are concerned with the steady state of damage ratio rate. - // A specific interruption (paused video, stopped accelerated ink) is - // categorized by 'IsActivelyChanging' and is intentionally excluded here by - // |skip_single_interruption|. - bool skip_single_interruption = true; - for (int i = 0; i < kNumRecords; i++) { - if (i != next_index) { - uint64_t diff_frames = - (frame_record[i] - - frame_record[((i - 1) + kNumRecords) % kNumRecords]); - if (skip_single_interruption && - diff_frames > config.max_frames_inactive) { - skip_single_interruption = false; - num_records--; - } else if (diff_frames != 0) { - float damage_ratio = damage_record[i]; - mean_ratio_rate += damage_ratio / diff_frames; - } - } - } - - return mean_ratio_rate / num_records; + return curr_frame - frame_record_prev_; } bool OverlayCandidateTemporalTracker::IsAbsent() { - bool ret = absent; - absent = true; - return ret; + return std::exchange(absent_, true); } } // namespace viz
diff --git a/components/viz/service/display/overlay_candidate_temporal_tracker.h b/components/viz/service/display/overlay_candidate_temporal_tracker.h index 27d6abb..169e20f 100644 --- a/components/viz/service/display/overlay_candidate_temporal_tracker.h +++ b/components/viz/service/display/overlay_candidate_temporal_tracker.h
@@ -23,19 +23,17 @@ // The |Config| contains values that are derived as part of a heuristic. This // |Config| allows for the potential of platform specific variations or // experiments. - class VIZ_SERVICE_EXPORT Config { - public: + struct VIZ_SERVICE_EXPORT Config { // This is the only heuristic input constant to our power model. It // effectively determines the threshold for positive power gain. float damage_rate_threshold = 0.3f; - // The hysteresis value for damage rate is kept constant within the range of - // |damage_rate_hysteresis_range| - float damage_rate_hysteresis_range = 0.15f; - - // |max_frames_inactive| is the frame count cutoff for when an unchanging - // candidate is considered to be inactive. see 'IsActivelyChanging()' - uint64_t max_frames_inactive = 6; + // |max_num_frames_avg| is the number of frames that are averaged before + // exponential averaging starts. + // https://en.wikipedia.org/wiki/Exponential_smoothing It is also the frame + // count cutoff for when an unchanging candidate is considered to be + // inactive. see 'IsActivelyChanging()' + int max_num_frames_avg = 10; }; // This function returns an opaque but comparable value representing the @@ -73,19 +71,14 @@ // The functions and data below are used internally but also can be used for // diagnosis and testing. float MeanFrameRatioRate(const Config& config) const; - float GetDamageRatioRate() const { return ratio_rate_category; } + float GetDamageRatioRate() const { return ratio_rate_category_; } uint64_t LastChangeFrameCount(uint64_t curr_frame) const; - // Categorization can happen over a series of |KNumRecords| frames. - // The more records the smoother the categorization but the worse the latency. - static constexpr int kNumRecords = 6; private: void CategorizeDamageRatioRate(uint64_t curr_frame, const Config& config); - ResourceId prev_resource_id = kInvalidResourceId; + ResourceId prev_resource_id_ = kInvalidResourceId; - float ratio_rate_category = 0.0f; - // Next empty slot index. Used for circular samples buffer. - int next_index = 0; + float ratio_rate_category_ = 0.0f; // The state of this absent bool is as follows: // In the normal flow 'IsAbsent()' is tested which sets |absent| = true. Then @@ -94,9 +87,10 @@ // 'IsAbsent()' is tested which sets |absent| = true but on the next frame // 'IsAbsent()' returns true because |absent| was never reset to false. This // indicating this tracker should be removed. - bool absent = false; - uint64_t frame_record[kNumRecords] = {}; - float damage_record[kNumRecords] = {}; + bool absent_ = false; + uint64_t frame_record_prev_ = 0; + float damage_record_avg_ = 0.f; + int num_samples_ = 0; }; } // namespace viz
diff --git a/components/viz/service/display/overlay_processor_using_strategy.cc b/components/viz/service/display/overlay_processor_using_strategy.cc index 0386de7d..47c27c5 100644 --- a/components/viz/service/display/overlay_processor_using_strategy.cc +++ b/components/viz/service/display/overlay_processor_using_strategy.cc
@@ -11,6 +11,7 @@ #include "base/feature_list.h" #include "base/memory/ptr_util.h" #include "base/metrics/histogram_macros.h" +#include "base/strings/string_number_conversions.h" #include "base/trace_event/trace_event.h" #include "build/build_config.h" #include "build/chromeos_buildflags.h" @@ -87,8 +88,12 @@ OverlayProcessorUsingStrategy::ProposedCandidateKey OverlayProcessorUsingStrategy::ToProposeKey( const OverlayProcessorUsingStrategy::Strategy::OverlayProposedCandidate& - proposed) { - return {gfx::ToRoundedRect(proposed.candidate.display_rect), + proposed, + DisplayResourceProvider* resource_provider) { + return {proposed.quad_iter->rect, + resource_provider->GetSurfaceId(proposed.candidate.resource_id) + .frame_sink_id(), + proposed.candidate.resource_size_in_pixels, proposed.strategy->GetUMAEnum()}; } @@ -185,7 +190,7 @@ if (!candidates->empty()) { DBG_DRAW_RECT("overlay.selected.rect", (*candidates)[0].display_rect); } - DBG_DRAW_RECT("overlay.outgoing.dmage", (*damage_rect)); + DBG_DRAW_RECT("overlay.outgoing.damage", (*damage_rect)); TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("viz.debug.overlay_planes"), "Scheduled overlay planes", candidates->size()); @@ -361,24 +366,34 @@ } void OverlayProcessorUsingStrategy::SortProposedOverlayCandidatesPrioritized( - Strategy::OverlayProposedCandidateList* proposed_candidates) { + Strategy::OverlayProposedCandidateList* proposed_candidates, + DisplayResourceProvider* resource_provider) { // Removes trackers for candidates that are no longer being rendered. - for (auto it = tracked_candidates.begin(); it != tracked_candidates.end();) { + for (auto it = tracked_candidates_.begin(); + it != tracked_candidates_.end();) { if (it->second.IsAbsent()) { - it = tracked_candidates.erase(it); + it = tracked_candidates_.erase(it); } else { ++it; } } - DBG_LOG("overlay.prioritization.num", "Frame seq: %d, ", - (int)frame_sequence_number_); // This loop fills in data for the heuristic sort and thresholds candidates. for (auto it = proposed_candidates->begin(); it != proposed_candidates->end();) { - auto key = ToProposeKey(*it); + auto key = ToProposeKey(*it, resource_provider); // If no tracking exists we create a new one here. - auto& track_data = tracked_candidates[key]; + auto& track_data = tracked_candidates_[key]; + DBG_DRAW_TEXT_OPT("candidate.surface.id", DBG_OPT_GREEN, + it->candidate.display_rect.origin(), + key.frame_sink_id.ToString()); + DBG_DRAW_TEXT_OPT( + "candidate.mean.damage", DBG_OPT_GREEN, + it->candidate.display_rect.origin(), + base::StringPrintf( + " %f, %f %d", track_data.MeanFrameRatioRate(tracker_config_), + track_data.GetDamageRatioRate(), + static_cast<int>(it->candidate.resource_id.value()))); const auto display_area = it->candidate.display_rect.size().GetArea(); // The |force_update| case is where we have damage and a damage index but // there are no changes in the |resource_id|. This is only known to occur @@ -473,7 +488,8 @@ "Viz.DisplayCompositor.OverlayNumProposedCandidates", num_proposed_pre_sort); - SortProposedOverlayCandidatesPrioritized(&proposed_candidates); + SortProposedOverlayCandidatesPrioritized(&proposed_candidates, + resource_provider); for (auto&& candidate : proposed_candidates) { // Underlays change the material so we save it here to record proper UMA. @@ -542,7 +558,7 @@ candidate.strategy->AdjustOutputSurfaceOverlay(primary_plane); LogStrategyEnumUMA(candidate.strategy->GetUMAEnum()); last_successful_strategy_ = candidate.strategy; - OnOverlaySwitchUMA(ToProposeKey(candidate)); + OnOverlaySwitchUMA(ToProposeKey(candidate, resource_provider)); UMA_HISTOGRAM_ENUMERATION("Viz.DisplayCompositor.OverlayQuadMaterial", quad_material); if (candidate.candidate.requires_overlay) {
diff --git a/components/viz/service/display/overlay_processor_using_strategy.h b/components/viz/service/display/overlay_processor_using_strategy.h index 999e11ac..19a84e5 100644 --- a/components/viz/service/display/overlay_processor_using_strategy.h +++ b/components/viz/service/display/overlay_processor_using_strategy.h
@@ -9,10 +9,12 @@ #include <unordered_map> #include <vector> +#include "base/hash/hash.h" #include "base/macros.h" #include "build/build_config.h" #include "components/viz/common/display/overlay_strategy.h" #include "components/viz/common/quads/aggregated_render_pass.h" +#include "components/viz/service/display/display_resource_provider.h" #include "components/viz/service/display/output_surface.h" #include "components/viz/service/display/overlay_candidate.h" #include "components/viz/service/display/overlay_candidate_temporal_tracker.h" @@ -244,7 +246,8 @@ // of Hardware overlays. Effectiveness here is primarily about power and // secondarily about of performance. void SortProposedOverlayCandidatesPrioritized( - Strategy::OverlayProposedCandidateList* proposed_candidates); + Strategy::OverlayProposedCandidateList* proposed_candidates, + DisplayResourceProvider* resource_provider); // Used by Android pre-SurfaceControl to notify promotion hints. virtual void NotifyOverlayPromotion( @@ -259,26 +262,31 @@ struct ProposedCandidateKey { gfx::Rect rect; + FrameSinkId frame_sink_id; + gfx::Size resource_size; OverlayStrategy strategy_id = OverlayStrategy::kUnknown; bool operator==(const ProposedCandidateKey& other) const { - return (rect == other.rect && strategy_id == other.strategy_id); + return (rect == other.rect && frame_sink_id == other.frame_sink_id && + strategy_id == other.strategy_id && + resource_size == other.resource_size); } }; struct ProposedCandidateKeyHasher { std::size_t operator()(const ProposedCandidateKey& k) const { - return base::Hash(&k, sizeof(k)); + return base::FastHash(base::as_bytes(base::make_span(&k, sizeof(k)))); } }; static ProposedCandidateKey ToProposeKey( - const Strategy::OverlayProposedCandidate& proposed); + const Strategy::OverlayProposedCandidate& proposed, + DisplayResourceProvider* display_resource_provider); std::unordered_map<ProposedCandidateKey, OverlayCandidateTemporalTracker, ProposedCandidateKeyHasher> - tracked_candidates; + tracked_candidates_; // These variables are used only for UMA purposes. void OnOverlaySwitchUMA(ProposedCandidateKey overlay_tracking_key);
diff --git a/components/viz/service/display/overlay_unittest.cc b/components/viz/service/display/overlay_unittest.cc index 7d80a7c1..2e9c2c0 100644 --- a/components/viz/service/display/overlay_unittest.cc +++ b/components/viz/service/display/overlay_unittest.cc
@@ -2160,7 +2160,7 @@ // frame counter based. if (features::IsOverlayPrioritizationEnabled()) { kFramesSkippedBeforeNotPromoting = - overlay_processor_->TrackerConfigAccessor().max_frames_inactive; + overlay_processor_->TrackerConfigAccessor().max_num_frames_avg; } ResourceId previous_resource_id; @@ -2248,14 +2248,12 @@ // This test uses many iterations to test prioritization threshold features // due to frame averaging over samples. - constexpr size_t kDamageFrameTestStart = - OverlayCandidateTemporalTracker::kNumRecords; - constexpr size_t kDamageFrameTestEnd = - kDamageFrameTestStart + OverlayCandidateTemporalTracker::kNumRecords; - constexpr size_t kSlowFrameTestStart = - kDamageFrameTestEnd + OverlayCandidateTemporalTracker::kNumRecords; - constexpr size_t kSlowFrameTestEnd = - kSlowFrameTestStart + OverlayCandidateTemporalTracker::kNumRecords; + OverlayCandidateTemporalTracker::Config config; + size_t kDamageFrameTestStart = config.max_num_frames_avg; + size_t kDamageFrameTestEnd = + kDamageFrameTestStart + config.max_num_frames_avg; + size_t kSlowFrameTestStart = kDamageFrameTestEnd + config.max_num_frames_avg; + size_t kSlowFrameTestEnd = kSlowFrameTestStart + config.max_num_frames_avg; // This quad is used to occlude the damage of the overlay candidate to the // point that the damage is no longer considered significant. @@ -2928,7 +2926,7 @@ // Test the default configuration. OverlayCandidateTemporalTracker::Config config; - float kDamageEpsilon = config.damage_rate_hysteresis_range; + float kDamageEpsilon = 1.0f / config.max_num_frames_avg; float kBelowLowDamage = config.damage_rate_threshold - kDamageEpsilon; float kAboveHighDamage = config.damage_rate_threshold + kDamageEpsilon; float kFullDamage = 1.0f; @@ -2936,17 +2934,24 @@ auto wait_1_frame = [&]() { frame_counter++; }; auto wait_inactive_frames = [&]() { - frame_counter += config.max_frames_inactive + 1; + frame_counter += config.max_num_frames_avg + 1; }; + // Due to exponential algorithmic averaging the number of frames required to + // make the original smaller than inverse |config.max_frames_inactive| is the + // below formula. + const int kNumFramesClear = + std::log(1.0f / config.max_num_frames_avg) / + std::log((config.max_num_frames_avg - 1.f) / config.max_num_frames_avg); + OverlayCandidateTemporalTracker tracker; int fake_display_area = 256 * 256; // We test internal hysteresis state by running this test twice. for (int j = 0; j < 2; j++) { SCOPED_TRACE(j); - + tracker.Reset(); // First setup a 60fps high damage candidate. - for (int i = 0; i < OverlayCandidateTemporalTracker::kNumRecords; i++) { + for (int i = 0; i < kNumFramesClear; i++) { wait_1_frame(); tracker.AddRecord(frame_counter, kFullDamage, id_generator.GenerateNextId(), config); @@ -2956,7 +2961,7 @@ auto opaque_power_gain_60_full = tracker.GetModeledPowerGain(frame_counter, config, fake_display_area); - EXPECT_FLOAT_EQ(tracker.MeanFrameRatioRate(config), 1.0f); + EXPECT_NEAR(tracker.MeanFrameRatioRate(config), 1.0f, kDamageEpsilon); EXPECT_GT(opaque_power_gain_60_full, 0); // Test our hysteresis categorization of power by ensuring a single frame @@ -2971,7 +2976,7 @@ // A single frame drop even at 60fps should not change our power // categorization. - ASSERT_EQ(opaque_power_gain_60_full, opaque_power_gain_60_stutter); + EXPECT_EQ(opaque_power_gain_60_full, opaque_power_gain_60_stutter); wait_inactive_frames(); EXPECT_FALSE(tracker.IsActivelyChanging(frame_counter, config)); @@ -2985,7 +2990,21 @@ EXPECT_GT(opaque_power_gain_60_inactive, 0); // Now simulate a overlay candidate with 30fps full damage. - for (int i = 0; i < OverlayCandidateTemporalTracker::kNumRecords; i++) { + for (int i = 0; i < kNumFramesClear; i++) { + wait_1_frame(); + wait_1_frame(); + tracker.AddRecord(frame_counter, kFullDamage, + id_generator.GenerateNextId(), config); + } + + // Insert single stutter frame here to avoid hysteresis boundary. + wait_1_frame(); + wait_1_frame(); + wait_1_frame(); + tracker.AddRecord(frame_counter, kFullDamage, id_generator.GenerateNextId(), + config); + + for (int i = 0; i < kNumFramesClear; i++) { wait_1_frame(); wait_1_frame(); tracker.AddRecord(frame_counter, kFullDamage, @@ -2995,7 +3014,7 @@ auto opaque_power_gain_30_full = tracker.GetModeledPowerGain(frame_counter, config, fake_display_area); - EXPECT_FLOAT_EQ(tracker.MeanFrameRatioRate(config), 0.5f); + EXPECT_NEAR(tracker.MeanFrameRatioRate(config), 0.5f, kDamageEpsilon); EXPECT_GT(opaque_power_gain_30_full, 0); EXPECT_GT(opaque_power_gain_60_full, opaque_power_gain_30_full); @@ -3011,7 +3030,7 @@ auto opaque_power_gain_30_stutter = tracker.GetModeledPowerGain(frame_counter, config, fake_display_area); - EXPECT_TRUE(opaque_power_gain_30_stutter == opaque_power_gain_30_full); + EXPECT_EQ(opaque_power_gain_30_stutter, opaque_power_gain_30_full); wait_inactive_frames(); EXPECT_FALSE(tracker.IsActivelyChanging(frame_counter, config)); @@ -3024,8 +3043,9 @@ // invalidated when candidate becomes inactive. EXPECT_GT(opaque_power_gain_30_inactive, 0); + tracker.Reset(); // Test low and high damage thresholds. - for (int i = 0; i < OverlayCandidateTemporalTracker::kNumRecords; i++) { + for (int i = 0; i < kNumFramesClear; i++) { wait_1_frame(); tracker.AddRecord(frame_counter, kAboveHighDamage, id_generator.GenerateNextId(), config); @@ -3037,7 +3057,7 @@ EXPECT_GT(opaque_power_gain_high_damage, 0); EXPECT_GE(opaque_power_gain_60_full, opaque_power_gain_high_damage); - for (int i = 0; i < OverlayCandidateTemporalTracker::kNumRecords; i++) { + for (int i = 0; i < kNumFramesClear; i++) { wait_1_frame(); tracker.AddRecord(frame_counter, kBelowLowDamage, id_generator.GenerateNextId(), config); @@ -3047,21 +3067,19 @@ tracker.GetModeledPowerGain(frame_counter, config, fake_display_area); EXPECT_LT(opaque_power_gain_low_damage, 0); - // Test our mean damage ratio computations for our tacker. + // Test our mean damage ratio computations for our tracker. + int avg_range_tracker = config.max_num_frames_avg - 1; float expected_mean = 0.0f; - for (int i = 0; i < OverlayCandidateTemporalTracker::kNumRecords; i++) { + tracker.Reset(); + for (int i = 0; i < avg_range_tracker; i++) { wait_1_frame(); - // Please note that this first iter frame damage will not get included in - // the mean as the mean is computed between timing intervals. This means 6 - // timing intervals only gives 5 values. - float dynamic_damage_ratio = static_cast<float>(i); + float dynamic_damage_ratio = static_cast<float>(i) / avg_range_tracker; expected_mean += dynamic_damage_ratio; tracker.AddRecord(frame_counter, dynamic_damage_ratio, id_generator.GenerateNextId(), config); } - expected_mean = - expected_mean / (OverlayCandidateTemporalTracker::kNumRecords - 1); + expected_mean = expected_mean / avg_range_tracker; EXPECT_FLOAT_EQ(expected_mean, tracker.MeanFrameRatioRate(config)); } @@ -3079,9 +3097,10 @@ // not resource ids (example here is low latency ink surface). Here we test // this small feature by keeping the resource id constant but passing in true // to the force update param. + tracker.Reset(); static const float kDamageRatio = 0.7f; static const ResourceId kFakeConstantResourceId(13); - for (int i = 0; i < OverlayCandidateTemporalTracker::kNumRecords; i++) { + for (int i = 0; i < config.max_num_frames_avg; i++) { wait_1_frame(); tracker.AddRecord(frame_counter, kDamageRatio, kFakeConstantResourceId, config, true); @@ -3089,7 +3108,7 @@ EXPECT_FLOAT_EQ(kDamageRatio, tracker.MeanFrameRatioRate(config)); // Now test the false case for the force update param. - for (int i = 0; i < OverlayCandidateTemporalTracker::kNumRecords; i++) { + for (int i = 0; i < config.max_num_frames_avg; i++) { wait_1_frame(); tracker.AddRecord(frame_counter, 0.9f, kFakeConstantResourceId, config, false);
diff --git a/content/browser/conversions/conversion_storage_sql.cc b/content/browser/conversions/conversion_storage_sql.cc index 22b50fb..d25872ca 100644 --- a/content/browser/conversions/conversion_storage_sql.cc +++ b/content/browser/conversions/conversion_storage_sql.cc
@@ -282,7 +282,9 @@ // conversion_destination> we should mark all active, converted impressions // with the matching <reporting_origin, conversion_destination> as not active. static constexpr char kDeactivateMatchingConvertedImpressionsSql[] = - "UPDATE impressions SET active = 0 " + "UPDATE impressions " + DCHECK_SQL_INDEXED_BY("conversion_destination_idx") + "SET active = 0 " "WHERE conversion_destination = ? AND reporting_origin = ? AND " "active = 1 AND num_conversions > 0"; sql::Statement deactivate_statement(db_->GetCachedStatement( @@ -458,8 +460,8 @@ // past their expiry time. The impressions are fetched in order so that the // first one is the one that will be attributed; the others will be deleted. static constexpr char kGetMatchingImpressionsSql[] = - "SELECT impression_id " - "FROM impressions " + "SELECT impression_id FROM impressions " + DCHECK_SQL_INDEXED_BY("conversion_destination_idx") "WHERE conversion_destination = ? AND reporting_origin = ? " "AND active = 1 AND expiry_time > ? " "ORDER BY priority DESC,impression_time DESC"; @@ -723,9 +725,13 @@ // Delete all impressions that have no associated conversions and are past // their expiry time. Optimized by |kImpressionExpiryIndexSql|. static constexpr char kSelectExpiredImpressionsSql[] = - "SELECT impression_id FROM impressions WHERE expiry_time <= ? AND " - "impression_id NOT IN(SELECT impression_id FROM conversions)" - "LIMIT ?"; + "SELECT impression_id FROM impressions " + DCHECK_SQL_INDEXED_BY("impression_expiry_idx") + "WHERE expiry_time <= ? AND " + "impression_id NOT IN(" + "SELECT impression_id FROM conversions" + DCHECK_SQL_INDEXED_BY("conversion_impression_id_idx") + ")LIMIT ?"; sql::Statement select_expired_statement( db_->GetCachedStatement(SQL_FROM_HERE, kSelectExpiredImpressionsSql)); select_expired_statement.BindTime(0, clock_->Now()); @@ -738,9 +744,13 @@ // |kSelectExpiredImpressionsSql| so that each query is optimized by an index. // Optimized by |kConversionDestinationIndexSql|. static constexpr char kSelectInactiveImpressionsSql[] = - "SELECT impression_id FROM impressions WHERE active = 0 AND " - "impression_id NOT IN(SELECT impression_id FROM conversions)" - "LIMIT ?"; + "SELECT impression_id FROM impressions " + DCHECK_SQL_INDEXED_BY("conversion_destination_idx") + "WHERE active = 0 AND " + "impression_id NOT IN(" + "SELECT impression_id FROM conversions" + DCHECK_SQL_INDEXED_BY("conversion_impression_id_idx") + ")LIMIT ?"; sql::Statement select_inactive_statement( db_->GetCachedStatement(SQL_FROM_HERE, kSelectInactiveImpressionsSql)); select_inactive_statement.BindInt(0, kMaxDeletesPerBatch); @@ -986,10 +996,12 @@ bool ConversionStorageSql::HasCapacityForStoringImpression( const std::string& serialized_origin) { - // Optimized by `kImpressionOriginIndexSql`.. static constexpr char kCountImpressionsSql[] = - "SELECT COUNT(impression_origin)FROM impressions WHERE " - "impression_origin = ?"; + // clang-format off + "SELECT COUNT(impression_origin)FROM impressions " + DCHECK_SQL_INDEXED_BY("impression_origin_idx") + "WHERE impression_origin = ?"; // clang-format on + sql::Statement statement( db_->GetCachedStatement(SQL_FROM_HERE, kCountImpressionsSql)); statement.BindString(0, serialized_origin); @@ -1032,9 +1044,11 @@ // Note: to take advantage of this, we need to hint to the query planner that // |active| is a boolean, so include it in the conditional. static constexpr char kCountConversionsSql[] = - "SELECT COUNT(conversion_id)FROM conversions C JOIN impressions I ON" - " I.impression_id = C.impression_id" - " WHERE I.conversion_destination = ? AND(active BETWEEN 0 AND 1)"; + "SELECT COUNT(conversion_id)FROM conversions C " + "JOIN impressions I " + DCHECK_SQL_INDEXED_BY("conversion_destination_idx") + "ON I.impression_id = C.impression_id " + "WHERE I.conversion_destination = ? AND(active BETWEEN 0 AND 1)"; sql::Statement statement( db_->GetCachedStatement(SQL_FROM_HERE, kCountConversionsSql)); statement.BindString(0, serialized_origin); @@ -1415,8 +1429,8 @@ impression.ConversionDestination().Serialize(); static constexpr char kSelectImpressionsSql[] = - "SELECT impression_id,conversion_destination " - "FROM impressions " + "SELECT impression_id,conversion_destination FROM impressions " + DCHECK_SQL_INDEXED_BY("impression_site_idx") "WHERE impression_site = ? AND source_type = ? " "AND active = 1 AND num_conversions = 0 " "ORDER BY impression_time ASC";
diff --git a/content/browser/conversions/rate_limit_table.cc b/content/browser/conversions/rate_limit_table.cc index 3f75a859..1e10265 100644 --- a/content/browser/conversions/rate_limit_table.cc +++ b/content/browser/conversions/rate_limit_table.cc
@@ -122,6 +122,7 @@ static constexpr char kAttributionAllowedSql[] = "SELECT COUNT(*)FROM rate_limits " + DCHECK_SQL_INDEXED_BY("rate_limit_impression_site_type_idx") "WHERE attribution_type = ? " "AND impression_site = ? " "AND conversion_destination = ? " @@ -149,8 +150,9 @@ delete_end.is_max())); static constexpr char kDeleteRateLimitRangeSql[] = - "DELETE FROM rate_limits WHERE conversion_time BETWEEN ? AND " - "?"; + "DELETE FROM rate_limits " + DCHECK_SQL_INDEXED_BY("rate_limit_conversion_time_idx") + "WHERE conversion_time BETWEEN ? AND ?"; sql::Statement statement( db->GetCachedStatement(SQL_FROM_HERE, kDeleteRateLimitRangeSql)); statement.BindTime(0, delete_begin); @@ -180,6 +182,7 @@ static constexpr char kScanCandidateData[] = "SELECT rate_limit_id,impression_site,impression_origin," "conversion_destination,conversion_origin FROM rate_limits " + DCHECK_SQL_INDEXED_BY("rate_limit_conversion_time_idx") "WHERE conversion_time BETWEEN ? AND ?"; sql::Statement statement( db->GetCachedStatement(SQL_FROM_HERE, kScanCandidateData)); @@ -222,7 +225,10 @@ base::Time timestamp = clock_->Now() - delegate_->GetRateLimits().time_window; static constexpr char kDeleteExpiredRateLimits[] = - "DELETE FROM rate_limits WHERE conversion_time <= ?"; + // clang-format off + "DELETE FROM rate_limits " + DCHECK_SQL_INDEXED_BY("rate_limit_conversion_time_idx") + "WHERE conversion_time <= ?"; // clang-format on sql::Statement statement( db->GetCachedStatement(SQL_FROM_HERE, kDeleteExpiredRateLimits)); statement.BindTime(0, timestamp);
diff --git a/content/browser/conversions/sql_utils.h b/content/browser/conversions/sql_utils.h index 71832ed..5b03f1b 100644 --- a/content/browser/conversions/sql_utils.h +++ b/content/browser/conversions/sql_utils.h
@@ -10,6 +10,22 @@ #include <string> #include "base/compiler_specific.h" +#include "base/dcheck_is_on.h" + +// SELECT, UPDATE, and DELETE SQL statements should document the indexes +// they intend to use by adding `DCHECK_SQL_INDEXED_BY()` after every table +// name. This makes code review easier, and enlists SQLite's help in ensuring +// that the index *can* be used to satisfy the query. +// +// The INDEXED BY clause causes SQLite to return an error if it cannot satisfy +// the query using the specified index. Without this, schema and query changes +// can silently cause an index to be ignored, leading to poor performance in the +// worst case and unnecessary storage costs in the best. +#if DCHECK_IS_ON() +#define DCHECK_SQL_INDEXED_BY(index) " INDEXED BY " index " " +#else +#define DCHECK_SQL_INDEXED_BY(index) "" +#endif namespace url { class Origin;
diff --git a/content/browser/display_cutout/display_cutout_browsertest.cc b/content/browser/display_cutout/display_cutout_browsertest.cc index f0f2678..fd0de2a 100644 --- a/content/browser/display_cutout/display_cutout_browsertest.cc +++ b/content/browser/display_cutout/display_cutout_browsertest.cc
@@ -40,18 +40,13 @@ // These inset and flags simulate when we are not extending into the cutout. const gfx::Insets kNoCutoutInsets = gfx::Insets(); -const int kNoCutoutInsetsExpectedFlags = DisplayCutoutSafeArea::kEmpty; // These inset and flags simulate when the we are extending into the cutout. const gfx::Insets kCutoutInsets = gfx::Insets(1, 0, 1, 0); -const int kCutoutInsetsExpectedFlags = - DisplayCutoutSafeArea::kTop | DisplayCutoutSafeArea::kBottom; // These inset and flags simulate when we are extending into the cutout and have // rotated the device so that the cutout is on the other sides. const gfx::Insets kRotatedCutoutInsets = gfx::Insets(0, 1, 0, 1); -const int kRotatedCutoutInsetsExpectedFlags = - DisplayCutoutSafeArea::kLeft | DisplayCutoutSafeArea::kRight; #endif @@ -192,8 +187,7 @@ GURL url = embedded_test_server()->GetURL( "/" + file_path.BaseName().AsUTF8Unsafe()); - // Reset UKM and navigate to the html file created above. - ResetUKM(); + // Navigate to the html file created above. ASSERT_TRUE(NavigateToURL(shell(), url)); } @@ -220,46 +214,8 @@ return static_cast<WebContentsImpl*>(shell()->web_contents()); } - unsigned GetUKMEntryCount() const { - using Entry = ukm::builders::Layout_DisplayCutout_StateChanged; - auto ukm_entries = test_ukm_recorder_->GetEntriesByName(Entry::kEntryName); - return ukm_entries.size(); - } - - void ExpectUKMEntry(int index, - ukm::SourceId source_id, - bool is_main_frame, - blink::mojom::ViewportFit applied_value, - blink::mojom::ViewportFit supplied_value, - int ignored_reason, - int safe_areas_present) { - using Entry = ukm::builders::Layout_DisplayCutout_StateChanged; - auto ukm_entries = test_ukm_recorder_->GetEntriesByName(Entry::kEntryName); - - EXPECT_EQ(source_id, ukm_entries[index]->source_id); - EXPECT_EQ(is_main_frame, *test_ukm_recorder_->GetEntryMetric( - ukm_entries[index], Entry::kIsMainFrameName)); - EXPECT_EQ(static_cast<int>(applied_value), - *test_ukm_recorder_->GetEntryMetric( - ukm_entries[index], Entry::kViewportFit_AppliedName)); - EXPECT_EQ(static_cast<int>(supplied_value), - *test_ukm_recorder_->GetEntryMetric( - ukm_entries[index], Entry::kViewportFit_SuppliedName)); - EXPECT_EQ(ignored_reason, - *test_ukm_recorder_->GetEntryMetric( - ukm_entries[index], Entry::kViewportFit_IgnoredReasonName)); - EXPECT_EQ(safe_areas_present, - *test_ukm_recorder_->GetEntryMetric( - ukm_entries[index], Entry::kSafeAreasPresentName)); - } - private: - void ResetUKM() { - test_ukm_recorder_ = std::make_unique<ukm::TestAutoSetUkmRecorder>(); - } - base::ScopedTempDir temp_dir_; - std::unique_ptr<ukm::TestUkmRecorder> test_ukm_recorder_; DISALLOW_COPY_AND_ASSIGN(DisplayCutoutBrowserTest); }; @@ -303,41 +259,7 @@ web_contents_impl()->SetDisplayCutoutSafeArea(kNoCutoutInsets); } - // Get the source id for the page and close the |shell|. This will flush any - // unrecorded UKM metrics. - ukm::SourceId source_id = - web_contents_impl()->GetMainFrame()->GetPageUkmSourceId(); shell()->Close(); - - // Check UKM metrics are recorded. The first two entries are from loading the - // frame and the subframe with a viewport fit attribute. - EXPECT_EQ(5u, GetUKMEntryCount()); - ExpectUKMEntry(0, source_id, true, blink::mojom::ViewportFit::kAuto, - blink::mojom::ViewportFit::kCover, - DisplayCutoutIgnoredReason::kWebContentsNotFullscreen, - kNoCutoutInsetsExpectedFlags); - ExpectUKMEntry(1, source_id, false, blink::mojom::ViewportFit::kAuto, - blink::mojom::ViewportFit::kContain, - DisplayCutoutIgnoredReason::kWebContentsNotFullscreen, - kNoCutoutInsetsExpectedFlags); - - // This is when we take the main frame fullscreen. - ExpectUKMEntry(2, source_id, true, blink::mojom::ViewportFit::kCover, - blink::mojom::ViewportFit::kCover, - DisplayCutoutIgnoredReason::kAllowed, - kCutoutInsetsExpectedFlags); - - // This is when we take the subframe fullscreen. - ExpectUKMEntry(3, source_id, false, blink::mojom::ViewportFit::kContain, - blink::mojom::ViewportFit::kContain, - DisplayCutoutIgnoredReason::kAllowed, - kNoCutoutInsetsExpectedFlags); - - // These is when the subframe exits fullscreen. - ExpectUKMEntry(4, source_id, true, blink::mojom::ViewportFit::kCover, - blink::mojom::ViewportFit::kCover, - DisplayCutoutIgnoredReason::kAllowed, - kRotatedCutoutInsetsExpectedFlags); } IN_PROC_BROWSER_TEST_F(DisplayCutoutBrowserTest, @@ -357,23 +279,7 @@ observer.WaitForWantedValue(blink::mojom::ViewportFit::kAuto); web_contents_impl()->SetDisplayCutoutSafeArea(kNoCutoutInsets); } - - // Get the source id for the page and close the |shell|. This will flush any - // unrecorded UKM metrics. - ukm::SourceId source_id = - web_contents_impl()->GetMainFrame()->GetPageUkmSourceId(); shell()->Close(); - - // Check UKM metrics are recorded. - EXPECT_EQ(2u, GetUKMEntryCount()); - ExpectUKMEntry(0, source_id, true, blink::mojom::ViewportFit::kAuto, - blink::mojom::ViewportFit::kCover, - DisplayCutoutIgnoredReason::kWebContentsNotFullscreen, - kNoCutoutInsetsExpectedFlags); - ExpectUKMEntry(1, source_id, true, blink::mojom::ViewportFit::kCover, - blink::mojom::ViewportFit::kCover, - DisplayCutoutIgnoredReason::kAllowed, - kNoCutoutInsetsExpectedFlags); } IN_PROC_BROWSER_TEST_F(DisplayCutoutBrowserTest, ViewportFit_Noop_Navigate) { @@ -382,17 +288,7 @@ LoadTestPageWithViewportFitFromMeta("cover"); EXPECT_FALSE(observer.has_value()); } - - ukm::SourceId source_id = - web_contents_impl()->GetMainFrame()->GetPageUkmSourceId(); LoadTestPageWithData(""); - - // Check UKM metrics are recorded. - EXPECT_EQ(1u, GetUKMEntryCount()); - ExpectUKMEntry(0, source_id, true, blink::mojom::ViewportFit::kAuto, - blink::mojom::ViewportFit::kCover, - DisplayCutoutIgnoredReason::kWebContentsNotFullscreen, - kNoCutoutInsetsExpectedFlags); } IN_PROC_BROWSER_TEST_F(DisplayCutoutBrowserTest, @@ -403,16 +299,7 @@ EXPECT_FALSE(observer.has_value()); } - ukm::SourceId source_id = - web_contents_impl()->GetMainFrame()->GetPageUkmSourceId(); shell()->Close(); - - // Check UKM metrics are recorded. - EXPECT_EQ(1u, GetUKMEntryCount()); - ExpectUKMEntry(0, source_id, true, blink::mojom::ViewportFit::kAuto, - blink::mojom::ViewportFit::kCover, - DisplayCutoutIgnoredReason::kWebContentsNotFullscreen, - kNoCutoutInsetsExpectedFlags); } IN_PROC_BROWSER_TEST_F(DisplayCutoutBrowserTest, WebDisplayMode) {
diff --git a/content/browser/display_cutout/display_cutout_host_impl.cc b/content/browser/display_cutout/display_cutout_host_impl.cc index a2955e5..02c8b6b 100644 --- a/content/browser/display_cutout/display_cutout_host_impl.cc +++ b/content/browser/display_cutout/display_cutout_host_impl.cc
@@ -8,7 +8,6 @@ #include "content/browser/web_contents/web_contents_impl.h" #include "content/public/browser/navigation_handle.h" #include "mojo/public/cpp/bindings/associated_remote.h" -#include "services/metrics/public/cpp/ukm_builders.h" #include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h" namespace content { @@ -41,8 +40,6 @@ // WebContentsObservers about the new value. if (current_rfh_ == rfh) web_contents_impl_->NotifyViewportFitChanged(value); - - MaybeQueueUKMEvent(rfh); } void DisplayCutoutHostImpl::DidAcquireFullscreen(RenderFrameHost* rfh) { @@ -57,16 +54,11 @@ NavigationHandle* navigation_handle) { // If the navigation is not in the main frame or if we are a same document // navigation then we should stop now. - // TODO(https://crbug.com/1218946): With MPArch there may be multiple main - // frames. This caller was converted automatically to the primary main frame - // to preserve its semantics. Follow up to confirm correctness. if (!navigation_handle->IsInPrimaryMainFrame() || navigation_handle->IsSameDocument()) { return; } - RecordPendingUKMEvents(); - // If we finish a main frame navigation and the |WebDisplayMode| is // fullscreen then we should make the main frame the current // |RenderFrameHost|. @@ -87,25 +79,11 @@ ViewportFitChangedForFrame(rfh, blink::mojom::ViewportFit::kAuto); } -void DisplayCutoutHostImpl::WebContentsDestroyed() { - // Record any pending UKM events that we are waiting to record. - RecordPendingUKMEvents(); -} - void DisplayCutoutHostImpl::SetDisplayCutoutSafeArea(gfx::Insets insets) { insets_ = insets; if (current_rfh_) SendSafeAreaToFrame(current_rfh_, insets); - - // If we have a pending UKM event on the top of the stack that is |kAllowed| - // and we have a |current_rfh_| then we should update that UKM event as it - // was recorded before we received the safe area. - if (!pending_ukm_events_.empty() && current_rfh_) { - PendingUKMEvent& last_entry = pending_ukm_events_.back(); - if (last_entry.ignored_reason == DisplayCutoutIgnoredReason::kAllowed) - last_entry.safe_areas_present = GetSafeAreasPresentUKMValue(); - } } void DisplayCutoutHostImpl::SetCurrentRenderFrameHost(RenderFrameHost* rfh) { @@ -127,9 +105,6 @@ return; } - // Record a UKM event for the new frame. - MaybeQueueUKMEvent(current_rfh_); - // Send the current safe area to the new frame. SendSafeAreaToFrame(rfh, insets_); @@ -158,60 +133,4 @@ return blink::mojom::ViewportFit::kAuto; } -void DisplayCutoutHostImpl::MaybeQueueUKMEvent(RenderFrameHost* frame) { - if (!frame) - return; - - // Get the current applied ViewportFit and the ViewportFit value supplied by - // |frame|. If the |supplied_value| is kAuto then we will not record the - // event since it is the default. - blink::mojom::ViewportFit supplied_value = GetValueOrDefault(frame); - if (supplied_value == blink::mojom::ViewportFit::kAuto) - return; - blink::mojom::ViewportFit applied_value = GetValueOrDefault(current_rfh_); - - // Set the reason why this frame is not the current frame. - int ignored_reason = DisplayCutoutIgnoredReason::kAllowed; - if (current_rfh_ != frame) { - ignored_reason = - current_rfh_ == nullptr - ? DisplayCutoutIgnoredReason::kWebContentsNotFullscreen - : DisplayCutoutIgnoredReason::kFrameNotCurrentFullscreen; - } - - // Adds the UKM event to the list of pending events. - PendingUKMEvent pending_event; - pending_event.source_id = frame->GetPageUkmSourceId(); - pending_event.is_main_frame = !frame->GetParent(); - pending_event.applied_value = applied_value; - pending_event.supplied_value = supplied_value; - pending_event.ignored_reason = ignored_reason; - if (ignored_reason == DisplayCutoutIgnoredReason::kAllowed) - pending_event.safe_areas_present = GetSafeAreasPresentUKMValue(); - pending_ukm_events_.push_back(pending_event); -} - -void DisplayCutoutHostImpl::RecordPendingUKMEvents() { - for (const auto& event : pending_ukm_events_) { - ukm::builders::Layout_DisplayCutout_StateChanged builder(event.source_id); - builder.SetIsMainFrame(event.is_main_frame); - builder.SetViewportFit_Applied(static_cast<int>(event.applied_value)); - builder.SetViewportFit_Supplied(static_cast<int>(event.supplied_value)); - builder.SetViewportFit_IgnoredReason(event.ignored_reason); - builder.SetSafeAreasPresent(event.safe_areas_present); - builder.Record(ukm::UkmRecorder::Get()); - } - - pending_ukm_events_.clear(); -} - -int DisplayCutoutHostImpl::GetSafeAreasPresentUKMValue() const { - int flags = 0; - flags |= insets_.top() ? DisplayCutoutSafeArea::kTop : 0; - flags |= insets_.left() ? DisplayCutoutSafeArea::kLeft : 0; - flags |= insets_.bottom() ? DisplayCutoutSafeArea::kBottom : 0; - flags |= insets_.right() ? DisplayCutoutSafeArea::kRight : 0; - return flags; -} - } // namespace content
diff --git a/content/browser/display_cutout/display_cutout_host_impl.h b/content/browser/display_cutout/display_cutout_host_impl.h index 668ba69..19df7ea 100644 --- a/content/browser/display_cutout/display_cutout_host_impl.h +++ b/content/browser/display_cutout/display_cutout_host_impl.h
@@ -38,22 +38,11 @@ void DidFinishNavigation(NavigationHandle* navigation_handle); void RenderFrameDeleted(RenderFrameHost* rfh); void RenderFrameCreated(RenderFrameHost* rfh); - void WebContentsDestroyed(); // Updates the safe area insets on the current frame. void SetDisplayCutoutSafeArea(gfx::Insets insets); private: - // Stores the data for a pending UKM event. - struct PendingUKMEvent { - ukm::SourceId source_id; - bool is_main_frame; - blink::mojom::ViewportFit applied_value; - blink::mojom::ViewportFit supplied_value; - int ignored_reason; - int safe_areas_present = 0; - }; - // Set the current |RenderFrameHost| that should have control over the // viewport fit value and we should set safe area insets on. void SetCurrentRenderFrameHost(RenderFrameHost* rfh); @@ -65,24 +54,14 @@ // stored value. blink::mojom::ViewportFit GetValueOrDefault(RenderFrameHost* rfh) const; - // Builds and records a Layout.DisplayCutout.StateChanged UKM event for the - // provided |frame|. The event will be added to the list of pending events. - void MaybeQueueUKMEvent(RenderFrameHost* frame); - - // Records any UKM events that we have not recorded yet. - void RecordPendingUKMEvents(); - - // Gets the integer value of the current safe areas for recording to UKM. - int GetSafeAreasPresentUKMValue() const; - - // Stores pending UKM events. - std::list<PendingUKMEvent> pending_ukm_events_; - // Stores the current safe area insets. gfx::Insets insets_; // Stores the current |RenderFrameHost| that has the applied safe area insets - // and is controlling the viewport fit value. + // and is controlling the viewport fit value. This value is different than + // `WebContentsImpl::current_fullscreen_frame_` because it also considers + // browser side driven fullscreen mode, not just renderer side requested + // frames. RenderFrameHost* current_rfh_ = nullptr; // Stores a map of RenderFrameHosts and their current viewport fit values.
diff --git a/content/browser/file_system_access/file_system_access_directory_handle_impl_unittest.cc b/content/browser/file_system_access/file_system_access_directory_handle_impl_unittest.cc index 21c3a6f1..080a4260 100644 --- a/content/browser/file_system_access/file_system_access_directory_handle_impl_unittest.cc +++ b/content/browser/file_system_access/file_system_access_directory_handle_impl_unittest.cc
@@ -47,40 +47,38 @@ /*permission_context=*/nullptr, /*off_the_record=*/false); - auto url_and_fs = manager_->CreateFileSystemURLFromPath( - test_src_origin_, FileSystemAccessEntryFactory::PathType::kLocal, - dir_.GetPath()); + auto url = manager_->CreateFileSystemURLFromPath( + FileSystemAccessEntryFactory::PathType::kLocal, dir_.GetPath()); handle_ = std::make_unique<FileSystemAccessDirectoryHandleImpl>( manager_.get(), FileSystemAccessManagerImpl::BindingContext( test_src_origin_, test_src_url_, /*worker_process_id=*/1), - url_and_fs.url, - FileSystemAccessManagerImpl::SharedHandleState( - allow_grant_, allow_grant_, url_and_fs.file_system)); + url, + FileSystemAccessManagerImpl::SharedHandleState(allow_grant_, + allow_grant_)); denied_handle_ = std::make_unique<FileSystemAccessDirectoryHandleImpl>( manager_.get(), FileSystemAccessManagerImpl::BindingContext( test_src_origin_, test_src_url_, /*worker_process_id=*/1), - url_and_fs.url, - FileSystemAccessManagerImpl::SharedHandleState( - deny_grant_, deny_grant_, std::move(url_and_fs.file_system))); + url, + FileSystemAccessManagerImpl::SharedHandleState(deny_grant_, + deny_grant_)); } void TearDown() override { task_environment_.RunUntilIdle(); } std::unique_ptr<FileSystemAccessDirectoryHandleImpl> GetHandleWithPermissions(const base::FilePath& path, bool read, bool write) { - auto url_and_fs = manager_->CreateFileSystemURLFromPath( - test_src_origin_, FileSystemAccessEntryFactory::PathType::kLocal, path); + auto url = manager_->CreateFileSystemURLFromPath( + FileSystemAccessEntryFactory::PathType::kLocal, path); auto handle = std::make_unique<FileSystemAccessDirectoryHandleImpl>( manager_.get(), FileSystemAccessManagerImpl::BindingContext( test_src_origin_, test_src_url_, /*worker_process_id=*/1), - url_and_fs.url, + url, FileSystemAccessManagerImpl::SharedHandleState( /*read_grant=*/read ? allow_grant_ : deny_grant_, - /*write_grant=*/write ? allow_grant_ : deny_grant_, - url_and_fs.file_system)); + /*write_grant=*/write ? allow_grant_ : deny_grant_)); return handle; }
diff --git a/content/browser/file_system_access/file_system_access_file_handle_impl.cc b/content/browser/file_system_access/file_system_access_file_handle_impl.cc index 2cc311fb..660f47b 100644 --- a/content/browser/file_system_access/file_system_access_file_handle_impl.cc +++ b/content/browser/file_system_access/file_system_access_file_handle_impl.cc
@@ -34,7 +34,6 @@ using storage::BlobImpl; using storage::FileSystemOperation; using storage::FileSystemOperationRunner; -using storage::IsolatedContext; namespace content { @@ -411,7 +410,6 @@ auto swap_path = base::FilePath(url().virtual_path()).AddExtensionASCII(".crswap"); - auto swap_file_system = file_system(); if (count >= max_swap_files_) { DLOG(ERROR) << "Error Creating Swap File, count: " << count @@ -434,33 +432,13 @@ storage::FileSystemURL swap_url = manager()->context()->CreateCrackedFileSystemURL( url().storage_key(), url().mount_type(), swap_path); - - // If that failed, it means this file was part of an isolated file system, - // and specifically, a single file isolated file system. In that case we'll - // need to register a new isolated file system for the swap file, and use that - // for the writer. - if (!swap_url.is_valid()) { - DCHECK_EQ(url().mount_type(), storage::kFileSystemTypeIsolated); - - swap_path = base::FilePath(url().path()).AddExtensionASCII(".crswap"); - if (count > 0) { - swap_path = swap_path.InsertBeforeExtensionASCII( - base::StringPrintf(".%d", count)); - } - - auto handle = manager()->CreateFileSystemURLFromPath( - context().origin, FileSystemAccessEntryFactory::PathType::kLocal, - swap_path); - swap_url = std::move(handle.url); - swap_file_system = std::move(handle.file_system); - } + DCHECK(swap_url.is_valid()); DoFileSystemOperation( FROM_HERE, &FileSystemOperationRunner::CreateFile, base::BindOnce(&FileSystemAccessFileHandleImpl::DidCreateSwapFile, weak_factory_.GetWeakPtr(), count, swap_url, - swap_file_system, keep_existing_data, auto_close, - std::move(callback)), + keep_existing_data, auto_close, std::move(callback)), swap_url, /*exclusive=*/true); } @@ -468,7 +446,6 @@ void FileSystemAccessFileHandleImpl::DidCreateSwapFile( int count, const storage::FileSystemURL& swap_url, - storage::IsolatedContext::ScopedFSHandle swap_file_system, bool keep_existing_data, bool auto_close, CreateFileWriterCallback callback, @@ -497,8 +474,7 @@ manager()->CreateFileWriter( context(), url(), swap_url, FileSystemAccessManagerImpl::SharedHandleState( - handle_state().read_grant, handle_state().write_grant, - swap_file_system), + handle_state().read_grant, handle_state().write_grant), auto_close)); return; } @@ -506,8 +482,8 @@ DoFileSystemOperation( FROM_HERE, &FileSystemOperationRunner::Copy, base::BindOnce(&FileSystemAccessFileHandleImpl::DidCopySwapFile, - weak_factory_.GetWeakPtr(), swap_url, swap_file_system, - auto_close, std::move(callback)), + weak_factory_.GetWeakPtr(), swap_url, auto_close, + std::move(callback)), url(), swap_url, storage::FileSystemOperation::OPTION_PRESERVE_LAST_MODIFIED, storage::FileSystemOperation::ERROR_BEHAVIOR_ABORT, @@ -516,7 +492,6 @@ void FileSystemAccessFileHandleImpl::DidCopySwapFile( const storage::FileSystemURL& swap_url, - storage::IsolatedContext::ScopedFSHandle swap_file_system, bool auto_close, CreateFileWriterCallback callback, base::File::Error result) { @@ -530,13 +505,13 @@ mojo::NullRemote()); return; } - std::move(callback).Run(file_system_access_error::Ok(), - manager()->CreateFileWriter( - context(), url(), swap_url, - FileSystemAccessManagerImpl::SharedHandleState( - handle_state().read_grant, - handle_state().write_grant, swap_file_system), - auto_close)); + std::move(callback).Run( + file_system_access_error::Ok(), + manager()->CreateFileWriter( + context(), url(), swap_url, + FileSystemAccessManagerImpl::SharedHandleState( + handle_state().read_grant, handle_state().write_grant), + auto_close)); } base::WeakPtr<FileSystemAccessHandleBase>
diff --git a/content/browser/file_system_access/file_system_access_file_handle_impl.h b/content/browser/file_system_access/file_system_access_file_handle_impl.h index be67a4969..7cfc169 100644 --- a/content/browser/file_system_access/file_system_access_file_handle_impl.h +++ b/content/browser/file_system_access/file_system_access_file_handle_impl.h
@@ -75,14 +75,12 @@ void DidCreateSwapFile( int count, const storage::FileSystemURL& swap_url, - storage::IsolatedContext::ScopedFSHandle swap_file_system, bool keep_existing_data, bool auto_close, CreateFileWriterCallback callback, base::File::Error result); void DidCopySwapFile( const storage::FileSystemURL& swap_url, - storage::IsolatedContext::ScopedFSHandle swap_file_system, bool auto_close, CreateFileWriterCallback callback, base::File::Error result);
diff --git a/content/browser/file_system_access/file_system_access_file_handle_impl_unittest.cc b/content/browser/file_system_access/file_system_access_file_handle_impl_unittest.cc index d8f7abb..512bf285 100644 --- a/content/browser/file_system_access/file_system_access_file_handle_impl_unittest.cc +++ b/content/browser/file_system_access/file_system_access_file_handle_impl_unittest.cc
@@ -74,17 +74,16 @@ std::unique_ptr<FileSystemAccessFileHandleImpl> GetHandleWithPermissions(const base::FilePath& path, bool read, bool write) { - auto url_and_fs = manager_->CreateFileSystemURLFromPath( - test_src_origin_, FileSystemAccessEntryFactory::PathType::kLocal, path); + auto url = manager_->CreateFileSystemURLFromPath( + FileSystemAccessEntryFactory::PathType::kLocal, path); auto handle = std::make_unique<FileSystemAccessFileHandleImpl>( manager_.get(), FileSystemAccessManagerImpl::BindingContext( test_src_origin_, test_src_url_, /*worker_process_id=*/1), - url_and_fs.url, + url, FileSystemAccessManagerImpl::SharedHandleState( /*read_grant=*/read ? allow_grant_ : deny_grant_, - /*write_grant=*/write ? allow_grant_ : deny_grant_, - url_and_fs.file_system)); + /*write_grant=*/write ? allow_grant_ : deny_grant_)); return handle; } @@ -124,8 +123,8 @@ FileSystemAccessManagerImpl::BindingContext( test_src_origin_, test_src_url_, /*worker_process_id=*/1), test_file_url_, - FileSystemAccessManagerImpl::SharedHandleState( - allow_grant_, allow_grant_, /*file_system=*/{})); + FileSystemAccessManagerImpl::SharedHandleState(allow_grant_, + allow_grant_)); } const GURL test_src_url_ = GURL("http://example.com/foo");
diff --git a/content/browser/file_system_access/file_system_access_file_writer_impl_unittest.cc b/content/browser/file_system_access/file_system_access_file_writer_impl_unittest.cc index 841cbdc..33a4bfa 100644 --- a/content/browser/file_system_access/file_system_access_file_writer_impl_unittest.cc +++ b/content/browser/file_system_access/file_system_access_file_writer_impl_unittest.cc
@@ -37,7 +37,6 @@ using blink::mojom::FileSystemAccessStatus; using storage::FileSystemURL; -using storage::IsolatedContext; using testing::_; using testing::AllOf; @@ -124,22 +123,13 @@ /*quota_manager_proxy=*/nullptr, std::move(additional_providers), dir_.GetPath()); - auto* isolated_context = IsolatedContext::GetInstance(); - std::string base_name; - IsolatedContext::ScopedFSHandle fs = - isolated_context->RegisterFileSystemForPath( - storage::kFileSystemTypeLocal, std::string(), dir_.GetPath(), - &base_name); - base::FilePath root_path = - isolated_context->CreateVirtualRootPath(fs.id()).AppendASCII(base_name); - test_file_url_ = file_system_context_->CreateCrackedFileSystemURL( - kTestStorageKey, storage::kFileSystemTypeIsolated, - root_path.AppendASCII("test")); + kTestStorageKey, storage::kFileSystemTypeLocal, + dir_.GetPath().AppendASCII("test")); test_swap_url_ = file_system_context_->CreateCrackedFileSystemURL( - kTestStorageKey, storage::kFileSystemTypeIsolated, - root_path.AppendASCII("test.crswap")); + kTestStorageKey, storage::kFileSystemTypeLocal, + dir_.GetPath().AppendASCII("test.crswap")); ASSERT_EQ(base::File::FILE_OK, storage::AsyncFileTestHelper::CreateFile( @@ -168,8 +158,8 @@ FileSystemAccessManagerImpl::BindingContext(kTestStorageKey.origin(), kTestURL, kFrameId), test_file_url_, test_swap_url_, - FileSystemAccessManagerImpl::SharedHandleState( - permission_grant_, permission_grant_, std::move(fs)), + FileSystemAccessManagerImpl::SharedHandleState(permission_grant_, + permission_grant_), remote_.InitWithNewPipeAndPassReceiver(), /*has_transient_user_activation=*/false, /*auto_close=*/false, quarantine_callback_); @@ -698,7 +688,7 @@ kTestURL, kFrameId), test_file_url_, test_swap_url_, FileSystemAccessManagerImpl::SharedHandleState(permission_grant_, - permission_grant_, {}), + permission_grant_), remote.InitWithNewPipeAndPassReceiver(), /*has_transient_user_activation=*/false, /*auto_close=*/false, quarantine_callback_);
diff --git a/content/browser/file_system_access/file_system_access_handle_base.cc b/content/browser/file_system_access/file_system_access_handle_base.cc index 029409c..0acaad3 100644 --- a/content/browser/file_system_access/file_system_access_handle_base.cc +++ b/content/browser/file_system_access/file_system_access_handle_base.cc
@@ -24,9 +24,6 @@ url_(url), handle_state_(handle_state) { DCHECK(manager_); - DCHECK_EQ(url_.mount_type() == storage::kFileSystemTypeIsolated, - handle_state_.file_system.is_valid()) - << url_.mount_type(); // We support sandboxed file system and local file systems on all platforms. DCHECK(url_.type() == storage::kFileSystemTypeLocal || @@ -36,11 +33,9 @@ << url_.type(); if (ShouldTrackUsage()) { - DCHECK(url_.mount_type() == storage::kFileSystemTypeIsolated || + DCHECK(url_.mount_type() == storage::kFileSystemTypeLocal || url_.mount_type() == storage::kFileSystemTypeExternal) << url_.mount_type(); - if (url_.mount_type() == storage::kFileSystemTypeIsolated) - DCHECK_EQ(url_.type(), storage::kFileSystemTypeLocal); Observe(WebContentsImpl::FromRenderFrameHostID(context_.frame_id));
diff --git a/content/browser/file_system_access/file_system_access_handle_base.h b/content/browser/file_system_access/file_system_access_handle_base.h index 40f891d..dec5db686 100644 --- a/content/browser/file_system_access/file_system_access_handle_base.h +++ b/content/browser/file_system_access/file_system_access_handle_base.h
@@ -54,9 +54,6 @@ const storage::FileSystemURL& url() const { return url_; } const SharedHandleState& handle_state() const { return handle_state_; } - const storage::IsolatedContext::ScopedFSHandle& file_system() const { - return handle_state_.file_system; - } const BindingContext& context() const { return context_; } PermissionStatus GetReadPermissionStatus();
diff --git a/content/browser/file_system_access/file_system_access_handle_base_unittest.cc b/content/browser/file_system_access/file_system_access_handle_base_unittest.cc index 9872e98..7492014b 100644 --- a/content/browser/file_system_access/file_system_access_handle_base_unittest.cc +++ b/content/browser/file_system_access/file_system_access_handle_base_unittest.cc
@@ -79,8 +79,7 @@ scoped_refptr<FileSystemAccessManagerImpl> manager_; FileSystemAccessManagerImpl::SharedHandleState handle_state_ = {read_grant_, - write_grant_, - {}}; + write_grant_}; }; TEST_F(FileSystemAccessHandleBaseTest, GetReadPermissionStatus) {
diff --git a/content/browser/file_system_access/file_system_access_manager_impl.cc b/content/browser/file_system_access/file_system_access_manager_impl.cc index de9ae85f..6784239 100644 --- a/content/browser/file_system_access/file_system_access_manager_impl.cc +++ b/content/browser/file_system_access/file_system_access_manager_impl.cc
@@ -45,7 +45,6 @@ #include "storage/browser/file_system/file_system_context.h" #include "storage/browser/file_system/file_system_operation_runner.h" #include "storage/browser/file_system/file_system_url.h" -#include "storage/browser/file_system/isolated_context.h" #include "storage/common/file_system/file_system_types.h" #include "storage/common/file_system/file_system_util.h" #include "third_party/blink/public/common/storage_key/storage_key.h" @@ -252,11 +251,8 @@ FileSystemAccessManagerImpl::SharedHandleState::SharedHandleState( scoped_refptr<FileSystemAccessPermissionGrant> read_grant, - scoped_refptr<FileSystemAccessPermissionGrant> write_grant, - storage::IsolatedContext::ScopedFSHandle file_system) - : read_grant(std::move(read_grant)), - write_grant(std::move(write_grant)), - file_system(std::move(file_system)) { + scoped_refptr<FileSystemAccessPermissionGrant> write_grant) + : read_grant(std::move(read_grant)), write_grant(std::move(write_grant)) { DCHECK(this->read_grant); DCHECK(this->write_grant); } @@ -443,9 +439,7 @@ } } - auto url = CreateFileSystemURLFromPath(context.origin, path_info.type, - path_info.path); - auto fs_url = url.url; + auto fs_url = CreateFileSystemURLFromPath(path_info.type, path_info.path); operation_runner() .AsyncCall(base::IgnoreResult( &storage::FileSystemOperationRunner::DirectoryExists)) @@ -456,7 +450,7 @@ base::BindOnce( &FileSystemAccessManagerImpl::SetDefaultPathAndShowPicker, weak_factory_.GetWeakPtr(), context, std::move(options), - std::move(common_options), std::move(url).url.path(), + std::move(common_options), fs_url.path(), std::move(callback)))); } @@ -575,48 +569,45 @@ // Look up whether the file path that's associated with the token is a file or // directory and call ResolveDataTransferTokenWithFileType with the result. - FileSystemURLAndFSHandle url = CreateFileSystemURLFromPath( - binding_context.origin, data_transfer_token_impl->second->path_type(), + auto fs_url = CreateFileSystemURLFromPath( + data_transfer_token_impl->second->path_type(), data_transfer_token_impl->second->file_path()); - auto fs_url = url.url; operation_runner() .AsyncCall( base::IgnoreResult(&storage::FileSystemOperationRunner::GetMetadata)) - .WithArgs( - fs_url, storage::FileSystemOperation::GET_METADATA_FIELD_IS_DIRECTORY, - base::BindPostTask( - base::SequencedTaskRunnerHandle::Get(), - base::BindOnce(&HandleTypeFromFileInfo) - .Then(base::BindOnce( - &FileSystemAccessManagerImpl:: - ResolveDataTransferTokenWithFileType, - weak_factory_.GetWeakPtr(), binding_context, - data_transfer_token_impl->second->file_path(), - std::move(url), std::move(token_resolved_callback))))); + .WithArgs(fs_url, + storage::FileSystemOperation::GET_METADATA_FIELD_IS_DIRECTORY, + base::BindPostTask( + base::SequencedTaskRunnerHandle::Get(), + base::BindOnce(&HandleTypeFromFileInfo) + .Then(base::BindOnce( + &FileSystemAccessManagerImpl:: + ResolveDataTransferTokenWithFileType, + weak_factory_.GetWeakPtr(), binding_context, + data_transfer_token_impl->second->file_path(), + fs_url, std::move(token_resolved_callback))))); } void FileSystemAccessManagerImpl::ResolveDataTransferTokenWithFileType( const BindingContext& binding_context, const base::FilePath& file_path, - FileSystemURLAndFSHandle url, + const storage::FileSystemURL& url, GetEntryFromDataTransferTokenCallback token_resolved_callback, HandleType file_type) { SharedHandleState shared_handle_state = GetSharedHandleStateForPath( - file_path, binding_context.origin, std::move(url.file_system), file_type, - UserAction::kDragAndDrop); + file_path, binding_context.origin, file_type, UserAction::kDragAndDrop); blink::mojom::FileSystemAccessEntryPtr entry; if (file_type == HandleType::kDirectory) { entry = blink::mojom::FileSystemAccessEntry::New( blink::mojom::FileSystemAccessHandle::NewDirectory( - CreateDirectoryHandle(binding_context, url.url, - shared_handle_state)), - url.base_name); + CreateDirectoryHandle(binding_context, url, shared_handle_state)), + file_path.BaseName().AsUTF8Unsafe()); } else { entry = blink::mojom::FileSystemAccessEntry::New( blink::mojom::FileSystemAccessHandle::NewFile( - CreateFileHandle(binding_context, url.url, shared_handle_state)), - url.base_name); + CreateFileHandle(binding_context, url, shared_handle_state)), + file_path.BaseName().AsUTF8Unsafe()); } std::move(token_resolved_callback).Run(std::move(entry)); @@ -761,8 +752,7 @@ base::MakeRefCounted<FixedFileSystemAccessPermissionGrant>( PermissionStatus::GRANTED, base::FilePath()); CreateTransferTokenImpl( - url, origin, - SharedHandleState(permission_grant, permission_grant, {}), + url, origin, SharedHandleState(permission_grant, permission_grant), data.handle_type() == FileSystemAccessHandleData::kDirectory ? HandleType::kDirectory : HandleType::kFile, @@ -778,16 +768,15 @@ base::FilePath root_path = DeserializePath(file_data.root_path()); base::FilePath relative_path = DeserializePath(file_data.relative_path()); - FileSystemURLAndFSHandle root = CreateFileSystemURLFromPath( - origin, + storage::FileSystemURL root = CreateFileSystemURLFromPath( data.data_case() == FileSystemAccessHandleData::kLocal ? PathType::kLocal : PathType::kExternal, root_path); storage::FileSystemURL child = context()->CreateCrackedFileSystemURL( - root.url.storage_key(), root.url.mount_type(), - root.url.virtual_path().Append(relative_path)); + root.storage_key(), root.mount_type(), + root.virtual_path().Append(relative_path)); const bool is_directory = data.handle_type() == FileSystemAccessHandleData::kDirectory; @@ -797,7 +786,7 @@ // SharedHandleState for a directory even if the handle represents a // file. SharedHandleState handle_state = GetSharedHandleStateForPath( - root_path, origin, std::move(root.file_system), + root_path, origin, (is_directory || !relative_path.empty()) ? HandleType::kDirectory : HandleType::kFile, FileSystemAccessPermissionContext::UserAction::kLoadFromStorage); @@ -820,17 +809,16 @@ const base::FilePath& file_path, UserAction user_action) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - FileSystemURLAndFSHandle url = - CreateFileSystemURLFromPath(binding_context.origin, path_type, file_path); + storage::FileSystemURL url = + CreateFileSystemURLFromPath(path_type, file_path); SharedHandleState shared_handle_state = GetSharedHandleStateForPath( - file_path, binding_context.origin, std::move(url.file_system), - HandleType::kFile, user_action); + file_path, binding_context.origin, HandleType::kFile, user_action); return blink::mojom::FileSystemAccessEntry::New( blink::mojom::FileSystemAccessHandle::NewFile( - CreateFileHandle(binding_context, url.url, shared_handle_state)), - url.base_name); + CreateFileHandle(binding_context, url, shared_handle_state)), + file_path.BaseName().AsUTF8Unsafe()); } blink::mojom::FileSystemAccessEntryPtr @@ -840,17 +828,16 @@ const base::FilePath& file_path, UserAction user_action) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - FileSystemURLAndFSHandle url = - CreateFileSystemURLFromPath(binding_context.origin, path_type, file_path); + storage::FileSystemURL url = + CreateFileSystemURLFromPath(path_type, file_path); SharedHandleState shared_handle_state = GetSharedHandleStateForPath( - file_path, binding_context.origin, std::move(url.file_system), - HandleType::kDirectory, user_action); + file_path, binding_context.origin, HandleType::kDirectory, user_action); return blink::mojom::FileSystemAccessEntry::New( blink::mojom::FileSystemAccessHandle::NewDirectory( - CreateDirectoryHandle(binding_context, url.url, shared_handle_state)), - url.base_name); + CreateDirectoryHandle(binding_context, url, shared_handle_state)), + file_path.BaseName().AsUTF8Unsafe()); } mojo::PendingRemote<blink::mojom::FileSystemAccessFileHandle> @@ -860,9 +847,6 @@ const SharedHandleState& handle_state) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(url.is_valid()); - DCHECK_EQ(url.mount_type() == storage::kFileSystemTypeIsolated, - handle_state.file_system.is_valid()) - << url.mount_type(); mojo::PendingRemote<blink::mojom::FileSystemAccessFileHandle> result; file_receivers_.Add(std::make_unique<FileSystemAccessFileHandleImpl>( @@ -878,9 +862,6 @@ const SharedHandleState& handle_state) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(url.is_valid()); - DCHECK_EQ(url.mount_type() == storage::kFileSystemTypeIsolated, - handle_state.file_system.is_valid()) - << url.mount_type(); mojo::PendingRemote<blink::mojom::FileSystemAccessDirectoryHandle> result; directory_receivers_.Add( @@ -1115,8 +1096,7 @@ binding_context, context()->CrackURL(root, blink::StorageKey(url::Origin::Create(root))), - SharedHandleState(permission_grant, permission_grant, - /*file_system=*/{}))); + SharedHandleState(permission_grant, permission_grant))); } void FileSystemAccessManagerImpl::DidChooseEntries( @@ -1203,8 +1183,7 @@ if (options.type() == ui::SelectFileDialog::SELECT_FOLDER) { DCHECK_EQ(entries.size(), 1u); SharedHandleState shared_handle_state = GetSharedHandleStateForPath( - entries.front().path, binding_context.origin, {}, - HandleType::kDirectory, + entries.front().path, binding_context.origin, HandleType::kDirectory, FileSystemAccessPermissionContext::UserAction::kOpen); // Ask for both read and write permission at the same time. The permission // context should coalesce these into one prompt. @@ -1226,17 +1205,16 @@ if (options.type() == ui::SelectFileDialog::SELECT_SAVEAS_FILE) { DCHECK_EQ(entries.size(), 1u); // Create file if it doesn't yet exist, and truncate file if it does exist. - FileSystemURLAndFSHandle url = CreateFileSystemURLFromPath( - binding_context.origin, entries.front().type, entries.front().path); + auto fs_url = + CreateFileSystemURLFromPath(entries.front().type, entries.front().path); - auto fs_url = url.url; operation_runner().PostTaskWithThisObject( FROM_HERE, base::BindOnce( &CreateAndTruncateFile, fs_url, base::BindOnce( &FileSystemAccessManagerImpl::DidCreateAndTruncateSaveFile, - this, binding_context, entries.front(), std::move(url), + this, binding_context, entries.front(), fs_url, std::move(callback)), base::SequencedTaskRunnerHandle::Get())); return; @@ -1255,7 +1233,7 @@ void FileSystemAccessManagerImpl::DidCreateAndTruncateSaveFile( const BindingContext& binding_context, const FileSystemChooser::ResultEntry& entry, - FileSystemURLAndFSHandle url, + const storage::FileSystemURL& url, ChooseEntriesCallback callback, bool success) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); @@ -1273,13 +1251,12 @@ } SharedHandleState shared_handle_state = GetSharedHandleStateForPath( - entry.path, binding_context.origin, std::move(url.file_system), - HandleType::kFile, UserAction::kSave); + entry.path, binding_context.origin, HandleType::kFile, UserAction::kSave); result_entries.push_back(blink::mojom::FileSystemAccessEntry::New( blink::mojom::FileSystemAccessHandle::NewFile( - CreateFileHandle(binding_context, url.url, shared_handle_state)), - url.base_name)); + CreateFileHandle(binding_context, url, shared_handle_state)), + entry.path.BaseName().AsUTF8Unsafe())); std::move(callback).Run(file_system_access_error::Ok(), std::move(result_entries)); @@ -1305,16 +1282,15 @@ return; } - FileSystemURLAndFSHandle url = CreateFileSystemURLFromPath( - binding_context.origin, entry.type, entry.path); + storage::FileSystemURL url = + CreateFileSystemURLFromPath(entry.type, entry.path); result_entries.push_back(blink::mojom::FileSystemAccessEntry::New( blink::mojom::FileSystemAccessHandle::NewDirectory(CreateDirectoryHandle( - binding_context, url.url, + binding_context, url, SharedHandleState(shared_handle_state.read_grant, - shared_handle_state.write_grant, - std::move(url.file_system)))), - url.base_name)); + shared_handle_state.write_grant))), + entry.path.BaseName().AsUTF8Unsafe())); std::move(callback).Run(file_system_access_error::Ok(), std::move(result_entries)); } @@ -1379,51 +1355,21 @@ } } -FileSystemAccessManagerImpl::FileSystemURLAndFSHandle -FileSystemAccessManagerImpl::CreateFileSystemURLFromPath( - const url::Origin& origin, +storage::FileSystemURL FileSystemAccessManagerImpl::CreateFileSystemURLFromPath( PathType path_type, const base::FilePath& path) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - - switch (path_type) { - case PathType::kLocal: { - auto* isolated_context = storage::IsolatedContext::GetInstance(); - DCHECK(isolated_context); - - FileSystemURLAndFSHandle result; - result.file_system = isolated_context->RegisterFileSystemForPath( - storage::kFileSystemTypeLocal, std::string(), path, - &result.base_name); - - base::FilePath root_path = - isolated_context->CreateVirtualRootPath(result.file_system.id()); - // FromUTF8Unsafe in the following line is safe since result.base_name was - // the result of calling AsUTF8Unsafe on a base::FilePath in the first - // place. - base::FilePath isolated_path = - root_path.Append(base::FilePath::FromUTF8Unsafe(result.base_name)); - - result.url = context()->CreateCrackedFileSystemURL( - blink::StorageKey(origin), storage::kFileSystemTypeIsolated, - isolated_path); - return result; - } - case PathType::kExternal: { - FileSystemURLAndFSHandle result; - result.url = context()->CreateCrackedFileSystemURL( - blink::StorageKey(), storage::kFileSystemTypeExternal, path); - result.base_name = path.BaseName().AsUTF8Unsafe(); - return result; - } - } + return context()->CreateCrackedFileSystemURL( + blink::StorageKey(), + path_type == PathType::kLocal ? storage::kFileSystemTypeLocal + : storage::kFileSystemTypeExternal, + path); } FileSystemAccessManagerImpl::SharedHandleState FileSystemAccessManagerImpl::GetSharedHandleStateForPath( const base::FilePath& path, const url::Origin& origin, - storage::IsolatedContext::ScopedFSHandle file_system, HandleType handle_type, FileSystemAccessPermissionContext::UserAction user_action) { scoped_refptr<FileSystemAccessPermissionGrant> read_grant, write_grant; @@ -1453,8 +1399,7 @@ PermissionStatus::GRANTED, path); } } - return SharedHandleState(std::move(read_grant), std::move(write_grant), - file_system); + return SharedHandleState(std::move(read_grant), std::move(write_grant)); } } // namespace content
diff --git a/content/browser/file_system_access/file_system_access_manager_impl.h b/content/browser/file_system_access/file_system_access_manager_impl.h index 8bc21a1..b07a102 100644 --- a/content/browser/file_system_access/file_system_access_manager_impl.h +++ b/content/browser/file_system_access/file_system_access_manager_impl.h
@@ -74,8 +74,7 @@ struct CONTENT_EXPORT SharedHandleState { SharedHandleState( scoped_refptr<FileSystemAccessPermissionGrant> read_grant, - scoped_refptr<FileSystemAccessPermissionGrant> write_grant, - storage::IsolatedContext::ScopedFSHandle file_system); + scoped_refptr<FileSystemAccessPermissionGrant> write_grant); SharedHandleState(const SharedHandleState& other); ~SharedHandleState(); @@ -83,8 +82,6 @@ // handle. const scoped_refptr<FileSystemAccessPermissionGrant> read_grant; const scoped_refptr<FileSystemAccessPermissionGrant> write_grant; - // Can be empty, if this handle is not backed by an isolated file system. - const storage::IsolatedContext::ScopedFSHandle file_system; }; // The caller is responsible for ensuring that `permission_context` outlives @@ -262,18 +259,11 @@ SharedHandleState GetSharedHandleStateForPath( const base::FilePath& path, const url::Origin& origin, - storage::IsolatedContext::ScopedFSHandle file_system, FileSystemAccessPermissionContext::HandleType handle_type, FileSystemAccessPermissionContext::UserAction user_action); // Creates a FileSystemURL which corresponds to a FilePath and Origin. - struct FileSystemURLAndFSHandle { - storage::FileSystemURL url; - std::string base_name; - storage::IsolatedContext::ScopedFSHandle file_system; - }; - FileSystemURLAndFSHandle CreateFileSystemURLFromPath( - const url::Origin& origin, + storage::FileSystemURL CreateFileSystemURLFromPath( PathType path_type, const base::FilePath& path); @@ -317,7 +307,7 @@ FileSystemAccessPermissionContext::SensitiveDirectoryResult result); void DidCreateAndTruncateSaveFile(const BindingContext& binding_context, const FileSystemChooser::ResultEntry& entry, - FileSystemURLAndFSHandle url, + const storage::FileSystemURL& url, ChooseEntriesCallback callback, bool success); void DidChooseDirectory( @@ -371,7 +361,7 @@ void ResolveDataTransferTokenWithFileType( const BindingContext& binding_context, const base::FilePath& file_path, - FileSystemURLAndFSHandle url, + const storage::FileSystemURL& url, GetEntryFromDataTransferTokenCallback token_resolved_callback, FileSystemAccessPermissionContext::HandleType file_type);
diff --git a/content/browser/file_system_access/file_system_access_manager_impl_unittest.cc b/content/browser/file_system_access/file_system_access_manager_impl_unittest.cc index 6f28301..0238d160 100644 --- a/content/browser/file_system_access/file_system_access_manager_impl_unittest.cc +++ b/content/browser/file_system_access/file_system_access_manager_impl_unittest.cc
@@ -506,7 +506,7 @@ mojo::Remote<blink::mojom::FileSystemAccessFileWriter> writer_remote( manager_->CreateFileWriter(kBindingContext, test_file_url, test_swap_url, FileSystemAccessManagerImpl::SharedHandleState( - allow_grant_, allow_grant_, {}), + allow_grant_, allow_grant_), /*auto_close=*/false)); ASSERT_TRUE(writer_remote.is_bound()); @@ -539,7 +539,7 @@ mojo::Remote<blink::mojom::FileSystemAccessFileWriter> writer_remote( manager_->CreateFileWriter(kBindingContext, test_file_url, test_swap_url, FileSystemAccessManagerImpl::SharedHandleState( - allow_grant_, allow_grant_, {}), + allow_grant_, allow_grant_), /*auto_close=*/false)); ASSERT_TRUE(writer_remote.is_bound()); @@ -583,7 +583,7 @@ mojo::Remote<blink::mojom::FileSystemAccessFileWriter> writer_remote( manager_->CreateFileWriter(kBindingContext, test_file_url, test_swap_url, FileSystemAccessManagerImpl::SharedHandleState( - allow_grant_, allow_grant_, {}), + allow_grant_, allow_grant_), /*auto_close=*/false)); // Severs the mojo pipe. The writer should be destroyed. @@ -616,7 +616,7 @@ mojo::Remote<blink::mojom::FileSystemAccessFileWriter> writer_remote( manager_->CreateFileWriter(kBindingContext, test_file_url, test_swap_url, FileSystemAccessManagerImpl::SharedHandleState( - allow_grant_, allow_grant_, {}), + allow_grant_, allow_grant_), /*auto_close=*/true)); ASSERT_TRUE(writer_remote.is_bound()); @@ -648,8 +648,7 @@ kTestStorageKey, storage::kFileSystemTypeTemporary, base::FilePath::FromUTF8Unsafe("test/foo/bar")); FileSystemAccessFileHandleImpl file(manager_.get(), kBindingContext, - test_file_url, - {ask_grant_, ask_grant_, {}}); + test_file_url, {ask_grant_, ask_grant_}); mojo::PendingRemote<blink::mojom::FileSystemAccessTransferToken> token_remote; manager_->CreateTransferToken(file, token_remote.InitWithNewPipeAndPassReceiver()); @@ -672,9 +671,8 @@ auto test_file_url = file_system_context_->CreateCrackedFileSystemURL( kTestStorageKey, storage::kFileSystemTypeTemporary, base::FilePath::FromUTF8Unsafe("hello/world/")); - FileSystemAccessDirectoryHandleImpl directory(manager_.get(), kBindingContext, - test_file_url, - {ask_grant_, ask_grant_, {}}); + FileSystemAccessDirectoryHandleImpl directory( + manager_.get(), kBindingContext, test_file_url, {ask_grant_, ask_grant_}); mojo::PendingRemote<blink::mojom::FileSystemAccessTransferToken> token_remote; manager_->CreateTransferToken(directory, token_remote.InitWithNewPipeAndPassReceiver()); @@ -740,10 +738,10 @@ SerializeAndDeserializeToken(std::move(token_remote)); ASSERT_TRUE(token); const storage::FileSystemURL& url = token->url(); - EXPECT_EQ(kTestStorageKey.origin(), url.origin()); + EXPECT_TRUE(url.origin().opaque()); EXPECT_EQ(kTestPath, url.path()); EXPECT_EQ(storage::kFileSystemTypeLocal, url.type()); - EXPECT_EQ(storage::kFileSystemTypeIsolated, url.mount_type()); + EXPECT_EQ(storage::kFileSystemTypeLocal, url.mount_type()); EXPECT_EQ(HandleType::kFile, token->type()); EXPECT_EQ(ask_grant_, token->GetReadGrant()); EXPECT_EQ(ask_grant2_, token->GetWriteGrant()); @@ -776,10 +774,10 @@ SerializeAndDeserializeToken(std::move(token_remote)); ASSERT_TRUE(token); const storage::FileSystemURL& url = token->url(); - EXPECT_EQ(kTestStorageKey.origin(), url.origin()); + EXPECT_TRUE(url.origin().opaque()); EXPECT_EQ(kTestPath, url.path()); EXPECT_EQ(storage::kFileSystemTypeLocal, url.type()); - EXPECT_EQ(storage::kFileSystemTypeIsolated, url.mount_type()); + EXPECT_EQ(storage::kFileSystemTypeLocal, url.mount_type()); EXPECT_EQ(HandleType::kDirectory, token->type()); EXPECT_EQ(ask_grant_, token->GetReadGrant()); EXPECT_EQ(ask_grant2_, token->GetWriteGrant()); @@ -831,11 +829,11 @@ SerializeAndDeserializeToken(std::move(token_remote)); ASSERT_TRUE(token); const storage::FileSystemURL& url = token->url(); - EXPECT_EQ(kTestStorageKey.origin(), url.origin()); + EXPECT_TRUE(url.origin().opaque()); EXPECT_EQ(kDirectoryPath.Append(base::FilePath::FromUTF8Unsafe(kTestName)), url.path()); EXPECT_EQ(storage::kFileSystemTypeLocal, url.type()); - EXPECT_EQ(storage::kFileSystemTypeIsolated, url.mount_type()); + EXPECT_EQ(storage::kFileSystemTypeLocal, url.mount_type()); EXPECT_EQ(HandleType::kFile, token->type()); EXPECT_EQ(ask_grant_, token->GetReadGrant()); EXPECT_EQ(ask_grant2_, token->GetWriteGrant()); @@ -887,10 +885,10 @@ SerializeAndDeserializeToken(std::move(token_remote)); ASSERT_TRUE(token); const storage::FileSystemURL& url = token->url(); - EXPECT_EQ(kTestStorageKey.origin(), url.origin()); + EXPECT_TRUE(url.origin().opaque()); EXPECT_EQ(kDirectoryPath.AppendASCII(kTestName), url.path()); EXPECT_EQ(storage::kFileSystemTypeLocal, url.type()); - EXPECT_EQ(storage::kFileSystemTypeIsolated, url.mount_type()); + EXPECT_EQ(storage::kFileSystemTypeLocal, url.mount_type()); EXPECT_EQ(HandleType::kDirectory, token->type()); EXPECT_EQ(ask_grant_, token->GetReadGrant()); EXPECT_EQ(ask_grant2_, token->GetWriteGrant());
diff --git a/content/browser/isolated_origin_browsertest.cc b/content/browser/isolated_origin_browsertest.cc index 55f7c47a..c2b8564 100644 --- a/content/browser/isolated_origin_browsertest.cc +++ b/content/browser/isolated_origin_browsertest.cc
@@ -613,7 +613,6 @@ new_prerender_site_instance_impl->GetIsolationContext(), url::Origin::Create(non_isolated_origin_url), true /* origin_requests_isolation */)); - LOG(INFO) << "wjm: Checking DRDP()"; EXPECT_FALSE( new_prerender_site_instance_impl->GetSiteInfo().is_origin_keyed()); EXPECT_TRUE(new_prerender_site_instance_impl->GetSiteURL() ==
diff --git a/content/browser/media/webaudio/OWNERS b/content/browser/media/webaudio/OWNERS index a837fc9b..5248064 100644 --- a/content/browser/media/webaudio/OWNERS +++ b/content/browser/media/webaudio/OWNERS
@@ -1,2 +1 @@ hongchan@chromium.org -rtoy@chromium.org
diff --git a/content/browser/prerender/prerender_browsertest.cc b/content/browser/prerender/prerender_browsertest.cc index ab135633..a183d27 100644 --- a/content/browser/prerender/prerender_browsertest.cc +++ b/content/browser/prerender/prerender_browsertest.cc
@@ -77,6 +77,7 @@ #include "testing/gmock/include/gmock/gmock.h" #include "third_party/abseil-cpp/absl/types/optional.h" #include "third_party/blink/public/common/features.h" +#include "third_party/blink/public/common/loader/loader_constants.h" #include "third_party/blink/public/mojom/browser_interface_broker.mojom.h" #include "ui/shell_dialogs/select_file_dialog.h" #include "ui/shell_dialogs/select_file_dialog_factory.h" @@ -3388,6 +3389,63 @@ EXPECT_EQ(web_contents()->GetURL(), kPrerenderingUrl); } +// Test that WebContentsObserver::LoadProgressChanged is not invoked when the +// page gets loaded while prerendering but is invoked on prerender activation. +// Check that LoadProgressChanged is only called once for +// blink::kFinalLoadProgress if the prerender page completes loading on +// activation. +IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, + LoadProgressChangedInvokedOnActivation) { + const GURL kInitialUrl = GetUrl("/empty.html"); + const GURL kPrerenderingUrl = GetUrl("/simple_page.html"); + + web_contents_impl()->set_minimum_delay_between_loading_updates_for_testing( + base::TimeDelta::FromMilliseconds(0)); + + // Navigate to an initial page. + ASSERT_TRUE(NavigateToURL(shell(), kInitialUrl)); + + // Initialize a MockWebContentsObserver and ensure that LoadProgressChanged is + // not invoked while prerendering. + testing::NiceMock<MockWebContentsObserver> observer(shell()->web_contents()); + testing::InSequence s; + EXPECT_CALL(observer, LoadProgressChanged(testing::_)).Times(0); + + // Start a prerender. + int prerender_host_id = AddPrerender(kPrerenderingUrl); + ASSERT_NE(prerender_host_id, RenderFrameHost::kNoFrameTreeNodeId); + RenderFrameHostImpl* prerender_frame_host = + GetPrerenderedMainFrameHost(prerender_host_id); + + // Verify and clear all expectations on the mock observer before setting new + // ones. + testing::Mock::VerifyAndClearExpectations(&observer); + + // Activate the prerendered page. This should result in invoking + // LoadProgressChanged for the following cases: + { + // 1) During DidStartLoading LoadProgressChanged is invoked with + // kInitialLoadProgress value. + EXPECT_CALL(observer, LoadProgressChanged(blink::kInitialLoadProgress)); + + // Verify that DidFinishNavigation is invoked before final load progress + // notification. + EXPECT_CALL(observer, DidFinishNavigation(testing::_)); + + // 2) During DidStopLoading LoadProgressChanged is invoked with + // kFinalLoadProgress. + EXPECT_CALL(observer, LoadProgressChanged(blink::kFinalLoadProgress)) + .Times(1); + } + + // Set the prerender load progress value to blink::kFinalLoadProgress, this + // should result in invoking LoadProgressChanged(blink::kFinalLoadProgress) + // only once on activation during call to DidStopLoading. + prerender_frame_host->GetPage().set_load_progress(blink::kFinalLoadProgress); + NavigatePrimaryPage(kPrerenderingUrl); + EXPECT_EQ(web_contents()->GetURL(), kPrerenderingUrl); +} + // Test the dispatch order of various load events on prerender activation. IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, OrderingOfDifferentLoadEvents) { const GURL kInitialUrl = GetUrl("/empty.html");
diff --git a/content/browser/prerender/prerender_host_unittest.cc b/content/browser/prerender/prerender_host_unittest.cc index 1c0943ba..fd33733 100644 --- a/content/browser/prerender/prerender_host_unittest.cc +++ b/content/browser/prerender/prerender_host_unittest.cc
@@ -7,6 +7,7 @@ #include "base/test/scoped_feature_list.h" #include "content/browser/prerender/prerender_host_registry.h" #include "content/browser/site_instance_impl.h" +#include "content/public/test/mock_web_contents_observer.h" #include "content/public/test/navigation_simulator.h" #include "content/public/test/test_browser_context.h" #include "content/test/mock_commit_deferring_condition.h" @@ -14,11 +15,16 @@ #include "content/test/test_render_frame_host.h" #include "content/test/test_render_view_host.h" #include "content/test/test_web_contents.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" #include "third_party/blink/public/common/features.h" +#include "third_party/blink/public/common/loader/loader_constants.h" namespace content { namespace { +using ::testing::_; + // TODO(nhiroki): Merge this into TestNavigationObserver for code // simplification. class ActivationObserver : public PrerenderHost::Observer { @@ -306,5 +312,68 @@ ->page_state()); } +// Test that WebContentsObserver::LoadProgressChanged is not invoked when the +// page gets loaded while prerendering but is invoked on prerender activation. +// Check that in case the load is incomplete with load progress +// `kPartialLoadProgress`, we would see +// LoadProgressChanged(kPartialLoadProgress) called on activation. +TEST_F(PrerenderHostTest, LoadProgressChangedInvokedOnActivation) { + const GURL kOriginUrl("https://example.com/"); + std::unique_ptr<TestWebContents> web_contents = CreateWebContents(kOriginUrl); + WebContentsImpl* web_contents_impl = + static_cast<WebContentsImpl*>(web_contents.get()); + + web_contents_impl->set_minimum_delay_between_loading_updates_for_testing( + base::TimeDelta::FromMilliseconds(0)); + + // Initialize a MockWebContentsObserver and ensure that LoadProgressChanged is + // not invoked while prerendering. + testing::NiceMock<MockWebContentsObserver> observer(web_contents_impl); + testing::InSequence s; + EXPECT_CALL(observer, LoadProgressChanged(testing::_)).Times(0); + + // Start prerendering a page and commit prerender navigation. + const GURL kPrerenderingUrl("https://example.com/next"); + constexpr double kPartialLoadProgress = 0.7; + RenderFrameHostImpl* prerender_rfh = + web_contents->AddPrerenderAndCommitNavigation(kPrerenderingUrl); + FrameTreeNode* ftn = prerender_rfh->frame_tree_node(); + EXPECT_FALSE(ftn->HasNavigation()); + + // Verify and clear all expectations on the mock observer before setting new + // ones. + testing::Mock::VerifyAndClearExpectations(&observer); + + // Activate the prerendered page. This should result in invoking + // LoadProgressChanged for the following cases: + { + // 1) During DidStartLoading LoadProgressChanged is invoked with + // kInitialLoadProgress value. + EXPECT_CALL(observer, LoadProgressChanged(blink::kInitialLoadProgress)); + + // Verify that DidFinishNavigation is invoked before final load progress + // notification. + EXPECT_CALL(observer, DidFinishNavigation(testing::_)); + + // 2) After DidCommitNavigationInternal on activation with + // LoadProgressChanged is invoked with kPartialLoadProgress value. + EXPECT_CALL(observer, LoadProgressChanged(kPartialLoadProgress)); + + // 3) During DidStopLoading LoadProgressChanged is invoked with + // kFinalLoadProgress. + EXPECT_CALL(observer, LoadProgressChanged(blink::kFinalLoadProgress)); + } + + // Set load_progress value to kPartialLoadProgress in prerendering state, + // this should result in invoking LoadProgressChanged(kPartialLoadProgress) on + // activation. + prerender_rfh->GetPage().set_load_progress(kPartialLoadProgress); + + // Perform a navigation in the primary frame tree which activates the + // prerendered page. + ActivatePrerenderedPage(kPrerenderingUrl, *web_contents); + ExpectFinalStatus(PrerenderHost::FinalStatus::kActivated); +} + } // namespace } // namespace content
diff --git a/content/browser/renderer_host/frame_tree.cc b/content/browser/renderer_host/frame_tree.cc index 7f96b53f..3cf1577 100644 --- a/content/browser/renderer_host/frame_tree.cc +++ b/content/browser/renderer_host/frame_tree.cc
@@ -23,6 +23,7 @@ #include "content/browser/renderer_host/navigation_request.h" #include "content/browser/renderer_host/navigator.h" #include "content/browser/renderer_host/navigator_delegate.h" +#include "content/browser/renderer_host/page_impl.h" #include "content/browser/renderer_host/render_frame_host_delegate.h" #include "content/browser/renderer_host/render_frame_host_factory.h" #include "content/browser/renderer_host/render_frame_host_impl.h" @@ -33,6 +34,7 @@ #include "content/common/content_switches_internal.h" #include "third_party/blink/public/common/features.h" #include "third_party/blink/public/common/frame/frame_policy.h" +#include "third_party/blink/public/common/loader/loader_constants.h" #include "third_party/blink/public/mojom/frame/frame_owner_properties.mojom.h" namespace content { @@ -561,8 +563,11 @@ focused_frame_tree_node_id_ = FrameTreeNode::kFrameTreeNodeInvalidId; } -void FrameTree::ResetLoadProgress() { - load_progress_ = 0.0; +double FrameTree::GetLoadProgress() { + if (root_->HasNavigation()) + return blink::kInitialLoadProgress; + + return root_->current_frame_host()->GetPage().load_progress(); } bool FrameTree::IsLoading() const { @@ -672,12 +677,6 @@ void FrameTree::DidStartLoadingNode(FrameTreeNode& node, bool to_different_document, bool was_previously_loading) { - // Any main frame load to a new document should reset the load progress since - // it will replace the current page and any frames. The WebContents will - // be notified when DidChangeLoadProgress is called. - if (to_different_document && node.IsMainFrame()) - ResetLoadProgress(); - if (was_previously_loading) return; @@ -693,18 +692,6 @@ delegate_->DidStopLoading(); } -void FrameTree::DidChangeLoadProgressForNode(FrameTreeNode& node, - double load_progress) { - if (!node.IsMainFrame()) - return; - if (load_progress <= load_progress_) - return; - load_progress_ = load_progress; - - // Notify the WebContents. - delegate_->DidChangeLoadProgress(); -} - void FrameTree::DidCancelLoading() { OPTIONAL_TRACE_EVENT0("content", "FrameTree::DidCancelLoading"); navigator_.controller().DiscardNonCommittedEntries();
diff --git a/content/browser/renderer_host/frame_tree.h b/content/browser/renderer_host/frame_tree.h index 556d2df46..c249c92 100644 --- a/content/browser/renderer_host/frame_tree.h +++ b/content/browser/renderer_host/frame_tree.h
@@ -355,14 +355,11 @@ bool to_different_document, bool was_previously_loading); void DidStopLoadingNode(FrameTreeNode& node); - void DidChangeLoadProgressForNode(FrameTreeNode& node, double load_progress); void DidCancelLoading(); - // Returns this FrameTree's total load progress. - double load_progress() const { return load_progress_; } - - // Resets the load progress on all nodes in this FrameTree. - void ResetLoadProgress(); + // Returns this FrameTree's total load progress. If the `root_` FrameTreeNode + // is navigating returns `blink::kInitialLoadProgress`. + double GetLoadProgress(); // Returns true if at least one of the nodes in this FrameTree is loading. bool IsLoading() const;
diff --git a/content/browser/renderer_host/frame_tree_node.cc b/content/browser/renderer_host/frame_tree_node.cc index 7596d07..99e01371 100644 --- a/content/browser/renderer_host/frame_tree_node.cc +++ b/content/browser/renderer_host/frame_tree_node.cc
@@ -28,6 +28,7 @@ #include "services/network/public/cpp/web_sandbox_flags.h" #include "services/network/public/mojom/web_sandbox_flags.mojom-shared.h" #include "third_party/blink/public/common/features.h" +#include "third_party/blink/public/common/loader/loader_constants.h" #include "third_party/blink/public/mojom/frame/user_activation_update_types.mojom.h" #include "third_party/blink/public/mojom/security_context/insecure_request_policy.mojom.h" @@ -42,12 +43,6 @@ base::LazyInstance<FrameTreeNodeIdMap>::DestructorAtExit g_frame_tree_node_id_map = LAZY_INSTANCE_INITIALIZER; -// These values indicate the loading progress status. The minimum progress -// value matches what Blink's ProgressTracker has traditionally used for a -// minimum progress value. -const double kLoadingProgressMinimum = 0.1; -const double kLoadingProgressDone = 1.0; - } // namespace // This observer watches the opener of its owner FrameTreeNode and clears the @@ -568,7 +563,7 @@ // Set initial load progress and update overall progress. This will notify // the WebContents of the load progress change. - DidChangeLoadProgress(kLoadingProgressMinimum); + DidChangeLoadProgress(blink::kInitialLoadProgress); // Notify the RenderFrameHostManager of the event. render_manager()->OnDidStartLoading(); @@ -579,7 +574,7 @@ frame_tree_node_id()); // Set final load progress and update overall progress. This will notify // the WebContents of the load progress change. - DidChangeLoadProgress(kLoadingProgressDone); + DidChangeLoadProgress(blink::kFinalLoadProgress); // Notify the RenderFrameHostManager of the event. render_manager()->OnDidStopLoading(); @@ -588,9 +583,9 @@ } void FrameTreeNode::DidChangeLoadProgress(double load_progress) { - DCHECK_GE(load_progress, kLoadingProgressMinimum); - DCHECK_LE(load_progress, kLoadingProgressDone); - frame_tree_->DidChangeLoadProgressForNode(*this, load_progress); + DCHECK_GE(load_progress, blink::kInitialLoadProgress); + DCHECK_LE(load_progress, blink::kFinalLoadProgress); + current_frame_host()->DidChangeLoadProgress(load_progress); } bool FrameTreeNode::StopLoading() {
diff --git a/content/browser/renderer_host/media/ref_counted_video_source_provider.cc b/content/browser/renderer_host/media/ref_counted_video_source_provider.cc index 10831295..8c05cae 100644 --- a/content/browser/renderer_host/media/ref_counted_video_source_provider.cc +++ b/content/browser/renderer_host/media/ref_counted_video_source_provider.cc
@@ -5,6 +5,7 @@ #include "content/browser/renderer_host/media/ref_counted_video_source_provider.h" #include "content/public/browser/video_capture_service.h" +#include "services/video_capture/public/mojom/video_capture_service.mojom.h" namespace content {
diff --git a/content/browser/renderer_host/page_impl.cc b/content/browser/renderer_host/page_impl.cc index bfedc35..18fbbeb 100644 --- a/content/browser/renderer_host/page_impl.cc +++ b/content/browser/renderer_host/page_impl.cc
@@ -13,6 +13,7 @@ #include "content/browser/renderer_host/render_view_host_delegate.h" #include "content/browser/renderer_host/render_view_host_impl.h" #include "content/public/browser/render_view_host.h" +#include "third_party/blink/public/common/loader/loader_constants.h" #include "third_party/perfetto/include/perfetto/tracing/traced_value.h" namespace content { @@ -140,6 +141,13 @@ void PageImpl::MaybeDispatchLoadEventsOnPrerenderActivation() { DCHECK(IsPrimary()); + // Dispatch LoadProgressChanged notification on activation with the + // prerender last load progress value if the value is not equal to + // blink::kFinalLoadProgress, whose notification is dispatched during call + // to DidStopLoading. + if (load_progress() != blink::kFinalLoadProgress) + main_document_.DidChangeLoadProgress(load_progress()); + main_document_.ForEachRenderFrameHost( base::BindRepeating([](RenderFrameHostImpl* rfh) { rfh->MaybeDispatchDOMContentLoadedOnPrerenderActivation();
diff --git a/content/browser/renderer_host/page_impl.h b/content/browser/renderer_host/page_impl.h index 5a221ea6..444194b 100644 --- a/content/browser/renderer_host/page_impl.h +++ b/content/browser/renderer_host/page_impl.h
@@ -114,6 +114,11 @@ // activation. void MaybeDispatchLoadEventsOnPrerenderActivation(); + void set_load_progress(double load_progress) { + load_progress_ = load_progress; + } + double load_progress() const { return load_progress_; } + private: void DidActivateAllRenderViewsForPrerendering(); @@ -126,6 +131,10 @@ // run for the main document. bool is_on_load_completed_in_main_document_ = false; + // Overall load progress of this Page. Initial load progress value is 0.0 + // before the load has begun. + double load_progress_ = 0.0; + // Web application manifest URL for this page. // See https://w3c.github.io/manifest/#web-application-manifest. //
diff --git a/content/browser/renderer_host/render_frame_host_delegate.h b/content/browser/renderer_host/render_frame_host_delegate.h index 9b5ba7c5..9b6ae71 100644 --- a/content/browser/renderer_host/render_frame_host_delegate.h +++ b/content/browser/renderer_host/render_frame_host_delegate.h
@@ -134,12 +134,6 @@ virtual bool OnMessageReceived(RenderFrameHostImpl* render_frame_host, const IPC::Message& message); - // Allows the delegate to filter incoming associated interface requests. - virtual void OnAssociatedInterfaceRequest( - RenderFrameHostImpl* render_frame_host, - const std::string& interface_name, - mojo::ScopedInterfaceEndpointHandle handle) {} - // Allows the delegate to filter incoming interface requests. virtual void OnInterfaceRequest( RenderFrameHostImpl* render_frame_host,
diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc index d38584b..714fd588 100644 --- a/content/browser/renderer_host/render_frame_host_impl.cc +++ b/content/browser/renderer_host/render_frame_host_impl.cc
@@ -2537,9 +2537,6 @@ this, interface_name, &handle)) { return; } - - delegate_->OnAssociatedInterfaceRequest(this, interface_name, - std::move(handle)); } void RenderFrameHostImpl::AccessibilityPerformAction( @@ -5353,7 +5350,15 @@ } void RenderFrameHostImpl::DidChangeLoadProgress(double load_progress) { - frame_tree_node_->DidChangeLoadProgress(load_progress); + if (!is_main_frame()) + return; + + if (load_progress < GetPage().load_progress()) + return; + + GetPage().set_load_progress(load_progress); + + frame_tree_node_->frame_tree()->delegate()->DidChangeLoadProgress(); } void RenderFrameHostImpl::DidFinishLoad(const GURL& validated_url) {
diff --git a/content/browser/service_sandbox_type.h b/content/browser/service_sandbox_type.h index 1e37242..4c60769 100644 --- a/content/browser/service_sandbox_type.h +++ b/content/browser/service_sandbox_type.h
@@ -68,18 +68,6 @@ return sandbox::policy::SandboxType::kUtility; } -// video_capture::mojom::VideoCaptureService -namespace video_capture { -namespace mojom { -class VideoCaptureService; -} -} // namespace video_capture -template <> -inline sandbox::policy::SandboxType -content::GetServiceSandboxType<video_capture::mojom::VideoCaptureService>() { - return sandbox::policy::SandboxType::kVideoCapture; -} - #if BUILDFLAG(GOOGLE_CHROME_BRANDING) && BUILDFLAG(IS_CHROMEOS_ASH) // shape_detection::mojom::ShapeDetectionService namespace shape_detection {
diff --git a/content/browser/speech/speech_recognition_manager_impl.cc b/content/browser/speech/speech_recognition_manager_impl.cc index 7b08be7..792af46c 100644 --- a/content/browser/speech/speech_recognition_manager_impl.cc +++ b/content/browser/speech/speech_recognition_manager_impl.cc
@@ -26,6 +26,7 @@ #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_document_host_user_data.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/resource_context.h" #include "content/public/browser/speech_recognition_event_listener.h" @@ -57,153 +58,76 @@ int SpeechRecognitionManagerImpl::next_requester_id_ = 0; -class SpeechRecognitionManagerImpl::FrameDeletionObserver { +class FrameSessionTracker + : public content::RenderDocumentHostUserData<FrameSessionTracker> { public: using FrameDeletedCallback = base::RepeatingCallback<void(int /* session_id */)>; - explicit FrameDeletionObserver(FrameDeletedCallback frame_deleted_callback); - void CreateObserverForSession(int render_process_id, - int render_frame_id, - int session_id); + ~FrameSessionTracker() override { + DCHECK_CURRENTLY_ON(BrowserThread::UI); - void RemoveObserverForSession(int render_process_id, - int render_frame_id, - int session_id); - - private: - class ContentsObserver; - friend class ContentsObserver; - - friend struct BrowserThread::DeleteOnThread<BrowserThread::UI>; - friend class base::DeleteHelper<FrameDeletionObserver>; - - ~FrameDeletionObserver(); - - FrameDeletedCallback frame_deleted_callback_; - std::map<WebContents*, std::unique_ptr<ContentsObserver>> contents_observers_; -}; - -class SpeechRecognitionManagerImpl::FrameDeletionObserver::ContentsObserver - : public WebContentsObserver { - public: - ContentsObserver(WebContents* web_contents, - FrameDeletionObserver* parent_observer) - : WebContentsObserver(web_contents), parent_observer_(parent_observer) {} - - void AddObservedFrame(RenderFrameHost* render_frame_host, int session_id); - void RemoveObservedFrame(RenderFrameHost* render_frame_host, int session_id); - - void RenderFrameDeleted(RenderFrameHost* render_frame_host) override; - - private: - FrameDeletionObserver* parent_observer_; - - // A multimap from the frame to the session_ids started by that frame. - // Although a rare case, theoretically a frame can start multiple sessions. - std::multimap<RenderFrameHost*, int> observed_frames_; -}; - -SpeechRecognitionManagerImpl::FrameDeletionObserver::FrameDeletionObserver( - FrameDeletedCallback frame_deleted_callback) - : frame_deleted_callback_(std::move(frame_deleted_callback)) {} - -void SpeechRecognitionManagerImpl::FrameDeletionObserver:: - CreateObserverForSession(int render_process_id, - int render_frame_id, - int session_id) { - DCHECK_CURRENTLY_ON(BrowserThread::UI); - - RenderFrameHost* render_frame_host = - RenderFrameHost::FromID(render_process_id, render_frame_id); - if (!render_frame_host) - return; - - WebContents* web_contents = - WebContents::FromRenderFrameHost(render_frame_host); - if (!web_contents) - return; - - auto& observer = contents_observers_[web_contents]; - if (!observer) - observer = std::make_unique<ContentsObserver>(web_contents, this); - - observer->AddObservedFrame(render_frame_host, session_id); -} - -void SpeechRecognitionManagerImpl::FrameDeletionObserver:: - RemoveObserverForSession(int render_process_id, - int render_frame_id, - int session_id) { - DCHECK_CURRENTLY_ON(BrowserThread::UI); - - RenderFrameHost* render_frame_host = - RenderFrameHost::FromID(render_process_id, render_frame_id); - if (!render_frame_host) - return; - - WebContents* web_contents = - WebContents::FromRenderFrameHost(render_frame_host); - if (!web_contents) - return; - - auto it = contents_observers_.find(web_contents); - if (it == contents_observers_.end()) - return; - - it->second->RemoveObservedFrame(render_frame_host, session_id); -} - -SpeechRecognitionManagerImpl::FrameDeletionObserver::~FrameDeletionObserver() { - DCHECK_CURRENTLY_ON(BrowserThread::UI); - - DCHECK_EQ(0u, contents_observers_.size()); -} - -void SpeechRecognitionManagerImpl::FrameDeletionObserver::ContentsObserver:: - AddObservedFrame(RenderFrameHost* render_frame_host, int session_id) { - DCHECK_CURRENTLY_ON(BrowserThread::UI); - - observed_frames_.emplace(render_frame_host, session_id); -} - -void SpeechRecognitionManagerImpl::FrameDeletionObserver::ContentsObserver:: - RemoveObservedFrame(RenderFrameHost* render_frame_host, int session_id) { - DCHECK_CURRENTLY_ON(BrowserThread::UI); - - auto iters = observed_frames_.equal_range(render_frame_host); - auto it = std::find_if(iters.first, iters.second, - [render_frame_host, session_id]( - std::pair<RenderFrameHost* const, int>& map_pair) { - return map_pair.first == render_frame_host && - map_pair.second == session_id; - }); - - if (it == iters.second) - return; - - observed_frames_.erase(it); - if (!observed_frames_.size()) - parent_observer_->contents_observers_.erase(web_contents()); - - // |this| may be deleted. -} - -void SpeechRecognitionManagerImpl::FrameDeletionObserver::ContentsObserver:: - RenderFrameDeleted(RenderFrameHost* render_frame_host) { - auto iters = observed_frames_.equal_range(render_frame_host); - for (auto it = iters.first; it != iters.second; ++it) { - GetIOThreadTaskRunner({})->PostTask( - FROM_HERE, - base::BindOnce(parent_observer_->frame_deleted_callback_, it->second)); + for (auto session : sessions_) { + GetIOThreadTaskRunner({})->PostTask( + FROM_HERE, base::BindOnce(frame_deleted_callback_, session)); + } } - observed_frames_.erase(iters.first, iters.second); - if (!observed_frames_.size()) - parent_observer_->contents_observers_.erase(web_contents()); + static void CreateObserverForSession(int render_process_id, + int render_frame_id, + int session_id, + FrameDeletedCallback callback) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); - // |this| is likely deleted. -} + RenderFrameHost* render_frame_host = + RenderFrameHost::FromID(render_process_id, render_frame_id); + if (!render_frame_host) + return; + + FrameSessionTracker* tracker = + GetOrCreateForCurrentDocument(render_frame_host); + + // This will clobber any previously set callback but it will always + // be the same binding. + tracker->SetCallback(std::move(callback)); + tracker->AddSession(session_id); + } + + static void RemoveObserverForSession(int render_process_id, + int render_frame_id, + int session_id) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + + RenderFrameHost* render_frame_host = + RenderFrameHost::FromID(render_process_id, render_frame_id); + if (!render_frame_host) + return; + + FrameSessionTracker* tracker = GetForCurrentDocument(render_frame_host); + if (!tracker) + return; + tracker->RemoveSession(session_id); + } + + private: + explicit FrameSessionTracker(content::RenderFrameHost* rfh) {} + + friend class content::RenderDocumentHostUserData<FrameSessionTracker>; + RENDER_DOCUMENT_HOST_USER_DATA_KEY_DECL(); + + void AddSession(int session_id) { sessions_.insert(session_id); } + + void RemoveSession(int session_id) { sessions_.erase(session_id); } + + void SetCallback(FrameDeletedCallback callback) { + frame_deleted_callback_ = std::move(callback); + } + + FrameDeletedCallback frame_deleted_callback_; + std::set<int> sessions_; +}; + +RENDER_DOCUMENT_HOST_USER_DATA_KEY_IMPL(FrameSessionTracker) SpeechRecognitionManager* SpeechRecognitionManager::GetInstance() { if (manager_for_tests_) @@ -234,10 +158,6 @@ requester_id_(next_requester_id_++) { DCHECK(!g_speech_recognition_manager_impl); g_speech_recognition_manager_impl = this; - - frame_deletion_observer_.reset(new FrameDeletionObserver( - base::BindRepeating(&SpeechRecognitionManagerImpl::AbortSessionImpl, - weak_factory_.GetWeakPtr()))); } SpeechRecognitionManagerImpl::~SpeechRecognitionManagerImpl() { @@ -297,15 +217,14 @@ sessions_[session_id] = std::move(session); - // The deletion observer is owned by this class, so it's safe to use - // Unretained. GetUIThreadTaskRunner({})->PostTask( FROM_HERE, - base::BindOnce(&SpeechRecognitionManagerImpl::FrameDeletionObserver:: - CreateObserverForSession, - base::Unretained(frame_deletion_observer_.get()), - config.initial_context.render_process_id, - config.initial_context.render_frame_id, session_id)); + base::BindOnce( + &FrameSessionTracker::CreateObserverForSession, + config.initial_context.render_process_id, + config.initial_context.render_frame_id, session_id, + base::BindRepeating(&SpeechRecognitionManagerImpl::AbortSessionImpl, + weak_factory_.GetWeakPtr()))); return session_id; } @@ -406,13 +325,9 @@ if (iter == sessions_.end()) return; - // The deletion observer is owned by this class, so it's safe to use - // Unretained. GetUIThreadTaskRunner({})->PostTask( FROM_HERE, - base::BindOnce(&SpeechRecognitionManagerImpl::FrameDeletionObserver:: - RemoveObserverForSession, - base::Unretained(frame_deletion_observer_.get()), + base::BindOnce(&FrameSessionTracker::RemoveObserverForSession, iter->second->config.initial_context.render_process_id, iter->second->config.initial_context.render_frame_id, session_id)); @@ -447,13 +362,9 @@ if (iter == sessions_.end()) return; - // The deletion observer is owned by this class, so it's safe to use - // Unretained. GetUIThreadTaskRunner({})->PostTask( FROM_HERE, - base::BindOnce(&SpeechRecognitionManagerImpl::FrameDeletionObserver:: - RemoveObserverForSession, - base::Unretained(frame_deletion_observer_.get()), + base::BindOnce(&FrameSessionTracker::RemoveObserverForSession, iter->second->config.initial_context.render_process_id, iter->second->config.initial_context.render_frame_id, session_id));
diff --git a/content/browser/speech/speech_recognition_manager_impl.h b/content/browser/speech/speech_recognition_manager_impl.h index fd6ca5d..7077c2fd 100644 --- a/content/browser/speech/speech_recognition_manager_impl.h +++ b/content/browser/speech/speech_recognition_manager_impl.h
@@ -100,7 +100,6 @@ ~SpeechRecognitionManagerImpl() override; private: - class FrameDeletionObserver; // Data types for the internal Finite State Machine (FSM). enum FSMState { @@ -175,11 +174,6 @@ static int next_requester_id_; - // This class lives on the UI thread; all access to it must be done on that - // thread. - std::unique_ptr<FrameDeletionObserver, BrowserThread::DeleteOnUIThread> - frame_deletion_observer_; - media::AudioSystem* audio_system_; MediaStreamManager* media_stream_manager_; base::flat_map<int, std::unique_ptr<Session>> sessions_;
diff --git a/content/browser/video_capture_service.cc b/content/browser/video_capture_service.cc index 3f9dcbb..81320990c 100644 --- a/content/browser/video_capture_service.cc +++ b/content/browser/video_capture_service.cc
@@ -9,7 +9,6 @@ #include "base/threading/sequence_local_storage_slot.h" #include "base/time/time.h" #include "build/build_config.h" -#include "content/browser/service_sandbox_type.h" #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/service_process_host.h" @@ -19,6 +18,7 @@ #include "mojo/public/cpp/bindings/receiver_set.h" #include "mojo/public/cpp/bindings/remote.h" #include "mojo/public/cpp/bindings/self_owned_receiver.h" +#include "services/video_capture/public/mojom/video_capture_service.mojom.h" #include "services/video_capture/public/uma/video_capture_service_event.h" #include "services/video_capture/video_capture_service_impl.h"
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc index fe5f353..3170d101 100644 --- a/content/browser/web_contents/web_contents_impl.cc +++ b/content/browser/web_contents/web_contents_impl.cc
@@ -124,7 +124,6 @@ #include "content/public/browser/ssl_status.h" #include "content/public/browser/storage_partition.h" #include "content/public/browser/web_contents_delegate.h" -#include "content/public/browser/web_contents_receiver_set.h" #include "content/public/browser/web_ui_controller.h" #include "content/public/common/content_client.h" #include "content/public/common/content_features.h" @@ -194,8 +193,6 @@ constexpr auto kUpdateLoadStatesInterval = base::TimeDelta::FromMilliseconds(250); -const int kMinimumDelayBetweenLoadingUpdatesMS = 100; - using LifecycleState = RenderFrameHost::LifecycleState; using LifecycleStateImpl = RenderFrameHostImpl::LifecycleStateImpl; @@ -930,9 +927,6 @@ rwh_input_event_router_.reset(); - for (auto& entry : receiver_sets_) - entry.second->CloseAllReceivers(); - WebContentsImpl* outermost = GetOutermostWebContents(); if (this != outermost && ContainsOrIsFocusedWebContents()) { // If the current WebContents is in focus, unset it. @@ -1001,9 +995,6 @@ save_package_->ClearPage(); observers_.NotifyObservers(&WebContentsObserver::WebContentsDestroyed); - if (display_cutout_host_impl_) - display_cutout_host_impl_->WebContentsDestroyed(); - observers_.NotifyObservers(&WebContentsObserver::ResetWebContents); SetDelegate(nullptr); } @@ -1650,34 +1641,6 @@ } #endif // !defined(OS_ANDROID) -base::OnceClosure WebContentsImpl::AddReceiverSet( - const std::string& interface_name, - WebContentsReceiverSet* receiver_set) { - OPTIONAL_TRACE_EVENT1("content", "WebContentsImpl::AddReceiverSet", - "interface_name", interface_name); - auto result = - receiver_sets_.insert(std::make_pair(interface_name, receiver_set)); - DCHECK(result.second); - return base::BindOnce(&WebContentsImpl::RemoveReceiverSet, - weak_factory_.GetWeakPtr(), interface_name); -} - -WebContentsReceiverSet* WebContentsImpl::GetReceiverSet( - const std::string& interface_name) { - auto it = receiver_sets_.find(interface_name); - if (it == receiver_sets_.end()) - return nullptr; - return it->second; -} - -void WebContentsImpl::RemoveReceiverSetForTesting( - const std::string& interface_name) { - OPTIONAL_TRACE_EVENT1("content", - "WebContentsImpl::RemoveReceiverSetForTesting", - "interface_name", interface_name); - RemoveReceiverSet(interface_name); -} - std::vector<WebContentsImpl*> WebContentsImpl::GetWebContentsAndAllInner() { std::vector<WebContentsImpl*> all_contents(1, this); @@ -1875,7 +1838,9 @@ } double WebContentsImpl::GetLoadProgress() { - return frame_tree_.load_progress(); + // TODO(crbug.com/1199682): Make this MPArch friendly considering primary + // frame tree and its descendants. + return frame_tree_.GetLoadProgress(); } bool WebContentsImpl::IsLoadingToDifferentDocument() { @@ -6408,17 +6373,17 @@ void WebContentsImpl::SendChangeLoadProgress() { OPTIONAL_TRACE_EVENT1("content", "WebContentsImpl::SendChangeLoadProgress", - "load_progress", frame_tree_.load_progress()); + "load_progress", GetLoadProgress()); loading_last_progress_update_ = base::TimeTicks::Now(); SCOPED_UMA_HISTOGRAM_TIMER("WebContentsObserver.LoadProgressChanged"); observers_.NotifyObservers(&WebContentsObserver::LoadProgressChanged, - frame_tree_.load_progress()); + GetLoadProgress()); } void WebContentsImpl::ResetLoadProgressState() { OPTIONAL_TRACE_EVENT0("content", "WebContentsImpl::ResetLoadProgressState"); - frame_tree_.ResetLoadProgress(); + GetPrimaryPage().set_load_progress(0.0); loading_weak_factory_.InvalidateWeakPtrs(); loading_last_progress_update_ = base::TimeTicks(); } @@ -6547,18 +6512,6 @@ observers_.NotifyObservers(&WebContentsObserver::NavigationEntriesDeleted); } -void WebContentsImpl::OnAssociatedInterfaceRequest( - RenderFrameHostImpl* render_frame_host, - const std::string& interface_name, - mojo::ScopedInterfaceEndpointHandle handle) { - OPTIONAL_TRACE_EVENT2( - "content", "WebContentsImpl::OnAssociatedInterfaceRequest", - "render_frame_host", render_frame_host, "interface_name", interface_name); - auto it = receiver_sets_.find(interface_name); - if (it != receiver_sets_.end()) - it->second->OnReceiverForFrame(render_frame_host, std::move(handle)); -} - void WebContentsImpl::OnInterfaceRequest( RenderFrameHostImpl* render_frame_host, const std::string& interface_name, @@ -7274,14 +7227,13 @@ OPTIONAL_TRACE_EVENT0("content", "WebContentsImpl::DidChangeLoadProgress"); if (IsBeingDestroyed()) return; - double load_progress = frame_tree_.load_progress(); + double load_progress = GetLoadProgress(); // The delegate is notified immediately for the first and last updates. Also, // since the message loop may be pretty busy when a page is loaded, it might // not execute a posted task in a timely manner so the progress report is sent // immediately if enough time has passed. - base::TimeDelta min_delay = - base::TimeDelta::FromMilliseconds(kMinimumDelayBetweenLoadingUpdatesMS); + base::TimeDelta min_delay = minimum_delay_between_loading_updates_ms_; bool delay_elapsed = loading_last_progress_update_.is_null() || base::TimeTicks::Now() - loading_last_progress_update_ > min_delay; @@ -7302,11 +7254,15 @@ if (loading_weak_factory_.HasWeakPtrs()) return; - base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( - FROM_HERE, - base::BindOnce(&WebContentsImpl::SendChangeLoadProgress, - loading_weak_factory_.GetWeakPtr()), - min_delay); + if (min_delay == base::TimeDelta::FromMilliseconds(0)) { + SendChangeLoadProgress(); + } else { + base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( + FROM_HERE, + base::BindOnce(&WebContentsImpl::SendChangeLoadProgress, + loading_weak_factory_.GetWeakPtr()), + min_delay); + } } bool WebContentsImpl::IsHidden() { @@ -8803,14 +8759,6 @@ dialog_manager_ = dialog_manager; } -void WebContentsImpl::RemoveReceiverSet(const std::string& interface_name) { - OPTIONAL_TRACE_EVENT1("content", "WebContentsImpl::RemoveReceiverSet", - "interface_name", interface_name); - auto it = receiver_sets_.find(interface_name); - if (it != receiver_sets_.end()) - receiver_sets_.erase(it); -} - void WebContentsImpl::ShowInsecureLocalhostWarningIfNeeded(PageImpl& page) { OPTIONAL_TRACE_EVENT0( "content", "WebContentsImpl::ShowInsecureLocalhostWarningIfNeeded");
diff --git a/content/browser/web_contents/web_contents_impl.h b/content/browser/web_contents/web_contents_impl.h index 1d45d6c..01ac163d 100644 --- a/content/browser/web_contents/web_contents_impl.h +++ b/content/browser/web_contents/web_contents_impl.h
@@ -287,23 +287,6 @@ #endif // !defined(OS_ANDROID) - // Adds a new receiver set to the WebContents. Returns a closure which may be - // used to remove the receiver set at any time. The closure is safe to call - // even after WebContents destruction. - // - // |receiver_set| is not owned and must either outlive this WebContents or be - // explicitly removed before being destroyed. - base::OnceClosure AddReceiverSet(const std::string& interface_name, - WebContentsReceiverSet* receiver_set); - - // Accesses a WebContentsReceiverSet for a specific interface on this - // WebContents. Returns null of there is no registered binder for the - // interface. - WebContentsReceiverSet* GetReceiverSet(const std::string& interface_name); - - // Removes a WebContentsReceiverSet so that it can be overridden for testing. - void RemoveReceiverSetForTesting(const std::string& interface_name); - // Returns the focused WebContents. // If there are multiple inner/outer WebContents (when embedding <webview>, // <guestview>, ...) returns the single one containing the currently focused @@ -580,10 +563,6 @@ // RenderFrameHostDelegate --------------------------------------------------- bool OnMessageReceived(RenderFrameHostImpl* render_frame_host, const IPC::Message& message) override; - void OnAssociatedInterfaceRequest( - RenderFrameHostImpl* render_frame_host, - const std::string& interface_name, - mojo::ScopedInterfaceEndpointHandle handle) override; void OnInterfaceRequest( RenderFrameHostImpl* render_frame_host, const std::string& interface_name, @@ -1305,6 +1284,12 @@ show_poup_menu_callback_ = std::move(callback); } + // Sets the value in tests to ensure expected ordering and correctness. + void set_minimum_delay_between_loading_updates_for_testing( + base::TimeDelta duration) { + minimum_delay_between_loading_updates_ms_ = duration; + } + private: using FrameTreeIterationCallback = base::RepeatingCallback<void(FrameTree*)>; @@ -1851,9 +1836,6 @@ // the observer list then. WebContentsObserverList observers_; - // Associated interface receiver sets attached to this WebContents. - std::map<std::string, WebContentsReceiverSet*> receiver_sets_; - // True if this tab was opened by another tab. This is not unset if the opener // is closed. bool created_with_opener_; @@ -1902,6 +1884,10 @@ base::TimeTicks loading_last_progress_update_; + // Default value is set to 100ms between LoadProgressChanged events. + base::TimeDelta minimum_delay_between_loading_updates_ms_ = + base::TimeDelta::FromMilliseconds(100); + // Upload progress, for displaying in the status bar. // Set to zero when there is no significant upload happening. uint64_t upload_size_;
diff --git a/content/browser/web_contents_receiver_set_browsertest.cc b/content/browser/web_contents_receiver_set_browsertest.cc deleted file mode 100644 index c168b3e..0000000 --- a/content/browser/web_contents_receiver_set_browsertest.cc +++ /dev/null
@@ -1,148 +0,0 @@ -// Copyright 2017 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "base/bind.h" -#include "base/callback_helpers.h" -#include "base/macros.h" -#include "base/run_loop.h" -#include "content/browser/web_contents/web_contents_impl.h" -#include "content/public/browser/web_contents_receiver_set.h" -#include "content/public/test/back_forward_cache_util.h" -#include "content/public/test/browser_test.h" -#include "content/public/test/browser_test_utils.h" -#include "content/public/test/content_browser_test.h" -#include "content/public/test/content_browser_test_utils.h" -#include "content/public/test/test_utils.h" -#include "content/public/test/web_contents_receiver_set_test_binder.h" -#include "content/shell/browser/shell.h" -#include "content/test/test_browser_associated_interfaces.mojom.h" -#include "mojo/public/cpp/bindings/associated_remote.h" -#include "mojo/public/cpp/bindings/pending_associated_receiver.h" -#include "net/dns/mock_host_resolver.h" - -namespace content { - -namespace { - -const char kTestHost1[] = "foo.com"; -const char kTestHost2[] = "bar.com"; - -class TestInterfaceBinder : public WebContentsReceiverSetTestBinder< - mojom::BrowserAssociatedInterfaceTestDriver> { - public: - explicit TestInterfaceBinder(base::OnceClosure bind_callback) - : bind_callback_(std::move(bind_callback)) {} - ~TestInterfaceBinder() override {} - - void BindReceiver( - RenderFrameHost* frame_host, - mojo::PendingAssociatedReceiver< - mojom::BrowserAssociatedInterfaceTestDriver> receiver) override { - std::move(bind_callback_).Run(); - } - - private: - base::OnceClosure bind_callback_; - - DISALLOW_COPY_AND_ASSIGN(TestInterfaceBinder); -}; - -} // namespace - -class WebContentsReceiverSetBrowserTest : public ContentBrowserTest { - public: - void SetUpOnMainThread() override { - host_resolver()->AddRule(kTestHost1, "127.0.0.1"); - host_resolver()->AddRule(kTestHost2, "127.0.0.1"); - } -}; - -class TestFrameInterfaceBinder : public mojom::WebContentsFrameReceiverSetTest { - public: - explicit TestFrameInterfaceBinder(WebContents* web_contents) - : receivers_(web_contents, - this, - content::WebContentsFrameReceiverSetPassKey()) {} - ~TestFrameInterfaceBinder() override {} - - private: - // mojom::WebContentsFrameReceiverSetTest: - void Ping(PingCallback callback) override { NOTREACHED(); } - - WebContentsFrameReceiverSet<mojom::WebContentsFrameReceiverSetTest> - receivers_; -}; - -IN_PROC_BROWSER_TEST_F(WebContentsReceiverSetBrowserTest, OverrideForTesting) { - EXPECT_TRUE(NavigateToURL(shell(), GURL("data:text/html,ho hum"))); - - // Ensure that we can add a WebContentsFrameReceiverSet and then override its - // request handler. - auto* web_contents = static_cast<WebContentsImpl*>(shell()->web_contents()); - WebContentsFrameReceiverSet<mojom::BrowserAssociatedInterfaceTestDriver> - frame_receivers(web_contents, nullptr, - content::WebContentsFrameReceiverSetPassKey()); - - // Now override the binder for this interface. It quits |run_loop| whenever - // an incoming pending receiver is received. - base::RunLoop run_loop; - auto* receiver_set = WebContentsReceiverSet::GetForWebContents< - mojom::BrowserAssociatedInterfaceTestDriver>(web_contents); - - TestInterfaceBinder test_binder(run_loop.QuitClosure()); - receiver_set->SetBinder(&test_binder); - - // Simulate an inbound receiver for the test interface. This should get routed - // to the overriding binder and allow the test to complete. - mojo::AssociatedRemote<mojom::BrowserAssociatedInterfaceTestDriver> - override_client; - web_contents->OnAssociatedInterfaceRequest( - web_contents->GetMainFrame(), - mojom::BrowserAssociatedInterfaceTestDriver::Name_, - override_client.BindNewEndpointAndPassDedicatedReceiver().PassHandle()); - run_loop.Run(); - - receiver_set->SetBinder(nullptr); -} - -IN_PROC_BROWSER_TEST_F(WebContentsReceiverSetBrowserTest, - CloseOnFrameDeletion) { - EXPECT_TRUE(embedded_test_server()->Start()); - EXPECT_TRUE(NavigateToURL( - shell(), embedded_test_server()->GetURL(kTestHost1, "/hello.html"))); - - // Simulate an inbound receiver on the navigated main frame. - auto* web_contents = static_cast<WebContentsImpl*>(shell()->web_contents()); - TestFrameInterfaceBinder binder(web_contents); - mojo::AssociatedRemote<mojom::WebContentsFrameReceiverSetTest> - override_client; - web_contents->OnAssociatedInterfaceRequest( - web_contents->GetMainFrame(), - mojom::WebContentsFrameReceiverSetTest::Name_, - override_client.BindNewEndpointAndPassDedicatedReceiver().PassHandle()); - - base::RunLoop run_loop; - override_client.set_disconnect_handler(run_loop.QuitClosure()); - - // Now navigate the WebContents elsewhere, eventually tearing down the old - // main frame. - RenderFrameDeletedObserver deleted_observer(web_contents->GetMainFrame()); - - // Test expects the old frame to be deleted on navigation, but it doesn't - // happen as it is stored in bfcache. - DisableBackForwardCacheForTesting(shell()->web_contents(), - BackForwardCache::TEST_ASSUMES_NO_CACHING); - - EXPECT_TRUE(NavigateToURL( - shell(), embedded_test_server()->GetURL(kTestHost2, "/title2.html"))); - deleted_observer.WaitUntilDeleted(); - - // Verify that this message never reaches the binding for the old frame. If it - // does, the impl will hit a DCHECK. The RunLoop terminates when the client is - // disconnected. - override_client->Ping(base::DoNothing()); - run_loop.Run(); -} - -} // namespace content
diff --git a/content/browser/webrtc/webrtc_video_capture_browsertest.cc b/content/browser/webrtc/webrtc_video_capture_browsertest.cc index c9c5f68..e7f0211 100644 --- a/content/browser/webrtc/webrtc_video_capture_browsertest.cc +++ b/content/browser/webrtc/webrtc_video_capture_browsertest.cc
@@ -19,6 +19,7 @@ #include "mojo/public/cpp/bindings/remote.h" #include "net/test/embedded_test_server/embedded_test_server.h" #include "services/video_capture/public/mojom/testing_controls.mojom.h" +#include "services/video_capture/public/mojom/video_capture_service.mojom.h" namespace content {
diff --git a/content/browser/webrtc/webrtc_video_capture_service_browsertest.cc b/content/browser/webrtc/webrtc_video_capture_service_browsertest.cc index 811d0d2..663afc9 100644 --- a/content/browser/webrtc/webrtc_video_capture_service_browsertest.cc +++ b/content/browser/webrtc/webrtc_video_capture_service_browsertest.cc
@@ -38,6 +38,7 @@ #include "services/video_capture/public/mojom/constants.mojom.h" #include "services/video_capture/public/mojom/device_factory.mojom.h" #include "services/video_capture/public/mojom/producer.mojom.h" +#include "services/video_capture/public/mojom/video_capture_service.mojom.h" #include "services/video_capture/public/mojom/virtual_device.mojom.h" #include "testing/gmock/include/gmock/gmock.h" #include "third_party/khronos/GLES2/gl2ext.h"
diff --git a/content/browser/webrtc/webrtc_video_capture_service_enumeration_browsertest.cc b/content/browser/webrtc/webrtc_video_capture_service_enumeration_browsertest.cc index cd60f41..b6abef3 100644 --- a/content/browser/webrtc/webrtc_video_capture_service_enumeration_browsertest.cc +++ b/content/browser/webrtc/webrtc_video_capture_service_enumeration_browsertest.cc
@@ -25,6 +25,7 @@ #include "services/video_capture/public/mojom/device_factory.mojom.h" #include "services/video_capture/public/mojom/devices_changed_observer.mojom.h" #include "services/video_capture/public/mojom/producer.mojom.h" +#include "services/video_capture/public/mojom/video_capture_service.mojom.h" #include "services/video_capture/public/mojom/video_source_provider.mojom.h" #include "services/video_capture/public/mojom/virtual_device.mojom.h"
diff --git a/content/browser/webrtc/webrtc_video_capture_shared_device_browsertest.cc b/content/browser/webrtc/webrtc_video_capture_shared_device_browsertest.cc index 3b83a6b..8e3f57e 100644 --- a/content/browser/webrtc/webrtc_video_capture_shared_device_browsertest.cc +++ b/content/browser/webrtc/webrtc_video_capture_shared_device_browsertest.cc
@@ -21,6 +21,7 @@ #include "services/video_capture/public/cpp/mock_video_frame_handler.h" #include "services/video_capture/public/mojom/device.mojom.h" #include "services/video_capture/public/mojom/device_factory.mojom.h" +#include "services/video_capture/public/mojom/video_capture_service.mojom.h" #include "services/video_capture/public/mojom/video_frame_handler.mojom.h" #include "services/video_capture/public/mojom/video_source.mojom.h" #include "services/video_capture/public/mojom/video_source_provider.mojom.h"
diff --git a/content/public/browser/BUILD.gn b/content/public/browser/BUILD.gn index 3cdb33d..803cfcc 100644 --- a/content/public/browser/BUILD.gn +++ b/content/public/browser/BUILD.gn
@@ -397,8 +397,6 @@ "web_contents_media_capture_id.h", "web_contents_observer.cc", "web_contents_observer.h", - "web_contents_receiver_set.cc", - "web_contents_receiver_set.h", "web_contents_user_data.h", "web_contents_view_delegate.cc", "web_contents_view_delegate.h",
diff --git a/content/public/browser/OWNERS b/content/public/browser/OWNERS index 7042359..d3d84033 100644 --- a/content/public/browser/OWNERS +++ b/content/public/browser/OWNERS
@@ -1,4 +1,2 @@ # Note: don't add new owners here. Only content/OWNERS review public changes to # ensure consistency and that the public API guidelines are followed closely. -per-file web_contents_receiver_set.h=file://ipc/SECURITY_OWNERS -per-file web_contents_receiver_set.h=set noparent
diff --git a/content/public/browser/content_browser_client.cc b/content/public/browser/content_browser_client.cc index 757313d3..997125e8 100644 --- a/content/public/browser/content_browser_client.cc +++ b/content/public/browser/content_browser_client.cc
@@ -523,6 +523,13 @@ } #endif +StoragePartitionId ContentBrowserClient::GetStoragePartitionIdForSite( + BrowserContext* browser_context, + const GURL& site) { + DCHECK(browser_context); + return StoragePartitionId(browser_context); +} + StoragePartitionConfig ContentBrowserClient::GetStoragePartitionConfigForSite( BrowserContext* browser_context, const GURL& site) {
diff --git a/content/public/browser/content_browser_client.h b/content/public/browser/content_browser_client.h index f97d736..65638e2 100644 --- a/content/public/browser/content_browser_client.h +++ b/content/public/browser/content_browser_client.h
@@ -841,6 +841,12 @@ virtual bool ShouldUseGmsCoreGeolocationProvider(); #endif + // Allow the embedder to specify a string version of the storage partition + // config with a site. + virtual StoragePartitionId GetStoragePartitionIdForSite( + BrowserContext* browser_context, + const GURL& site); + // Allows the embedder to provide a storage partition configuration for a // site. A storage partition configuration includes a domain of the embedder's // choice, an optional name within that domain, and whether the partition is
diff --git a/content/public/browser/video_capture_service.h b/content/public/browser/video_capture_service.h index 9753d1b..c7830a0 100644 --- a/content/public/browser/video_capture_service.h +++ b/content/public/browser/video_capture_service.h
@@ -6,7 +6,7 @@ #define CONTENT_PUBLIC_BROWSER_VIDEO_CAPTURE_SERVICE_H_ #include "content/common/content_export.h" -#include "services/video_capture/public/mojom/video_capture_service.mojom.h" +#include "services/video_capture/public/mojom/video_capture_service.mojom-forward.h" namespace content {
diff --git a/content/public/browser/web_contents_receiver_set.cc b/content/public/browser/web_contents_receiver_set.cc deleted file mode 100644 index dd7d583..0000000 --- a/content/public/browser/web_contents_receiver_set.cc +++ /dev/null
@@ -1,54 +0,0 @@ -// Copyright 2016 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "content/public/browser/web_contents_receiver_set.h" - -#include <utility> - -#include "base/notreached.h" -#include "content/browser/web_contents/web_contents_impl.h" - -namespace content { - -void WebContentsReceiverSet::Binder::OnReceiverForFrame( - RenderFrameHost* render_frame_host, - mojo::ScopedInterfaceEndpointHandle handle) { - NOTREACHED(); -} - -void WebContentsReceiverSet::Binder::CloseAllReceivers() { - NOTREACHED(); -} - -WebContentsReceiverSet::WebContentsReceiverSet( - WebContents* web_contents, - const std::string& interface_name) - : remove_callback_(static_cast<WebContentsImpl*>(web_contents) - ->AddReceiverSet(interface_name, this)) {} - -WebContentsReceiverSet::~WebContentsReceiverSet() { - std::move(remove_callback_).Run(); -} - -// static -WebContentsReceiverSet* WebContentsReceiverSet::GetForWebContents( - WebContents* web_contents, - const char* interface_name) { - return static_cast<WebContentsImpl*>(web_contents) - ->GetReceiverSet(interface_name); -} - -void WebContentsReceiverSet::CloseAllReceivers() { - binder_->CloseAllReceivers(); - binder_ = nullptr; -} - -void WebContentsReceiverSet::OnReceiverForFrame( - RenderFrameHost* render_frame_host, - mojo::ScopedInterfaceEndpointHandle handle) { - if (binder_) - binder_->OnReceiverForFrame(render_frame_host, std::move(handle)); -} - -} // namespace content
diff --git a/content/public/browser/web_contents_receiver_set.h b/content/public/browser/web_contents_receiver_set.h deleted file mode 100644 index 55cd755..0000000 --- a/content/public/browser/web_contents_receiver_set.h +++ /dev/null
@@ -1,212 +0,0 @@ -// Copyright 2016 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CONTENT_PUBLIC_BROWSER_WEB_CONTENTS_RECEIVER_SET_H_ -#define CONTENT_PUBLIC_BROWSER_WEB_CONTENTS_RECEIVER_SET_H_ - -#include <memory> -#include <string> - -#include "base/bind.h" -#include "base/callback.h" -#include "base/macros.h" -#include "content/common/content_export.h" -#include "content/public/browser/web_contents.h" -#include "content/public/browser/web_contents_observer.h" -#include "mojo/public/cpp/bindings/associated_receiver_set.h" -#include "mojo/public/cpp/bindings/pending_associated_receiver.h" -#include "mojo/public/cpp/bindings/scoped_interface_endpoint_handle.h" - -namespace content { - -class RenderFrameHost; -class TestFrameInterfaceBinder; -class WebContentsImpl; -class WebContentsReceiverSetBrowserTest; - -// Base class for something which owns a mojo::AssociatedReceiverSet on behalf -// of a WebContents. See WebContentsFrameReceiverSet<T> below. -class CONTENT_EXPORT WebContentsReceiverSet { - public: - class CONTENT_EXPORT Binder { - public: - virtual ~Binder() = default; - - virtual void OnReceiverForFrame(RenderFrameHost* render_frame_host, - mojo::ScopedInterfaceEndpointHandle handle); - virtual void CloseAllReceivers(); - }; - - // |binder| must outlive |this| or be reset to null before being destroyed. - void SetBinder(Binder* binder) { binder_ = binder; } - - template <typename Interface> - static WebContentsReceiverSet* GetForWebContents(WebContents* web_contents) { - return GetForWebContents(web_contents, Interface::Name_); - } - - protected: - WebContentsReceiverSet(WebContents* web_contents, - const std::string& interface_name); - ~WebContentsReceiverSet(); - - private: - friend class WebContentsImpl; - - static WebContentsReceiverSet* GetForWebContents(WebContents* web_contents, - const char* interface_name); - - void CloseAllReceivers(); - void OnReceiverForFrame(RenderFrameHost* render_frame_host, - mojo::ScopedInterfaceEndpointHandle handle); - - base::OnceClosure remove_callback_; - Binder* binder_ = nullptr; - - DISALLOW_COPY_AND_ASSIGN(WebContentsReceiverSet); -}; - -// The use of WebContentsFrameReceiverSet is restricted because it bypasses -// security review of the IPC bindings. See https://crbug.com/1213679 for -// details. -// -// This does not use base::PassKey<T> because it's not possible to create a -// union of types for use in a template parameter, so using it would require -// duplicating the WebContentsFrameReceiverSet constructor many times (one for -// each friend below). This empty class is a bit simpler. -// -// New instances SHOULD NOT be added. -// TODO(crbug.com/1213679): Remove WebContentsFrameReceiverSet. -class WebContentsFrameReceiverSetPassKey { - private: - WebContentsFrameReceiverSetPassKey() = default; - - friend class TestFrameInterfaceBinder; - FRIEND_TEST_ALL_PREFIXES(WebContentsReceiverSetBrowserTest, - OverrideForTesting); -}; - -// Use RenderFrameHostReceiverSet (render_frame_host_receiver_set.h) instead. -// -// Owns a set of Channel-associated interface receivers with frame context on -// message dispatch. -// -// To use this, a |mojom::Foo| implementation need only own an instance of -// WebContentsFrameReceiverSet<mojom::Foo>. This allows remote RenderFrames to -// acquire handles to the |mojom::Foo| interface via -// RenderFrame::GetRemoteAssociatedInterfaces() and send messages here. When -// messages are dispatched to the implementation, the implementation can call -// GetCurrentTargetFrame() on this object (see below) to determine which -// frame sent the message. -// -// For example: -// -// class FooImpl : public mojom::Foo { -// public: -// explicit FooImpl(WebContents* web_contents) -// : web_contents_(web_contents), receivers_(web_contents, this) {} -// -// // mojom::Foo: -// void DoFoo() override { -// if (receivers_.GetCurrentTargetFrame() == -// web_contents_->GetMainFrame()) -// ; // Do something interesting -// } -// -// private: -// WebContents* web_contents_; -// WebContentsFrameReceiverSet<mojom::Foo> receivers_; -// }; -// -// When an instance of FooImpl is constructed over a WebContents, the mojom::Foo -// interface will be exposed to all remote RenderFrame objects. If the -// WebContents is destroyed at any point, the receivers will automatically reset -// and will cease to dispatch further incoming messages. -// -// If FooImpl is destroyed first, the receivers are automatically removed and -// future incoming pending receivers for mojom::Foo will be rejected. -// -// Because this object uses Channel-associated interface receivers, all messages -// sent via these interfaces are ordered with respect to legacy Chrome IPC -// messages on the relevant IPC::Channel (i.e. the Channel between the browser -// and whatever render process hosts the sending frame.) -template <typename Interface> -class WebContentsFrameReceiverSet : public WebContentsReceiverSet { - public: - WebContentsFrameReceiverSet(WebContents* web_contents, - Interface* impl, - WebContentsFrameReceiverSetPassKey pass_key) - : WebContentsReceiverSet(web_contents, Interface::Name_), - binder_(this, web_contents, impl) { - SetBinder(&binder_); - } - ~WebContentsFrameReceiverSet() = default; - - // Returns the RenderFrameHost currently targeted by a message dispatch to - // this interface. Must only be called during the extent of a message dispatch - // for this interface. - RenderFrameHost* GetCurrentTargetFrame() { - if (current_target_frame_for_testing_) - return current_target_frame_for_testing_; - return binder_.GetCurrentTargetFrame(); - } - - void SetCurrentTargetFrameForTesting(RenderFrameHost* render_frame_host) { - current_target_frame_for_testing_ = render_frame_host; - } - - private: - class FrameInterfaceBinder : public Binder, public WebContentsObserver { - public: - FrameInterfaceBinder(WebContentsFrameReceiverSet* receiver_set, - WebContents* web_contents, - Interface* impl) - : WebContentsObserver(web_contents), impl_(impl) {} - - ~FrameInterfaceBinder() override = default; - - RenderFrameHost* GetCurrentTargetFrame() { - return receivers_.current_context(); - } - - private: - // Binder: - void OnReceiverForFrame( - RenderFrameHost* render_frame_host, - mojo::ScopedInterfaceEndpointHandle handle) override { - auto id = receivers_.Add( - impl_, mojo::PendingAssociatedReceiver<Interface>(std::move(handle)), - render_frame_host); - frame_to_receivers_map_[render_frame_host].push_back(id); - } - - void CloseAllReceivers() override { receivers_.Clear(); } - - // WebContentsObserver: - void RenderFrameDeleted(RenderFrameHost* render_frame_host) override { - auto it = frame_to_receivers_map_.find(render_frame_host); - if (it == frame_to_receivers_map_.end()) - return; - for (auto id : it->second) - receivers_.Remove(id); - frame_to_receivers_map_.erase(it); - } - - Interface* const impl_; - mojo::AssociatedReceiverSet<Interface, RenderFrameHost*> receivers_; - std::map<RenderFrameHost*, std::vector<mojo::ReceiverId>> - frame_to_receivers_map_; - - DISALLOW_COPY_AND_ASSIGN(FrameInterfaceBinder); - }; - - FrameInterfaceBinder binder_; - RenderFrameHost* current_target_frame_for_testing_ = nullptr; - - DISALLOW_COPY_AND_ASSIGN(WebContentsFrameReceiverSet); -}; - -} // namespace content - -#endif // CONTENT_PUBLIC_BROWSER_WEB_CONTENTS_RECEIVER_SET_H_
diff --git a/content/public/test/browser_test_utils.cc b/content/public/test/browser_test_utils.cc index 0b807bd3..e1fdf0e 100644 --- a/content/public/test/browser_test_utils.cc +++ b/content/public/test/browser_test_utils.cc
@@ -2086,12 +2086,6 @@ return "pageLoadComplete" == result; } -void RemoveWebContentsReceiverSet(WebContents* web_contents, - const std::string& interface_name) { - static_cast<WebContentsImpl*>(web_contents) - ->RemoveReceiverSetForTesting(interface_name); -} - void EnableAccessibilityForWebContents(WebContents* web_contents) { WebContentsImpl* web_contents_impl = static_cast<WebContentsImpl*>(web_contents);
diff --git a/content/public/test/browser_test_utils.h b/content/public/test/browser_test_utils.h index 601665b..3f3b937 100644 --- a/content/public/test/browser_test_utils.h +++ b/content/public/test/browser_test_utils.h
@@ -946,11 +946,6 @@ // message is handled properly. bool WaitForRenderFrameReady(RenderFrameHost* rfh) WARN_UNUSED_RESULT; -// Removes the interface from the associated interface receiver sets attached to -// the WebContents. -void RemoveWebContentsReceiverSet(WebContents* web_contents, - const std::string& interface_name); - // Enable accessibility support for all of the frames in this WebContents void EnableAccessibilityForWebContents(WebContents* web_contents);
diff --git a/content/public/test/web_contents_receiver_set_test_binder.h b/content/public/test/web_contents_receiver_set_test_binder.h deleted file mode 100644 index 9a3d91f..0000000 --- a/content/public/test/web_contents_receiver_set_test_binder.h +++ /dev/null
@@ -1,40 +0,0 @@ -// Copyright 2017 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CONTENT_PUBLIC_TEST_WEB_CONTENTS_RECEIVER_SET_TEST_BINDER_H_ -#define CONTENT_PUBLIC_TEST_WEB_CONTENTS_RECEIVER_SET_TEST_BINDER_H_ - -#include "content/public/browser/web_contents_receiver_set.h" - -#include "mojo/public/cpp/bindings/pending_associated_receiver.h" - -namespace content { - -// Helper class which test code can use with -// WebContentsImpl::OverrideBinderForTesting() in order to override -// WebContentsReceiverSet interface receiver behavior in tests. -template <typename Interface> -class WebContentsReceiverSetTestBinder : public WebContentsReceiverSet::Binder { - public: - ~WebContentsReceiverSetTestBinder() override {} - - // Call for every new incoming receiver for a frame. - virtual void BindReceiver( - RenderFrameHost* render_frame_host, - mojo::PendingAssociatedReceiver<Interface> receiver) = 0; - - private: - // Binder: - void OnReceiverForFrame(RenderFrameHost* render_frame_host, - mojo::ScopedInterfaceEndpointHandle handle) override { - BindReceiver(render_frame_host, - mojo::PendingAssociatedReceiver<Interface>(std::move(handle))); - } - - void CloseAllReceivers() override {} -}; - -} // namespace content - -#endif // CONTENT_PUBLIC_TEST_WEB_CONTENTS_RECEIVER_SET_TEST_BINDER_H_
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn index 2b6a418..bb7a054 100644 --- a/content/test/BUILD.gn +++ b/content/test/BUILD.gn
@@ -278,7 +278,6 @@ "../public/test/url_loader_interceptor.h", "../public/test/url_loader_monitor.cc", "../public/test/url_loader_monitor.h", - "../public/test/web_contents_receiver_set_test_binder.h", "../public/test/web_contents_tester.cc", "../public/test/web_contents_tester.h", "../public/test/web_transport_simple_test_server.cc", @@ -1290,7 +1289,6 @@ "../browser/web_contents/web_contents_impl_browsertest.cc", "../browser/web_contents/web_contents_observer_browsertest.cc", "../browser/web_contents/web_contents_view_aura_browsertest.cc", - "../browser/web_contents_receiver_set_browsertest.cc", "../browser/web_package/link_web_bundle_browsertest.cc", "../browser/web_package/save_page_as_web_bundle_browsertest.cc", "../browser/web_package/signed_exchange_request_handler_browsertest.cc",
diff --git a/content/test/storage_partition_test_helpers.cc b/content/test/storage_partition_test_helpers.cc index 16f0c403..ea61145c 100644 --- a/content/test/storage_partition_test_helpers.cc +++ b/content/test/storage_partition_test_helpers.cc
@@ -54,4 +54,14 @@ return StoragePartitionConfig::CreateDefault(browser_context); } +StoragePartitionId +CustomStoragePartitionForSomeSites::GetStoragePartitionIdForSite( + BrowserContext* browser_context, + const GURL& site) { + if (site == site_to_isolate_) + return StoragePartitionId( + site.spec(), GetStoragePartitionConfigForSite(browser_context, site)); + return StoragePartitionId(browser_context); +} + } // namespace content
diff --git a/content/test/storage_partition_test_helpers.h b/content/test/storage_partition_test_helpers.h index cbc5c78..79050ce 100644 --- a/content/test/storage_partition_test_helpers.h +++ b/content/test/storage_partition_test_helpers.h
@@ -37,6 +37,10 @@ BrowserContext* browser_context, const GURL& site) override; + StoragePartitionId GetStoragePartitionIdForSite( + BrowserContext* browser_context, + const GURL& site) override; + private: GURL site_to_isolate_; };
diff --git a/content/test/test_browser_associated_interfaces.mojom b/content/test/test_browser_associated_interfaces.mojom index b7ffb4a..cc18873 100644 --- a/content/test/test_browser_associated_interfaces.mojom +++ b/content/test/test_browser_associated_interfaces.mojom
@@ -8,7 +8,3 @@ ExpectString(string expected); RequestQuit() => (); }; - -interface WebContentsFrameReceiverSetTest { - Ping() => (); -};
diff --git a/infra/config/generated/cr-buildbucket.cfg b/infra/config/generated/cr-buildbucket.cfg index 70bd2df..6161ef7 100644 --- a/infra/config/generated/cr-buildbucket.cfg +++ b/infra/config/generated/cr-buildbucket.cfg
@@ -25072,7 +25072,7 @@ dimensions: "builderless:1" dimensions: "cores:8" dimensions: "cpu:x86-64" - dimensions: "os:Windows-10" + dimensions: "os:Ubuntu-18.04" dimensions: "pool:luci.chromium.ci" dimensions: "ssd:0" exe { @@ -25082,12 +25082,6 @@ } properties: '{' - ' "$build/goma": {' - ' "enable_ats": true,' - ' "rpc_extra_params": "?prod",' - ' "server_host": "goma.chromium.org",' - ' "use_luci_auth": true' - ' },' ' "$kitchen": {' ' "devshell": true,' ' "git_auth": true'
diff --git a/infra/config/lib/ci.star b/infra/config/lib/ci.star index cd5a6bd..c15a78b 100644 --- a/infra/config/lib/ci.star +++ b/infra/config/lib/ci.star
@@ -842,6 +842,15 @@ **kwargs ) +def win_thin_tester(*, name, triggered_by, **kwargs): + return thin_tester( + name = name, + builder_group = "chromium.win", + sheriff_rotations = builders.sheriff_rotations.CHROMIUM, + triggered_by = triggered_by, + **kwargs + ) + ci = struct( # Module-level defaults for ci functions defaults = defaults, @@ -895,6 +904,7 @@ thin_tester = thin_tester, updater_builder = updater_builder, win_builder = win_builder, + win_thin_tester = win_thin_tester, ) rbe_instance = struct(
diff --git a/infra/config/subprojects/chromium/ci.star b/infra/config/subprojects/chromium/ci.star index a1d9cc1..5fa6669 100644 --- a/infra/config/subprojects/chromium/ci.star +++ b/infra/config/subprojects/chromium/ci.star
@@ -6526,15 +6526,13 @@ tree_closing = False, ) -ci.win_builder( +ci.win_thin_tester( name = "Win7 (32) Tests", - builderless = True, console_view_entry = consoles.console_view_entry( category = "release|tester", short_name = "32", ), main_console_view = "main", - os = os.WINDOWS_10, triggered_by = ["Win Builder"], )
diff --git a/ios/chrome/app/strings/resources/ios_strings_am.xtb b/ios/chrome/app/strings/resources/ios_strings_am.xtb index 1923b5f..fb349d5b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_am.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_am.xtb
@@ -149,6 +149,7 @@ <translation id="2421004566762153674">የሶስተኛ ወገን ኩኪዎችን ማገድ</translation> <translation id="2421044535038393232">አርትዖቱን ቀጥል</translation> <translation id="2435457462613246316">የይለፍ ቃል አሳይ</translation> +<translation id="2476359652512522418">አልተመረጠም</translation> <translation id="2497852260688568942">ስምረት በእርስዎ አስተዳዳሪ ተሰናክሏል</translation> <translation id="2500374554657206846">የይለፍ ቃል የሚቀመጡባቸው አማራጮች</translation> <translation id="2523363575747517183">ይህ ድር ጣቢያ በተደጋጋሚነት ሌላ መተግበሪያ ለመክፈት እየሞከረ ነው።</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ar.xtb b/ios/chrome/app/strings/resources/ios_strings_ar.xtb index 66a470c..a5cf913 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ar.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ar.xtb
@@ -149,6 +149,7 @@ <translation id="2421004566762153674">حظر ملفات تعريف الارتباط التابعة لجهات خارجية</translation> <translation id="2421044535038393232">متابعة التعديل</translation> <translation id="2435457462613246316">عرض كلمة المرور</translation> +<translation id="2476359652512522418">غير مختارة</translation> <translation id="2497852260688568942">تم إيقاف المزامنة من قِبل المشرف</translation> <translation id="2500374554657206846">خيارات حفظ كلمة المرور</translation> <translation id="2523363575747517183">يحاول الموقع الإلكتروني هذا فتح تطبيق آخر بشكلٍ متكرر.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bg.xtb b/ios/chrome/app/strings/resources/ios_strings_bg.xtb index 2e9d04b..a1036f8 100644 --- a/ios/chrome/app/strings/resources/ios_strings_bg.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_bg.xtb
@@ -149,6 +149,7 @@ <translation id="2421004566762153674">„Бисквитките“ на трети страни се блокират</translation> <translation id="2421044535038393232">Продължаване на редактирането</translation> <translation id="2435457462613246316">Показване на паролата</translation> +<translation id="2476359652512522418">Не е избрано</translation> <translation id="2497852260688568942">Синхронизирането е деактивирано от администратора ви</translation> <translation id="2500374554657206846">Опции за запазване на паролата</translation> <translation id="2523363575747517183">Този уебсайт многократно се опитва да отвори друго приложение.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bs.xtb b/ios/chrome/app/strings/resources/ios_strings_bs.xtb index 9c1b239..58d6431 100644 --- a/ios/chrome/app/strings/resources/ios_strings_bs.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_bs.xtb
@@ -149,6 +149,7 @@ <translation id="2421004566762153674">Blokiranje kolačića treće strane</translation> <translation id="2421044535038393232">Nastavi uređivanje</translation> <translation id="2435457462613246316">Prikaži lozinku</translation> +<translation id="2476359652512522418">Nije odabrano</translation> <translation id="2497852260688568942">Sinhronizaciju je onemogućio vaš administrator</translation> <translation id="2500374554657206846">Opcije čuvanja lozinki</translation> <translation id="2523363575747517183">Ova web lokacija neprestano pokušava otvoriti drugu aplikaciju.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ca.xtb b/ios/chrome/app/strings/resources/ios_strings_ca.xtb index 49ea6a4..88b654d 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ca.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ca.xtb
@@ -149,6 +149,7 @@ <translation id="2421004566762153674">S'estan bloquejant les galetes de tercers</translation> <translation id="2421044535038393232">Continua editant</translation> <translation id="2435457462613246316">Mostra la contrasenya</translation> +<translation id="2476359652512522418">No està seleccionada</translation> <translation id="2497852260688568942">L'administrador ha desactivat la sincronització</translation> <translation id="2500374554657206846">Opcions per desar la contrasenya</translation> <translation id="2523363575747517183">Aquest lloc web està provant d'obrir una altra aplicació repetidament.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_da.xtb b/ios/chrome/app/strings/resources/ios_strings_da.xtb index 441f9089..506a002 100644 --- a/ios/chrome/app/strings/resources/ios_strings_da.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_da.xtb
@@ -149,6 +149,7 @@ <translation id="2421004566762153674">Blokering af cookies fra tredjeparter</translation> <translation id="2421044535038393232">Rediger videre</translation> <translation id="2435457462613246316">Vis adgangskode</translation> +<translation id="2476359652512522418">Ikke valgt</translation> <translation id="2497852260688568942">Synkronisering er deaktiveret af din administrator.</translation> <translation id="2500374554657206846">Valgmuligheder for at gemme adgangskode</translation> <translation id="2523363575747517183">Dette website forsøger hele tiden at åbne en anden app.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_el.xtb b/ios/chrome/app/strings/resources/ios_strings_el.xtb index 152e351..e3b2e21 100644 --- a/ios/chrome/app/strings/resources/ios_strings_el.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_el.xtb
@@ -149,6 +149,7 @@ <translation id="2421004566762153674">Αποκλεισμός cookie τρίτου μέρους</translation> <translation id="2421044535038393232">Συνέχιση επεξεργασίας</translation> <translation id="2435457462613246316">Εμφάνιση κωδικού πρόσβασης</translation> +<translation id="2476359652512522418">Δεν έχει επιλεγεί</translation> <translation id="2497852260688568942">Ο συγχρονισμός έχει απενεργοποιηθεί από τον διαχειριστή σας</translation> <translation id="2500374554657206846">Επιλογές για την αποθήκευση κωδικού πρόσβασης</translation> <translation id="2523363575747517183">Αυτός ο ιστότοπος προσπαθεί επανειλημμένως να ανοίξει κάποια άλλη εφαρμογή.</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 68841cd..9237fe7 100644 --- a/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb
@@ -149,6 +149,7 @@ <translation id="2421004566762153674">Blocking third-party cookies</translation> <translation id="2421044535038393232">Keep editing</translation> <translation id="2435457462613246316">Show password</translation> +<translation id="2476359652512522418">Not selected</translation> <translation id="2497852260688568942">Sync is disabled by your administrator</translation> <translation id="2500374554657206846">Options to save password</translation> <translation id="2523363575747517183">This website is repeatedly trying to open another application.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es.xtb b/ios/chrome/app/strings/resources/ios_strings_es.xtb index ea332a1..644837f 100644 --- a/ios/chrome/app/strings/resources/ios_strings_es.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_es.xtb
@@ -149,6 +149,7 @@ <translation id="2421004566762153674">Bloquear cookies de terceros</translation> <translation id="2421044535038393232">Seguir editando</translation> <translation id="2435457462613246316">Mostrar contraseña</translation> +<translation id="2476359652512522418">No seleccionada</translation> <translation id="2497852260688568942">El administrador ha inhabilitado la sincronización</translation> <translation id="2500374554657206846">Opciones para guardar las contraseñas</translation> <translation id="2523363575747517183">Este sitio web está intentando abrir otra aplicación reiteradamente.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_et.xtb b/ios/chrome/app/strings/resources/ios_strings_et.xtb index 48f89ebf..10f2f963 100644 --- a/ios/chrome/app/strings/resources/ios_strings_et.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_et.xtb
@@ -149,6 +149,7 @@ <translation id="2421004566762153674">Kolmanda osapoole küpsisefailide blokeerimine</translation> <translation id="2421044535038393232">Jätka töötlemist</translation> <translation id="2435457462613246316">Kuva parool</translation> +<translation id="2476359652512522418">Ei ole valitud</translation> <translation id="2497852260688568942">Administraator on sünkroonimise keelanud</translation> <translation id="2500374554657206846">Valikud parooli salvestamiseks</translation> <translation id="2523363575747517183">See veebisait üritab korduvalt avada teist rakendust.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fa.xtb b/ios/chrome/app/strings/resources/ios_strings_fa.xtb index f6eb10c..c03dbe4 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fa.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fa.xtb
@@ -149,6 +149,7 @@ <translation id="2421004566762153674">کوکیهای شخص ثالث را مسدود میکند</translation> <translation id="2421044535038393232">ادامه ویرایش</translation> <translation id="2435457462613246316">نمایش گذرواژه</translation> +<translation id="2476359652512522418">انتخاب نشده</translation> <translation id="2497852260688568942">سرپرستتان همگامسازی را غیرفعال کرده است</translation> <translation id="2500374554657206846">گزینههایی برای ذخیره گذرواژه</translation> <translation id="2523363575747517183">این وبسایت بهطور مکرر تلاش میکند برنامه دیگری را باز کند.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fr.xtb b/ios/chrome/app/strings/resources/ios_strings_fr.xtb index d14055d3..ceba0bb 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fr.xtb
@@ -149,6 +149,7 @@ <translation id="2421004566762153674">Blocage des cookies tiers</translation> <translation id="2421044535038393232">Poursuivre les modifications</translation> <translation id="2435457462613246316">Afficher le mot de passe</translation> +<translation id="2476359652512522418">Non sélectionné</translation> <translation id="2497852260688568942">Votre administrateur a désactivé la synchronisation</translation> <translation id="2500374554657206846">Options d'enregistrement des mots de passe</translation> <translation id="2523363575747517183">Ce site Web a tenté à plusieurs reprises d'ouvrir une autre application.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hr.xtb b/ios/chrome/app/strings/resources/ios_strings_hr.xtb index 10994dc4..5955612c 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hr.xtb
@@ -149,6 +149,7 @@ <translation id="2421004566762153674">Blokiranje kolačića trećih strana</translation> <translation id="2421044535038393232">Nastavi uređivati</translation> <translation id="2435457462613246316">Pokaži zaporku</translation> +<translation id="2476359652512522418">Nije odabrano</translation> <translation id="2497852260688568942">Administrator je onemogućio sinkronizaciju</translation> <translation id="2500374554657206846">Opcije za spremanje zaporki</translation> <translation id="2523363575747517183">Ova web-lokacija opetovano pokušava otvoriti neku drugu aplikaciju.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hu.xtb b/ios/chrome/app/strings/resources/ios_strings_hu.xtb index d7a6efcf..2ea4cd33 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hu.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hu.xtb
@@ -149,6 +149,7 @@ <translation id="2421004566762153674">Harmadik félhez tartozó cookie-k letiltása</translation> <translation id="2421044535038393232">Szerkesztés folytatása</translation> <translation id="2435457462613246316">Jelszó megjelenítése</translation> +<translation id="2476359652512522418">Nincs kiválasztva</translation> <translation id="2497852260688568942">A szinkronizálást letiltotta a rendszergazda</translation> <translation id="2500374554657206846">A jelszó mentésére szolgáló lehetőségek</translation> <translation id="2523363575747517183">Ez a webhely folyamatosan próbál megnyitni egy másik alkalmazást.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_kk.xtb b/ios/chrome/app/strings/resources/ios_strings_kk.xtb index b53c5e0a..3d5f0fd 100644 --- a/ios/chrome/app/strings/resources/ios_strings_kk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_kk.xtb
@@ -149,6 +149,7 @@ <translation id="2421004566762153674">Үшінші тараптың cookie файлдарын бөгеу</translation> <translation id="2421044535038393232">Өзгерте беру</translation> <translation id="2435457462613246316">Құпия сөзді көрсету</translation> +<translation id="2476359652512522418">Таңдалмады</translation> <translation id="2497852260688568942">Синхрондау мүмкіндігін әкімші өшіріп қойған</translation> <translation id="2500374554657206846">Құпия сөзді сақтау опциялары</translation> <translation id="2523363575747517183">Бұл сайт қайта-қайта басқа қолданбаны ашуға тырысуда.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ky.xtb b/ios/chrome/app/strings/resources/ios_strings_ky.xtb index 40003e3..8d2feb51 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ky.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ky.xtb
@@ -149,6 +149,7 @@ <translation id="2421004566762153674">Үчүнчү тараптын cookie файлдарын бөгөттөө</translation> <translation id="2421044535038393232">Түзөтө берүү</translation> <translation id="2435457462613246316">Сырсөздү көрсөтүү</translation> +<translation id="2476359652512522418">Тандалган жок</translation> <translation id="2497852260688568942">Шайкештирүү функциясын администраторуңуз өчүрүп койгон</translation> <translation id="2500374554657206846">Сырсөздү сактоо параметрлери</translation> <translation id="2523363575747517183">Бул вебсайт башка колдонмону ачууга бир нече жолу аракет кылууда.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pl.xtb b/ios/chrome/app/strings/resources/ios_strings_pl.xtb index 66acbf4..96cc8989 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pl.xtb
@@ -149,6 +149,7 @@ <translation id="2421004566762153674">Blokowanie plików cookie innych firm</translation> <translation id="2421044535038393232">Edytuj dalej</translation> <translation id="2435457462613246316">Pokaż hasło</translation> +<translation id="2476359652512522418">Niewybrany</translation> <translation id="2497852260688568942">Synchronizację wyłączył administrator</translation> <translation id="2500374554657206846">Opcje zapisania hasła</translation> <translation id="2523363575747517183">Ta strona internetowa wielokrotnie próbuje otworzyć inną aplikację.</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 8b7eb9ef..9c43da3 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
@@ -149,6 +149,7 @@ <translation id="2421004566762153674">Bloqueando cookies de terceiros</translation> <translation id="2421044535038393232">Continuar editando</translation> <translation id="2435457462613246316">Mostrar senha</translation> +<translation id="2476359652512522418">Não selecionada</translation> <translation id="2497852260688568942">A sincronização foi desativada pelo administrador</translation> <translation id="2500374554657206846">Opções para salvar senha</translation> <translation id="2523363575747517183">Este site está tentando repetidamente abrir outro aplicativo.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ro.xtb b/ios/chrome/app/strings/resources/ios_strings_ro.xtb index 06322d32f..c8be47e 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ro.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ro.xtb
@@ -149,6 +149,7 @@ <translation id="2421004566762153674">Blocarea cookie-urilor terță parte</translation> <translation id="2421044535038393232">Continuă editarea</translation> <translation id="2435457462613246316">Afișați parola</translation> +<translation id="2476359652512522418">Neselectat</translation> <translation id="2497852260688568942">Sincronizarea este dezactivată de administrator</translation> <translation id="2500374554657206846">Opțiuni pentru Salvarea parolei</translation> <translation id="2523363575747517183">Acest site încearcă în mod repetat să deschidă altă aplicație.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sk.xtb b/ios/chrome/app/strings/resources/ios_strings_sk.xtb index 49900f2..fcb44981 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sk.xtb
@@ -149,6 +149,7 @@ <translation id="2421004566762153674">Blokovanie súborov cookie tretích strán</translation> <translation id="2421044535038393232">Ďalej upravovať</translation> <translation id="2435457462613246316">Zobraziť heslo</translation> +<translation id="2476359652512522418">Nevybrané</translation> <translation id="2497852260688568942">Synchronizácia je zakázaná správcom</translation> <translation id="2500374554657206846">Možnosti uloženia hesla</translation> <translation id="2523363575747517183">Tento web sa opakovane pokúša otvoriť ďalšiu aplikáciu.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sl.xtb b/ios/chrome/app/strings/resources/ios_strings_sl.xtb index 10b629e..0e9d48f 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sl.xtb
@@ -149,6 +149,7 @@ <translation id="2421004566762153674">Blokiranje piškotkov drugih spletnih mest</translation> <translation id="2421044535038393232">Nadaljuj urejanje</translation> <translation id="2435457462613246316">Pokaži geslo</translation> +<translation id="2476359652512522418">Ni izbrano</translation> <translation id="2497852260688568942">Sinhronizacijo je onemogočil skrbnik</translation> <translation id="2500374554657206846">Možnosti shranjevanja gesel</translation> <translation id="2523363575747517183">To spletno mesto nenehno poskuša odpreti drugo aplikacijo.</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 a73a68d..b88343b8 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb
@@ -149,6 +149,7 @@ <translation id="2421004566762153674">Blokira kolačiće treće strane</translation> <translation id="2421044535038393232">Nastavi izmene</translation> <translation id="2435457462613246316">Prikaži lozinku</translation> +<translation id="2476359652512522418">Nije izabrano</translation> <translation id="2497852260688568942">Administrator je onemogućio sinhronizaciju</translation> <translation id="2500374554657206846">Opcije za čuvanje lozinke</translation> <translation id="2523363575747517183">Ovaj veb-sajt neprekidno pokušava da otvori drugu aplikaciju.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sr.xtb b/ios/chrome/app/strings/resources/ios_strings_sr.xtb index 7407ee5..283ad36 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sr.xtb
@@ -149,6 +149,7 @@ <translation id="2421004566762153674">Блокира колачиће треће стране</translation> <translation id="2421044535038393232">Настави изменe</translation> <translation id="2435457462613246316">Прикажи лозинку</translation> +<translation id="2476359652512522418">Није изабрано</translation> <translation id="2497852260688568942">Администратор је онемогућио синхронизацију</translation> <translation id="2500374554657206846">Опције за чување лозинке</translation> <translation id="2523363575747517183">Овај веб-сајт непрекидно покушава да отвори другу апликацију.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_te.xtb b/ios/chrome/app/strings/resources/ios_strings_te.xtb index 468c4af..2f56ac48 100644 --- a/ios/chrome/app/strings/resources/ios_strings_te.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_te.xtb
@@ -20,7 +20,7 @@ <translation id="1104948393051856124">అంగీకరించు & కొనసాగు</translation> <translation id="110724200315609752">తెరిచి ఉన్న విండోకు స్విచ్ అవ్వండి</translation> <translation id="1112015203684611006">ముద్రణ విఫలమైంది.</translation> -<translation id="1125564390852150847">కొత్త ట్యాబ్ను సృష్టించండి.</translation> +<translation id="1125564390852150847">కొత్త ట్యాబ్ను క్రియేట్ చేయండి.</translation> <translation id="1145536944570833626">ఇప్పటికే ఉన్న డేటాను తొలగించండి.</translation> <translation id="1147031633655575115"><ph name="USER" />గా సైన్ ఇన్ చేశారు</translation> <translation id="1154984953698510061">ఇతర ట్యాబ్లను చూడండి</translation> @@ -147,7 +147,7 @@ <translation id="2381405137052800939">ప్రాథమికాలు</translation> <translation id="2386793615875593361">1 ఎంచుకోబడింది</translation> <translation id="2421004566762153674">థర్డ్-పార్టీ కుక్కీలను బ్లాక్ చేయడం</translation> -<translation id="2421044535038393232">సవరణను కొనసాగించు</translation> +<translation id="2421044535038393232">ఎడిట్ను కొనసాగించు</translation> <translation id="2435457462613246316">పాస్వర్డ్ను చూపించు</translation> <translation id="2497852260688568942">సింక్ను మీ నిర్వాహకులు నిలిపివేశారు</translation> <translation id="2500374554657206846">పాస్వర్డ్ను సేవ్ చేసే ఎంపికలు</translation> @@ -448,7 +448,7 @@ <translation id="5490005495580364134">అన్ని కుక్కీలను బ్లాక్ చేయి (సిఫార్సు చేయడం లేదు)</translation> <translation id="5508435575041083207">సైన్ అవుట్ చేసి, ఈ పరికరం నుండి డేటాను క్లియర్ చేయండి</translation> <translation id="5513681519188741830"><ph name="TIME" /> గం. క్రితం</translation> -<translation id="5525269841082836315">రహస్య పదబంధాన్ని సృష్టించండి</translation> +<translation id="5525269841082836315">రహస్య పదబంధాన్ని క్రియేట్ చేయండి</translation> <translation id="5532698011560297095">సైన్ ఇన్ చెయ్యలేరు</translation> <translation id="5548760955356983418">ఈ పరికరంలో వెబ్సైట్ను బ్రౌజ్ చేయడాన్ని ప్రారంభించి, ఆ తర్వాత దాన్ని మీ Macలో సులభంగా కొనసాగించడానికి హ్యాండ్ఆఫ్ మిమ్మల్ని అనుమతిస్తుంది. ప్రస్తుతం తెరిచిన వెబ్సైట్ మీ Mac డాక్లో కనిపిస్తుంది. @@ -588,7 +588,7 @@ <translation id="6642362222295953972">ప్రస్తుత ట్యాబ్కు మారు</translation> <translation id="6643016212128521049">క్లియర్ చేయి</translation> <translation id="6645899968535965230">QR కోడ్: <ph name="PAGE_TITLE" /></translation> -<translation id="6656103420185847513">ఫోల్డర్ను సవరించండి</translation> +<translation id="6656103420185847513">ఫోల్డర్ను ఎడిట్ చేయండి</translation> <translation id="6657585470893396449">పాస్వర్డ్</translation> <translation id="6668619169535738264">బుక్మార్క్ను సవరించు</translation> <translation id="6672241253012342409">సైట్లు మీ బ్రౌజింగ్ అనుభవాన్ని మెరుగుపరచడానికి కుక్కీలను ఉపయోగిస్తాయి, ఉదాహరణకు, మిమ్మల్ని సైన్ ఇన్ చేసి ఉంచడం లేదా మీ షాపింగ్ కార్ట్లోని ఐటెమ్లను గుర్తు చేయడం లాంటివి. @@ -837,7 +837,7 @@ <translation id="9124387962554796433">Search, అలాగే ఇతర Google సర్వీస్లను వ్యక్తిగతీకరించడం కోసం Google మీ హిస్టరీని ఉపయోగించవచ్చు.</translation> <translation id="9137526406337347448">Google సేవలు</translation> <translation id="9148126808321036104">మళ్ళీ సైన్ ఇన్ చేయండి</translation> -<translation id="9152539721251340337">ఒక QR కోడ్ను సృష్టించండి</translation> +<translation id="9152539721251340337">ఒక QR కోడ్ను క్రియేట్ చేయండి</translation> <translation id="9157836665414082580">డైలాగ్లను కుదించు</translation> <translation id="9188680907066685419">నిర్వహిత ఖాతా నుండి సైన్ అవుట్ చేయండి</translation> <translation id="9200875785104711666"><ph name="TIME" /> రో. క్రితం</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_uk.xtb b/ios/chrome/app/strings/resources/ios_strings_uk.xtb index 18bed1c0..b1dc146 100644 --- a/ios/chrome/app/strings/resources/ios_strings_uk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_uk.xtb
@@ -149,6 +149,7 @@ <translation id="2421004566762153674">Блокуються сторонні файли cookie</translation> <translation id="2421044535038393232">Продовжити редагувати</translation> <translation id="2435457462613246316">Показати пароль</translation> +<translation id="2476359652512522418">Не вибрано</translation> <translation id="2497852260688568942">Ваш адміністратор вимкнув синхронізацію</translation> <translation id="2500374554657206846">Опції для збереження паролів</translation> <translation id="2523363575747517183">Цей веб-сайт періодично намагається відкрити інший додаток.</translation>
diff --git a/ios/chrome/browser/download/background_service/BUILD.gn b/ios/chrome/browser/download/background_service/BUILD.gn index 7719292..4db3e84 100644 --- a/ios/chrome/browser/download/background_service/BUILD.gn +++ b/ios/chrome/browser/download/background_service/BUILD.gn
@@ -19,3 +19,23 @@ "//ios/chrome/browser/browser_state:browser_state", ] } + +source_set("unit_tests") { + testonly = true + configs += [ "//build/config/compiler:enable_arc" ] + deps = [ + ":background_service", + "//base", + "//base/test:test_support", + "//components/download/internal/background_service/ios:background_service", + "//components/download/internal/background_service/test:test_support", + "//components/download/public/background_service/test:test_support", + "//ios/chrome/browser/browser_state:test_support", + "//net", + "//net:test_support", + "//testing/gmock", + "//testing/gtest", + ] + + sources = [ "background_download_service_test.cc" ] +}
diff --git a/ios/chrome/browser/download/background_service/background_download_service_factory.cc b/ios/chrome/browser/download/background_service/background_download_service_factory.cc index caec324..415ab77 100644 --- a/ios/chrome/browser/download/background_service/background_download_service_factory.cc +++ b/ios/chrome/browser/download/background_service/background_download_service_factory.cc
@@ -61,6 +61,14 @@ BackgroundDownloadServiceFactory::BuildServiceInstanceFor( web::BrowserState* context) const { auto clients = std::make_unique<download::DownloadClientMap>(); + // Clients should be registered here. + return BuildServiceWithClients(context, std::move(clients)); +} + +std::unique_ptr<KeyedService> +BackgroundDownloadServiceFactory::BuildServiceWithClients( + web::BrowserState* context, + std::unique_ptr<download::DownloadClientMap> clients) const { auto client_set = std::make_unique<download::ClientSet>(std::move(clients)); base::FilePath storage_dir = context->GetStatePath().Append(kDownloadServiceStorageDir); @@ -76,10 +84,12 @@ auto file_monitor = std::make_unique<download::FileMonitorImpl>( files_storage_dir, background_task_runner); auto logger = std::make_unique<download::LoggerImpl>(); - auto* log_sink = logger.get(); - return std::make_unique<download::BackgroundDownloadServiceImpl>( + auto* logger_ptr = logger.get(); + auto service = std::make_unique<download::BackgroundDownloadServiceImpl>( std::move(client_set), std::move(model), download::BackgroundDownloadTaskHelper::Create(), std::move(file_monitor), - files_storage_dir, std::move(logger), log_sink, + files_storage_dir, std::move(logger), logger_ptr, base::DefaultClock::GetInstance()); + logger_ptr->SetLogSource(service.get()); + return service; }
diff --git a/ios/chrome/browser/download/background_service/background_download_service_factory.h b/ios/chrome/browser/download/background_service/background_download_service_factory.h index 0ae532d1..e77d538 100644 --- a/ios/chrome/browser/download/background_service/background_download_service_factory.h +++ b/ios/chrome/browser/download/background_service/background_download_service_factory.h
@@ -8,13 +8,14 @@ #include <memory> #include "base/no_destructor.h" +#include "components/download/public/background_service/clients.h" #include "components/keyed_service/ios/browser_state_keyed_service_factory.h" class ChromeBrowserState; namespace download { class BackgroundDownloadService; -} +} // namespace download // Singleton that owns all BackgroundDownloadServiceFactory and associates them // with ChromeBrowserState. @@ -27,6 +28,7 @@ private: friend class base::NoDestructor<BackgroundDownloadServiceFactory>; + friend class BackgroundDownloadServiceTest; BackgroundDownloadServiceFactory(); ~BackgroundDownloadServiceFactory() override; @@ -38,6 +40,10 @@ // BrowserStateKeyedServiceFactory implementation. std::unique_ptr<KeyedService> BuildServiceInstanceFor( web::BrowserState* context) const override; + + std::unique_ptr<KeyedService> BuildServiceWithClients( + web::BrowserState* context, + std::unique_ptr<download::DownloadClientMap> clients) const; }; #endif // IOS_CHROME_BROWSER_DOWNLOAD_BACKGROUND_SERVICE_BACKGROUND_DOWNLOAD_SERVICE_FACTORY_H_ \ No newline at end of file
diff --git a/ios/chrome/browser/download/background_service/background_download_service_test.cc b/ios/chrome/browser/download/background_service/background_download_service_test.cc new file mode 100644 index 0000000..01554b8 --- /dev/null +++ b/ios/chrome/browser/download/background_service/background_download_service_test.cc
@@ -0,0 +1,132 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include <memory> +#include <utility> + +#include "base/files/file_util.h" +#include "base/run_loop.h" +#include "base/test/bind.h" +#include "components/download/internal/background_service/ios/background_download_service_impl.h" +#include "components/download/internal/background_service/test/background_download_test_base.h" +#include "components/download/public/background_service/download_params.h" +#include "components/download/public/background_service/test/mock_client.h" +#include "ios/chrome/browser/browser_state/test_chrome_browser_state.h" +#include "ios/chrome/browser/download/background_service/background_download_service_factory.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" + +using ::testing::NiceMock; + +namespace { +const char kGuid[] = "broccoli"; + +// A background download service client used by this test. +class FakeClient : public download::test::MockClient { + public: + FakeClient() = default; + ~FakeClient() override = default; + + void WaitForInitialized() { + run_loop_ = std::make_unique<base::RunLoop>(); + run_loop_->Run(); + } + + void WaitForDownload() { + run_loop_ = std::make_unique<base::RunLoop>(); + run_loop_->Run(); + } + + const download::CompletionInfo* completion_info() const { + return completion_info_.get(); + } + + private: + // download::test::MockClient overrides. + void OnServiceInitialized( + bool state_lost, + const std::vector<download::DownloadMetaData>& downloads) override { + metadata_ = downloads; + DCHECK(run_loop_); + run_loop_->Quit(); + } + + void OnDownloadSucceeded( + const std::string& guid, + const download::CompletionInfo& completion_info) override { + download_guid_ = guid; + completion_info_ = + std::make_unique<download::CompletionInfo>(completion_info); + DCHECK(run_loop_); + run_loop_->Quit(); + } + + std::unique_ptr<base::RunLoop> run_loop_; + std::vector<download::DownloadMetaData> metadata_; + std::string download_guid_; + std::unique_ptr<download::CompletionInfo> completion_info_; +}; + +} // namespace + +// Browsertest-like integration unit test to verify the whole background +// download service. This is not a EG test since background download service +// doesn't have UI. Not in anonymous namespace due to friend class of +// BackgroundDownloadServiceFactory. +class BackgroundDownloadServiceTest + : public download::test::BackgroundDownloadTestBase { + protected: + BackgroundDownloadServiceTest() = default; + ~BackgroundDownloadServiceTest() override = default; + + void SetUp() override { + download::test::BackgroundDownloadTestBase::SetUp(); + TestChromeBrowserState::Builder builder; + browser_state_ = builder.Build(); + + // Inject a fake client through SetTestingFactory. + BackgroundDownloadServiceFactory* factory = + BackgroundDownloadServiceFactory::GetInstance(); + factory->SetTestingFactory( + browser_state_.get(), + base::BindLambdaForTesting([&](web::BrowserState* browser_state) { + auto fake_client = std::make_unique<NiceMock<FakeClient>>(); + fake_client_ = fake_client.get(); + auto clients = std::make_unique<download::DownloadClientMap>(); + clients->emplace(download::DownloadClient::TEST, + std::move(fake_client)); + return factory->BuildServiceWithClients(browser_state, + std::move(clients)); + })); + service_ = BackgroundDownloadServiceFactory::GetForBrowserState( + browser_state_.get()); + } + + void Download() { + download::DownloadParams params; + params.guid = kGuid; + params.client = download::DownloadClient::TEST; + params.request_params.method = "GET"; + params.request_params.url = server_.GetURL(/*relative_url=*/"/test"); + service_->StartDownload(std::move(params)); + } + + FakeClient* client() { return fake_client_; } + + private: + std::unique_ptr<ChromeBrowserState> browser_state_; + download::BackgroundDownloadService* service_; + FakeClient* fake_client_; +}; + +// Verifies download can be finished. +TEST_F(BackgroundDownloadServiceTest, DownloadComplete) { + client()->WaitForInitialized(); + Download(); + client()->WaitForDownload(); + std::string content; + ASSERT_TRUE( + base::ReadFileToString(client()->completion_info()->path, &content)); + EXPECT_EQ(BackgroundDownloadTestBase::kDefaultResponseContent, content); +}
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_am.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_am.xtb index 30c75f78..a405b45c 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_am.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_am.xtb
@@ -1,12 +1,14 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="am"> +<translation id="1196785757634502276"><ph name="WEBSITE" /> ላይ ለ«<ph name="USERNAME" />» የይለፍ ቃል አስቀድመው አስቀምጠዋል። ሊተኩት ይፈልጋሉ?</translation> <translation id="1276428923064733819">ቅዳ</translation> <translation id="1614914292771557551">ወደ Chrome ሲመለሱ የይለፍ ቃልዎ በGoogle መለያዎ (<ph name="EMAIL" />) ውስጥ ይቀመጣል</translation> <translation id="1706288056912586527">የይለፍ ቃል አሳይ</translation> <translation id="1977167321677356409">የይለፍ ቃል</translation> <translation id="2712586044587587728">የእርስዎ የChrome ይለፍ ቃላት በሌሎች መተግበሪያዎች ውስጥ ለመጠቀም ይገኛል። ይህን በማንኛውም ጊዜ በቅንብሮች መተግበሪያ ውስጥ ሊያጠፉት ይችላሉ።</translation> <translation id="3580107423202590938">የChrome ይለፍ ቃላት የሉም</translation> +<translation id="368844171100841558">ተካ</translation> <translation id="3753678329684433031">የChrome የይለፍ ቃልን ራስሙላ</translation> <translation id="3789385946721385622">የተጠቃሚ ስም</translation> <translation id="4064278913989596727">እገዛ</translation> @@ -36,6 +38,7 @@ <translation id="8219905600827687498">የተጠቆሙ የይለፍ ቃላት</translation> <translation id="8300526662653766176">የይለፍ ኮድ ያዘጋጁ</translation> <translation id="8332511935157148552">ምንም የይለፍ ቃላት አልተገኙም</translation> +<translation id="8486024683491936104">የይለፍ ቃል ይተካ?</translation> <translation id="8503813439785031346">የተጣቃሚ ስም</translation> <translation id="8518521100965196752">የይለፍ ቃላትን ለመጠቀም በመጀመሪያ በመሣሪያዎ ላይ የይለፍ ኮድ ማቀናበር አለብዎት።</translation> <translation id="8877181643142698531">ዩአርኤል</translation>
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ar.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ar.xtb index 9997c53..3845d9f 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ar.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ar.xtb
@@ -1,12 +1,14 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="ar"> +<translation id="1196785757634502276">سبق أن حفظت كلمة مرور لاسم المستخدم "<ph name="USERNAME" />" على <ph name="WEBSITE" />. هل تريد استبدالها؟</translation> <translation id="1276428923064733819">نسخ</translation> <translation id="1614914292771557551">سيتم حفظ كلمة المرور في حسابك على Google (<ph name="EMAIL" />) عندما تعاود استخدام Chrome.</translation> <translation id="1706288056912586527">عرض كلمة المرور</translation> <translation id="1977167321677356409">كلمة المرور</translation> <translation id="2712586044587587728">ستتوفَّر كلمات المرور في متصفِّح Chrome لاستخدامها في تطبيقات أخرى. ويمكنك إيقاف هذه الميزة في تطبيق "الإعدادات" في أي وقت.</translation> <translation id="3580107423202590938">ما مِن كلمات مرور محفوظة في متصفِّح Chrome</translation> +<translation id="368844171100841558">استبدال</translation> <translation id="3753678329684433031">الملء التلقائي لكلمة المرور في متصفِّح Chrome</translation> <translation id="3789385946721385622">اسم المستخدم</translation> <translation id="4064278913989596727">مساعدة</translation> @@ -36,6 +38,7 @@ <translation id="8219905600827687498">كلمات المرور المقترَحة</translation> <translation id="8300526662653766176">إعداد رمز مرور</translation> <translation id="8332511935157148552">لم يتم العثور على كلمات مرور.</translation> +<translation id="8486024683491936104">هل تريد استبدال كلمة المرور؟</translation> <translation id="8503813439785031346">اسم المستخدم</translation> <translation id="8518521100965196752">لاستخدام كلمات المرور، يجب أولاً إعداد رمز مرور على جهازك.</translation> <translation id="8877181643142698531">عنوان URL</translation>
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_bg.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_bg.xtb index d92743dd..10932bd1 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_bg.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_bg.xtb
@@ -1,12 +1,14 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="bg"> +<translation id="1196785757634502276">Вече сте запазили парола за потребителския профил в(ъв) <ph name="WEBSITE" /> с име <ph name="USERNAME" />. Искате ли да я замените?</translation> <translation id="1276428923064733819">Копиране</translation> <translation id="1614914292771557551">Паролата ви ще бъде запазена в профила ви в Google (<ph name="EMAIL" />), когато се върнете в Chrome</translation> <translation id="1706288056912586527">Показване на паролата</translation> <translation id="1977167321677356409">Парола</translation> <translation id="2712586044587587728">Паролите ви в Chrome ще бъдат достъпни за използване в други приложения. Можете да изключите това по всяко време от приложението „Настройки“.</translation> <translation id="3580107423202590938">Няма пароли в Chrome</translation> +<translation id="368844171100841558">Замяна</translation> <translation id="3753678329684433031">Автоматично попълване на паролата в Chrome</translation> <translation id="3789385946721385622">Потребителско име</translation> <translation id="4064278913989596727">Помощ</translation> @@ -36,6 +38,7 @@ <translation id="8219905600827687498">Предложени пароли</translation> <translation id="8300526662653766176">Задаване на код за достъп</translation> <translation id="8332511935157148552">Няма открити пароли</translation> +<translation id="8486024683491936104">Да се замени ли паролата?</translation> <translation id="8503813439785031346">Потребителско име</translation> <translation id="8518521100965196752">За да използвате паролите, трябва първо да зададете код за достъп на устройството си.</translation> <translation id="8877181643142698531">URL адрес</translation>
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_bs.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_bs.xtb index 59af2960..131c4f9 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_bs.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_bs.xtb
@@ -1,12 +1,14 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="bs"> +<translation id="1196785757634502276">Već ste sačuvali lozinku za korisnika "<ph name="USERNAME" />" na web lokaciji <ph name="WEBSITE" />. Želite li je zamijeniti?</translation> <translation id="1276428923064733819">Kopiraj</translation> <translation id="1614914292771557551">Lozinka će se sačuvati na Google račun (<ph name="EMAIL" />) kada se vratite u Chrome</translation> <translation id="1706288056912586527">Prikaži lozinku</translation> <translation id="1977167321677356409">Lozinka</translation> <translation id="2712586044587587728">Vaše lozinke na Chromeu će biti dostupne da ih koristite u drugim aplikacijama. To možete isključiti u aplikaciji Postavke bilo kada.</translation> <translation id="3580107423202590938">Nema lozinki na Chromeu</translation> +<translation id="368844171100841558">Zamijeni</translation> <translation id="3753678329684433031">Automatsko popunjavanje lozinke za Chrome</translation> <translation id="3789385946721385622">Korisničko ime</translation> <translation id="4064278913989596727">Pomoć</translation> @@ -36,6 +38,7 @@ <translation id="8219905600827687498">Predložene lozinke</translation> <translation id="8300526662653766176">Postavite šifru</translation> <translation id="8332511935157148552">Nije pronađena nijedna lozinka</translation> +<translation id="8486024683491936104">Zamijeniti lozinku?</translation> <translation id="8503813439785031346">Korisničko ime</translation> <translation id="8518521100965196752">Prvo postavite šifru na uređaju da koristite lozinke.</translation> <translation id="8877181643142698531">URL</translation>
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ca.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ca.xtb index 2c7fd7e1..39b3d5b 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ca.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ca.xtb
@@ -1,12 +1,14 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="ca"> +<translation id="1196785757634502276">Ja has desat una contrasenya per a <ph name="USERNAME" /> a <ph name="WEBSITE" />. Vols substituir-la?</translation> <translation id="1276428923064733819">Copia</translation> <translation id="1614914292771557551">La contrasenya es desarà al teu Compte de Google (<ph name="EMAIL" />) quan tornis a Chrome</translation> <translation id="1706288056912586527">Mostra la contrasenya</translation> <translation id="1977167321677356409">Contrasenya</translation> <translation id="2712586044587587728">Les contrasenyes de Chrome estaran disponibles per utilitzar-les en altres aplicacions. Pots desactivar aquesta opció en qualsevol moment a l'aplicació Configuració.</translation> <translation id="3580107423202590938">No hi ha cap contrasenya de Chrome</translation> +<translation id="368844171100841558">Substitueix</translation> <translation id="3753678329684433031">Autocompleta la contrasenya de Chrome</translation> <translation id="3789385946721385622">Nom d'usuari</translation> <translation id="4064278913989596727">Ajuda</translation> @@ -36,6 +38,7 @@ <translation id="8219905600827687498">Contrasenyes suggerides</translation> <translation id="8300526662653766176">Estableix una contrasenya</translation> <translation id="8332511935157148552">No s'ha trobat cap contrasenya</translation> +<translation id="8486024683491936104">Vols substituir la contrasenya?</translation> <translation id="8503813439785031346">Nom d'usuari</translation> <translation id="8518521100965196752">Per utilitzar les contrasenyes, primer has d'establir una contrasenya al dispositiu.</translation> <translation id="8877181643142698531">URL</translation>
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_da.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_da.xtb index b9ea6ca..cdcf4fb 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_da.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_da.xtb
@@ -1,12 +1,14 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="da"> +<translation id="1196785757634502276">Du har allerede gemt en adgangskode tilhørende "<ph name="USERNAME" />" på <ph name="WEBSITE" />. Vil du erstatte den?</translation> <translation id="1276428923064733819">Kopiér</translation> <translation id="1614914292771557551">Din adgangskode gemmes på din Google-konto (<ph name="EMAIL" />), når du vender tilbage til Chrome</translation> <translation id="1706288056912586527">Vis adgangskode</translation> <translation id="1977167321677356409">Adgangskode</translation> <translation id="2712586044587587728">Dine Chrome-adgangskoder kan bruges i andre apps. Du kan altid deaktivere dette i appen Indstillinger.</translation> <translation id="3580107423202590938">Der er ingen Chrome-adgangskoder</translation> +<translation id="368844171100841558">Erstat</translation> <translation id="3753678329684433031">Udfyld Chrome-adgangskode automatisk</translation> <translation id="3789385946721385622">Brugernavn</translation> <translation id="4064278913989596727">Hjælp</translation> @@ -36,6 +38,7 @@ <translation id="8219905600827687498">Forslag til adgangskoder</translation> <translation id="8300526662653766176">Angiv en adgangskode</translation> <translation id="8332511935157148552">Der blev ikke fundet nogen adgangskoder</translation> +<translation id="8486024683491936104">Vil du erstatte adgangskoden?</translation> <translation id="8503813439785031346">Brugernavn</translation> <translation id="8518521100965196752">Før du kan bruge adgangskoder, skal du angive en adgangskode på din enhed.</translation> <translation id="8877181643142698531">Webadresse</translation>
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_el.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_el.xtb index 6b7d4d32..08d49efb 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_el.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_el.xtb
@@ -1,12 +1,14 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="el"> +<translation id="1196785757634502276">Έχετε ήδη αποθηκεύσει έναν κωδικό πρόσβασης για τον χρήστη "<ph name="USERNAME" />" στον ιστότοπο <ph name="WEBSITE" />. Θέλετε να τον αντικαταστήσετε;</translation> <translation id="1276428923064733819">Αντιγραφή</translation> <translation id="1614914292771557551">Ο κωδικός πρόσβασης θα αποθηκευτεί στον Λογαριασμό σας Google (<ph name="EMAIL" />) όταν επιστρέψετε στο Chrome.</translation> <translation id="1706288056912586527">Εμφάνιση κωδικού πρόσβασης</translation> <translation id="1977167321677356409">Κωδικός πρόσβασης</translation> <translation id="2712586044587587728">Οι κωδικοί πρόσβασής σας στο Chrome θα είναι διαθέσιμοι για χρήση σε άλλες εφαρμογές. Μπορείτε να απενεργοποιήσετε αυτήν τη λειτουργία στην εφαρμογή Ρυθμίσεις ανά πάσα στιγμή.</translation> <translation id="3580107423202590938">Δεν υπάρχουν κωδικοί πρόσβασης Chrome</translation> +<translation id="368844171100841558">Αντικατάσταση</translation> <translation id="3753678329684433031">Αυτοσυμπλήρωση κωδικού πρόσβασης Chrome</translation> <translation id="3789385946721385622">Όνομα χρήστη</translation> <translation id="4064278913989596727">Βοήθεια</translation> @@ -36,6 +38,7 @@ <translation id="8219905600827687498">Προτεινόμενοι κωδικοί πρόσβασης</translation> <translation id="8300526662653766176">Ορισμός κωδικού πρόσβασης</translation> <translation id="8332511935157148552">Δεν βρέθηκαν κωδικοί πρόσβασης</translation> +<translation id="8486024683491936104">Αντικατάσταση κωδικού πρόσβασης;</translation> <translation id="8503813439785031346">Όνομα χρήστη</translation> <translation id="8518521100965196752">Για να χρησιμοποιήσετε κωδικούς πρόσβασης, θα πρέπει πρώτα να ορίσετε έναν κωδικό πρόσβασης στη συσκευή σας.</translation> <translation id="8877181643142698531">URL</translation>
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_en-GB.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_en-GB.xtb index 45bf4fc..6ba0ddd 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_en-GB.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_en-GB.xtb
@@ -1,12 +1,14 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="en-GB"> +<translation id="1196785757634502276">You already saved a password for '<ph name="USERNAME" />' at <ph name="WEBSITE" />. Do you want to replace it?</translation> <translation id="1276428923064733819">Copy</translation> <translation id="1614914292771557551">Your password will be saved in your Google Account (<ph name="EMAIL" />) when you come back to Chrome</translation> <translation id="1706288056912586527">Show password</translation> <translation id="1977167321677356409">Password</translation> <translation id="2712586044587587728">Your Chrome passwords will be available to use in other apps. You can turn this off in the settings app at any time.</translation> <translation id="3580107423202590938">No Chrome passwords</translation> +<translation id="368844171100841558">Replace</translation> <translation id="3753678329684433031">Auto-fill Chrome password</translation> <translation id="3789385946721385622">Username</translation> <translation id="4064278913989596727">Help</translation> @@ -36,6 +38,7 @@ <translation id="8219905600827687498">Suggested passwords</translation> <translation id="8300526662653766176">Set a passcode</translation> <translation id="8332511935157148552">No passwords found</translation> +<translation id="8486024683491936104">Replace password?</translation> <translation id="8503813439785031346">Username</translation> <translation id="8518521100965196752">To use passwords, you must first set a passcode on your device.</translation> <translation id="8877181643142698531">URL</translation>
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_es.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_es.xtb index 2a1ff7de..5d39a96 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_es.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_es.xtb
@@ -1,12 +1,14 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="es"> +<translation id="1196785757634502276">Ya has guardado una contraseña de "<ph name="USERNAME" />" en <ph name="WEBSITE" />. ¿Quieres sustituirla?</translation> <translation id="1276428923064733819">Copiar</translation> <translation id="1614914292771557551">La contraseña se guardará en tu cuenta de Google (<ph name="EMAIL" />) cuando vuelvas a Chrome</translation> <translation id="1706288056912586527">Mostrar contraseña</translation> <translation id="1977167321677356409">Contraseña</translation> <translation id="2712586044587587728">Podrás usar tus contraseñas de Chrome en otras aplicaciones. Puedes desactivar esta función en cualquier momento desde la aplicación Ajustes.</translation> <translation id="3580107423202590938">No hay contraseñas de Chrome</translation> +<translation id="368844171100841558">Sustituir</translation> <translation id="3753678329684433031">Autocompletar contraseña de Chrome</translation> <translation id="3789385946721385622">Nombre de usuario</translation> <translation id="4064278913989596727">Ayuda</translation> @@ -36,6 +38,7 @@ <translation id="8219905600827687498">Contraseñas sugeridas</translation> <translation id="8300526662653766176">Establecer una contraseña</translation> <translation id="8332511935157148552">No se han encontrado contraseñas</translation> +<translation id="8486024683491936104">¿Sustituir contraseña?</translation> <translation id="8503813439785031346">Nombre de usuario</translation> <translation id="8518521100965196752">Para usar las contraseñas, primero debes establecer una contraseña en tu dispositivo.</translation> <translation id="8877181643142698531">URL</translation>
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_et.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_et.xtb index 9043749..e503728d 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_et.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_et.xtb
@@ -1,12 +1,14 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="et"> +<translation id="1196785757634502276">Olete kasutaja „<ph name="USERNAME" />“ jaoks parooli saidil <ph name="WEBSITE" /> juba salvestanud. Kas soovite selle asendada?</translation> <translation id="1276428923064733819">Kopeeri</translation> <translation id="1614914292771557551">Kui tulete Chrome'i tagasi, salvestatakse parool teie Google'i kontole (<ph name="EMAIL" />)</translation> <translation id="1706288056912586527">Kuva parool</translation> <translation id="1977167321677356409">Parool</translation> <translation id="2712586044587587728">Teie Chrome'i paroole saab kasutada muudes rakendustes. Selle saab rakenduses Seaded alati välja lülitada.</translation> <translation id="3580107423202590938">Chrome'i paroole pole</translation> +<translation id="368844171100841558">Asenda</translation> <translation id="3753678329684433031">Chrome'i parooli automaatne täitmine</translation> <translation id="3789385946721385622">Kasutajanimi</translation> <translation id="4064278913989596727">Abi</translation> @@ -36,6 +38,7 @@ <translation id="8219905600827687498">Soovitatud paroolid</translation> <translation id="8300526662653766176">Pääsukoodi seadistamine</translation> <translation id="8332511935157148552">Paroole ei leitud</translation> +<translation id="8486024683491936104">Kas asendada parool?</translation> <translation id="8503813439785031346">Kasutajanimi</translation> <translation id="8518521100965196752">Paroolide kasutamiseks peate oma seadmes esmalt pääsukoodi seadistama.</translation> <translation id="8877181643142698531">URL</translation>
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fa.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fa.xtb index 3c3bfb35..d8d09b6 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fa.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fa.xtb
@@ -1,12 +1,14 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="fa"> +<translation id="1196785757634502276">قبلاً گذرواژهای برای «<ph name="USERNAME" />» در <ph name="WEBSITE" /> ذخیره کردهاید. میخواهید آن را جایگزین کنید؟</translation> <translation id="1276428923064733819">کپی کردن</translation> <translation id="1614914292771557551">وقتی به Chrome برگردید، گذرواژهتان در «حساب Google» شما (<ph name="EMAIL" />) ذخیره خواهد شد</translation> <translation id="1706288056912586527">نمایش گذرواژه</translation> <translation id="1977167321677356409">گذرواژه</translation> <translation id="2712586044587587728">گذرواژههای Chrome برای استفاده در برنامههای دیگر دردسترس خواهد بود. هرزمان خواستید میتوانید این تنظیم را در برنامه «تنظیمات» خاموش کنید.</translation> <translation id="3580107423202590938">گذرواژهای در Chrome نیست</translation> +<translation id="368844171100841558">جایگزین شود</translation> <translation id="3753678329684433031">تکمیل خودکار گذرواژه Chrome</translation> <translation id="3789385946721385622">نام کاربری</translation> <translation id="4064278913989596727">راهنما</translation> @@ -36,6 +38,7 @@ <translation id="8219905600827687498">گذرواژههای پیشنهادشده</translation> <translation id="8300526662653766176">تنظیم گذرنویسه</translation> <translation id="8332511935157148552">گذرواژهای پیدا نشد</translation> +<translation id="8486024683491936104">گذرواژه جایگزین شود؟</translation> <translation id="8503813439785031346">نام کاربری</translation> <translation id="8518521100965196752">برای استفاده از گذرواژهها، ابتدا باید گذرنویسهای در دستگاه تنظیم کنید.</translation> <translation id="8877181643142698531">نشانی وب</translation>
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fr.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fr.xtb index fb44cf2..cf54c94 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fr.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fr.xtb
@@ -1,12 +1,14 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="fr"> +<translation id="1196785757634502276">Vous avez déjà enregistré un mot de passe pour "<ph name="USERNAME" />" sur <ph name="WEBSITE" />. Voulez-vous le remplacer ?</translation> <translation id="1276428923064733819">Copier</translation> <translation id="1614914292771557551">Votre mot de passe sera enregistré dans votre compte Google (<ph name="EMAIL" />) lorsque vous reviendrez sur Chrome</translation> <translation id="1706288056912586527">Afficher le mot de passe</translation> <translation id="1977167321677356409">Mot de passe</translation> <translation id="2712586044587587728">Vos mots de passe Chrome pourront être utilisés dans d'autres applications. Sachez que vous pouvez désactiver cette option à tout moment dans l'application Paramètres.</translation> <translation id="3580107423202590938">Aucun mot de passe Chrome</translation> +<translation id="368844171100841558">Remplacer</translation> <translation id="3753678329684433031">Saisir automatiquement les mots de passe Chrome</translation> <translation id="3789385946721385622">Nom d'utilisateur</translation> <translation id="4064278913989596727">Aide</translation> @@ -36,6 +38,7 @@ <translation id="8219905600827687498">Mots de passe suggérés</translation> <translation id="8300526662653766176">Définir un code secret</translation> <translation id="8332511935157148552">Aucun mot de passe trouvé</translation> +<translation id="8486024683491936104">Remplacer le mot de passe ?</translation> <translation id="8503813439785031346">Nom d'utilisateur</translation> <translation id="8518521100965196752">Pour utiliser les mots de passe, vous devez d'abord définir un code secret sur votre appareil.</translation> <translation id="8877181643142698531">URL</translation>
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_hr.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_hr.xtb index f30f6601..ac5b77a 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_hr.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_hr.xtb
@@ -1,12 +1,14 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="hr"> +<translation id="1196785757634502276">Već ste spremili zaporku za "<ph name="USERNAME" />" na <ph name="WEBSITE" />. Želite li je zamijeniti?</translation> <translation id="1276428923064733819">Kopiraj</translation> <translation id="1614914292771557551">Zaporka će se spremiti na vaš Google račun (<ph name="EMAIL" />) kad se vratite u Chrome</translation> <translation id="1706288056912586527">Prikaži zaporku</translation> <translation id="1977167321677356409">Zaporka</translation> <translation id="2712586044587587728">Vaše zaporke iz Chromea bit će dostupne za upotrebu u drugim aplikacijama. To uvijek možete isključiti u aplikaciji Postavke.</translation> <translation id="3580107423202590938">Nema zaporki za Chrome</translation> +<translation id="368844171100841558">Zamijeni</translation> <translation id="3753678329684433031">Automatsko popunjavanje zaporki u Chromeu</translation> <translation id="3789385946721385622">Korisničko ime</translation> <translation id="4064278913989596727">Pomoć</translation> @@ -36,6 +38,7 @@ <translation id="8219905600827687498">Predložene zaporke</translation> <translation id="8300526662653766176">Postavite šifru</translation> <translation id="8332511935157148552">Nije pronađena nijedna zaporka</translation> +<translation id="8486024683491936104">Zamijeniti zaporku?</translation> <translation id="8503813439785031346">Korisničko ime</translation> <translation id="8518521100965196752">Da biste koristili zaporke, najprije morate postaviti šifru na uređaju.</translation> <translation id="8877181643142698531">URL</translation>
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_hu.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_hu.xtb index 27a6597..49b648b 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_hu.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_hu.xtb
@@ -1,12 +1,14 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="hu"> +<translation id="1196785757634502276">Már mentett jelszót a(z) „<ph name="USERNAME" />” felhasználónévhez a(z) <ph name="WEBSITE" /> webhelyen. Szeretné lecserélni?</translation> <translation id="1276428923064733819">Másolás</translation> <translation id="1614914292771557551">Jelszava mentésre kerül a Google-fiókjába (<ph name="EMAIL" />), hogy ismét használhassa, amikor visszatér a Chrome-ba</translation> <translation id="1706288056912586527">Jelszó mutatása</translation> <translation id="1977167321677356409">Jelszó</translation> <translation id="2712586044587587728">Chrome-jelszavait más alkalmazásokban is használhatja. A funkciót a Beállítások alkalmazásban bármikor kikapcsolhatja.</translation> <translation id="3580107423202590938">Nincsenek Chrome-jelszavak</translation> +<translation id="368844171100841558">Csere</translation> <translation id="3753678329684433031">Chrome-jelszó automatikus kitöltése</translation> <translation id="3789385946721385622">Felhasználónév</translation> <translation id="4064278913989596727">Súgó</translation> @@ -36,6 +38,7 @@ <translation id="8219905600827687498">Javasolt jelszavak</translation> <translation id="8300526662653766176">Biztonsági kód beállítása</translation> <translation id="8332511935157148552">Nem találhatók jelszavak</translation> +<translation id="8486024683491936104">Biztosan cseréli a jelszót?</translation> <translation id="8503813439785031346">Felhasználónév</translation> <translation id="8518521100965196752">A jelszavak használatához előbb be kell állítania az eszközön a biztonsági kódot.</translation> <translation id="8877181643142698531">URL</translation>
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_kk.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_kk.xtb index 7c7877d2..bac0cfb 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_kk.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_kk.xtb
@@ -1,12 +1,14 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="kk"> +<translation id="1196785757634502276"><ph name="WEBSITE" /> веб-сайтындағы "<ph name="USERNAME" />" үшін құпия сөзді сақтап қойдыңыз. Оны ауыстырғыңыз келе ме?</translation> <translation id="1276428923064733819">Көшіру</translation> <translation id="1614914292771557551">Құпия сөзіңіз Chrome браузеріне қайта оралған кезде, Google есептік жазбасында (<ph name="EMAIL" />) сақталады.</translation> <translation id="1706288056912586527">Құпия сөзді көрсету</translation> <translation id="1977167321677356409">Құпия сөз</translation> <translation id="2712586044587587728">Chrome құпия сөздерін басқа қолданбаларда пайдалануға болады. Мұны кез келген уақытта "Параметрлер" қолданбасынан өшіре аласыз.</translation> <translation id="3580107423202590938">Chrome құпия сөздері жоқ</translation> +<translation id="368844171100841558">Ауыстыру</translation> <translation id="3753678329684433031">Chrome құпия сөзін автотолтыру</translation> <translation id="3789385946721385622">Пайдаланушы аты</translation> <translation id="4064278913989596727">Анықтама</translation> @@ -36,6 +38,7 @@ <translation id="8219905600827687498">Ұсынылатын құпия сөздер</translation> <translation id="8300526662653766176">Рұқсат кодын орнату</translation> <translation id="8332511935157148552">Құпия сөз табылмады.</translation> +<translation id="8486024683491936104">Құпия сөзді ауыстыру керек пе?</translation> <translation id="8503813439785031346">Пайдаланушы аты</translation> <translation id="8518521100965196752">Құпия сөздерді пайдалану үшін алдымен құрылғыға рұқсат кодын орнату керек.</translation> <translation id="8877181643142698531">URL</translation>
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ky.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ky.xtb index a8c3bb38..12671a0c 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ky.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ky.xtb
@@ -1,12 +1,14 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="ky"> +<translation id="1196785757634502276">"<ph name="USERNAME" />" үчүн <ph name="WEBSITE" /> вебсайтында сырсөздү сактап койгонсуз. Аны өзгөртөсүзбү?</translation> <translation id="1276428923064733819">Көчүрүү</translation> <translation id="1614914292771557551">Chrome'го кайтып келгениңизде сырсөзүңүз Google аккаунтуңузга (<ph name="EMAIL" />) сакталат</translation> <translation id="1706288056912586527">Сырсөздү көрсөтүү</translation> <translation id="1977167321677356409">Сырсөз</translation> <translation id="2712586044587587728">Chrome'догу сырсөздөрүңүздү башка колдонмолордо пайдаланууга болот. Муну Жөндөөлөрдөн каалаган убакта өчүрүп койсоңуз болот.</translation> <translation id="3580107423202590938">Chrome сырсөздөрү жок</translation> +<translation id="368844171100841558">Алмаштыруу</translation> <translation id="3753678329684433031">Chrome сырсөздөрүн автотолтуруу</translation> <translation id="3789385946721385622">Колдонуучунун аты</translation> <translation id="4064278913989596727">Жардам</translation> @@ -36,6 +38,7 @@ <translation id="8219905600827687498">Сунушталган сырсөздөр</translation> <translation id="8300526662653766176">Өткөрүүчү кодду коюуңуз</translation> <translation id="8332511935157148552">Сырсөздөр табылган жок</translation> +<translation id="8486024683491936104">Сырсөздү өзгөртөсүзбү?</translation> <translation id="8503813439785031346">Колдонуучунун ысымы</translation> <translation id="8518521100965196752">Сырсөздөрдү колдонуу үчүн адегенде, түзмөгүңүздөгү өткөрүүчү кодду жөндөп алышыңыз керек.</translation> <translation id="8877181643142698531">URL</translation>
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_pl.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_pl.xtb index 9f02182..a3657eb 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_pl.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_pl.xtb
@@ -1,12 +1,14 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="pl"> +<translation id="1196785757634502276">Masz już zapisane hasło do strony <ph name="WEBSITE" /> dla użytkownika „<ph name="USERNAME" />”. Czy chcesz je zastąpić?</translation> <translation id="1276428923064733819">Kopiuj</translation> <translation id="1614914292771557551">Gdy wrócisz do Chrome, hasło będzie zapisane na Twoim koncie Google (<ph name="EMAIL" />)</translation> <translation id="1706288056912586527">Pokaż hasło</translation> <translation id="1977167321677356409">Hasło</translation> <translation id="2712586044587587728">Twoje hasła z Chrome będą dostępne do użycia w innych aplikacjach. W każdej chwili możesz to wyłączyć w aplikacji Ustawienia.</translation> <translation id="3580107423202590938">Brak haseł w Chrome</translation> +<translation id="368844171100841558">Zastąp</translation> <translation id="3753678329684433031">Wypełniaj hasła w Chrome</translation> <translation id="3789385946721385622">Nazwa użytkownika</translation> <translation id="4064278913989596727">Pomoc</translation> @@ -36,6 +38,7 @@ <translation id="8219905600827687498">Sugerowane hasła</translation> <translation id="8300526662653766176">Ustaw kod dostępu</translation> <translation id="8332511935157148552">Nie znaleziono haseł</translation> +<translation id="8486024683491936104">Zastąpić hasło?</translation> <translation id="8503813439785031346">Nazwa użytkownika</translation> <translation id="8518521100965196752">Aby użyć haseł, musisz najpierw ustawić kod dostępu na urządzeniu.</translation> <translation id="8877181643142698531">URL</translation>
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_pt-BR.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_pt-BR.xtb index 1f14e47..08b9478c 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_pt-BR.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_pt-BR.xtb
@@ -1,12 +1,14 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="pt-BR"> +<translation id="1196785757634502276">Você já salvou uma senha para "<ph name="USERNAME" />" em <ph name="WEBSITE" />. Quer substituí-la?</translation> <translation id="1276428923064733819">Copiar</translation> <translation id="1614914292771557551">A senha será salva na sua Conta do Google (<ph name="EMAIL" />) quando você voltar ao Chrome</translation> <translation id="1706288056912586527">Mostrar senha</translation> <translation id="1977167321677356409">Senha</translation> <translation id="2712586044587587728">Suas senhas do Chrome estarão disponíveis para uso em outros apps. É possível desativar essa opção no app Configurações a qualquer momento.</translation> <translation id="3580107423202590938">Não há nenhuma senha no Chrome</translation> +<translation id="368844171100841558">Substituir</translation> <translation id="3753678329684433031">Preenchimento automático de senha do Chrome</translation> <translation id="3789385946721385622">Nome de usuário</translation> <translation id="4064278913989596727">Ajuda</translation> @@ -36,6 +38,7 @@ <translation id="8219905600827687498">Senhas sugeridas</translation> <translation id="8300526662653766176">Defina uma senha</translation> <translation id="8332511935157148552">Nenhuma senha encontrada</translation> +<translation id="8486024683491936104">Substituir senha?</translation> <translation id="8503813439785031346">Nome de usuário</translation> <translation id="8518521100965196752">Para usar senhas, defina uma no dispositivo primeiro.</translation> <translation id="8877181643142698531">URL</translation>
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ro.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ro.xtb index a2a223c..eb503da 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ro.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ro.xtb
@@ -1,12 +1,14 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="ro"> +<translation id="1196785757634502276">Ai salvat deja o parolă pentru <ph name="USERNAME" /> la <ph name="WEBSITE" />. Vrei să o înlocuiești?</translation> <translation id="1276428923064733819">Copiază</translation> <translation id="1614914292771557551">Parola ta va fi salvată în Contul Google (<ph name="EMAIL" />) când revii la Chrome</translation> <translation id="1706288056912586527">Afișează parola</translation> <translation id="1977167321677356409">Parolă</translation> <translation id="2712586044587587728">Parolele din Chrome vor fi disponibile pentru a fi folosite în alte aplicații. Poți să dezactivezi oricând această opțiune din aplicația Setări.</translation> <translation id="3580107423202590938">Nu există parole în Chrome</translation> +<translation id="368844171100841558">Înlocuiește</translation> <translation id="3753678329684433031">Completează automat parola Chrome</translation> <translation id="3789385946721385622">Nume de utilizator</translation> <translation id="4064278913989596727">Ajutor</translation> @@ -36,6 +38,7 @@ <translation id="8219905600827687498">Parole sugerate</translation> <translation id="8300526662653766176">Setează o parolă</translation> <translation id="8332511935157148552">Nu s-au găsit parole</translation> +<translation id="8486024683491936104">Înlocuiești parola?</translation> <translation id="8503813439785031346">Nume de utilizator</translation> <translation id="8518521100965196752">Pentru a folosi parolele, trebuie mai întâi să setezi o parolă pe dispozitiv.</translation> <translation id="8877181643142698531">Adresa URL</translation>
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sk.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sk.xtb index 229a3b8..e36c5af 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sk.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sk.xtb
@@ -1,12 +1,14 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="sk"> +<translation id="1196785757634502276">Heslo pre <ph name="USERNAME" /> ste si už uložili na <ph name="WEBSITE" />. Chcete ho nahradiť?</translation> <translation id="1276428923064733819">Kopírovať</translation> <translation id="1614914292771557551">Heslo bude uložené do vášho účtu Google (<ph name="EMAIL" />), keď znova použijete Chrome</translation> <translation id="1706288056912586527">Zobraziť heslo</translation> <translation id="1977167321677356409">Heslo</translation> <translation id="2712586044587587728">Heslá Chromu budete môcť použiť v ďalších aplikáciách. Túto možnosť môžete kedykoľvek vypnúť v aplikácii Nastavenia.</translation> <translation id="3580107423202590938">Žiadne heslá Chromu</translation> +<translation id="368844171100841558">Nahradiť</translation> <translation id="3753678329684433031">Automatické dopĺňanie hesiel Chromu</translation> <translation id="3789385946721385622">Používateľské meno</translation> <translation id="4064278913989596727">Pomocník</translation> @@ -36,6 +38,7 @@ <translation id="8219905600827687498">Navrhnuté heslá</translation> <translation id="8300526662653766176">Nastavenie vstupného kódu</translation> <translation id="8332511935157148552">Neboli nájdené žiadne heslá</translation> +<translation id="8486024683491936104">Chcete nahradiť heslo?</translation> <translation id="8503813439785031346">Meno používateľa</translation> <translation id="8518521100965196752">Ak chcete používať heslá, najprv musíte v zariadení nastaviť vstupný kód.</translation> <translation id="8877181643142698531">Webová adresa</translation>
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sl.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sl.xtb index 4ab1cce..07b8b4b 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sl.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sl.xtb
@@ -1,12 +1,14 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="sl"> +<translation id="1196785757634502276">Na <ph name="WEBSITE" /> ste že shranili geslo za »<ph name="USERNAME" />«. Ali ga želite zamenjati?</translation> <translation id="1276428923064733819">Kopiraj</translation> <translation id="1614914292771557551">Geslo bo shranjeno v računu Google (<ph name="EMAIL" />), ko se vrnete v Chrome.</translation> <translation id="1706288056912586527">Pokaži geslo</translation> <translation id="1977167321677356409">Geslo</translation> <translation id="2712586044587587728">Gesla v Chromu bodo na voljo za uporabo v drugih aplikacijah. To lahko kadar koli izklopite v aplikaciji Nastavitve.</translation> <translation id="3580107423202590938">Ni gesel v Chromu</translation> +<translation id="368844171100841558">Zamenjaj</translation> <translation id="3753678329684433031">Samodejno izpolnjevanje gesla v Chromu</translation> <translation id="3789385946721385622">Uporabniško ime</translation> <translation id="4064278913989596727">Pomoč</translation> @@ -36,6 +38,7 @@ <translation id="8219905600827687498">Predlagana gesla</translation> <translation id="8300526662653766176">Nastavitev gesla</translation> <translation id="8332511935157148552">Najdeno ni bilo nobeno geslo</translation> +<translation id="8486024683491936104">Želite zamenjati geslo?</translation> <translation id="8503813439785031346">Uporabniško ime</translation> <translation id="8518521100965196752">Če želite uporabiti gesla, morate najprej nastaviti geslo v napravi.</translation> <translation id="8877181643142698531">URL</translation>
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sr-Latn.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sr-Latn.xtb index 314cf435..7d99bae 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sr-Latn.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sr-Latn.xtb
@@ -1,12 +1,14 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="sr-Latn"> +<translation id="1196785757634502276">Već ste sačuvali lozinku za „<ph name="USERNAME" />“ na <ph name="WEBSITE" />. Želite da je zamenite?</translation> <translation id="1276428923064733819">Kopiraj</translation> <translation id="1614914292771557551">Lozinka se čuva na vašem Google nalogu (<ph name="EMAIL" />) kada ponovo otvorite Chrome</translation> <translation id="1706288056912586527">Prikaži lozinku</translation> <translation id="1977167321677356409">Lozinka</translation> <translation id="2712586044587587728">Moći ćete da koristite Chrome lozinke u drugim aplikacijama. Ovo možete da isključite u bilo kom trenutku u aplikaciji Podešavanja.</translation> <translation id="3580107423202590938">Nema lozinki za Chrome</translation> +<translation id="368844171100841558">Zameni</translation> <translation id="3753678329684433031">Automatsko popunjavanje lozinke za Chrome</translation> <translation id="3789385946721385622">Korisničko ime</translation> <translation id="4064278913989596727">Pomoć</translation> @@ -36,6 +38,7 @@ <translation id="8219905600827687498">Predložene lozinke</translation> <translation id="8300526662653766176">Podesite šifru</translation> <translation id="8332511935157148552">Nije pronađena nijedna lozinka</translation> +<translation id="8486024683491936104">Želite da zamenite lozinku?</translation> <translation id="8503813439785031346">Korisničko ime</translation> <translation id="8518521100965196752">Da biste koristili lozinke, prvo morate da podesite šifru na uređaju.</translation> <translation id="8877181643142698531">URL</translation>
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sr.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sr.xtb index bca0621..6da3946 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sr.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sr.xtb
@@ -1,12 +1,14 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="sr"> +<translation id="1196785757634502276">Већ сте сачували лозинку за „<ph name="USERNAME" />“ на <ph name="WEBSITE" />. Желите да је замените?</translation> <translation id="1276428923064733819">Копирај</translation> <translation id="1614914292771557551">Лозинка се чува на вашем Google налогу (<ph name="EMAIL" />) када поново отворите Chrome</translation> <translation id="1706288056912586527">Прикажи лозинку</translation> <translation id="1977167321677356409">Лозинка</translation> <translation id="2712586044587587728">Моћи ћете да користите Chrome лозинке у другим апликацијама. Ово можете да искључите у било ком тренутку у апликацији Подешавања.</translation> <translation id="3580107423202590938">Нема лозинки за Chrome</translation> +<translation id="368844171100841558">Замени</translation> <translation id="3753678329684433031">Аутоматско попуњавање лозинке за Chrome</translation> <translation id="3789385946721385622">Корисничко име</translation> <translation id="4064278913989596727">Помоћ</translation> @@ -36,6 +38,7 @@ <translation id="8219905600827687498">Предложене лозинке</translation> <translation id="8300526662653766176">Подесите шифру</translation> <translation id="8332511935157148552">Није пронађена ниједна лозинка</translation> +<translation id="8486024683491936104">Желите да замените лозинку?</translation> <translation id="8503813439785031346">Корисничко име</translation> <translation id="8518521100965196752">Да бисте користили лозинке, прво морате да подесите шифру на уређају.</translation> <translation id="8877181643142698531">URL</translation>
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_uk.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_uk.xtb index e2c61b13..ff49bda 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_uk.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_uk.xtb
@@ -1,12 +1,14 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="uk"> +<translation id="1196785757634502276">Ви вже зберегли пароль для користувача <ph name="USERNAME" /> на веб-сайті <ph name="WEBSITE" />. Замінити його?</translation> <translation id="1276428923064733819">Копіювати</translation> <translation id="1614914292771557551">Ваш пароль буде збережено в обліковому записі Google (<ph name="EMAIL" />), коли ви знову відкриєте Chrome</translation> <translation id="1706288056912586527">Показати пароль</translation> <translation id="1977167321677356409">Пароль</translation> <translation id="2712586044587587728">Ви зможете користуватися паролями, які збережено в Chrome, в інших додатках. Цю функцію можна будь-коли вимкнути в додатку Налаштування.</translation> <translation id="3580107423202590938">Немає паролів, збережених у Chrome</translation> +<translation id="368844171100841558">Замінити</translation> <translation id="3753678329684433031">Автозаповнення паролів у Chrome</translation> <translation id="3789385946721385622">Ім'я користувача</translation> <translation id="4064278913989596727">Довідка</translation> @@ -36,6 +38,7 @@ <translation id="8219905600827687498">Пропоновані паролі</translation> <translation id="8300526662653766176">Налаштуйте код доступу</translation> <translation id="8332511935157148552">Паролі не знайдено</translation> +<translation id="8486024683491936104">Замінити пароль?</translation> <translation id="8503813439785031346">Ім’я користувача</translation> <translation id="8518521100965196752">Щоб використовувати паролі, спершу потрібно налаштувати код доступу на пристрої.</translation> <translation id="8877181643142698531">URL-адреса</translation>
diff --git a/ios/chrome/test/BUILD.gn b/ios/chrome/test/BUILD.gn index 626b554..f7bf8ee 100644 --- a/ios/chrome/test/BUILD.gn +++ b/ios/chrome/test/BUILD.gn
@@ -209,6 +209,7 @@ "//ios/chrome/browser/crash_report/breadcrumbs:unit_tests", "//ios/chrome/browser/device_sharing:unit_tests", "//ios/chrome/browser/download:unit_tests", + "//ios/chrome/browser/download/background_service:unit_tests", "//ios/chrome/browser/favicon:unit_tests", "//ios/chrome/browser/find_in_page:unit_tests", "//ios/chrome/browser/flags:unit_tests",
diff --git a/ios/public/provider/chrome/browser/signin/chrome_identity_service.h b/ios/public/provider/chrome/browser/signin/chrome_identity_service.h index 2299245..f696a2d2 100644 --- a/ios/public/provider/chrome/browser/signin/chrome_identity_service.h +++ b/ios/public/provider/chrome/browser/signin/chrome_identity_service.h
@@ -23,7 +23,6 @@ @class NSError; @class NSString; @class NSURL; -class PrefService; @class UIApplication; @class UIImage; @class UINavigationController; @@ -190,23 +189,6 @@ // of accounts. virtual void IterateOverIdentities(IdentityIteratorCallback callback); - // Returns YES if |identity| is valid and if the service has it in its list of - // identitites. - virtual bool IsValidIdentity(ChromeIdentity* identity); - - // Returns the chrome identity having the gaia ID equal to |gaia_id| or |nil| - // if no matching identity is found. - virtual ChromeIdentity* GetIdentityWithGaiaID(const std::string& gaia_id); - - // Returns true if there is at least one identity. - virtual bool HasIdentities(); - - // Returns all ChromeIdentity objects sorted by the ordering used in the - // account manager, which is typically based on the keychain ordering of - // accounts. It uses PrefService to filter ChromeIdentities according to - // enterprise policies. - virtual NSArray* GetAllIdentities(PrefService* pref_service); - // Forgets the given identity on the device. This method logs the user out. // It is asynchronous because it needs to contact the server to revoke the // authentication token.
diff --git a/ios/public/provider/chrome/browser/signin/chrome_identity_service.mm b/ios/public/provider/chrome/browser/signin/chrome_identity_service.mm index 711ab76..89e79b1 100644 --- a/ios/public/provider/chrome/browser/signin/chrome_identity_service.mm +++ b/ios/public/provider/chrome/browser/signin/chrome_identity_service.mm
@@ -19,69 +19,6 @@ namespace ios { namespace { -// Helper base class for functors. -template <typename T> -struct Functor { - Functor() = default; - - Functor(const Functor&) = delete; - Functor& operator=(const Functor&) = delete; - - ios::ChromeIdentityService::IdentityIteratorCallback Callback() { - // The callback is invoked synchronously and does not escape the scope - // in which the Functor is defined. Thus it is safe to use Unretained - // here. - return base::BindRepeating(&Functor::Run, base::Unretained(this)); - } - - ios::IdentityIteratorCallbackResult Run(ChromeIdentity* identity) { - // Filtering of the ChromeIdentity can be done here before calling - // the sub-class `Run()` method. This will ensure that all functor - // perform the same filtering (and thus consider exactly the same - // identities). - return static_cast<T*>(this)->Run(identity); - } -}; - -// Helper class used to implement HasIdentities(). -struct FunctorHasIdentities : Functor<FunctorHasIdentities> { - bool has_identities = false; - - ios::IdentityIteratorCallbackResult Run(ChromeIdentity* identity) { - has_identities = true; - return ios::kIdentityIteratorInterruptIteration; - } -}; - -// Helper class used to implement GetIdentityWithGaiaID(). -struct FunctorLookupIdentityByGaiaID : Functor<FunctorLookupIdentityByGaiaID> { - NSString* lookup_gaia_id; - ChromeIdentity* identity; - - FunctorLookupIdentityByGaiaID(NSString* gaia_id) - : lookup_gaia_id(gaia_id), identity(nil) {} - - ios::IdentityIteratorCallbackResult Run(ChromeIdentity* identity) { - if ([lookup_gaia_id isEqualToString:identity.gaiaID]) { - this->identity = identity; - return ios::kIdentityIteratorInterruptIteration; - } - return ios::kIdentityIteratorContinueIteration; - } -}; - -// Helper class used to implement GetAllIdentities(). -struct FunctorCollectIdentities : Functor<FunctorCollectIdentities> { - NSMutableArray<ChromeIdentity*>* identities; - - FunctorCollectIdentities() : identities([NSMutableArray array]) {} - - ios::IdentityIteratorCallbackResult Run(ChromeIdentity* identity) { - [identities addObject:identity]; - return ios::kIdentityIteratorContinueIteration; - } -}; - // Helper struct for computing the result of fetching account capabilities. struct FetchCapabilitiesResult { FetchCapabilitiesResult() = default; @@ -175,33 +112,6 @@ void ChromeIdentityService::IterateOverIdentities(IdentityIteratorCallback) {} -bool ChromeIdentityService::IsValidIdentity(ChromeIdentity* identity) { - return GetIdentityWithGaiaID(base::SysNSStringToUTF8(identity.gaiaID)) != nil; -} - -ChromeIdentity* ChromeIdentityService::GetIdentityWithGaiaID( - const std::string& gaia_id) { - // Do not iterate if the gaia ID is invalid. - if (gaia_id.empty()) - return nil; - - FunctorLookupIdentityByGaiaID helper(base::SysUTF8ToNSString(gaia_id)); - IterateOverIdentities(helper.Callback()); - return helper.identity; -} - -bool ChromeIdentityService::HasIdentities() { - FunctorHasIdentities helper; - IterateOverIdentities(helper.Callback()); - return helper.has_identities; -} - -NSArray* ChromeIdentityService::GetAllIdentities(PrefService* pref_service) { - FunctorCollectIdentities helper; - IterateOverIdentities(helper.Callback()); - return [helper.identities copy]; -} - void ChromeIdentityService::ForgetIdentity(ChromeIdentity* identity, ForgetIdentityCallback callback) {}
diff --git a/net/android/java/src/org/chromium/net/NetworkChangeNotifierAutoDetect.java b/net/android/java/src/org/chromium/net/NetworkChangeNotifierAutoDetect.java index 8a1e851..b83869d0 100644 --- a/net/android/java/src/org/chromium/net/NetworkChangeNotifierAutoDetect.java +++ b/net/android/java/src/org/chromium/net/NetworkChangeNotifierAutoDetect.java
@@ -1008,7 +1008,11 @@ if (onThread()) { r.run(); } else { - mHandler.post(r); + // Once execution begins on the correct thread, make sure unregister() hasn't + // been called in the mean time. + mHandler.post(() -> { + if (mRegistered) r.run(); + }); } } @@ -1269,11 +1273,6 @@ runOnThread(new Runnable() { @Override public void run() { - // Once execution begins on the correct thread, make sure unregister() hasn't - // been called in the mean time. Ignore the broadcast if unregister() was called. - if (!mRegistered) { - return; - } if (mIgnoreNextBroadcast) { mIgnoreNextBroadcast = false; return;
diff --git a/net/dns/public/doh_provider_entry.cc b/net/dns/public/doh_provider_entry.cc index ad65832c..9362d8a0 100644 --- a/net/dns/public/doh_provider_entry.cc +++ b/net/dns/public/doh_provider_entry.cc
@@ -93,6 +93,13 @@ "https://doh.xfinity.com/dns-query{?dns}", "" /* ui_name */, "" /* privacy_policy */, false /* display_globally */, {} /* display_countries */, LoggingLevel::kExtra), + new DohProviderEntry("Cox", /*provider_id_for_histogram=*/absl::nullopt, + {"68.105.28.11", "68.105.28.12", "2001:578:3f::30"}, + /*dns_over_tls_hostnames=*/{"dot.cox.net"}, + "https://doh.cox.net/dns-query", + /*ui_name=*/"", /*privacy_policy=*/"", + /*display_globally=*/false, /*display_countries=*/{}, + LoggingLevel::kNormal), new DohProviderEntry( "Cznic", DohProviderIdForHistogram::kCznic, {"185.43.135.1", "193.17.47.1", "2001:148f:fffe::1",
diff --git a/remoting/host/installer/win/chromoting.wxs b/remoting/host/installer/win/chromoting.wxs index 0df04824..e9f30a9 100644 --- a/remoting/host/installer/win/chromoting.wxs +++ b/remoting/host/installer/win/chromoting.wxs
@@ -217,77 +217,82 @@ Vital="yes"/> </Component> - <Component Id="remote_open_url" Guid="*"> - <File Id="remote_open_url.exe" - DiskId="1" - KeyPath="yes" - Name="remote_open_url.exe" - Vital="yes"/> - </Component> + <!-- The remote open URL feature is not ready on Windows, so don't ship + these components on official build. --> + <!-- TODO(b/183135000): Remove if-statement once the feature is ready --> + <?if $(var.OfficialBuild) = 0 ?> + <Component Id="remote_open_url" Guid="*"> + <File Id="remote_open_url.exe" + DiskId="1" + KeyPath="yes" + Name="remote_open_url.exe" + Vital="yes"/> + </Component> - <Component Id="remote_open_url_registration" Guid="*"> - <!-- ProgID --> - <RegistryKey Id="remote_open_url_prog_id_reg_key" - Root="HKLM" - Key="SOFTWARE\Classes\$(var.UrlForwarderProgId)" - Action="create"> - <RegistryKey Key="Application"> - <RegistryValue Type="string" - Name="ApplicationCompany" - Value="$(var.Manufacturer)"/> - <RegistryValue Type="string" - Name="ApplicationName" - Value="@[binaries]$(var.CoreBinary),-119"/> + <Component Id="remote_open_url_registration" Guid="*"> + <!-- ProgID --> + <RegistryKey Id="remote_open_url_prog_id_reg_key" + Root="HKLM" + Key="SOFTWARE\Classes\$(var.UrlForwarderProgId)" + Action="create"> + <RegistryKey Key="Application"> + <RegistryValue Type="string" + Name="ApplicationCompany" + Value="$(var.Manufacturer)"/> + <RegistryValue Type="string" + Name="ApplicationName" + Value="@[binaries]$(var.CoreBinary),-119"/> + <RegistryValue Type="string" + Name="ApplicationDescription" + Value="@[binaries]$(var.CoreBinary),-120"/> + <RegistryValue Type="string" + Name="ApplicationIcon" + Value="[binaries]$(var.CoreBinary),-112"/> + </RegistryKey> + <RegistryKey Key="DefaultIcon"> + <RegistryValue Type="string" + Value="[binaries]$(var.CoreBinary),-112"/> + </RegistryKey> + + <RegistryKey Key="shell\open\command"> + <RegistryValue Type="string" + Value='"[binaries]remote_open_url.exe" %1'/> + </RegistryKey> + </RegistryKey> + + <!-- Capabilities --> + <RegistryKey Id="remote_open_url_capabilities_reg_key" + Root="HKLM" + Key="SOFTWARE\$(var.ChromotingKeyPath)\UrlForwarder\Capabilities" + Action="create"> <RegistryValue Type="string" Name="ApplicationDescription" Value="@[binaries]$(var.CoreBinary),-120"/> - <RegistryValue Type="string" - Name="ApplicationIcon" - Value="[binaries]$(var.CoreBinary),-112"/> - </RegistryKey> - <RegistryKey Key="DefaultIcon"> - <RegistryValue Type="string" - Value="[binaries]$(var.CoreBinary),-112"/> + + <RegistryKey Key="URLAssociations"> + <RegistryValue Type="string" + Name="http" + Value="$(var.UrlForwarderProgId)"/> + <RegistryValue Type="string" + Name="https" + Value="$(var.UrlForwarderProgId)"/> + <RegistryValue Type="string" + Name="mailto" + Value="$(var.UrlForwarderProgId)"/> + </RegistryKey> </RegistryKey> - <RegistryKey Key="shell\open\command"> + <!-- RegisteredApplications --> + <RegistryKey Id="remote_open_url_registered_applications_reg_key" + Root="HKLM" + Key="SOFTWARE\RegisteredApplications" + Action="create"> <RegistryValue Type="string" - Value='"[binaries]remote_open_url.exe" %1'/> + Name="$(var.UrlForwarderName)" + Value="SOFTWARE\$(var.ChromotingKeyPath)\UrlForwarder\Capabilities"/> </RegistryKey> - </RegistryKey> - - <!-- Capabilities --> - <RegistryKey Id="remote_open_url_capabilities_reg_key" - Root="HKLM" - Key="SOFTWARE\$(var.ChromotingKeyPath)\UrlForwarder\Capabilities" - Action="create"> - <RegistryValue Type="string" - Name="ApplicationDescription" - Value="@[binaries]$(var.CoreBinary),-120"/> - - <RegistryKey Key="URLAssociations"> - <RegistryValue Type="string" - Name="http" - Value="$(var.UrlForwarderProgId)"/> - <RegistryValue Type="string" - Name="https" - Value="$(var.UrlForwarderProgId)"/> - <RegistryValue Type="string" - Name="mailto" - Value="$(var.UrlForwarderProgId)"/> - </RegistryKey> - </RegistryKey> - - <!-- RegisteredApplications --> - <RegistryKey Id="remote_open_url_registered_applications_reg_key" - Root="HKLM" - Key="SOFTWARE\RegisteredApplications" - Action="create"> - <RegistryValue Type="string" - Name="$(var.UrlForwarderName)" - Value="SOFTWARE\$(var.ChromotingKeyPath)\UrlForwarder\Capabilities"/> - </RegistryKey> - </Component> + </Component> + <?endif?> <!-- remote open URL components --> <Component Id="native_messaging_host_manifest" Guid="*"> <File Id="com.google.chrome.remote_desktop.json" @@ -773,8 +778,13 @@ <ComponentRef Id="remote_assistance_host_manifest"/> <ComponentRef Id="remote_assistance_host_registry"/> <ComponentRef Id="remote_assistance_host_uiaccess"/> - <ComponentRef Id="remote_open_url"/> - <ComponentRef Id="remote_open_url_registration"/> + + <!-- TODO(b/183135000): Remove if-statement once the feature is ready --> + <?if $(var.OfficialBuild) = 0 ?> + <ComponentRef Id="remote_open_url"/> + <ComponentRef Id="remote_open_url_registration"/> + <?endif?> + <ComponentRef Id="remote_security_key"/> <ComponentRef Id="remote_security_key_registration"/> <ComponentRef Id="remoting_native_messaging_host"/>
diff --git a/remoting/resources/remoting_strings_te.xtb b/remoting/resources/remoting_strings_te.xtb index 430cfe0..70a19a2 100644 --- a/remoting/resources/remoting_strings_te.xtb +++ b/remoting/resources/remoting_strings_te.xtb
@@ -178,7 +178,7 @@ <translation id="8509907436388546015">డెస్క్టాప్ ఏకీకరణ ప్రక్రియ</translation> <translation id="8513093439376855948">రిమోటింగ్ హోస్ట్ నిర్వహణ కోసం స్థానిక సందేశ హోస్ట్</translation> <translation id="8525306231823319788">పూర్తి స్క్రీన్</translation> -<translation id="858006550102277544">వ్యాఖ్యానించండి</translation> +<translation id="858006550102277544">కామెంట్ చేయండి</translation> <translation id="8743328882720071828">మీరు మీ కంప్యూటర్ను చూడటానికి, నియంత్రించడానికి <ph name="CLIENT_USERNAME" />ను అనుమతించదలిచారా?</translation> <translation id="8747048596626351634">సెషన్ క్రాష్ అయింది లేదా ప్రారంభించడంలో విఫలమైంది. రిమోట్ కంప్యూటర్లో ~/.chrome-remote-desktop-session ఉన్నట్లయితే, ఇది ముందుభాగంలో దీర్ఘకాలం అమలయ్యే డెస్క్టాప్ ఎన్విరాన్మెంట్ లేదా విండో మేనేజర్ వంటి ప్రక్రియలను ప్రారంభిస్తుందని నిర్ధారించుకోండి.</translation> <translation id="8804164990146287819">గోప్యతా విధానం</translation>
diff --git a/sandbox/policy/linux/bpf_cros_arm_gpu_policy_linux.cc b/sandbox/policy/linux/bpf_cros_arm_gpu_policy_linux.cc index 76e3105..124b4c3 100644 --- a/sandbox/policy/linux/bpf_cros_arm_gpu_policy_linux.cc +++ b/sandbox/policy/linux/bpf_cros_arm_gpu_policy_linux.cc
@@ -53,6 +53,14 @@ case __NR_sched_setscheduler: case __NR_sysinfo: case __NR_uname: + // We need fstatfs for supporting a local glibc patch + // which hooks into dlopen(), LD_PRELOAD, and --preload. + // https://chromium-review.googlesource.com/c/chromiumos/overlays/chromiumos-overlay/+/2910526 + case __NR_fstatfs: +#if defined(__arm__) + // Only available on ARM 32bit devices + case __NR_fstatfs64: +#endif return Allow(); // Allow only AF_UNIX for |domain|. case __NR_socket:
diff --git a/sandbox/policy/sandbox_type.cc b/sandbox/policy/sandbox_type.cc index c03b072..a0bdc15 100644 --- a/sandbox/policy/sandbox_type.cc +++ b/sandbox/policy/sandbox_type.cc
@@ -294,6 +294,15 @@ } SandboxType UtilitySandboxTypeFromString(const std::string& sandbox_string) { + // This function should cover all sandbox types used for utilities, the + // CHECK at the end should catch any attempts to forget to add a new type. + + // Most utilities are kUtility or kService so put those first. + if (sandbox_string == switches::kUtilitySandbox) + return SandboxType::kUtility; + if (sandbox_string == switches::kServiceSandbox) + return SandboxType::kService; + if (sandbox_string == switches::kNoneSandbox) return SandboxType::kNoSandbox; if (sandbox_string == switches::kNoneSandboxAndElevatedPrivileges) { @@ -347,6 +356,10 @@ return SandboxType::kLibassistant; #endif // BUILDFLAG(ENABLE_CROS_LIBASSISTANT) #endif // BUILDFLAG(IS_CHROMEOS_ASH) + CHECK(false) + << "Command line does not provide a valid sandbox configuration: " + << sandbox_string; + NOTREACHED(); return SandboxType::kUtility; }
diff --git a/sandbox/policy/sandbox_type_unittest.cc b/sandbox/policy/sandbox_type_unittest.cc index e909a684..85b3131 100644 --- a/sandbox/policy/sandbox_type_unittest.cc +++ b/sandbox/policy/sandbox_type_unittest.cc
@@ -54,7 +54,6 @@ base::CommandLine command_line(base::CommandLine::NO_PROGRAM); command_line.AppendSwitchASCII(switches::kProcessType, switches::kUtilityProcess); - EXPECT_EQ(SandboxType::kUtility, SandboxTypeFromCommandLine(command_line)); base::CommandLine command_line2(command_line); SetCommandLineFlagsForSandboxType(&command_line2, SandboxType::kNetwork); @@ -73,8 +72,8 @@ EXPECT_EQ(SandboxType::kPpapi, SandboxTypeFromCommandLine(command_line5)); base::CommandLine command_line6(command_line); - command_line6.AppendSwitchASCII(switches::kServiceSandboxType, "bogus"); - EXPECT_EQ(SandboxType::kUtility, SandboxTypeFromCommandLine(command_line6)); + SetCommandLineFlagsForSandboxType(&command_line6, SandboxType::kService); + EXPECT_EQ(SandboxType::kService, SandboxTypeFromCommandLine(command_line6)); base::CommandLine command_line7(command_line); SetCommandLineFlagsForSandboxType(&command_line7, @@ -130,6 +129,23 @@ EXPECT_EQ(SandboxType::kNoSandbox, SandboxTypeFromCommandLine(command_line)); } +TEST(SandboxTypeTest, UtilityDeath) { + base::CommandLine command_line(base::CommandLine::NO_PROGRAM); + command_line.AppendSwitchASCII(switches::kProcessType, + switches::kUtilityProcess); + + EXPECT_DEATH_IF_SUPPORTED(SandboxTypeFromCommandLine(command_line), ""); + + // kGPU not valid for utility processes. + base::CommandLine command_line1(command_line); + command_line1.AppendSwitchASCII(switches::kServiceSandboxType, "gpu"); + EXPECT_DEATH_IF_SUPPORTED(SandboxTypeFromCommandLine(command_line1), ""); + + base::CommandLine command_line2(command_line); + command_line2.AppendSwitchASCII(switches::kServiceSandboxType, "bogus"); + EXPECT_DEATH_IF_SUPPORTED(SandboxTypeFromCommandLine(command_line2), ""); +} + TEST(SandboxTypeTest, GPU) { base::CommandLine command_line(base::CommandLine::NO_PROGRAM); command_line.AppendSwitchASCII(switches::kProcessType, switches::kGpuProcess);
diff --git a/sandbox/policy/win/mf_cdm_sandbox_type_unittest.cc b/sandbox/policy/win/mf_cdm_sandbox_type_unittest.cc index b298885..7f257c7c 100644 --- a/sandbox/policy/win/mf_cdm_sandbox_type_unittest.cc +++ b/sandbox/policy/win/mf_cdm_sandbox_type_unittest.cc
@@ -11,12 +11,10 @@ namespace media { TEST(SandboxTypeTest, Utility) { - // Setup to have '--type=utility' first. + // Setup to have '--type=utility' first (but no valid sandbox). base::CommandLine command_line(base::CommandLine::NO_PROGRAM); command_line.AppendSwitchASCII(sandbox::policy::switches::kProcessType, sandbox::policy::switches::kUtilityProcess); - EXPECT_EQ(sandbox::policy::SandboxType::kUtility, - sandbox::policy::SandboxTypeFromCommandLine(command_line)); base::CommandLine command_line2(command_line); SetCommandLineFlagsForSandboxType(
diff --git a/services/device/battery/battery_status_manager_linux.cc b/services/device/battery/battery_status_manager_linux.cc index d305b9f..1243d9b 100644 --- a/services/device/battery/battery_status_manager_linux.cc +++ b/services/device/battery/battery_status_manager_linux.cc
@@ -17,7 +17,6 @@ #include "base/callback_helpers.h" #include "base/macros.h" #include "base/message_loop/message_pump_type.h" -#include "base/metrics/histogram_macros.h" #include "base/single_thread_task_runner.h" #include "base/threading/thread.h" #include "base/values.h" @@ -131,11 +130,6 @@ return display_device_path; } -void UpdateNumberBatteriesHistogram(int count) { - UMA_HISTOGRAM_CUSTOM_COUNTS("BatteryStatus.NumberBatteriesLinux", count, 1, 5, - 6); -} - class BatteryProperties : public dbus::PropertySet { public: BatteryProperties(dbus::ObjectProxy* object_proxy, @@ -444,8 +438,6 @@ } num_batteries++; } - - UpdateNumberBatteriesHistogram(num_batteries); } if (!battery_) {
diff --git a/services/device/battery/battery_status_manager_mac.cc b/services/device/battery/battery_status_manager_mac.cc index 3d97072..82a240e 100644 --- a/services/device/battery/battery_status_manager_mac.cc +++ b/services/device/battery/battery_status_manager_mac.cc
@@ -14,7 +14,6 @@ #include "base/mac/foundation_util.h" #include "base/mac/scoped_cftyperef.h" #include "base/macros.h" -#include "base/metrics/histogram_macros.h" #include "base/time/time.h" namespace device { @@ -54,11 +53,6 @@ return CFStringCompare(string1, string2, 0) == kCFCompareEqualTo; } -void UpdateNumberBatteriesHistogram(int count) { - UMA_HISTOGRAM_CUSTOM_COUNTS("BatteryStatus.NumberBatteriesMac", count, 1, 5, - 6); -} - void FetchBatteryStatus(CFDictionaryRef description, mojom::BatteryStatus* status) { CFStringRef current_state = base::mac::GetValueFromDictionary<CFStringRef>( @@ -186,7 +180,6 @@ CallOnBatteryStatusChanged(static_cast<void*>(&callback_)); CFRunLoopAddSource(CFRunLoopGetCurrent(), notifier_run_loop_source_, kCFRunLoopDefaultMode); - UpdateNumberBatteriesHistogram(GetInternalBatteriesStates().size()); } void Stop() {
diff --git a/services/device/battery/battery_status_manager_win.cc b/services/device/battery/battery_status_manager_win.cc index 1a8b26ed..e4d69ac 100644 --- a/services/device/battery/battery_status_manager_win.cc +++ b/services/device/battery/battery_status_manager_win.cc
@@ -9,7 +9,6 @@ #include "base/bind.h" #include "base/macros.h" -#include "base/metrics/histogram_macros.h" #include "base/win/message_window.h" #include "services/device/battery/battery_status_manager.h" @@ -21,35 +20,6 @@ const wchar_t kWindowClassName[] = L"BatteryStatusMessageWindow"; -// This enum is used for histogram. Don't change the order of the existing -// values. -enum NumberBatteriesType { - UNKNOWN_BATTERIES = 0, - NO_BATTERY = 1, - ONE_OR_MORE_BATTERIES = 2, - BATTERY_TYPES_COUNT = 3, -}; - -void UpdateNumberBatteriesHistogram(NumberBatteriesType count) { - UMA_HISTOGRAM_ENUMERATION("BatteryStatus.NumberBatteriesWin", count, - BATTERY_TYPES_COUNT); -} - -void UpdateNumberBatteriesHistogram() { - SYSTEM_POWER_STATUS win_status; - if (!GetSystemPowerStatus(&win_status)) { - UpdateNumberBatteriesHistogram(UNKNOWN_BATTERIES); - return; - } - - if (win_status.BatteryFlag == 255) - UpdateNumberBatteriesHistogram(UNKNOWN_BATTERIES); - else if (win_status.BatteryFlag == 128) - UpdateNumberBatteriesHistogram(NO_BATTERY); - else - UpdateNumberBatteriesHistogram(ONE_OR_MORE_BATTERIES); -} - // Message-only window for handling battery changes on Windows. class BatteryStatusObserver { public: @@ -76,8 +46,6 @@ // values. callback_.Run(mojom::BatteryStatus()); } - - UpdateNumberBatteriesHistogram(); } void Stop() {
diff --git a/services/metrics/public/cpp/metrics_utils.cc b/services/metrics/public/cpp/metrics_utils.cc index d5dfcb5..b2b4d48 100644 --- a/services/metrics/public/cpp/metrics_utils.cc +++ b/services/metrics/public/cpp/metrics_utils.cc
@@ -26,6 +26,10 @@ return GetExponentialBucketMin(sample, 2.0); } +int64_t GetExponentialBucketMinForFineUserTiming(int64_t sample) { + return GetExponentialBucketMin(sample, 1.3); +} + int64_t GetExponentialBucketMinForCounts1000(int64_t sample) { return GetExponentialBucketMin(sample, 1.15); }
diff --git a/services/metrics/public/cpp/metrics_utils.h b/services/metrics/public/cpp/metrics_utils.h index 0919da15..360026c 100644 --- a/services/metrics/public/cpp/metrics_utils.h +++ b/services/metrics/public/cpp/metrics_utils.h
@@ -21,6 +21,10 @@ // timing user actions. int64_t METRICS_EXPORT GetExponentialBucketMinForUserTiming(int64_t sample); +// Like GetExponentialBucketMin but uses a standard bucket_spacing of 1.3 for +// timing user actions with higher resolution. +int64_t METRICS_EXPORT GetExponentialBucketMinForFineUserTiming(int64_t sample); + // Like GetExponentialBucketMin but uses a standard bucket_spacing of 1.15. int64_t METRICS_EXPORT GetExponentialBucketMinForCounts1000(int64_t sample);
diff --git a/services/network/udp_socket_unittest.cc b/services/network/udp_socket_unittest.cc index 51a8a7a2..cfa802a 100644 --- a/services/network/udp_socket_unittest.cc +++ b/services/network/udp_socket_unittest.cc
@@ -667,15 +667,16 @@ EXPECT_EQ(std::vector<uint8_t>(), result.data.value()); } -#if defined(OS_ANDROID) || defined(OS_IOS) +#if defined(OS_ANDROID) || defined(OS_IOS) || defined(OS_MAC) // Some Android devices do not support multicast socket. // The ones supporting multicast need WifiManager.MulticastLock to enable it. // https://developer.android.com/reference/android/net/wifi/WifiManager.MulticastLock.html -// TODO(crbug.com/1215667): Fails on iOS running on Mac 11 machines. +// TODO(crbug.com/1215667): Fails on iOS running on Mac 11 machines. Flaky on +// Mac 11 machines. #define MAYBE_JoinMulticastGroup DISABLED_JoinMulticastGroup #else #define MAYBE_JoinMulticastGroup JoinMulticastGroup -#endif // defined(OS_ANDROID) +#endif // defined(OS_ANDROID) || defined(OS_IOS) || defined(OS_MAC) TEST_F(UDPSocketTest, MAYBE_JoinMulticastGroup) { const char kGroup[] = "237.132.100.17";
diff --git a/services/video_capture/public/mojom/BUILD.gn b/services/video_capture/public/mojom/BUILD.gn index ab5a731..d41b4f08 100644 --- a/services/video_capture/public/mojom/BUILD.gn +++ b/services/video_capture/public/mojom/BUILD.gn
@@ -26,6 +26,8 @@ "//ui/gfx/geometry/mojom", ] + public_deps = [ "//sandbox/policy/mojom" ] + if (is_chromeos_ash) { deps += [ "//components/chromeos_camera/common",
diff --git a/services/video_capture/public/mojom/video_capture_service.mojom b/services/video_capture/public/mojom/video_capture_service.mojom index ceb01df..559b58fbc 100644 --- a/services/video_capture/public/mojom/video_capture_service.mojom +++ b/services/video_capture/public/mojom/video_capture_service.mojom
@@ -4,13 +4,14 @@ module video_capture.mojom; -[EnableIf=is_chromeos_ash] -import "components/chromeos_camera/common/mjpeg_decode_accelerator.mojom"; +import "sandbox/policy/mojom/sandbox.mojom"; import "services/video_capture/public/mojom/device_factory.mojom"; import "services/video_capture/public/mojom/testing_controls.mojom"; import "services/video_capture/public/mojom/video_source_provider.mojom"; [EnableIf=is_chromeos_ash] +import "components/chromeos_camera/common/mjpeg_decode_accelerator.mojom"; +[EnableIf=is_chromeos_ash] import "media/capture/video/chromeos/mojom/camera_app.mojom"; [EnableIf=is_chromeos_ash] @@ -29,6 +30,7 @@ // to be called once before any call to ConnectToDeviceFactory() is made. // Calling InjectGpuDependencies() is optional. If it is not called, MJPEG // decoding will be performed without gpu acceleration. +[ServiceSandbox=sandbox.mojom.Sandbox.kVideoCapture] interface VideoCaptureService { [EnableIf=is_chromeos_ash] InjectGpuDependencies(pending_remote<AcceleratorFactory> accelerator_factory);
diff --git a/testing/buildbot/chrome.json b/testing/buildbot/chrome.json index 189635d9..20ceb09 100644 --- a/testing/buildbot/chrome.json +++ b/testing/buildbot/chrome.json
@@ -1767,29 +1767,6 @@ "test_id_prefix": "ninja://ash:ash_unittests/" }, { - "args": [ - "--enable-features=UseSkiaRenderer" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "skia_renderer_ash_unittests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Ubuntu-18.04", - "pool": "chrome.tests", - "ssd": "0" - } - ], - "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "ash_unittests", - "test_id_prefix": "ninja://ash:ash_unittests/" - }, - { "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -1828,29 +1805,6 @@ "test_id_prefix": "ninja://ui/aura:aura_unittests/" }, { - "args": [ - "--enable-features=UseSkiaRenderer" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "skia_renderer_aura_unittests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Ubuntu-18.04", - "pool": "chrome.tests", - "ssd": "0" - } - ], - "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "aura_unittests", - "test_id_prefix": "ninja://ui/aura:aura_unittests/" - }, - { "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py"
diff --git a/testing/buildbot/chromium.chromiumos.json b/testing/buildbot/chromium.chromiumos.json index 0dc47c5f..f7c14f69 100644 --- a/testing/buildbot/chromium.chromiumos.json +++ b/testing/buildbot/chromium.chromiumos.json
@@ -1079,154 +1079,6 @@ "isolated_scripts": [ { "args": [ - "webgl_conformance", - "--show-stdout", - "--browser=cros-chrome", - "--passthrough", - "-v", - "--extra-browser-args=--log-level=0 --js-flags=--expose-gc --enable-features=UseSkiaRenderer --force_high_performance_gpu", - "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl_conformance_tests_output.json", - "--remote=127.0.0.1", - "--remote-ssh-port=9222" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "gl_renderer_webgl_conformance_tests", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "cpu": "x86", - "kvm": "1", - "os": "Ubuntu-18.04", - "pool": "chromium.tests" - } - ], - "idempotent": false, - "named_caches": [ - { - "name": "cros_vm", - "path": "magic_cros_vm_cache" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "cros_vm" - } - ] - }, - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 18 - }, - "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/" - }, - { - "args": [ - "--browser=cros-chrome", - "--extra-browser-args=--enable-features=UseSkiaRenderer", - "--remote=127.0.0.1", - "--remote-ssh-port=9222", - "--xvfb", - "--typ-max-failures=3" - ], - "isolate_name": "telemetry_perf_unittests", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "skia_renderer_telemetry_perf_unittests", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "cpu": "x86", - "kvm": "1", - "os": "Ubuntu-18.04", - "pool": "chromium.tests" - } - ], - "idempotent": false, - "named_caches": [ - { - "name": "cros_vm", - "path": "magic_cros_vm_cache" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "cros_vm" - } - ] - }, - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 6 - }, - "test_id_prefix": "ninja://chrome/test:telemetry_perf_unittests/" - }, - { - "args": [ - "--jobs=1", - "--browser=cros-chrome", - "--extra-browser-args=--enable-features=UseSkiaRenderer", - "--remote=127.0.0.1", - "--remote-ssh-port=9222", - "--typ-max-failures=3" - ], - "isolate_name": "telemetry_unittests", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "skia_renderer_telemetry_unittests", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "cpu": "x86", - "kvm": "1", - "os": "Ubuntu-18.04", - "pool": "chromium.tests" - } - ], - "idempotent": false, - "named_caches": [ - { - "name": "cros_vm", - "path": "magic_cros_vm_cache" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "cros_vm" - } - ] - }, - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 24 - }, - "test_id_prefix": "ninja://chrome/test:telemetry_unittests/" - }, - { - "args": [ "--browser=cros-chrome", "--remote=127.0.0.1", "--remote-ssh-port=9222", @@ -1812,27 +1664,6 @@ "test_id_prefix": "ninja://ash:ash_unittests/" }, { - "args": [ - "--enable-features=UseSkiaRenderer" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "skia_renderer_ash_unittests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Ubuntu-18.04" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "ash_unittests", - "test_id_prefix": "ninja://ash:ash_unittests/" - }, - { "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -1867,27 +1698,6 @@ "test_id_prefix": "ninja://ui/aura:aura_unittests/" }, { - "args": [ - "--enable-features=UseSkiaRenderer" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "skia_renderer_aura_unittests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Ubuntu-18.04" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "aura_unittests", - "test_id_prefix": "ninja://ui/aura:aura_unittests/" - }, - { "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -3507,28 +3317,6 @@ "test_id_prefix": "ninja://ash:ash_unittests/" }, { - "args": [ - "--enable-features=UseSkiaRenderer" - ], - "isolate_profile_data": true, - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "skia_renderer_ash_unittests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Ubuntu-18.04" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "ash_unittests", - "test_id_prefix": "ninja://ash:ash_unittests/" - }, - { "isolate_profile_data": true, "merge": { "args": [], @@ -3565,28 +3353,6 @@ "test_id_prefix": "ninja://ui/aura:aura_unittests/" }, { - "args": [ - "--enable-features=UseSkiaRenderer" - ], - "isolate_profile_data": true, - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "skia_renderer_aura_unittests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Ubuntu-18.04" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "aura_unittests", - "test_id_prefix": "ninja://ui/aura:aura_unittests/" - }, - { "isolate_profile_data": true, "merge": { "args": [],
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json index 4b506b7..caddf4fb 100644 --- a/testing/buildbot/chromium.fyi.json +++ b/testing/buildbot/chromium.fyi.json
@@ -19293,154 +19293,6 @@ "isolated_scripts": [ { "args": [ - "webgl_conformance", - "--show-stdout", - "--browser=cros-chrome", - "--passthrough", - "-v", - "--extra-browser-args=--log-level=0 --js-flags=--expose-gc --enable-features=UseSkiaRenderer --force_high_performance_gpu", - "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl_conformance_tests_output.json", - "--remote=127.0.0.1", - "--remote-ssh-port=9222" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "gl_renderer_webgl_conformance_tests", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "cpu": "x86", - "kvm": "1", - "os": "Ubuntu-18.04", - "pool": "chromium.tests" - } - ], - "idempotent": false, - "named_caches": [ - { - "name": "cros_vm", - "path": "magic_cros_vm_cache" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "cros_vm" - } - ] - }, - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 18 - }, - "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/" - }, - { - "args": [ - "--browser=cros-chrome", - "--extra-browser-args=--enable-features=UseSkiaRenderer", - "--remote=127.0.0.1", - "--remote-ssh-port=9222", - "--xvfb", - "--typ-max-failures=3" - ], - "isolate_name": "telemetry_perf_unittests", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "skia_renderer_telemetry_perf_unittests", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "cpu": "x86", - "kvm": "1", - "os": "Ubuntu-18.04", - "pool": "chromium.tests" - } - ], - "idempotent": false, - "named_caches": [ - { - "name": "cros_vm", - "path": "magic_cros_vm_cache" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "cros_vm" - } - ] - }, - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 6 - }, - "test_id_prefix": "ninja://chrome/test:telemetry_perf_unittests/" - }, - { - "args": [ - "--jobs=1", - "--browser=cros-chrome", - "--extra-browser-args=--enable-features=UseSkiaRenderer", - "--remote=127.0.0.1", - "--remote-ssh-port=9222", - "--typ-max-failures=3" - ], - "isolate_name": "telemetry_unittests", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "skia_renderer_telemetry_unittests", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "cpu": "x86", - "kvm": "1", - "os": "Ubuntu-18.04", - "pool": "chromium.tests" - } - ], - "idempotent": false, - "named_caches": [ - { - "name": "cros_vm", - "path": "magic_cros_vm_cache" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "cros_vm" - } - ] - }, - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 24 - }, - "test_id_prefix": "ninja://chrome/test:telemetry_unittests/" - }, - { - "args": [ "--browser=cros-chrome", "--remote=127.0.0.1", "--remote-ssh-port=9222", @@ -20617,154 +20469,6 @@ "isolated_scripts": [ { "args": [ - "webgl_conformance", - "--show-stdout", - "--browser=cros-chrome", - "--passthrough", - "-v", - "--extra-browser-args=--log-level=0 --js-flags=--expose-gc --enable-features=UseSkiaRenderer --force_high_performance_gpu", - "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl_conformance_tests_output.json", - "--remote=127.0.0.1", - "--remote-ssh-port=9222" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "gl_renderer_webgl_conformance_tests", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "cpu": "x86", - "kvm": "1", - "os": "Ubuntu-18.04", - "pool": "chromium.tests" - } - ], - "idempotent": false, - "named_caches": [ - { - "name": "cros_vm", - "path": "magic_cros_vm_cache" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "cros_vm" - } - ] - }, - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 18 - }, - "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/" - }, - { - "args": [ - "--browser=cros-chrome", - "--extra-browser-args=--enable-features=UseSkiaRenderer", - "--remote=127.0.0.1", - "--remote-ssh-port=9222", - "--xvfb", - "--typ-max-failures=3" - ], - "isolate_name": "telemetry_perf_unittests", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "skia_renderer_telemetry_perf_unittests", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "cpu": "x86", - "kvm": "1", - "os": "Ubuntu-18.04", - "pool": "chromium.tests" - } - ], - "idempotent": false, - "named_caches": [ - { - "name": "cros_vm", - "path": "magic_cros_vm_cache" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "cros_vm" - } - ] - }, - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 6 - }, - "test_id_prefix": "ninja://chrome/test:telemetry_perf_unittests/" - }, - { - "args": [ - "--jobs=1", - "--browser=cros-chrome", - "--extra-browser-args=--enable-features=UseSkiaRenderer", - "--remote=127.0.0.1", - "--remote-ssh-port=9222", - "--typ-max-failures=3" - ], - "isolate_name": "telemetry_unittests", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "skia_renderer_telemetry_unittests", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "cpu": "x86", - "kvm": "1", - "os": "Ubuntu-18.04", - "pool": "chromium.tests" - } - ], - "idempotent": false, - "named_caches": [ - { - "name": "cros_vm", - "path": "magic_cros_vm_cache" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "cros_vm" - } - ] - }, - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 24 - }, - "test_id_prefix": "ninja://chrome/test:telemetry_unittests/" - }, - { - "args": [ "--browser=cros-chrome", "--remote=127.0.0.1", "--remote-ssh-port=9222", @@ -21936,154 +21640,6 @@ "isolated_scripts": [ { "args": [ - "webgl_conformance", - "--show-stdout", - "--browser=cros-chrome", - "--passthrough", - "-v", - "--extra-browser-args=--log-level=0 --js-flags=--expose-gc --enable-features=UseSkiaRenderer --force_high_performance_gpu", - "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl_conformance_tests_output.json", - "--remote=127.0.0.1", - "--remote-ssh-port=9222" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "gl_renderer_webgl_conformance_tests", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "cpu": "x86", - "kvm": "1", - "os": "Ubuntu-18.04", - "pool": "chromium.tests" - } - ], - "idempotent": false, - "named_caches": [ - { - "name": "cros_vm", - "path": "magic_cros_vm_cache" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "cros_vm" - } - ] - }, - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 18 - }, - "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/" - }, - { - "args": [ - "--browser=cros-chrome", - "--extra-browser-args=--enable-features=UseSkiaRenderer", - "--remote=127.0.0.1", - "--remote-ssh-port=9222", - "--xvfb", - "--typ-max-failures=3" - ], - "isolate_name": "telemetry_perf_unittests", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "skia_renderer_telemetry_perf_unittests", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "cpu": "x86", - "kvm": "1", - "os": "Ubuntu-18.04", - "pool": "chromium.tests" - } - ], - "idempotent": false, - "named_caches": [ - { - "name": "cros_vm", - "path": "magic_cros_vm_cache" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "cros_vm" - } - ] - }, - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 6 - }, - "test_id_prefix": "ninja://chrome/test:telemetry_perf_unittests/" - }, - { - "args": [ - "--jobs=1", - "--browser=cros-chrome", - "--extra-browser-args=--enable-features=UseSkiaRenderer", - "--remote=127.0.0.1", - "--remote-ssh-port=9222", - "--typ-max-failures=3" - ], - "isolate_name": "telemetry_unittests", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "skia_renderer_telemetry_unittests", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "cpu": "x86", - "kvm": "1", - "os": "Ubuntu-18.04", - "pool": "chromium.tests" - } - ], - "idempotent": false, - "named_caches": [ - { - "name": "cros_vm", - "path": "magic_cros_vm_cache" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "cros_vm" - } - ] - }, - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 24 - }, - "test_id_prefix": "ninja://chrome/test:telemetry_unittests/" - }, - { - "args": [ "--browser=cros-chrome", "--remote=127.0.0.1", "--remote-ssh-port=9222", @@ -75259,28 +74815,6 @@ "test_id_prefix": "ninja://ash:ash_unittests/" }, { - "args": [ - "--enable-features=UseSkiaRenderer" - ], - "isolate_profile_data": true, - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "skia_renderer_ash_unittests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Ubuntu-18.04" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "ash_unittests", - "test_id_prefix": "ninja://ash:ash_unittests/" - }, - { "isolate_profile_data": true, "merge": { "args": [], @@ -75317,28 +74851,6 @@ "test_id_prefix": "ninja://ui/aura:aura_unittests/" }, { - "args": [ - "--enable-features=UseSkiaRenderer" - ], - "isolate_profile_data": true, - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "skia_renderer_aura_unittests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Ubuntu-18.04" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "aura_unittests", - "test_id_prefix": "ninja://ui/aura:aura_unittests/" - }, - { "isolate_profile_data": true, "merge": { "args": [],
diff --git a/testing/buildbot/chromium.gpu.fyi.json b/testing/buildbot/chromium.gpu.fyi.json index a2d56a2..69bfa8d 100644 --- a/testing/buildbot/chromium.gpu.fyi.json +++ b/testing/buildbot/chromium.gpu.fyi.json
@@ -5737,382 +5737,6 @@ }, { "args": [ - "context_lost", - "--show-stdout", - "--browser=cros-chrome", - "--passthrough", - "-v", - "--extra-browser-args=--log-level=0 --js-flags=--expose-gc --disable-features=UseSkiaRenderer", - "--remote=127.0.0.1", - "--remote-ssh-port=9222" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "gl_renderer_context_lost_tests", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "cpu": "x86", - "kvm": "1", - "os": "Ubuntu-18.04", - "pool": "chromium.tests" - } - ], - "idempotent": false, - "named_caches": [ - { - "name": "cros_vm", - "path": "magic_cros_vm_cache" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "cros_vm" - } - ] - }, - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/" - }, - { - "args": [ - "depth_capture", - "--show-stdout", - "--browser=cros-chrome", - "--passthrough", - "-v", - "--extra-browser-args=--log-level=0 --js-flags=--expose-gc --disable-features=UseSkiaRenderer", - "--remote=127.0.0.1", - "--remote-ssh-port=9222" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "gl_renderer_depth_capture_tests", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "cpu": "x86", - "kvm": "1", - "os": "Ubuntu-18.04", - "pool": "chromium.tests" - } - ], - "idempotent": false, - "named_caches": [ - { - "name": "cros_vm", - "path": "magic_cros_vm_cache" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "cros_vm" - } - ] - }, - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/" - }, - { - "args": [ - "gpu_process", - "--show-stdout", - "--browser=cros-chrome", - "--passthrough", - "-v", - "--extra-browser-args=--log-level=0 --js-flags=--expose-gc --disable-features=UseSkiaRenderer", - "--remote=127.0.0.1", - "--remote-ssh-port=9222" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "gl_renderer_gpu_process_launch_tests", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "cpu": "x86", - "kvm": "1", - "os": "Ubuntu-18.04", - "pool": "chromium.tests" - } - ], - "idempotent": false, - "named_caches": [ - { - "name": "cros_vm", - "path": "magic_cros_vm_cache" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "cros_vm" - } - ] - }, - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/" - }, - { - "args": [ - "hardware_accelerated_feature", - "--show-stdout", - "--browser=cros-chrome", - "--passthrough", - "-v", - "--extra-browser-args=--log-level=0 --js-flags=--expose-gc --disable-features=UseSkiaRenderer", - "--remote=127.0.0.1", - "--remote-ssh-port=9222" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "gl_renderer_hardware_accelerated_feature_tests", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "cpu": "x86", - "kvm": "1", - "os": "Ubuntu-18.04", - "pool": "chromium.tests" - } - ], - "idempotent": false, - "named_caches": [ - { - "name": "cros_vm", - "path": "magic_cros_vm_cache" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "cros_vm" - } - ] - }, - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/" - }, - { - "args": [ - "maps", - "--show-stdout", - "--browser=cros-chrome", - "--passthrough", - "-v", - "--extra-browser-args=--log-level=0 --js-flags=--expose-gc --disable-features=UseSkiaRenderer", - "--dont-restore-color-profile-after-test", - "--test-machine-name", - "${buildername}", - "--remote=127.0.0.1", - "--remote-ssh-port=9222", - "--git-revision=${got_revision}" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "gl_renderer_maps_pixel_tests", - "precommit_args": [ - "--gerrit-issue=${patch_issue}", - "--gerrit-patchset=${patch_set}", - "--buildbucket-id=${buildbucket_build_id}" - ], - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "cpu": "x86", - "kvm": "1", - "os": "Ubuntu-18.04", - "pool": "chromium.tests" - } - ], - "idempotent": false, - "named_caches": [ - { - "name": "cros_vm", - "path": "magic_cros_vm_cache" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "cros_vm" - } - ] - }, - "service_account": "chrome-gpu-gold@chops-service-accounts.iam.gserviceaccount.com" - }, - "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/" - }, - { - "args": [ - "pixel", - "--show-stdout", - "--browser=cros-chrome", - "--passthrough", - "-v", - "--extra-browser-args=--log-level=0 --js-flags=--expose-gc --disable-features=UseSkiaRenderer", - "--dont-restore-color-profile-after-test", - "--test-machine-name", - "${buildername}", - "--remote=127.0.0.1", - "--remote-ssh-port=9222", - "--git-revision=${got_revision}" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "gl_renderer_pixel_skia_gold_tests", - "precommit_args": [ - "--gerrit-issue=${patch_issue}", - "--gerrit-patchset=${patch_set}", - "--buildbucket-id=${buildbucket_build_id}" - ], - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "cpu": "x86", - "kvm": "1", - "os": "Ubuntu-18.04", - "pool": "chromium.tests" - } - ], - "idempotent": false, - "named_caches": [ - { - "name": "cros_vm", - "path": "magic_cros_vm_cache" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "cros_vm" - } - ] - }, - "service_account": "chrome-gpu-gold@chops-service-accounts.iam.gserviceaccount.com" - }, - "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/" - }, - { - "args": [ - "screenshot_sync", - "--show-stdout", - "--browser=cros-chrome", - "--passthrough", - "-v", - "--extra-browser-args=--log-level=0 --js-flags=--expose-gc --disable-features=UseSkiaRenderer", - "--dont-restore-color-profile-after-test", - "--remote=127.0.0.1", - "--remote-ssh-port=9222" - ], - "isolate_name": "telemetry_gpu_integration_test", - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_isolated_script_merge.py" - }, - "name": "gl_renderer_screenshot_sync_tests", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "cpu": "x86", - "kvm": "1", - "os": "Ubuntu-18.04", - "pool": "chromium.tests" - } - ], - "idempotent": false, - "named_caches": [ - { - "name": "cros_vm", - "path": "magic_cros_vm_cache" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "cros_vm" - } - ] - }, - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/" - }, - { - "args": [ "gpu_process", "--show-stdout", "--browser=cros-chrome",
diff --git a/testing/buildbot/chromium.memory.json b/testing/buildbot/chromium.memory.json index 1fdbdc4c..a26580f2 100644 --- a/testing/buildbot/chromium.memory.json +++ b/testing/buildbot/chromium.memory.json
@@ -3685,28 +3685,6 @@ }, { "args": [ - "--enable-features=UseSkiaRenderer", - "--test-launcher-print-test-stdio=always" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "skia_renderer_ash_unittests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Ubuntu-18.04" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "ash_unittests", - "test_id_prefix": "ninja://ash:ash_unittests/" - }, - { - "args": [ "--test-launcher-print-test-stdio=always" ], "merge": { @@ -3747,28 +3725,6 @@ }, { "args": [ - "--enable-features=UseSkiaRenderer", - "--test-launcher-print-test-stdio=always" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "skia_renderer_aura_unittests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Ubuntu-18.04" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "aura_unittests", - "test_id_prefix": "ninja://ui/aura:aura_unittests/" - }, - { - "args": [ "--test-launcher-print-test-stdio=always" ], "merge": { @@ -5630,29 +5586,6 @@ }, { "args": [ - "--enable-features=UseSkiaRenderer", - "--test-launcher-print-test-stdio=always" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "skia_renderer_ash_unittests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "cpu": "x86-64", - "os": "Ubuntu-16.04" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "ash_unittests", - "test_id_prefix": "ninja://ash:ash_unittests/" - }, - { - "args": [ "--test-launcher-print-test-stdio=always" ], "merge": { @@ -5695,29 +5628,6 @@ }, { "args": [ - "--enable-features=UseSkiaRenderer", - "--test-launcher-print-test-stdio=always" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "skia_renderer_aura_unittests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "cpu": "x86-64", - "os": "Ubuntu-16.04" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "aura_unittests", - "test_id_prefix": "ninja://ui/aura:aura_unittests/" - }, - { - "args": [ "--test-launcher-print-test-stdio=always" ], "merge": {
diff --git a/testing/buildbot/test_suite_exceptions.pyl b/testing/buildbot/test_suite_exceptions.pyl index 6a6b7ca..e40e78ae 100644 --- a/testing/buildbot/test_suite_exceptions.pyl +++ b/testing/buildbot/test_suite_exceptions.pyl
@@ -1564,51 +1564,6 @@ 'Linux Chromium OS ASan LSan Tests (1)', # https://crbug.com/831667 ], }, - # TODO(crbug.com/1202958): Remove these GLRenderer variants when - # SkiaRenderer is fully shipped on Chrome OS. - # Don't run these on real devices due to capacity issues. - 'gl_renderer_context_lost_tests': { - 'remove_from': [ - 'ChromeOS FYI Release (kevin)', - 'Lacros FYI x64 Release (Intel)', - ], - }, - 'gl_renderer_depth_capture_tests': { - 'remove_from': [ - 'ChromeOS FYI Release (kevin)', - 'Lacros FYI x64 Release (Intel)', - ], - }, - 'gl_renderer_gpu_process_launch_tests': { - 'remove_from': [ - 'ChromeOS FYI Release (kevin)', - 'Lacros FYI x64 Release (Intel)', - ], - }, - 'gl_renderer_hardware_accelerated_feature_tests': { - 'remove_from': [ - 'ChromeOS FYI Release (kevin)', - 'Lacros FYI x64 Release (Intel)', - ], - }, - 'gl_renderer_maps_pixel_tests': { - 'remove_from': [ - 'ChromeOS FYI Release (kevin)', - 'Lacros FYI x64 Release (Intel)', - ], - }, - 'gl_renderer_pixel_skia_gold_tests': { - 'remove_from': [ - 'ChromeOS FYI Release (kevin)', - 'Lacros FYI x64 Release (Intel)', - ], - }, - 'gl_renderer_screenshot_sync_tests': { - 'remove_from': [ - 'ChromeOS FYI Release (kevin)', - 'Lacros FYI x64 Release (Intel)', - ], - }, 'gl_tests_passthrough': { 'remove_from': [ 'CFI Linux ToT', @@ -2627,22 +2582,6 @@ }, } }, - # TODO(crbug.com/1202958): Remove these when SkiaRenderer is fully shipped - # on Chrome OS. - 'skia_renderer_telemetry_perf_unittests': { - 'remove_from': [ - # Not enough capacity. - 'chromeos-betty-pi-arc-chrome', - 'chromeos-betty-pi-arc-chrome-dchecks', - ], - }, - 'skia_renderer_telemetry_unittests': { - 'remove_from': [ - # Not enough capacity. - 'chromeos-betty-pi-arc-chrome', - 'chromeos-betty-pi-arc-chrome-dchecks', - ], - }, 'swiftshader_unittests': { 'remove_from': [ # Save capacity on the hardware where we have only a few machines.
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl index aa40a9edf..74ba631 100644 --- a/testing/buildbot/test_suites.pyl +++ b/testing/buildbot/test_suites.pyl
@@ -557,48 +557,6 @@ }, 'chromeos_isolated_scripts': { - # TODO(crbug.com/1202958): Remove these SkiaRenderer variants when - # SkiaRenderer is shipped by default on Chrome OS. - 'skia_renderer_telemetry_perf_unittests': { - 'isolate_name': 'telemetry_perf_unittests', - 'args': [ - '--browser=cros-chrome', - '--extra-browser-args=--enable-features=UseSkiaRenderer', - '$$MAGIC_SUBSTITUTION_ChromeOSTelemetryRemote', - '--xvfb', - # 3 is arbitrary, but if we're having more than 3 of these tests - # fail in a single shard, then something is probably wrong, so fail - # fast. - '--typ-max-failures=3', - ], - 'swarming': { - 'idempotent': False, # https://crbug.com/549140 - 'shards': 6, - }, - 'resultdb': { - 'enable': True, - }, - }, - 'skia_renderer_telemetry_unittests': { - 'isolate_name': 'telemetry_unittests', - 'args': [ - '--jobs=1', - '--browser=cros-chrome', - '--extra-browser-args=--enable-features=UseSkiaRenderer', - '$$MAGIC_SUBSTITUTION_ChromeOSTelemetryRemote', - # 3 is arbitrary, but if we're having more than 3 of these tests - # fail in a single shard, then something is probably wrong, so fail - # fast. - '--typ-max-failures=3', - ], - 'swarming': { - 'idempotent': False, # https://crbug.com/549140 - 'shards': 24, - }, - 'resultdb': { - 'enable': True, - }, - }, 'telemetry_perf_unittests': { 'args': [ '--browser=cros-chrome', @@ -2876,17 +2834,13 @@ }, }, - # TODO(crbug.com/1202958): Remove all gpu_gl_renderer_* targets when - # SkiaRenderer is shipped on all platforms. + # TODO(crbug.com/894929): remove it when SkiaRenderer is shipped on macOS. 'gpu_gl_renderer_full_telemetry_tests': { 'gl_renderer_context_lost_tests': { 'telemetry_test_name': 'context_lost', 'args': [ '--extra-browser-args=--disable-features=UseSkiaRenderer', ], - 'chromeos_args': [ - '$$MAGIC_SUBSTITUTION_ChromeOSTelemetryRemote', - ], 'mixins': [ 'has_native_resultdb_integration', ], @@ -2896,9 +2850,6 @@ 'args': [ '--extra-browser-args=--disable-features=UseSkiaRenderer', ], - 'chromeos_args': [ - '$$MAGIC_SUBSTITUTION_ChromeOSTelemetryRemote', - ], 'mixins': [ 'has_native_resultdb_integration', ], @@ -2908,9 +2859,6 @@ 'args': [ '--extra-browser-args=--disable-features=UseSkiaRenderer', ], - 'chromeos_args': [ - '$$MAGIC_SUBSTITUTION_ChromeOSTelemetryRemote', - ], 'mixins': [ 'has_native_resultdb_integration', ], @@ -2920,9 +2868,6 @@ 'args': [ '--extra-browser-args=--disable-features=UseSkiaRenderer', ], - 'chromeos_args': [ - '$$MAGIC_SUBSTITUTION_ChromeOSTelemetryRemote', - ], 'mixins': [ 'has_native_resultdb_integration', ], @@ -2935,9 +2880,6 @@ '${buildername}', '--extra-browser-args=--disable-features=UseSkiaRenderer', ], - 'chromeos_args': [ - '$$MAGIC_SUBSTITUTION_ChromeOSTelemetryRemote', - ], 'mixins': [ 'chrome-gpu-gold-service-account', 'has_native_resultdb_integration', @@ -2952,9 +2894,6 @@ '${buildername}', '--extra-browser-args=--disable-features=UseSkiaRenderer', ], - 'chromeos_args': [ - '$$MAGIC_SUBSTITUTION_ChromeOSTelemetryRemote', - ], 'mixins': [ 'chrome-gpu-gold-service-account', 'has_native_resultdb_integration', @@ -2967,9 +2906,6 @@ '--dont-restore-color-profile-after-test', '--extra-browser-args=--disable-features=UseSkiaRenderer', ], - 'chromeos_args': [ - '$$MAGIC_SUBSTITUTION_ChromeOSTelemetryRemote', - ], 'mixins': [ 'has_native_resultdb_integration', ], @@ -3442,37 +3378,6 @@ }, }, - # TODO(crbug.com/1202958): Remove this when SkiaRenderer is fully shipped - # on Chrome OS. - 'gpu_skia_renderer_webgl_conformance_telemetry_tests': { - 'gl_renderer_webgl_conformance': { - 'telemetry_test_name': 'webgl_conformance', - 'chromeos_args': [ - '$$MAGIC_SUBSTITUTION_ChromeOSTelemetryRemote', - ], - 'args': [ - # On dual-GPU devices we want the high-performance GPU to be active - '--extra-browser-args=--enable-features=UseSkiaRenderer --force_high_performance_gpu', - # The current working directory when run via isolate is - # out/Debug or out/Release. Reference this file relatively to - # it. - '--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl_conformance_tests_output.json', - ], - 'mixins': [ - 'has_native_resultdb_integration', - ], - 'swarming': { - 'shards': 2, - }, - 'android_swarming': { - 'shards': 12, - }, - 'chromeos_swarming': { - 'shards': 18, - }, - }, - }, - 'gpu_swiftshader_gtests': { 'swiftshader_unittests': { }, @@ -4360,6 +4265,7 @@ 'unit_tests': {}, }, + 'linux_chromeos_lacros_gtests': { # Chrome OS (Ash) and Lacros only. 'chromeos_unittests': {}, @@ -4381,23 +4287,6 @@ }, }, - # TODO(crbug.com/1202958): Remove this when SkiaRenderer is fully shipped - # on Chrome OS. - 'linux_chromeos_skia_renderer_specific_gtests': { - 'skia_renderer_ash_unittests': { - 'test': 'ash_unittests', - 'args': [ - '--enable-features=UseSkiaRenderer', - ], - }, - 'skia_renderer_aura_unittests': { - 'test': 'aura_unittests', - 'args': [ - '--enable-features=UseSkiaRenderer', - ], - }, - }, - 'linux_chromeos_specific_gtests': { # Chrome OS only. 'ash_unittests': {}, @@ -6346,7 +6235,6 @@ ], 'gpu_chromeos_telemetry_tests': [ - 'gpu_skia_renderer_webgl_conformance_telemetry_tests', 'gpu_webgl_conformance_telemetry_tests', ], @@ -6480,7 +6368,6 @@ 'gpu_validating_telemetry_tests', 'gpu_webcodecs_telemetry_test', 'gpu_webgl_conformance_validating_telemetry_tests', - 'gpu_gl_renderer_full_telemetry_tests', # Large amounts of WebGL/WebGL2 tests are failing due to issues that are # possibly related to other CrOS issues that are already reported. # TODO(crbug.com/1080424): Try enabling these again once some of the @@ -6855,7 +6742,6 @@ 'chromium_gtests_for_linux_and_chromeos_only', 'chromium_gtests_for_win_and_linux_only', 'linux_chromeos_lacros_gtests', - 'linux_chromeos_skia_renderer_specific_gtests', 'linux_chromeos_specific_gtests', 'linux_flavor_specific_chromium_gtests', 'non_android_chromium_gtests', @@ -6869,7 +6755,6 @@ 'chromium_gtests_for_win_and_linux_only', 'linux_chromeos_lacros_gtests', 'linux_chromeos_oobe_specific_tests', - 'linux_chromeos_skia_renderer_specific_gtests', 'linux_chromeos_specific_gtests', 'linux_flavor_specific_chromium_gtests', 'non_android_chromium_gtests',
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index 02d1c2b..ea50bbf 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -3222,7 +3222,7 @@ { "name": "EnabledLaunch", "params": { - "DisabledProviders": "Quad9Secure", + "DisabledProviders": "Cox,Quad9Secure", "ShowUi": "true" }, "enable_features": [ @@ -8736,7 +8736,6 @@ "platforms": [ "android", "android_weblayer", - "chromeos", "linux", "mac", "windows"
diff --git a/third_party/blink/public/common/loader/loader_constants.h b/third_party/blink/public/common/loader/loader_constants.h index 9c963ab..3a22f95 100644 --- a/third_party/blink/public/common/loader/loader_constants.h +++ b/third_party/blink/public/common/loader/loader_constants.h
@@ -12,6 +12,14 @@ // HTTP header set in requests to indicate they should be marked DoNotTrack. BLINK_COMMON_EXPORT extern const char kDoNotTrackHeader[]; +// These values indicate the load progress constants shared between both +// //content and //blink. +// +// Initial progress value is set to 0.1 to help provide feedback as soon as a +// load starts. +constexpr double kInitialLoadProgress = 0.1; +constexpr double kFinalLoadProgress = 1.0; + } // namespace blink #endif // THIRD_PARTY_BLINK_PUBLIC_COMMON_LOADER_LOADER_CONSTANTS_H_
diff --git a/third_party/blink/public/strings/translations/blink_strings_te.xtb b/third_party/blink/public/strings/translations/blink_strings_te.xtb index fd71149c..dd1ff5c 100644 --- a/third_party/blink/public/strings/translations/blink_strings_te.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_te.xtb
@@ -213,7 +213,7 @@ <translation id="6692633176391053278">స్టెప్పర్</translation> <translation id="6696580792574109116">నెల పికర్</translation> <translation id="6709093583001123835">విలువ ఖచ్చితంగా <ph name="VALUE" /> అయ్యి ఉండాలి.</translation> -<translation id="6709570249143506788">ప్లేబ్యాక్ నాణ్యత బాగాలేదు</translation> +<translation id="6709570249143506788">ప్లేబ్యాక్ క్వాలిటీ బాగాలేదు</translation> <translation id="6755330956360078551">సాధన చిట్కా</translation> <translation id="6790428901817661496">ప్లే చేయి</translation> <translation id="6820355525329141109">ప్లగ్ఇన్ను లోడ్ చేయడం సాధ్యపడలేదు.</translation>
diff --git a/third_party/blink/renderer/core/app_history/app_history.cc b/third_party/blink/renderer/core/app_history/app_history.cc index 6167d79..f50aaab 100644 --- a/third_party/blink/renderer/core/app_history/app_history.cc +++ b/third_party/blink/renderer/core/app_history/app_history.cc
@@ -147,7 +147,7 @@ app_history->DispatchEvent(*InitEvent(value)); if (navigation_) { if (type_ == ResolveType::kFulfill) - navigation_->returned_promise->Resolve(value); + navigation_->returned_promise->Resolve(); else navigation_->returned_promise->Reject(value); } @@ -632,10 +632,8 @@ return DispatchResult::kAbort; } - ScriptPromise promise = navigate_event->GetNavigationActionPromise(); - bool respondWithCalled = false; - if (!promise.IsEmpty()) { - respondWithCalled = true; + auto promise_list = navigate_event->GetNavigationActionPromisesList(); + if (!promise_list.IsEmpty()) { // The spec says that at this point we should either run the URL and history // update steps (for non-traverse cases) or we should do a same-document // history traversal. In our implementation it's easier for the caller to do @@ -649,24 +647,28 @@ } post_navigate_event_ongoing_navigation_signal_ = navigate_event->signal(); - if (!promise.IsEmpty() || (!navigate_event->defaultPrevented() && - event_type != NavigateEventType::kCrossDocument)) { - if (promise.IsEmpty()) + if (!promise_list.IsEmpty() || + (!navigate_event->defaultPrevented() && + event_type != NavigateEventType::kCrossDocument)) { + ScriptPromise promise; + if (promise_list.IsEmpty()) promise = ScriptPromise::CastUndefined(script_state); + else + promise = ScriptPromise::All(script_state, promise_list); NavigateReaction::React( script_state, promise, navigation, - respondWithCalled ? navigate_event->signal() : nullptr); + promise_list.IsEmpty() ? nullptr : navigate_event->signal()); } else { to_be_set_serialized_state_.reset(); } - if (navigate_event->defaultPrevented() && promise.IsEmpty()) + if (navigate_event->defaultPrevented()) { FinalizeWithAbortedNavigationError(script_state, navigation); + return DispatchResult::kAbort; + } - if (!navigate_event->defaultPrevented()) - return DispatchResult::kContinue; - return respondWithCalled ? DispatchResult::kRespondWith - : DispatchResult::kAbort; + return promise_list.IsEmpty() ? DispatchResult::kContinue + : DispatchResult::kRespondWith; } void AppHistory::InformAboutCanceledNavigation() { @@ -687,7 +689,6 @@ !post_navigate_event_ongoing_navigation_signal_); if (ongoing_navigate_event_) { ongoing_navigate_event_->preventDefault(); - ongoing_navigate_event_->ClearNavigationActionPromise(); ongoing_navigate_event_->signal()->SignalAbort(); ongoing_navigate_event_ = nullptr; } else if (post_navigate_event_ongoing_navigation_signal_) {
diff --git a/third_party/blink/renderer/core/app_history/app_history_navigate_event.cc b/third_party/blink/renderer/core/app_history/app_history_navigate_event.cc index d1701b9..e0fa621 100644 --- a/third_party/blink/renderer/core/app_history/app_history_navigate_event.cc +++ b/third_party/blink/renderer/core/app_history/app_history_navigate_event.cc
@@ -68,12 +68,7 @@ return; } - preventDefault(); - navigation_action_promise_ = newNavigationAction; -} - -void AppHistoryNavigateEvent::ClearNavigationActionPromise() { - navigation_action_promise_ = ScriptPromise(); + navigation_action_promises_list_.push_back(newNavigationAction); } const AtomicString& AppHistoryNavigateEvent::InterfaceName() const { @@ -87,7 +82,7 @@ visitor->Trace(signal_); visitor->Trace(form_data_); visitor->Trace(info_); - visitor->Trace(navigation_action_promise_); + visitor->Trace(navigation_action_promises_list_); } } // namespace blink
diff --git a/third_party/blink/renderer/core/app_history/app_history_navigate_event.h b/third_party/blink/renderer/core/app_history/app_history_navigate_event.h index 10b37e8..cd2cdad 100644 --- a/third_party/blink/renderer/core/app_history/app_history_navigate_event.h +++ b/third_party/blink/renderer/core/app_history/app_history_navigate_event.h
@@ -55,10 +55,9 @@ ScriptPromise newNavigationAction, ExceptionState&); - ScriptPromise GetNavigationActionPromise() { - return navigation_action_promise_; + const HeapVector<ScriptPromise>& GetNavigationActionPromisesList() { + return navigation_action_promises_list_; } - void ClearNavigationActionPromise(); const AtomicString& InterfaceName() const final; void Trace(Visitor*) const final; @@ -74,7 +73,7 @@ ScriptValue info_; KURL url_; - ScriptPromise navigation_action_promise_; + HeapVector<ScriptPromise> navigation_action_promises_list_; }; } // namespace blink
diff --git a/third_party/blink/renderer/core/css/cssom/paint_worklet_style_property_map.cc b/third_party/blink/renderer/core/css/cssom/paint_worklet_style_property_map.cc index 6b4d258..5207e724 100644 --- a/third_party/blink/renderer/core/css/cssom/paint_worklet_style_property_map.cc +++ b/third_party/blink/renderer/core/css/cssom/paint_worklet_style_property_map.cc
@@ -18,7 +18,6 @@ #include "third_party/blink/renderer/core/css/cssom/css_unsupported_style_value.h" #include "third_party/blink/renderer/core/css/properties/css_property_ref.h" #include "third_party/blink/renderer/core/dom/document.h" -#include "third_party/blink/renderer/core/layout/layout_object.h" #include "third_party/blink/renderer/core/style/computed_style.h" namespace blink {
diff --git a/third_party/blink/renderer/core/css/invalidation/pending_invalidations.cc b/third_party/blink/renderer/core/css/invalidation/pending_invalidations.cc index b8d4534..e2fb46f 100644 --- a/third_party/blink/renderer/core/css/invalidation/pending_invalidations.cc +++ b/third_party/blink/renderer/core/css/invalidation/pending_invalidations.cc
@@ -14,7 +14,6 @@ #include "third_party/blink/renderer/core/dom/shadow_root.h" #include "third_party/blink/renderer/core/html/html_slot_element.h" #include "third_party/blink/renderer/core/inspector/inspector_trace_events.h" -#include "third_party/blink/renderer/core/layout/layout_object.h" namespace blink {
diff --git a/third_party/blink/renderer/core/css/invalidation/style_invalidator.cc b/third_party/blink/renderer/core/css/invalidation/style_invalidator.cc index 483e3d2c..0463c26 100644 --- a/third_party/blink/renderer/core/css/invalidation/style_invalidator.cc +++ b/third_party/blink/renderer/core/css/invalidation/style_invalidator.cc
@@ -13,7 +13,6 @@ #include "third_party/blink/renderer/core/dom/shadow_root.h" #include "third_party/blink/renderer/core/html/html_slot_element.h" #include "third_party/blink/renderer/core/inspector/inspector_trace_events.h" -#include "third_party/blink/renderer/core/layout/layout_object.h" namespace blink {
diff --git a/third_party/blink/renderer/core/css/media_values.cc b/third_party/blink/renderer/core/css/media_values.cc index f5185f7d..4117ba3 100644 --- a/third_party/blink/renderer/core/css/media_values.cc +++ b/third_party/blink/renderer/core/css/media_values.cc
@@ -18,8 +18,6 @@ #include "third_party/blink/renderer/core/frame/local_frame.h" #include "third_party/blink/renderer/core/frame/local_frame_view.h" #include "third_party/blink/renderer/core/frame/settings.h" -#include "third_party/blink/renderer/core/layout/layout_object.h" -#include "third_party/blink/renderer/core/layout/layout_view.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/platform/graphics/color_space_gamut.h"
diff --git a/third_party/blink/renderer/core/css/media_values_cached.cc b/third_party/blink/renderer/core/css/media_values_cached.cc index 37c1ea0..935072d 100644 --- a/third_party/blink/renderer/core/css/media_values_cached.cc +++ b/third_party/blink/renderer/core/css/media_values_cached.cc
@@ -6,7 +6,6 @@ #include "third_party/blink/renderer/core/dom/document.h" #include "third_party/blink/renderer/core/frame/local_frame.h" -#include "third_party/blink/renderer/core/layout/layout_object.h" namespace blink {
diff --git a/third_party/blink/renderer/core/css/parser/at_rule_descriptor_parser.cc b/third_party/blink/renderer/core/css/parser/at_rule_descriptor_parser.cc index 9ce904e2..c1dcf70b 100644 --- a/third_party/blink/renderer/core/css/parser/at_rule_descriptor_parser.cc +++ b/third_party/blink/renderer/core/css/parser/at_rule_descriptor_parser.cc
@@ -187,6 +187,8 @@ case StyleRule::kPage: case StyleRule::kKeyframes: case StyleRule::kKeyframe: + case StyleRule::kLayerBlock: + case StyleRule::kLayerStatement: case StyleRule::kNamespace: case StyleRule::kSupports: case StyleRule::kViewport:
diff --git a/third_party/blink/renderer/core/css/parser/css_at_rule_id.cc b/third_party/blink/renderer/core/css/parser/css_at_rule_id.cc index 9b62f7d..3af857e 100644 --- a/third_party/blink/renderer/core/css/parser/css_at_rule_id.cc +++ b/third_party/blink/renderer/core/css/parser/css_at_rule_id.cc
@@ -19,6 +19,11 @@ return kCSSAtRuleImport; if (EqualIgnoringASCIICase(name, "keyframes")) return kCSSAtRuleKeyframes; + if (EqualIgnoringASCIICase(name, "layer")) { + if (RuntimeEnabledFeatures::CSSCascadeLayersEnabled()) + return kCSSAtRuleLayer; + return kCSSAtRuleInvalid; + } if (EqualIgnoringASCIICase(name, "media")) return kCSSAtRuleMedia; if (EqualIgnoringASCIICase(name, "namespace")) @@ -64,6 +69,9 @@ case kCSSAtRuleKeyframes: feature = WebFeature::kCSSAtRuleKeyframes; break; + case kCSSAtRuleLayer: + // TODO(crbug.com/1095765): Add use-counter. + return; case kCSSAtRuleMedia: feature = WebFeature::kCSSAtRuleMedia; break;
diff --git a/third_party/blink/renderer/core/css/parser/css_at_rule_id.h b/third_party/blink/renderer/core/css/parser/css_at_rule_id.h index 9ec2aa3..2aa93ff 100644 --- a/third_party/blink/renderer/core/css/parser/css_at_rule_id.h +++ b/third_party/blink/renderer/core/css/parser/css_at_rule_id.h
@@ -17,6 +17,7 @@ kCSSAtRuleFontFace, kCSSAtRuleImport, kCSSAtRuleKeyframes, + kCSSAtRuleLayer, kCSSAtRuleMedia, kCSSAtRuleNamespace, kCSSAtRulePage,
diff --git a/third_party/blink/renderer/core/css/parser/css_parser_impl.cc b/third_party/blink/renderer/core/css/parser/css_parser_impl.cc index dabf634..e4559ea 100644 --- a/third_party/blink/renderer/core/css/parser/css_parser_impl.cc +++ b/third_party/blink/renderer/core/css/parser/css_parser_impl.cc
@@ -70,6 +70,31 @@ return g_null_atom; } +// Finds the longest prefix of |range| that matches a <layer-name> and parses +// it. Returns an empty result with |range| unmodified if parsing fails. +StyleRuleBase::LayerName ConsumeCascadeLayerName(CSSParserTokenRange& range) { + CSSParserTokenRange original_range = range; + StyleRuleBase::LayerName name; + while (!range.AtEnd() && range.Peek().GetType() == kIdentToken) { + const CSSParserToken& name_part = range.Consume(); + name.emplace_back(name_part.Value().ToString()); + + const bool has_next_part = range.Peek().GetType() == kDelimiterToken && + range.Peek().Delimiter() == '.' && + range.Peek(1).GetType() == kIdentToken; + if (!has_next_part) + break; + range.Consume(); + } + + if (!name.size()) + original_range = range; + else + range.ConsumeWhitespace(); + + return name; +} + } // namespace CSSParserImpl::CSSParserImpl(const CSSParserContext* context, @@ -567,6 +592,8 @@ return ConsumeKeyframesRule(true, stream); case kCSSAtRuleKeyframes: return ConsumeKeyframesRule(false, stream); + case kCSSAtRuleLayer: + return ConsumeLayerRule(stream); case kCSSAtRulePage: return ConsumePageRule(stream); case kCSSAtRuleProperty: @@ -1027,6 +1054,72 @@ return MakeGarbageCollected<StyleRuleContainer>(*container_query, rules); } +StyleRuleBase* CSSParserImpl::ConsumeLayerRule(CSSParserTokenStream& stream) { + DCHECK(RuntimeEnabledFeatures::CSSCascadeLayersEnabled()); + + wtf_size_t prelude_offset_start = stream.LookAheadOffset(); + CSSParserTokenRange prelude = ConsumeAtRulePrelude(stream); + wtf_size_t prelude_offset_end = stream.LookAheadOffset(); + + // @layer statement rule without style declarations. + if (stream.AtEnd() || stream.UncheckedPeek().GetType() == kSemicolonToken) { + if (!ConsumeEndOfPreludeForAtRuleWithoutBlock(stream)) + return nullptr; + + Vector<StyleRuleBase::LayerName> names; + while (!prelude.AtEnd()) { + if (names.size()) { + if (!css_parsing_utils::ConsumeCommaIncludingWhitespace(prelude)) + return nullptr; + } + StyleRuleBase::LayerName name = ConsumeCascadeLayerName(prelude); + if (!name.size()) + return nullptr; + names.push_back(std::move(name)); + } + if (!names.size()) + return nullptr; + + if (observer_) { + observer_->StartRuleHeader(StyleRule::kLayerStatement, + prelude_offset_start); + observer_->EndRuleHeader(prelude_offset_end); + observer_->StartRuleBody(prelude_offset_end); + observer_->EndRuleBody(prelude_offset_end); + } + + return MakeGarbageCollected<StyleRuleLayerStatement>(std::move(names)); + } + + // @layer block rule with style declarations. + if (!ConsumeEndOfPreludeForAtRuleWithBlock(stream)) + return nullptr; + CSSParserTokenStream::BlockGuard guard(stream); + + StyleRuleBase::LayerName name; + prelude.ConsumeWhitespace(); + if (!prelude.AtEnd()) { + name = ConsumeCascadeLayerName(prelude); + if (!name.size() || !prelude.AtEnd()) + return nullptr; + } + + if (observer_) { + observer_->StartRuleHeader(StyleRule::kLayerBlock, prelude_offset_start); + observer_->EndRuleHeader(prelude_offset_end); + observer_->StartRuleBody(stream.Offset()); + } + + HeapVector<Member<StyleRuleBase>> rules; + ConsumeRuleList(stream, kRegularRuleList, + [&rules](StyleRuleBase* rule) { rules.push_back(rule); }); + + if (observer_) + observer_->EndRuleBody(stream.Offset()); + + return MakeGarbageCollected<StyleRuleLayerBlock>(std::move(name), rules); +} + StyleRuleKeyframe* CSSParserImpl::ConsumeKeyframeStyleRule( const CSSParserTokenRange prelude, const RangeOffset& prelude_offset,
diff --git a/third_party/blink/renderer/core/css/parser/css_parser_impl.h b/third_party/blink/renderer/core/css/parser/css_parser_impl.h index 34c728d..c3b3fa0 100644 --- a/third_party/blink/renderer/core/css/parser/css_parser_impl.h +++ b/third_party/blink/renderer/core/css/parser/css_parser_impl.h
@@ -169,6 +169,7 @@ StyleRuleCounterStyle* ConsumeCounterStyleRule(CSSParserTokenStream&); StyleRuleScrollTimeline* ConsumeScrollTimelineRule(CSSParserTokenStream&); StyleRuleContainer* ConsumeContainerRule(CSSParserTokenStream&); + StyleRuleBase* ConsumeLayerRule(CSSParserTokenStream&); StyleRuleKeyframe* ConsumeKeyframeStyleRule(CSSParserTokenRange prelude, const RangeOffset& prelude_offset,
diff --git a/third_party/blink/renderer/core/css/parser/css_parser_impl_test.cc b/third_party/blink/renderer/core/css/parser/css_parser_impl_test.cc index 57fe9c97..d6c99df5 100644 --- a/third_party/blink/renderer/core/css/parser/css_parser_impl_test.cc +++ b/third_party/blink/renderer/core/css/parser/css_parser_impl_test.cc
@@ -276,4 +276,182 @@ } } +TEST(CSSParserImplTest, LayerRuleDisabled) { + ScopedCSSCascadeLayersForTest disabled_scope(false); + + // @layer rules should be ignored when the feature is disabled. + + using css_test_helpers::ParseRule; + Document* document = Document::CreateForTest(); + EXPECT_FALSE(ParseRule(*document, "@layer foo;")); + EXPECT_FALSE(ParseRule(*document, "@layer foo, bar;")); + EXPECT_FALSE(ParseRule(*document, "@layer foo { }")); + EXPECT_FALSE(ParseRule(*document, "@layer foo.bar { }")); + EXPECT_FALSE(ParseRule(*document, "@layer { }")); +} + +TEST(CSSParserImplTest, InvalidLayerRules) { + ScopedCSSCascadeLayersForTest enabled_scope(true); + + using css_test_helpers::ParseRule; + Document* document = Document::CreateForTest(); + + // At most one layer name in an @layer block rule + EXPECT_FALSE(ParseRule(*document, "@layer foo, bar { }")); + + // Layers must be named in an @layer statement rule + EXPECT_FALSE(ParseRule(*document, "@layer ;")); + EXPECT_FALSE(ParseRule(*document, "@layer foo, , bar;")); + + // Invalid layer names + EXPECT_FALSE(ParseRule(*document, "@layer foo.bar. { }")); + EXPECT_FALSE(ParseRule(*document, "@layer foo.bar.;")); + EXPECT_FALSE(ParseRule(*document, "@layer .foo.bar { }")); + EXPECT_FALSE(ParseRule(*document, "@layer .foo.bar;")); + EXPECT_FALSE(ParseRule(*document, "@layer foo. bar { }")); + EXPECT_FALSE(ParseRule(*document, "@layer foo. bar;")); + EXPECT_FALSE(ParseRule(*document, "@layer foo bar { }")); + EXPECT_FALSE(ParseRule(*document, "@layer foo bar;")); + EXPECT_FALSE(ParseRule(*document, "@layer foo/bar { }")); + EXPECT_FALSE(ParseRule(*document, "@layer foo/bar;")); +} + +TEST(CSSParserImplTest, ValidLayerBlockRule) { + ScopedCSSCascadeLayersForTest enabled_scope(true); + + using css_test_helpers::ParseRule; + Document* document = Document::CreateForTest(); + + // Basic named layer + { + String rule = "@layer foo { }"; + auto* parsed = DynamicTo<StyleRuleLayerBlock>(ParseRule(*document, rule)); + ASSERT_TRUE(parsed); + ASSERT_EQ(1u, parsed->GetName().size()); + EXPECT_EQ("foo", parsed->GetName()[0]); + } + + // Unnamed layer + { + String rule = "@layer { }"; + auto* parsed = DynamicTo<StyleRuleLayerBlock>(ParseRule(*document, rule)); + ASSERT_TRUE(parsed); + ASSERT_EQ(0u, parsed->GetName().size()); + } + + // Sub-layer declared directly + { + String rule = "@layer foo.bar { }"; + auto* parsed = DynamicTo<StyleRuleLayerBlock>(ParseRule(*document, rule)); + ASSERT_TRUE(parsed); + ASSERT_EQ(2u, parsed->GetName().size()); + EXPECT_EQ("foo", parsed->GetName()[0]); + EXPECT_EQ("bar", parsed->GetName()[1]); + } +} + +TEST(CSSParserImplTest, ValidLayerStatementRule) { + ScopedCSSCascadeLayersForTest enabled_scope(true); + + using css_test_helpers::ParseRule; + Document* document = Document::CreateForTest(); + + { + String rule = "@layer foo;"; + auto* parsed = + DynamicTo<StyleRuleLayerStatement>(ParseRule(*document, rule)); + ASSERT_TRUE(parsed); + ASSERT_EQ(1u, parsed->GetNames().size()); + ASSERT_EQ(1u, parsed->GetNames()[0].size()); + EXPECT_EQ("foo", parsed->GetNames()[0][0]); + } + + { + String rule = "@layer foo, bar;"; + auto* parsed = + DynamicTo<StyleRuleLayerStatement>(ParseRule(*document, rule)); + ASSERT_TRUE(parsed); + ASSERT_EQ(2u, parsed->GetNames().size()); + ASSERT_EQ(1u, parsed->GetNames()[0].size()); + EXPECT_EQ("foo", parsed->GetNames()[0][0]); + ASSERT_EQ(1u, parsed->GetNames()[1].size()); + EXPECT_EQ("bar", parsed->GetNames()[1][0]); + } + + { + String rule = "@layer foo, bar.baz;"; + auto* parsed = + DynamicTo<StyleRuleLayerStatement>(ParseRule(*document, rule)); + ASSERT_TRUE(parsed); + ASSERT_EQ(2u, parsed->GetNames().size()); + ASSERT_EQ(1u, parsed->GetNames()[0].size()); + EXPECT_EQ("foo", parsed->GetNames()[0][0]); + ASSERT_EQ(2u, parsed->GetNames()[1].size()); + EXPECT_EQ("bar", parsed->GetNames()[1][0]); + EXPECT_EQ("baz", parsed->GetNames()[1][1]); + } +} + +TEST(CSSParserImplTest, NestedLayerRules) { + ScopedCSSCascadeLayersForTest enabled_scope(true); + + using css_test_helpers::ParseRule; + Document* document = Document::CreateForTest(); + + // Block rule as a child rule. + { + String rule = "@layer foo { @layer bar { } }"; + auto* foo = DynamicTo<StyleRuleLayerBlock>(ParseRule(*document, rule)); + ASSERT_TRUE(foo); + ASSERT_EQ(1u, foo->GetName().size()); + EXPECT_EQ("foo", foo->GetName()[0]); + ASSERT_EQ(1u, foo->ChildRules().size()); + + auto* bar = DynamicTo<StyleRuleLayerBlock>(foo->ChildRules()[0].Get()); + ASSERT_TRUE(bar); + ASSERT_EQ(1u, bar->GetName().size()); + EXPECT_EQ("bar", bar->GetName()[0]); + } + + // Statement rule as a child rule. + { + String rule = "@layer foo { @layer bar, baz; }"; + auto* foo = DynamicTo<StyleRuleLayerBlock>(ParseRule(*document, rule)); + ASSERT_TRUE(foo); + ASSERT_EQ(1u, foo->GetName().size()); + EXPECT_EQ("foo", foo->GetName()[0]); + ASSERT_EQ(1u, foo->ChildRules().size()); + + auto* barbaz = + DynamicTo<StyleRuleLayerStatement>(foo->ChildRules()[0].Get()); + ASSERT_TRUE(barbaz); + ASSERT_EQ(2u, barbaz->GetNames().size()); + ASSERT_EQ(1u, barbaz->GetNames()[0].size()); + EXPECT_EQ("bar", barbaz->GetNames()[0][0]); + ASSERT_EQ(1u, barbaz->GetNames()[1].size()); + EXPECT_EQ("baz", barbaz->GetNames()[1][0]); + } + + // Nested in an unnamed layer. + { + String rule = "@layer { @layer foo; @layer bar { } }"; + auto* parent = DynamicTo<StyleRuleLayerBlock>(ParseRule(*document, rule)); + ASSERT_TRUE(parent); + ASSERT_EQ(0u, parent->GetName().size()); + ASSERT_EQ(2u, parent->ChildRules().size()); + + auto* foo = + DynamicTo<StyleRuleLayerStatement>(parent->ChildRules()[0].Get()); + ASSERT_TRUE(foo); + ASSERT_EQ(1u, foo->GetNames().size()); + ASSERT_EQ(1u, foo->GetNames()[0].size()); + EXPECT_EQ("foo", foo->GetNames()[0][0]); + + auto* bar = DynamicTo<StyleRuleLayerBlock>(parent->ChildRules()[1].Get()); + ASSERT_TRUE(bar); + ASSERT_EQ(1u, bar->GetName().size()); + EXPECT_EQ("bar", bar->GetName()[0]); + } +} + } // namespace blink
diff --git a/third_party/blink/renderer/core/css/resolver/style_adjuster.cc b/third_party/blink/renderer/core/css/resolver/style_adjuster.cc index 74e4578..05d1b98 100644 --- a/third_party/blink/renderer/core/css/resolver/style_adjuster.cc +++ b/third_party/blink/renderer/core/css/resolver/style_adjuster.cc
@@ -55,8 +55,6 @@ #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/input_type_names.h" -#include "third_party/blink/renderer/core/layout/layout_object.h" -#include "third_party/blink/renderer/core/layout/layout_replaced.h" #include "third_party/blink/renderer/core/layout/layout_theme.h" #include "third_party/blink/renderer/core/layout/list_marker.h" #include "third_party/blink/renderer/core/layout/ng/inline/layout_ng_text_combine.h"
diff --git a/third_party/blink/renderer/core/css/style_rule.cc b/third_party/blink/renderer/core/css/style_rule.cc index 536701a..ae97eb2 100644 --- a/third_party/blink/renderer/core/css/style_rule.cc +++ b/third_party/blink/renderer/core/css/style_rule.cc
@@ -92,6 +92,12 @@ case kKeyframe: To<StyleRuleKeyframe>(this)->TraceAfterDispatch(visitor); return; + case kLayerBlock: + To<StyleRuleLayerBlock>(this)->TraceAfterDispatch(visitor); + return; + case kLayerStatement: + To<StyleRuleLayerStatement>(this)->TraceAfterDispatch(visitor); + return; case kNamespace: To<StyleRuleNamespace>(this)->TraceAfterDispatch(visitor); return; @@ -143,6 +149,12 @@ case kKeyframe: To<StyleRuleKeyframe>(this)->~StyleRuleKeyframe(); return; + case kLayerBlock: + To<StyleRuleLayerBlock>(this)->~StyleRuleLayerBlock(); + return; + case kLayerStatement: + To<StyleRuleLayerStatement>(this)->~StyleRuleLayerStatement(); + return; case kNamespace: To<StyleRuleNamespace>(this)->~StyleRuleNamespace(); return; @@ -183,6 +195,10 @@ return To<StyleRuleKeyframes>(this)->Copy(); case kViewport: return To<StyleRuleViewport>(this)->Copy(); + case kLayerBlock: + return To<StyleRuleLayerBlock>(this)->Copy(); + case kLayerStatement: + return To<StyleRuleLayerStatement>(this)->Copy(); case kNamespace: return To<StyleRuleNamespace>(this)->Copy(); case kCharset: @@ -239,6 +255,10 @@ rule = MakeGarbageCollected<CSSKeyframesRule>( To<StyleRuleKeyframes>(self), parent_sheet); break; + case kLayerBlock: + case kLayerStatement: + // TODO(crbug.com/1095765): Implement. + return nullptr; case kNamespace: rule = MakeGarbageCollected<CSSNamespaceRule>( To<StyleRuleNamespace>(self), parent_sheet); @@ -454,6 +474,33 @@ StyleRuleBase::TraceAfterDispatch(visitor); } +StyleRuleLayerBlock::StyleRuleLayerBlock( + LayerName&& name, + HeapVector<Member<StyleRuleBase>>& adopt_rules) + : StyleRuleGroup(kLayerBlock, adopt_rules), name_(std::move(name)) {} + +StyleRuleLayerBlock::StyleRuleLayerBlock(const StyleRuleLayerBlock& other) = + default; + +StyleRuleLayerBlock::~StyleRuleLayerBlock() = default; + +void StyleRuleLayerBlock::TraceAfterDispatch(blink::Visitor* visitor) const { + StyleRuleGroup::TraceAfterDispatch(visitor); +} + +StyleRuleLayerStatement::StyleRuleLayerStatement(Vector<LayerName>&& names) + : StyleRuleBase(kLayerStatement), names_(std::move(names)) {} + +StyleRuleLayerStatement::StyleRuleLayerStatement( + const StyleRuleLayerStatement& other) = default; + +StyleRuleLayerStatement::~StyleRuleLayerStatement() = default; + +void StyleRuleLayerStatement::TraceAfterDispatch( + blink::Visitor* visitor) const { + StyleRuleBase::TraceAfterDispatch(visitor); +} + StyleRuleCondition::StyleRuleCondition( RuleType type, HeapVector<Member<StyleRuleBase>>& adopt_rules)
diff --git a/third_party/blink/renderer/core/css/style_rule.h b/third_party/blink/renderer/core/css/style_rule.h index a3ba768..19e3b40 100644 --- a/third_party/blink/renderer/core/css/style_rule.h +++ b/third_party/blink/renderer/core/css/style_rule.h
@@ -48,6 +48,8 @@ kProperty, kKeyframes, kKeyframe, + kLayerBlock, + kLayerStatement, kNamespace, kContainer, kCounterStyle, @@ -56,6 +58,11 @@ kViewport, }; + // Name of a cascade layer as given by an @layer rule, split at '.' into a + // vector. Note that this may not be the full layer name if the rule is nested + // in another @layer rule or in a layered @import. + using LayerName = Vector<AtomicString, 1>; + RuleType GetType() const { return static_cast<RuleType>(type_); } bool IsCharsetRule() const { return GetType() == kCharset; } @@ -64,6 +71,8 @@ bool IsFontFaceRule() const { return GetType() == kFontFace; } bool IsKeyframesRule() const { return GetType() == kKeyframes; } bool IsKeyframeRule() const { return GetType() == kKeyframe; } + bool IsLayerBlockRule() const { return GetType() == kLayerBlock; } + bool IsLayerStatementRule() const { return GetType() == kLayerStatement; } bool IsNamespaceRule() const { return GetType() == kNamespace; } bool IsMediaRule() const { return GetType() == kMedia; } bool IsPageRule() const { return GetType() == kPage; } @@ -264,6 +273,45 @@ HeapVector<Member<StyleRuleBase>> child_rules_; }; +// https://www.w3.org/TR/css-cascade-5/#layer-block +class CORE_EXPORT StyleRuleLayerBlock : public StyleRuleGroup { + public: + StyleRuleLayerBlock(LayerName&& name, + HeapVector<Member<StyleRuleBase>>& adopt_rule); + StyleRuleLayerBlock(const StyleRuleLayerBlock&); + ~StyleRuleLayerBlock(); + + const LayerName& GetName() const { return name_; } + + StyleRuleLayerBlock* Copy() const { + return MakeGarbageCollected<StyleRuleLayerBlock>(*this); + } + + void TraceAfterDispatch(blink::Visitor*) const; + + private: + LayerName name_; +}; + +// https://www.w3.org/TR/css-cascade-5/#layer-empty +class CORE_EXPORT StyleRuleLayerStatement : public StyleRuleBase { + public: + explicit StyleRuleLayerStatement(Vector<LayerName>&& names); + StyleRuleLayerStatement(const StyleRuleLayerStatement& other); + ~StyleRuleLayerStatement(); + + const Vector<LayerName>& GetNames() const { return names_; } + + StyleRuleLayerStatement* copy() const { + return MakeGarbageCollected<StyleRuleLayerStatement>(*this); + } + + void TraceAfterDispatch(blink::Visitor*) const; + + private: + Vector<LayerName> names_; +}; + class CORE_EXPORT StyleRuleCondition : public StyleRuleGroup { public: String ConditionText() const { return condition_text_; } @@ -409,6 +457,20 @@ }; template <> +struct DowncastTraits<StyleRuleLayerBlock> { + static bool AllowFrom(const StyleRuleBase& rule) { + return rule.IsLayerBlockRule(); + } +}; + +template <> +struct DowncastTraits<StyleRuleLayerStatement> { + static bool AllowFrom(const StyleRuleBase& rule) { + return rule.IsLayerStatementRule(); + } +}; + +template <> struct DowncastTraits<StyleRuleMedia> { static bool AllowFrom(const StyleRuleBase& rule) { return rule.IsMediaRule();
diff --git a/third_party/blink/renderer/core/css/style_sheet_contents.cc b/third_party/blink/renderer/core/css/style_sheet_contents.cc index e7d5116b..ef3cb134 100644 --- a/third_party/blink/renderer/core/css/style_sheet_contents.cc +++ b/third_party/blink/renderer/core/css/style_sheet_contents.cc
@@ -487,6 +487,7 @@ break; case StyleRuleBase::kContainer: case StyleRuleBase::kMedia: + case StyleRuleBase::kLayerBlock: if (ChildRulesHaveFailedOrCanceledSubresources( To<StyleRuleGroup>(rule)->ChildRules())) return true; @@ -500,6 +501,7 @@ case StyleRuleBase::kProperty: case StyleRuleBase::kKeyframes: case StyleRuleBase::kKeyframe: + case StyleRuleBase::kLayerStatement: case StyleRuleBase::kScrollTimeline: case StyleRuleBase::kSupports: case StyleRuleBase::kViewport:
diff --git a/third_party/blink/renderer/core/display_lock/display_lock_context.cc b/third_party/blink/renderer/core/display_lock/display_lock_context.cc index d94d6412..a6207c2 100644 --- a/third_party/blink/renderer/core/display_lock/display_lock_context.cc +++ b/third_party/blink/renderer/core/display_lock/display_lock_context.cc
@@ -25,7 +25,6 @@ #include "third_party/blink/renderer/core/frame/local_frame_view.h" #include "third_party/blink/renderer/core/html_element_type_helpers.h" #include "third_party/blink/renderer/core/inspector/inspector_trace_events.h" -#include "third_party/blink/renderer/core/layout/layout_box.h" #include "third_party/blink/renderer/core/layout/layout_object.h" #include "third_party/blink/renderer/core/page/page.h" #include "third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.h"
diff --git a/third_party/blink/renderer/core/dom/shadow_root.cc b/third_party/blink/renderer/core/dom/shadow_root.cc index 665db67..46f96b6 100644 --- a/third_party/blink/renderer/core/dom/shadow_root.cc +++ b/third_party/blink/renderer/core/dom/shadow_root.cc
@@ -40,7 +40,6 @@ #include "third_party/blink/renderer/core/dom/whitespace_attacher.h" #include "third_party/blink/renderer/core/editing/serializers/serialization.h" #include "third_party/blink/renderer/core/html/html_slot_element.h" -#include "third_party/blink/renderer/core/layout/layout_object.h" #include "third_party/blink/renderer/core/trustedtypes/trusted_types_util.h" #include "third_party/blink/renderer/platform/bindings/exception_state.h" #include "third_party/blink/renderer/platform/wtf/size_assertions.h"
diff --git a/third_party/blink/renderer/core/editing/serializers/html_interchange.cc b/third_party/blink/renderer/core/editing/serializers/html_interchange.cc index 8910a081..9b2bb00 100644 --- a/third_party/blink/renderer/core/editing/serializers/html_interchange.cc +++ b/third_party/blink/renderer/core/editing/serializers/html_interchange.cc
@@ -27,7 +27,6 @@ #include "third_party/blink/renderer/core/dom/text.h" #include "third_party/blink/renderer/core/editing/editing_utilities.h" -#include "third_party/blink/renderer/core/layout/layout_object.h" #include "third_party/blink/renderer/core/layout/layout_text.h" #include "third_party/blink/renderer/platform/wtf/text/character_names.h" #include "third_party/blink/renderer/platform/wtf/text/string_builder.h"
diff --git a/third_party/blink/renderer/core/exported/web_content_holder.cc b/third_party/blink/renderer/core/exported/web_content_holder.cc index be38d01..8b725c1 100644 --- a/third_party/blink/renderer/core/exported/web_content_holder.cc +++ b/third_party/blink/renderer/core/exported/web_content_holder.cc
@@ -6,7 +6,6 @@ #include "third_party/blink/renderer/core/content_capture/content_holder.h" #include "third_party/blink/renderer/core/dom/node.h" -#include "third_party/blink/renderer/core/layout/layout_object.h" namespace blink {
diff --git a/third_party/blink/renderer/core/exported/web_document.cc b/third_party/blink/renderer/core/exported/web_document.cc index f89529b..a33e3cb 100644 --- a/third_party/blink/renderer/core/exported/web_document.cc +++ b/third_party/blink/renderer/core/exported/web_document.cc
@@ -59,9 +59,6 @@ #include "third_party/blink/renderer/core/html/html_head_element.h" #include "third_party/blink/renderer/core/html/html_link_element.h" #include "third_party/blink/renderer/core/html/plugin_document.h" -#include "third_party/blink/renderer/core/layout/layout_object.h" -#include "third_party/blink/renderer/core/layout/layout_view.h" -#include "third_party/blink/renderer/core/loader/document_loader.h" #include "third_party/blink/renderer/core/page/page.h" #include "third_party/blink/renderer/platform/heap/heap.h" #include "third_party/blink/renderer/platform/weborigin/security_origin.h"
diff --git a/third_party/blink/renderer/core/exported/web_node.cc b/third_party/blink/renderer/core/exported/web_node.cc index 137b8fa3..18bfde4 100644 --- a/third_party/blink/renderer/core/exported/web_node.cc +++ b/third_party/blink/renderer/core/exported/web_node.cc
@@ -49,8 +49,7 @@ #include "third_party/blink/renderer/core/exported/web_plugin_container_impl.h" #include "third_party/blink/renderer/core/html/html_collection.h" #include "third_party/blink/renderer/core/html/html_element.h" -#include "third_party/blink/renderer/core/layout/layout_embedded_content.h" -#include "third_party/blink/renderer/core/layout/layout_object.h" +#include "third_party/blink/renderer/core/layout/layout_box.h" #include "third_party/blink/renderer/core/paint/paint_layer_scrollable_area.h" #include "third_party/blink/renderer/platform/bindings/exception_state.h" #include "third_party/blink/renderer/platform/bindings/to_v8.h"
diff --git a/third_party/blink/renderer/core/html/html_popup_element.cc b/third_party/blink/renderer/core/html/html_popup_element.cc index ef3574b..51c11d0 100644 --- a/third_party/blink/renderer/core/html/html_popup_element.cc +++ b/third_party/blink/renderer/core/html/html_popup_element.cc
@@ -94,7 +94,6 @@ void HTMLPopupElement::show() { if (open_ || !isConnected()) return; - // Only hide popups up to this popup's ancestral popup. GetDocument().HideAllPopupsUntil(NearestOpenAncestralPopup(this)); open_ = true; @@ -104,6 +103,13 @@ SetFocus(); being_shown_ = true; resize_observer_->observe(this); + // We need to update lifecycle phases to ensure the initial resize + // observation gets fired before the popup.show() call returns. Otherwise + // code like this will fail to work properly: + // popup.show(); + // popup.style.width = change; // Should light-dismiss popup, but won't + GetDocument().GetFrame()->View()->UpdateAllLifecyclePhases( + DocumentUpdateReason::kPagePopup); } bool HTMLPopupElement::IsKeyboardFocusable() const {
diff --git a/third_party/blink/renderer/core/input/touch_action_util.cc b/third_party/blink/renderer/core/input/touch_action_util.cc index b0c40e1..507d99b 100644 --- a/third_party/blink/renderer/core/input/touch_action_util.cc +++ b/third_party/blink/renderer/core/input/touch_action_util.cc
@@ -6,9 +6,6 @@ #include "third_party/blink/renderer/core/dom/node.h" #include "third_party/blink/renderer/core/dom/node_computed_style.h" -#include "third_party/blink/renderer/core/html/html_frame_owner_element.h" -#include "third_party/blink/renderer/core/layout/layout_box.h" -#include "third_party/blink/renderer/core/layout/layout_object.h" namespace blink { namespace touch_action_util {
diff --git a/third_party/blink/renderer/core/layout/custom_scrollbar.cc b/third_party/blink/renderer/core/layout/custom_scrollbar.cc index 992b01da..002d176 100644 --- a/third_party/blink/renderer/core/layout/custom_scrollbar.cc +++ b/third_party/blink/renderer/core/layout/custom_scrollbar.cc
@@ -172,8 +172,9 @@ bool is_horizontal = Orientation() == kHorizontalScrollbar; int old_thickness = is_horizontal ? Height() : Width(); int new_thickness = 0; - if (auto* part = parts_.DeprecatedAtOrEmptyValue(kScrollbarBGPart)) - new_thickness = part->ComputeThickness(); + auto it = parts_.find(kScrollbarBGPart); + if (it != parts_.end()) + new_thickness = it->value->ComputeThickness(); if (new_thickness != old_thickness) { SetFrameRect( @@ -260,8 +261,9 @@ } } + auto it = parts_.find(part_type); LayoutCustomScrollbarPart* part_layout_object = - parts_.DeprecatedAtOrEmptyValue(part_type); + it != parts_.end() ? it->value : nullptr; if (!part_layout_object && need_layout_object && scrollable_area_) { part_layout_object = LayoutCustomScrollbarPart::CreateAnonymous( &StyleSource()->GetDocument(), scrollable_area_, this, part_type); @@ -279,13 +281,12 @@ } IntRect CustomScrollbar::ButtonRect(ScrollbarPart part_type) const { - LayoutCustomScrollbarPart* part_layout_object = - parts_.DeprecatedAtOrEmptyValue(part_type); - if (!part_layout_object) + auto it = parts_.find(part_type); + if (it == parts_.end()) return IntRect(); bool is_horizontal = Orientation() == kHorizontalScrollbar; - int button_length = part_layout_object->ComputeLength(); + int button_length = it->value->ComputeLength(); IntRect button_rect(Location(), is_horizontal ? IntSize(button_length, Height()) : IntSize(Width(), button_length));
diff --git a/third_party/blink/renderer/core/layout/custom_scrollbar.h b/third_party/blink/renderer/core/layout/custom_scrollbar.h index 276d0de3..bcdf1361 100644 --- a/third_party/blink/renderer/core/layout/custom_scrollbar.h +++ b/third_party/blink/renderer/core/layout/custom_scrollbar.h
@@ -65,10 +65,12 @@ void PositionScrollbarParts(); LayoutCustomScrollbarPart* GetPart(ScrollbarPart part_type) { - return parts_.DeprecatedAtOrEmptyValue(part_type); + auto it = parts_.find(part_type); + return it != parts_.end() ? it->value : nullptr; } const LayoutCustomScrollbarPart* GetPart(ScrollbarPart part_type) const { - return parts_.DeprecatedAtOrEmptyValue(part_type); + auto it = parts_.find(part_type); + return it != parts_.end() ? it->value : nullptr; } void InvalidateDisplayItemClientsOfScrollbarParts();
diff --git a/third_party/blink/renderer/core/layout/grid_track_sizing_algorithm.cc b/third_party/blink/renderer/core/layout/grid_track_sizing_algorithm.cc index 176828a..e9309399 100644 --- a/third_party/blink/renderer/core/layout/grid_track_sizing_algorithm.cc +++ b/third_party/blink/renderer/core/layout/grid_track_sizing_algorithm.cc
@@ -509,9 +509,12 @@ bool GridTrackSizingAlgorithm::ParticipateInBaselineAlignment( const LayoutBox& child, GridAxis baseline_axis) const { - return baseline_axis == kGridColumnAxis - ? column_baseline_items_map_.DeprecatedAtOrEmptyValue(&child) - : row_baseline_items_map_.DeprecatedAtOrEmptyValue(&child); + if (baseline_axis == kGridColumnAxis) { + auto it = column_baseline_items_map_.find(&child); + return it != column_baseline_items_map_.end() ? it->value : false; + } + auto it = row_baseline_items_map_.find(&child); + return it != row_baseline_items_map_.end() ? it->value : false; } void GridTrackSizingAlgorithm::UpdateBaselineAlignmentContext(
diff --git a/third_party/blink/renderer/core/layout/layout_block.cc b/third_party/blink/renderer/core/layout/layout_block.cc index 10c182b..29b5e12 100644 --- a/third_party/blink/renderer/core/layout/layout_block.cc +++ b/third_party/blink/renderer/core/layout/layout_block.cc
@@ -1021,7 +1021,8 @@ TrackedLayoutBoxListHashSet* LayoutBlock::PositionedObjectsInternal() const { NOT_DESTROYED(); - return GetPositionedDescendantsMap().DeprecatedAtOrEmptyValue(this); + auto it = GetPositionedDescendantsMap().find(this); + return it != GetPositionedDescendantsMap().end() ? &*it->value : nullptr; } void LayoutBlock::InsertPositionedObject(LayoutBox* o) { @@ -1043,8 +1044,9 @@ } GetPositionedContainerMap().Set(o, this); + auto it = GetPositionedDescendantsMap().find(this); TrackedLayoutBoxListHashSet* descendant_set = - GetPositionedDescendantsMap().DeprecatedAtOrEmptyValue(this); + it != GetPositionedDescendantsMap().end() ? &*it->value : nullptr; if (!descendant_set) { descendant_set = new TrackedLayoutBoxListHashSet; GetPositionedDescendantsMap().Set(this, base::WrapUnique(descendant_set)); @@ -1191,8 +1193,9 @@ cb = cb->ContainingBlock(); } + auto it = GetPercentHeightDescendantsMap().find(this); TrackedLayoutBoxListHashSet* descendant_set = - GetPercentHeightDescendantsMap().DeprecatedAtOrEmptyValue(this); + it != GetPercentHeightDescendantsMap().end() ? &*it->value : nullptr; if (!descendant_set) { descendant_set = new TrackedLayoutBoxListHashSet; GetPercentHeightDescendantsMap().Set(this, @@ -1218,7 +1221,8 @@ TrackedLayoutBoxListHashSet* LayoutBlock::PercentHeightDescendantsInternal() const { NOT_DESTROYED(); - return GetPercentHeightDescendantsMap().DeprecatedAtOrEmptyValue(this); + auto it = GetPercentHeightDescendantsMap().find(this); + return it != GetPercentHeightDescendantsMap().end() ? &*it->value : nullptr; } void LayoutBlock::DirtyForLayoutFromPercentageHeightDescendants(
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 f2e4c14..9bf2e1c 100644 --- a/third_party/blink/renderer/core/layout/layout_block_flow.cc +++ b/third_party/blink/renderer/core/layout/layout_block_flow.cc
@@ -1502,9 +1502,9 @@ for (FloatingObjectSetIterator it = floating_object_set.begin(); it != end; ++it) { const FloatingObject& floating_object = *it->get(); + auto it_map = float_map.find(floating_object.GetLayoutObject()); FloatingObject* old_floating_object = - float_map.DeprecatedAtOrEmptyValue( - floating_object.GetLayoutObject()); + it_map != float_map.end() ? &*it_map->value : nullptr; LayoutUnit logical_bottom = LogicalBottomForFloat(floating_object); if (old_floating_object) { LayoutUnit old_logical_bottom =
diff --git a/third_party/blink/renderer/core/layout/layout_box_model_object.cc b/third_party/blink/renderer/core/layout/layout_box_model_object.cc index ad692c9..f20eab8a 100644 --- a/third_party/blink/renderer/core/layout/layout_box_model_object.cc +++ b/third_party/blink/renderer/core/layout/layout_box_model_object.cc
@@ -1322,7 +1322,8 @@ LayoutBoxModelObject* LayoutBoxModelObject::Continuation() const { NOT_DESTROYED(); - return GetContinuationMap().DeprecatedAtOrEmptyValue(this); + auto it = GetContinuationMap().find(this); + return it != GetContinuationMap().end() ? it->value : nullptr; } void LayoutBoxModelObject::SetContinuation(LayoutBoxModelObject* continuation) {
diff --git a/third_party/blink/renderer/core/layout/layout_counter.cc b/third_party/blink/renderer/core/layout/layout_counter.cc index 66d0474..bbbe7b35 100644 --- a/third_party/blink/renderer/core/layout/layout_counter.cc +++ b/third_party/blink/renderer/core/layout/layout_counter.cc
@@ -392,10 +392,11 @@ const AtomicString& identifier, bool always_create_counter) { if (object.HasCounterNodeMap()) { - if (CounterMap* node_map = - GetCounterMaps().DeprecatedAtOrEmptyValue(&object)) { - if (CounterNode* node = node_map->DeprecatedAtOrEmptyValue(identifier)) - return node; + auto it_counter = GetCounterMaps().find(&object); + if (it_counter != GetCounterMaps().end()) { + auto it_node = it_counter->value->find(identifier); + if (it_node != it_counter->value->end()) + return &*it_node->value; } } @@ -466,8 +467,10 @@ skip_descendants = current_layout_object->ShouldApplyStyleContainment(); if (!current_layout_object->HasCounterNodeMap()) continue; + auto* current_object = maps.at(current_layout_object); + auto it = current_object->find(identifier); CounterNode* current_counter = - maps.at(current_layout_object)->DeprecatedAtOrEmptyValue(identifier); + it != current_object->end() ? &*it->value : nullptr; if (!current_counter) continue; // At this point we found a counter to reparent. So we don't need to descend @@ -672,7 +675,8 @@ void LayoutCounter::DestroyCounterNode(LayoutObject& owner, const AtomicString& identifier) { - CounterMap* map = GetCounterMaps().DeprecatedAtOrEmptyValue(&owner); + auto it = GetCounterMaps().find(&owner); + CounterMap* map = it != GetCounterMaps().end() ? &*it->value : nullptr; if (!map) return; CounterMap::iterator map_iterator = map->find(identifier); @@ -725,13 +729,15 @@ MakeCounterNodeIfNeeded(layout_object, it->key, false); return; } + auto it_counter = GetCounterMaps().find(&layout_object); CounterMap* counter_map = - GetCounterMaps().DeprecatedAtOrEmptyValue(&layout_object); + it_counter != GetCounterMaps().end() ? &*it_counter->value : nullptr; DCHECK(counter_map); for (CounterDirectiveMap::const_iterator it = directive_map->begin(); it != end; ++it) { + auto it_node = counter_map->find(it->key); scoped_refptr<CounterNode> node = - counter_map->DeprecatedAtOrEmptyValue(it->key); + it_node != counter_map->end() ? it_node->value : nullptr; if (!node) { MakeCounterNodeIfNeeded(layout_object, it->key, false); continue; @@ -741,7 +747,8 @@ FindPlaceForCounter(layout_object, it->key, node->HasResetType(), new_parent, new_previous_sibling); - if (node != counter_map->DeprecatedAtOrEmptyValue(it->key)) + auto it_node2 = counter_map->find(it->key); + if (it_node2 == counter_map->end() || (node != it_node2->value)) continue; CounterNode* parent = node->Parent(); if (new_parent == parent && new_previous_sibling == node->PreviousSibling())
diff --git a/third_party/blink/renderer/core/layout/layout_grid.cc b/third_party/blink/renderer/core/layout/layout_grid.cc index 2169665..888f29c 100644 --- a/third_party/blink/renderer/core/layout/layout_grid.cc +++ b/third_party/blink/renderer/core/layout/layout_grid.cc
@@ -1102,12 +1102,15 @@ GridPositionsResolver::SpanSizeForAutoPlacedItem( auto_grid_item->StyleRef(), AutoPlacementMinorAxisDirection()); unsigned major_axis_initial_position = major_axis_positions.StartLine(); - - auto iterator = grid.CreateIterator( - AutoPlacementMajorAxisDirection(), major_axis_positions.StartLine(), - is_grid_auto_flow_dense ? 0 - : minor_axis_cursors.DeprecatedAtOrEmptyValue( - major_axis_initial_position)); + auto minor_access_cursor = 0; + if (!is_grid_auto_flow_dense) { + auto it = minor_axis_cursors.find(major_axis_initial_position); + if (it != minor_axis_cursors.end()) + minor_access_cursor = it->value; + } + auto iterator = grid.CreateIterator(AutoPlacementMajorAxisDirection(), + major_axis_positions.StartLine(), + minor_access_cursor); std::unique_ptr<GridArea> empty_grid_area = iterator->NextEmptyGridArea( major_axis_positions.IntegerSpan(), minor_axis_span_size); DCHECK(empty_grid_area); @@ -2291,10 +2294,10 @@ auto& line_of_positioned_item = is_row_axis ? column_of_positioned_item_ : row_of_positioned_item_; start = is_row_axis ? BorderLogicalLeft() : BorderBefore(); - if (absl::optional<wtf_size_t> line = - line_of_positioned_item.DeprecatedAtOrEmptyValue(&child)) { + auto it = line_of_positioned_item.find(&child); + if (it != line_of_positioned_item.end() && it->value) { auto& positions = is_row_axis ? column_positions_ : row_positions_; - start = positions[line.value()]; + start = positions[it->value.value()]; } start += LogicalOffsetForOutOfFlowChild(child, direction, track_breadth); end = start + track_breadth; @@ -2509,7 +2512,8 @@ DCHECK(child.IsOutOfFlowPositioned()); DCHECK(!StyleRef().IsLeftToRightDirection()); - if (column_of_positioned_item_.DeprecatedAtOrEmptyValue(&child)) + auto it = column_of_positioned_item_.find(&child); + if (it != column_of_positioned_item_.end() && it->value) return TranslateRTLCoordinate(coordinate); return BorderLogicalLeft() + BorderLogicalRight() + ClientLogicalWidth() -
diff --git a/third_party/blink/renderer/core/layout/layout_text.cc b/third_party/blink/renderer/core/layout/layout_text.cc index beacf1e2..cc3ee939 100644 --- a/third_party/blink/renderer/core/layout/layout_text.cc +++ b/third_party/blink/renderer/core/layout/layout_text.cc
@@ -2122,8 +2122,9 @@ int last_typed_character_offset_to_reveal = -1; UChar revealed_text; + auto it = GetSecureTextTimers().find(this); SecureTextTimer* secure_text_timer = - GetSecureTextTimers().DeprecatedAtOrEmptyValue(this); + it != GetSecureTextTimers().end() ? it->value : nullptr; if (secure_text_timer && secure_text_timer->IsActive()) { last_typed_character_offset_to_reveal = secure_text_timer->LastTypedCharacterOffset(); @@ -2747,8 +2748,9 @@ void LayoutText::MomentarilyRevealLastTypedCharacter( unsigned last_typed_character_offset) { NOT_DESTROYED(); + auto it = GetSecureTextTimers().find(this); SecureTextTimer* secure_text_timer = - GetSecureTextTimers().DeprecatedAtOrEmptyValue(this); + it != GetSecureTextTimers().end() ? it->value : nullptr; if (!secure_text_timer) { secure_text_timer = new SecureTextTimer(this); GetSecureTextTimers().insert(this, secure_text_timer); @@ -2810,9 +2812,9 @@ return text_combine; if (!IsSelected()) return nullptr; - if (const auto* client = - GetSelectionDisplayItemClientMap().DeprecatedAtOrEmptyValue(this)) - return client; + auto it = GetSelectionDisplayItemClientMap().find(this); + if (it != GetSelectionDisplayItemClientMap().end()) + return &*it->value; return GetSelectionDisplayItemClientMap() .insert(this, std::make_unique<SelectionDisplayItemClient>()) .stored_value->value.get();
diff --git a/third_party/blink/renderer/core/layout/ng/custom/pending_layout_registry.cc b/third_party/blink/renderer/core/layout/ng/custom/pending_layout_registry.cc index 1f5afab6..cab01cd1 100644 --- a/third_party/blink/renderer/core/layout/ng/custom/pending_layout_registry.cc +++ b/third_party/blink/renderer/core/layout/ng/custom/pending_layout_registry.cc
@@ -13,9 +13,9 @@ namespace blink { void PendingLayoutRegistry::NotifyLayoutReady(const AtomicString& name) { - PendingSet* set = pending_layouts_.DeprecatedAtOrEmptyValue(name); - if (set) { - for (const auto& node : *set) { + auto it = pending_layouts_.find(name); + if (it != pending_layouts_.end()) { + for (const auto& node : *it->value) { // If the node hasn't been gc'd, trigger a reattachment so that the // children are correctly blockified. //
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_offset_mapping.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_offset_mapping.cc index adc9d52..ceeb61d 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_offset_mapping.cc +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_offset_mapping.cc
@@ -286,7 +286,9 @@ const unsigned offset = node_and_offset.second; unsigned range_start; unsigned range_end; - std::tie(range_start, range_end) = ranges_.DeprecatedAtOrEmptyValue(&node); + auto it = ranges_.find(&node); + std::tie(range_start, range_end) = + it != ranges_.end() ? it->value : std::pair<unsigned, unsigned>(0, 0); if (range_start == range_end || units_[range_start].DOMStart() > offset) return nullptr; // Find the last unit where unit.dom_start <= offset @@ -311,7 +313,9 @@ const unsigned end_offset = ToNodeOffsetPair(range.EndPosition()).second; unsigned range_start; unsigned range_end; - std::tie(range_start, range_end) = ranges_.DeprecatedAtOrEmptyValue(&node); + auto it = ranges_.find(&node); + std::tie(range_start, range_end) = + it != ranges_.end() ? it->value : std::pair<unsigned, unsigned>(0, 0); if (range_start == range_end || units_[range_start].DOMStart() > end_offset || units_[range_end - 1].DOMEnd() < start_offset)
diff --git a/third_party/blink/renderer/core/layout/shapes/shape_outside_info.h b/third_party/blink/renderer/core/layout/shapes/shape_outside_info.h index ff9501a..56f49ef 100644 --- a/third_party/blink/renderer/core/layout/shapes/shape_outside_info.h +++ b/third_party/blink/renderer/core/layout/shapes/shape_outside_info.h
@@ -111,8 +111,9 @@ static ShapeOutsideInfo& EnsureInfo(const LayoutBox& key) { InfoMap& info_map = ShapeOutsideInfo::GetInfoMap(); - if (ShapeOutsideInfo* info = info_map.DeprecatedAtOrEmptyValue(&key)) - return *info; + auto it = info_map.find(&key); + if (it != info_map.end()) + return *it->value; InfoMap::AddResult result = info_map.insert(&key, base::WrapUnique(new ShapeOutsideInfo(key))); return *result.stored_value->value;
diff --git a/third_party/blink/renderer/core/layout/svg/svg_text_layout_engine.cc b/third_party/blink/renderer/core/layout/svg/svg_text_layout_engine.cc index be743c8..46b3a2c 100644 --- a/third_party/blink/renderer/core/layout/svg/svg_text_layout_engine.cc +++ b/third_party/blink/renderer/core/layout/svg/svg_text_layout_engine.cc
@@ -415,9 +415,11 @@ if (!logical_text_node) break; + auto it = logical_text_node->CharacterDataMap().find( + logical_character_offset_ + 1); const SVGCharacterData data = - logical_text_node->CharacterDataMap().DeprecatedAtOrEmptyValue( - logical_character_offset_ + 1); + it != logical_text_node->CharacterDataMap().end() ? it->value + : SVGCharacterData(); // TODO(fs): Use the return value to eliminate the additional // hash-lookup below when determining if this text box should be tagged
diff --git a/third_party/blink/renderer/core/layout/text_autosizer.cc b/third_party/blink/renderer/core/layout/text_autosizer.cc index 0a73bd67..cc89a82 100644 --- a/third_party/blink/renderer/core/layout/text_autosizer.cc +++ b/third_party/blink/renderer/core/layout/text_autosizer.cc
@@ -1396,13 +1396,15 @@ TextAutosizer::Fingerprint TextAutosizer::FingerprintMapper::Get( const LayoutObject* layout_object) { - return fingerprints_.DeprecatedAtOrEmptyValue(layout_object); + auto it = fingerprints_.find(layout_object); + return it != fingerprints_.end() ? it->value : TextAutosizer::Fingerprint(); } TextAutosizer::BlockSet* TextAutosizer::FingerprintMapper::GetTentativeClusterRoots( Fingerprint fingerprint) { - return blocks_for_fingerprint_.DeprecatedAtOrEmptyValue(fingerprint); + auto it = blocks_for_fingerprint_.find(fingerprint); + return it != blocks_for_fingerprint_.end() ? &*it->value : nullptr; } TextAutosizer::LayoutScope::LayoutScope(LayoutBlock* block,
diff --git a/third_party/blink/renderer/core/loader/progress_tracker.cc b/third_party/blink/renderer/core/loader/progress_tracker.cc index f6f2ad94..751acdc00 100644 --- a/third_party/blink/renderer/core/loader/progress_tracker.cc +++ b/third_party/blink/renderer/core/loader/progress_tracker.cc
@@ -25,6 +25,7 @@ #include "third_party/blink/renderer/core/loader/progress_tracker.h" +#include "third_party/blink/public/common/loader/loader_constants.h" #include "third_party/blink/public/web/web_settings.h" #include "third_party/blink/renderer/core/frame/local_frame.h" #include "third_party/blink/renderer/core/frame/local_frame_client.h" @@ -40,14 +41,10 @@ namespace blink { -// Always start progress at initialProgressValue. This helps provide feedback as -// soon as a load starts. -static const double kInitialProgressValue = 0.1; +static constexpr int kProgressItemDefaultEstimatedLength = 1024 * 1024; -static const int kProgressItemDefaultEstimatedLength = 1024 * 1024; - -static const double kProgressNotificationInterval = 0.02; -static const double kProgressNotificationTimeInterval = 0.1; +static constexpr double kProgressNotificationInterval = 0.02; +static constexpr double kProgressNotificationTimeInterval = 0.1; ProgressTracker::ProgressTracker(LocalFrame* frame) : frame_(frame), @@ -90,7 +87,7 @@ void ProgressTracker::ProgressStarted() { Reset(); - progress_value_ = kInitialProgressValue; + progress_value_ = kInitialLoadProgress; if (!frame_->IsLoading()) { GetLocalFrameClient()->DidStartLoading(); frame_->SetIsLoading(true); @@ -183,7 +180,7 @@ if (!frame_->IsLoading()) return; - progress_value_ = kInitialProgressValue + 0.1; // +0.1 for committing + progress_value_ = kInitialLoadProgress + 0.1; // +0.1 for committing if (finished_parsing_) progress_value_ += 0.1; if (did_first_contentful_paint_) @@ -202,7 +199,7 @@ (double)estimated_bytes_for_pending_requests_; progress_value_ += percent_of_bytes_received / 2; - DCHECK_GE(progress_value_, kInitialProgressValue); + DCHECK_GE(progress_value_, kInitialLoadProgress); // Always leave space at the end. This helps show the user that we're not // done until we're done. DCHECK_LE(progress_value_, 0.9);
diff --git a/third_party/blink/renderer/core/script/script_runner.h b/third_party/blink/renderer/core/script/script_runner.h index 76c17c7..509fa7d 100644 --- a/third_party/blink/renderer/core/script/script_runner.h +++ b/third_party/blink/renderer/core/script/script_runner.h
@@ -85,8 +85,6 @@ void ExecuteTask(); - bool IsExecutionSuspended(); - Member<Document> document_; HeapDeque<Member<PendingScript>> pending_in_order_scripts_;
diff --git a/third_party/blink/renderer/core/style/fill_layer.cc b/third_party/blink/renderer/core/style/fill_layer.cc index a74d1e0..7097e99 100644 --- a/third_party/blink/renderer/core/style/fill_layer.cc +++ b/third_party/blink/renderer/core/style/fill_layer.cc
@@ -21,7 +21,8 @@ #include "third_party/blink/renderer/core/style/fill_layer.h" -#include "third_party/blink/renderer/core/layout/layout_object.h" +#include "third_party/blink/renderer/core/css/css_value.h" +#include "third_party/blink/renderer/core/style/computed_style.h" #include "third_party/blink/renderer/core/style/data_equivalency.h" #include "third_party/blink/renderer/platform/wtf/size_assertions.h"
diff --git a/third_party/blink/renderer/core/xml/parser/xml_document_parser.cc b/third_party/blink/renderer/core/xml/parser/xml_document_parser.cc index 23d27698..a6d21c4 100644 --- a/third_party/blink/renderer/core/xml/parser/xml_document_parser.cc +++ b/third_party/blink/renderer/core/xml/parser/xml_document_parser.cc
@@ -981,10 +981,15 @@ AtomicString adjusted_uri = uri; if (parsing_fragment_ && adjusted_uri.IsNull()) { - if (!prefix.IsNull()) - adjusted_uri = prefix_to_namespace_map_.at(prefix); - else + if (!prefix.IsNull()) { + // TODO(https://crbug.com/1239288) Assign `default_namespace_uri_` to + // `adjusted_uri` when `prefix` is not found. + auto it = prefix_to_namespace_map_.find(prefix); + if (it != prefix_to_namespace_map_.end()) + adjusted_uri = it->value; + } else { adjusted_uri = default_namespace_uri_; + } } bool is_first_element = !saw_first_element_;
diff --git a/third_party/blink/renderer/core/xml/xslt_processor.cc b/third_party/blink/renderer/core/xml/xslt_processor.cc index 3ce1279..417376a 100644 --- a/third_party/blink/renderer/core/xml/xslt_processor.cc +++ b/third_party/blink/renderer/core/xml/xslt_processor.cc
@@ -164,7 +164,10 @@ const String& local_name) const { // FIXME: namespace support? // should make a QualifiedName here but we'd have to expose the impl - return parameters_.DeprecatedAtOrEmptyValue(local_name); + auto it = parameters_.find(local_name); + if (it == parameters_.end()) + return String(); + return it->value; } void XSLTProcessor::removeParameter(const String& /*namespaceURI*/,
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object.cc b/third_party/blink/renderer/modules/accessibility/ax_object.cc index 12b9047c..4d41089a 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_object.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_object.cc
@@ -1563,11 +1563,11 @@ HashSet<QualifiedName> set_attributes; for (const Attribute& attr : attributes) { set_attributes.insert(attr.GetName()); - AXSparseSetterFunc callback = - setter_map.DeprecatedAtOrEmptyValue(attr.GetName()); - - if (callback) - callback.Run(this, node_data, attr.Value()); + AXSparseSetterFunc callback; + auto it = setter_map.find(attr.GetName()); + if (it == setter_map.end()) + continue; + it->value.Run(this, node_data, attr.Value()); } if (!element->DidAttachInternals()) @@ -1575,13 +1575,10 @@ const auto& internals_attributes = element->EnsureElementInternals().GetAttributes(); for (const QualifiedName& attr : internals_attributes.Keys()) { - if (set_attributes.Contains(attr)) + auto it = setter_map.find(attr); + if (set_attributes.Contains(attr) || it == setter_map.end()) continue; - - AXSparseSetterFunc callback = setter_map.DeprecatedAtOrEmptyValue(attr); - - if (callback) - callback.Run(this, node_data, internals_attributes.at(attr)); + it->value.Run(this, node_data, internals_attributes.at(attr)); } } @@ -5274,9 +5271,9 @@ value.Split(' ', role_vector); ax::mojom::blink::Role role = ax::mojom::blink::Role::kUnknown; for (const auto& child : role_vector) { - role = role_map->DeprecatedAtOrEmptyValue(child); - if (role != ax::mojom::blink::Role::kUnknown) - return role; + auto it = role_map->find(child); + if (it != role_map->end()) + return it->value; } return role;
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc index 8888b86f..6870215 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc
@@ -641,7 +641,8 @@ if (!layout_object) return nullptr; - AXID ax_id = layout_object_mapping_.DeprecatedAtOrEmptyValue(layout_object); + auto it_id = layout_object_mapping_.find(layout_object); + AXID ax_id = it_id != layout_object_mapping_.end() ? it_id->value : 0; DCHECK(!HashTraits<AXID>::IsDeletedValue(ax_id)); Node* node = layout_object->GetNode(); @@ -665,7 +666,8 @@ } } - AXObject* result = objects_.DeprecatedAtOrEmptyValue(ax_id); + auto it_result = objects_.find(ax_id); + AXObject* result = it_result != objects_.end() ? it_result->value : nullptr; #if DCHECK_IS_ON() DCHECK(result) << "Had AXID for Node but no entry in objects_"; DCHECK(result->IsAXNodeObject()); @@ -683,17 +685,29 @@ LayoutObject* layout_object = node->GetLayoutObject(); - AXID layout_id = - layout_object - ? layout_object_mapping_.DeprecatedAtOrEmptyValue(layout_object) - : 0; + AXID layout_id = 0; + if (layout_object) { + auto it = layout_object_mapping_.find(layout_object); + if (it != layout_object_mapping_.end()) + layout_id = it->value; + } DCHECK(!HashTraits<AXID>::IsDeletedValue(layout_id)); - if (layout_id) - return objects_.DeprecatedAtOrEmptyValue(layout_id); + if (layout_id) { + auto it = objects_.find(layout_id); + if (it != objects_.end()) + return it->value; + return nullptr; + } - AXID node_id = node_object_mapping_.DeprecatedAtOrEmptyValue(node); + auto it_node = node_object_mapping_.find(node); + AXID node_id = it_node != node_object_mapping_.end() ? it_node->value : 0; DCHECK(!HashTraits<AXID>::IsDeletedValue(node_id)); - return node_id ? objects_.DeprecatedAtOrEmptyValue(node_id) : nullptr; + if (node_id) { + auto it = objects_.find(node_id); + if (it != objects_.end()) + return it->value; + } + return nullptr; } AXObject* AXObjectCacheImpl::Get(const Node* node) { @@ -702,13 +716,16 @@ LayoutObject* layout_object = node->GetLayoutObject(); - AXID layout_id = - layout_object - ? layout_object_mapping_.DeprecatedAtOrEmptyValue(layout_object) - : 0; + AXID layout_id = 0; + if (layout_object) { + auto it = layout_object_mapping_.find(layout_object); + if (it != layout_object_mapping_.end()) + layout_id = it->value; + } DCHECK(!HashTraits<AXID>::IsDeletedValue(layout_id)); - AXID node_id = node_object_mapping_.DeprecatedAtOrEmptyValue(node); + auto it_node = node_object_mapping_.find(node); + AXID node_id = it_node != node_object_mapping_.end() ? it_node->value : 0; DCHECK(!HashTraits<AXID>::IsDeletedValue(node_id)); if (!layout_id && !node_id) @@ -755,7 +772,8 @@ } if (layout_id) { - AXObject* result = objects_.DeprecatedAtOrEmptyValue(layout_id); + auto it = objects_.find(layout_id); + AXObject* result = it != objects_.end() ? it->value : nullptr; #if DCHECK_IS_ON() DCHECK(result) << "Had AXID for LayoutObject but no entry in objects_"; DCHECK(result->IsAXLayoutObject()); @@ -769,7 +787,8 @@ DCHECK(node_id); - AXObject* result = objects_.DeprecatedAtOrEmptyValue(node_id); + auto it_result = objects_.find(node_id); + AXObject* result = it_result != objects_.end() ? it_result->value : nullptr; #if DCHECK_IS_ON() DCHECK(result) << "Had AXID for Node but no entry in objects_"; DCHECK(result->IsAXNodeObject()); @@ -785,13 +804,15 @@ if (!inline_text_box) return nullptr; + auto it_ax = inline_text_box_object_mapping_.find(inline_text_box); AXID ax_id = - inline_text_box_object_mapping_.DeprecatedAtOrEmptyValue(inline_text_box); + it_ax != inline_text_box_object_mapping_.end() ? it_ax->value : 0; DCHECK(!HashTraits<AXID>::IsDeletedValue(ax_id)); if (!ax_id) return nullptr; - AXObject* result = objects_.DeprecatedAtOrEmptyValue(ax_id); + auto it_result = objects_.find(ax_id); + AXObject* result = it_result != objects_.end() ? it_result->value : nullptr; #if DCHECK_IS_ON() DCHECK(result) << "Had AXID for inline text box but no entry in objects_"; DCHECK(result->IsAXInlineTextBox()); @@ -826,13 +847,14 @@ if (!accessible_node) return nullptr; - AXID ax_id = - accessible_node_mapping_.DeprecatedAtOrEmptyValue(accessible_node); + auto it_ax = accessible_node_mapping_.find(accessible_node); + AXID ax_id = it_ax != accessible_node_mapping_.end() ? it_ax->value : 0; DCHECK(!HashTraits<AXID>::IsDeletedValue(ax_id)); if (!ax_id) return nullptr; - AXObject* result = objects_.DeprecatedAtOrEmptyValue(ax_id); + auto it_result = objects_.find(ax_id); + AXObject* result = it_result != objects_.end() ? it_result->value : nullptr; #if DCHECK_IS_ON() DCHECK(result) << "Had AXID for accessible_node but no entry in objects_"; DCHECK(result->IsVirtualObject()); @@ -1110,13 +1132,13 @@ // One of the above calls could have already created the planned object via a // recursive call to GetOrCreate(). If so, just return that object. - if (node_object_mapping_.DeprecatedAtOrEmptyValue(node)) + if (node_object_mapping_.Contains(node)) return Get(node); AXObject* new_obj = CreateFromNode(node); // Will crash later if we have two objects for the same node. - DCHECK(!node_object_mapping_.DeprecatedAtOrEmptyValue(node)) + DCHECK(!node_object_mapping_.Contains(node)) << "Already have an AXObject for " << node; const AXID ax_id = AssociateAXID(new_obj, use_axid); @@ -1223,7 +1245,7 @@ // Example: parent calls Init() => ComputeAccessibilityIsIgnored() => // CanSetFocusAttribute() => CanBeActiveDescendant() => // IsARIAControlledByTextboxWithActiveDescendant() => GetOrCreate(). - if (layout_object_mapping_.DeprecatedAtOrEmptyValue(layout_object)) { + if (layout_object_mapping_.Contains(layout_object)) { AXObject* result = Get(layout_object); DCHECK(result) << "Missing cached AXObject for " << layout_object; return result; @@ -1234,7 +1256,7 @@ DCHECK(new_obj) << "Could not create AXObject for " << layout_object; // Will crash later if we have two objects for the same layoutObject. - DCHECK(!layout_object_mapping_.DeprecatedAtOrEmptyValue(layout_object)) + DCHECK(!layout_object_mapping_.Contains(layout_object)) << "Already have an AXObject for " << layout_object; const AXID axid = AssociateAXID(new_obj, use_axid); @@ -1358,7 +1380,8 @@ return; // First, fetch object to operate some cleanup functions on it. - AXObject* obj = objects_.DeprecatedAtOrEmptyValue(ax_id); + auto it = objects_.find(ax_id); + AXObject* obj = it != objects_.end() ? it->value : nullptr; if (!obj) return; @@ -2052,13 +2075,16 @@ return; LayoutObject* layout_object = node->GetLayoutObject(); - AXID layout_id = - layout_object - ? layout_object_mapping_.DeprecatedAtOrEmptyValue(layout_object) - : 0; + AXID layout_id = 0; + if (layout_object) { + auto it = layout_object_mapping_.find(layout_object); + if (it != layout_object_mapping_.end()) + layout_id = it->value; + } DCHECK(!HashTraits<AXID>::IsDeletedValue(layout_id)); - AXID node_id = node_object_mapping_.DeprecatedAtOrEmptyValue(node); + auto it = node_object_mapping_.find(node); + AXID node_id = it != node_object_mapping_.end() ? it->value : 0; DCHECK(!HashTraits<AXID>::IsDeletedValue(node_id)); DCHECK(!node->GetDocument().NeedsLayoutTreeUpdateForNode(*node)); @@ -3132,7 +3158,8 @@ if (!InlineTextBoxAccessibilityEnabled()) return; - AXID ax_id = layout_object_mapping_.DeprecatedAtOrEmptyValue(layout_object); + auto it = layout_object_mapping_.find(layout_object); + AXID ax_id = it != layout_object_mapping_.end() ? it->value : 0; DCHECK(!HashTraits<AXID>::IsDeletedValue(ax_id)); // Only update if the accessibility object already exists and it's
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.h b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.h index 7b00d88..de7b7c7 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.h +++ b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.h
@@ -191,7 +191,8 @@ void OnTouchAccessibilityHover(const IntPoint&) override; AXObject* ObjectFromAXID(AXID id) const { - return objects_.DeprecatedAtOrEmptyValue(id); + auto it = objects_.find(id); + return it != objects_.end() ? it->value : nullptr; } AXObject* Root();
diff --git a/third_party/blink/renderer/modules/accessibility/ax_relation_cache.cc b/third_party/blink/renderer/modules/accessibility/ax_relation_cache.cc index 64c8d9c..a3e6114c 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_relation_cache.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_relation_cache.cc
@@ -100,20 +100,29 @@ } } +// ContainsCycle() should: +// * Return true when a cycle is an authoring error, but not an error in Blink. +// * CHECK(false) when Blink should have caught this error earlier ... we should +// have never gotten into this state. +// +// For example, if a web page specifies that grandchild owns it's grandparent, +// what should happen is the ContainsCycle will start at the grandchild and go +// up, finding that it's grandparent is already in the ancestor chain, and +// return false, thus disallowing the relation. However, if on the way to the +// root, it discovers that any other two objects are repeated in the ancestor +// chain, this is unexpected, and results in the CHECK(false) condition. static bool ContainsCycle(AXObject* owner, AXObject* child) { - int num_loops = 0; - constexpr int kMaxLoops = 500; + HashSet<AXID> visited; // Walk up the parents of the owner object, make sure that this child // doesn't appear there, as that would create a cycle. - for (AXObject* parent = owner; parent; - parent = parent->CachedParentObject()) { - if (++num_loops > kMaxLoops) { - CHECK(false) << "Cycle in unexpected place:\n" - << "* Owner = " << owner->ToString(true, true) - << "* Child = " << child->ToString(true, true); - } - if (parent == child) + for (AXObject* ancestor = owner; ancestor; + ancestor = ancestor->CachedParentObject()) { + if (ancestor == child) return true; + CHECK(visited.insert(ancestor->AXObjectID()).is_new_entry) + << "Cycle in unexpected place:\n" + << "* Owner = " << owner->ToString(true, true) + << "* Child = " << child->ToString(true, true); } return false; } @@ -386,9 +395,11 @@ // Compare this to the current list of owned children, and exit early if // there are no changes. - Vector<AXID> previously_owned_child_ids = - aria_owner_to_children_mapping_.DeprecatedAtOrEmptyValue( - owner->AXObjectID()); + Vector<AXID> previously_owned_child_ids; + auto it = aria_owner_to_children_mapping_.find(owner->AXObjectID()); + if (it != aria_owner_to_children_mapping_.end()) { + previously_owned_child_ids = it->value; + } // Only force the refresh if there was or will be owned children; otherwise, // there is nothing to refresh even for a new AXObject replacing an old owner.
diff --git a/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.idl b/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.idl index bd4ae87..3c8b3134 100644 --- a/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.idl +++ b/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.idl
@@ -96,12 +96,12 @@ // pixel manipulation [RaisesException] ImageData createImageData(ImageData imagedata); - [RaisesException] ImageData createImageData(long sw, long sh); - [RaisesException, RuntimeEnabled=CanvasColorManagement] ImageData createImageData(long sw, long sh, ImageDataSettings imageDataSettings); - [HighEntropy, MeasureAs=OffscreenCanvasGetImageData, RaisesException] ImageData getImageData(long sx, long sy, long sw, long sh); - [HighEntropy, MeasureAs=OffscreenCanvasGetImageData, RaisesException, RuntimeEnabled=CanvasColorManagement] ImageData getImageData(long sx, long sy, long sw, long sh, ImageDataSettings imageDataSettings); - [RaisesException] void putImageData(ImageData imagedata, long dx, long dy); - [RaisesException] void putImageData(ImageData imagedata, long dx, long dy, long dirtyX, long dirtyY, long dirtyWidth, long dirtyHeight); + [RaisesException] ImageData createImageData([EnforceRange] long sw, [EnforceRange] long sh); + [RaisesException, RuntimeEnabled=CanvasColorManagement] ImageData createImageData([EnforceRange] long sw, [EnforceRange] long sh, ImageDataSettings imageDataSettings); + [HighEntropy, MeasureAs=OffscreenCanvasGetImageData, RaisesException] ImageData getImageData([EnforceRange] long sx, [EnforceRange] long sy, [EnforceRange] long sw, [EnforceRange] long sh); + [HighEntropy, MeasureAs=OffscreenCanvasGetImageData, RaisesException, RuntimeEnabled=CanvasColorManagement] ImageData getImageData([EnforceRange] long sx, [EnforceRange] long sy, [EnforceRange] long sw, [EnforceRange] long sh, ImageDataSettings imageDataSettings); + [RaisesException] void putImageData(ImageData imagedata, [EnforceRange] long dx, [EnforceRange] long dy); + [RaisesException] void putImageData(ImageData imagedata, [EnforceRange] long dx, [EnforceRange] long dy, [EnforceRange] long dirtyX, [EnforceRange] long dirtyY, [EnforceRange] long dirtyWidth, [EnforceRange] long dirtyHeight); // Line caps/joins attribute unrestricted double lineWidth; // (default 1)
diff --git a/third_party/blink/renderer/modules/csspaint/css_paint_definition.cc b/third_party/blink/renderer/modules/csspaint/css_paint_definition.cc index 0e28aa4..d7e5c26f 100644 --- a/third_party/blink/renderer/modules/csspaint/css_paint_definition.cc +++ b/third_party/blink/renderer/modules/csspaint/css_paint_definition.cc
@@ -15,7 +15,6 @@ #include "third_party/blink/renderer/core/css/cssom/css_paint_worklet_input.h" #include "third_party/blink/renderer/core/css/cssom/prepopulated_computed_style_property_map.h" #include "third_party/blink/renderer/core/execution_context/execution_context.h" -#include "third_party/blink/renderer/core/layout/layout_object.h" #include "third_party/blink/renderer/modules/csspaint/paint_rendering_context_2d.h" #include "third_party/blink/renderer/modules/csspaint/paint_size.h" #include "third_party/blink/renderer/platform/bindings/script_state.h"
diff --git a/third_party/blink/renderer/modules/eventsource/event_source_parser_test.cc b/third_party/blink/renderer/modules/eventsource/event_source_parser_test.cc index d0bb116..65583b5 100644 --- a/third_party/blink/renderer/modules/eventsource/event_source_parser_test.cc +++ b/third_party/blink/renderer/modules/eventsource/event_source_parser_test.cc
@@ -378,7 +378,7 @@ client->SetParser(parser); const char kInput[] = "data:hello\nid:99\n\nid:44\ndata:bye\n\n"; - parser->AddBytes(kInput, strlen(kInput)); + parser->AddBytes(kInput, static_cast<uint32_t>(strlen(kInput))); const auto& events = client->Events();
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 index 840318f..a128a86 100644 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -523,6 +523,10 @@ name: "CSSCalcInfinityAndNaN", }, { + // https://drafts.csswg.org/css-cascade-5/#layering + name: "CSSCascadeLayers" + }, + { // Support case-sensitive attribute selector modifier // https://drafts.csswg.org/selectors-4/#attribute-case name: "CSSCaseSensitiveSelector",
diff --git a/third_party/blink/renderer/platform/wtf/hash_map.h b/third_party/blink/renderer/platform/wtf/hash_map.h index 6e28420..8c6f0bf 100644 --- a/third_party/blink/renderer/platform/wtf/hash_map.h +++ b/third_party/blink/renderer/platform/wtf/hash_map.h
@@ -156,7 +156,6 @@ iterator find(KeyPeekInType); const_iterator find(KeyPeekInType) const; bool Contains(KeyPeekInType) const; - // Returns a reference to the mapped value. Crashes if no mapped value exists. MappedPeekType at(KeyPeekInType) const; // Deprecated variant of at(). Created for refactor described in // https://crbug.com/1058527. Returns a reference to the mapped value or the @@ -591,10 +590,7 @@ typename Y> typename HashMap<T, U, V, W, X, Y>::MappedPeekType HashMap<T, U, V, W, X, Y>::at(KeyPeekInType key) const { - const ValueType* entry = impl_.Lookup(key); - CHECK(entry) << "HashMap::at found no value for the given key. See " - "https://crbug.com/1058527."; - return MappedTraits::Peek(entry->value); + return DeprecatedAtOrEmptyValue(key); } template <typename T,
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index f8569c78..ed4a851a 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -3025,7 +3025,7 @@ crbug.com/626703 [ Mac11.0 ] external/wpt/webrtc-encoded-transform/RTCPeerConnection-insertable-streams-audio.https.html [ Timeout ] crbug.com/626703 [ Mac11.0 ] external/wpt/webrtc/no-media-call.html [ Timeout ] crbug.com/626703 [ Mac11.0 ] virtual/webrtc-wpt-plan-b/external/wpt/webrtc/RTCPeerConnection-ondatachannel.html [ Timeout ] -# crbug.com/626703 [ Mac11.0 ] external/wpt/webrtc/RTCRtpTransceiver.https.html [ Timeout ] +crbug.com/626703 [ Mac11.0 ] external/wpt/webrtc/RTCRtpTransceiver.https.html [ Timeout ] crbug.com/626703 [ Mac11.0 ] virtual/webrtc-wpt-plan-b/external/wpt/webrtc/RTCDataChannel-close.html [ Timeout ] crbug.com/626703 [ Mac11.0 ] external/wpt/webrtc/RTCPeerConnection-perfect-negotiation.https.html [ Timeout ] crbug.com/626703 [ Mac11.0 ] external/wpt/webrtc/RTCPeerConnection-iceConnectionState.https.html [ Timeout ] @@ -7646,14 +7646,6 @@ crbug.com/1221327 virtual/gpu/fast/canvas/canvas-composite-canvas.html [ Failure Pass ] crbug.com/1221420 virtual/gpu/fast/canvas/canvas-ellipse-zero-lineto.html [ Failure Pass ] -# Temporarily disable to unblock a WebRTC roll -crbug.com/webrtc/8199 [ Win ] external/wpt/webrtc-stats/supported-stats.html [ Failure Pass ] -crbug.com/webrtc/8199 [ Linux ] external/wpt/webrtc-stats/supported-stats.html [ Failure Pass ] -crbug.com/webrtc/8199 [ Mac10.15 ] external/wpt/webrtc-stats/supported-stats.html [ Failure Pass ] -crbug.com/webrtc/8199 [ Mac10.14 ] external/wpt/webrtc-stats/supported-stats.html [ Failure Pass ] -crbug.com/webrtc/8199 [ Mac10.13 ] external/wpt/webrtc-stats/supported-stats.html [ Failure Pass ] -crbug.com/webrtc/8199 [ Mac10.12 ] external/wpt/webrtc-stats/supported-stats.html [ Failure Pass ] - # Sheriff crbug.com/1223327 wpt_internal/prerender/unload.html [ Pass Timeout ] crbug.com/1223327 virtual/prerender/wpt_internal/prerender/unload.html [ Pass Timeout ] @@ -7833,9 +7825,6 @@ crbug.com/1234057 [ Mac ] external/wpt/css/css-paint-api/no-op-animation.https.html [ Failure Pass ] crbug.com/1234302 [ Mac ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/paint2d-image.https.html [ Failure Pass ] -# Temporary disabling to allow landing https://webrtc-review.googlesource.com/c/src/+/227120 -crbug.com/webrtc/12906 external/wpt/webrtc/RTCRtpTransceiver.https.html [ Failure Pass Timeout ] - # Sheriff 2021-07-29 crbug.com/626703 http/tests/security/cross-frame-access-put.html [ Failure Pass ] crbug.com/626703 virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/overdraw.https.html [ Failure Pass ]
diff --git a/third_party/blink/web_tests/external/wpt/app-history/navigate-event/respondWith-multiple-times-reject.html b/third_party/blink/web_tests/external/wpt/app-history/navigate-event/respondWith-multiple-times-reject.html new file mode 100644 index 0000000..0e1bd19 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/app-history/navigate-event/respondWith-multiple-times-reject.html
@@ -0,0 +1,35 @@ +<!doctype html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +promise_test(async t => { + const err = new TypeError("a message"); + let start_href = location.href; + + let onnavigateerror_called = false; + let caught_rejection = false; + appHistory.onnavigatesuccess = t.step_func(assert_unreached); + appHistory.onnavigateerror = t.step_func(e => { + onnavigateerror_called = true; + assert_equals(location.hash, "#1"); + assert_equals(e.constructor, ErrorEvent); + assert_equals(e.error, err); + assert_equals(e.message, "Uncaught TypeError: a message"); + assert_equals(e.filename, start_href); + assert_greater_than(e.colno, 0); + assert_greater_than(e.lineno, 0); + }); + appHistory.onnavigate = t.step_func(e => { + e.respondWith(Promise.resolve()); + e.respondWith(new Promise((resolve, reject) => t.step_timeout(() => reject(err), 1))); + e.respondWith(new Promise(resolve => t.step_timeout(resolve, 1))); + }); + + await appHistory.navigate("#1").catch(t.step_func(e => { + caught_rejection = true; + assert_equals(e, err); + })); + assert_true(onnavigateerror_called); + assert_true(caught_rejection); +}, "AppHistoryNavigateEvent.respondWith is called multiple times and one of the promises rejects"); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/app-history/navigate-event/respondWith-multiple-times.html b/third_party/blink/web_tests/external/wpt/app-history/navigate-event/respondWith-multiple-times.html index f169443..5ca6db04 100644 --- a/third_party/blink/web_tests/external/wpt/app-history/navigate-event/respondWith-multiple-times.html +++ b/third_party/blink/web_tests/external/wpt/app-history/navigate-event/respondWith-multiple-times.html
@@ -2,13 +2,40 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script> -async_test(t => { - appHistory.onnavigate = t.step_func_done(e => { - e.respondWith(Promise.resolve()); - assert_throws_dom("InvalidStateError", () => e.respondWith(Promise.resolve())); +promise_test(async t => { + let p1_resolved = false; + let p2_resolved = false; + let p3_resolved = false; + appHistory.onnavigate = t.step_func(e => { + let p1 = Promise.resolve().then(t.step_func(() => { + assert_false(p2_resolved); + assert_false(p3_resolved); + p1_resolved = true; + })); + let p2 = new Promise(resolve => t.step_timeout(resolve, 1)).then(t.step_func(() => { + assert_true(p1_resolved); + assert_false(p3_resolved); + p2_resolved = true; + })); + let p3 = new Promise(resolve => t.step_timeout(resolve, 1)).then(t.step_func(() => { + assert_true(p1_resolved); + assert_true(p2_resolved); + p3_resolved = true; + })); + e.respondWith(p1); + e.respondWith(p2); + e.respondWith(p3); }); - location.href = "#1"; - assert_equals(location.hash, ""); -}, "AppHistoryNavigateEvent.respondWith throws if invoked more than once"); + let promise = appHistory.navigate("#1"); + assert_equals(location.hash, "#1"); + assert_false(p1_resolved); + assert_false(p2_resolved); + assert_false(p3_resolved); + + await promise; + assert_true(p1_resolved); + assert_true(p2_resolved); + assert_true(p3_resolved); +}, "appHistory.navigate() returns a promise that awaits all promises if AppHistoryNavigateEvent.respondWith is called multiple times"); </script>
diff --git a/third_party/blink/web_tests/external/wpt/app-history/navigate/navigate-respondWith-history-state.html b/third_party/blink/web_tests/external/wpt/app-history/navigate/navigate-respondWith-history-state.html index e0031d5..c7e64b5 100644 --- a/third_party/blink/web_tests/external/wpt/app-history/navigate/navigate-respondWith-history-state.html +++ b/third_party/blink/web_tests/external/wpt/app-history/navigate/navigate-respondWith-history-state.html
@@ -8,7 +8,7 @@ appHistory.onnavigate = e => e.respondWith(Promise.resolve("r")); let result = await appHistory.navigate("#2"); - assert_equals(result, "r"); + assert_equals(result, undefined); assert_equals(location.hash, "#2"); assert_equals(history.state, null); }, "history.story should be nulled by navigate() handled by respondWith()");
diff --git a/third_party/blink/web_tests/external/wpt/app-history/navigate/navigate-respondWith.html b/third_party/blink/web_tests/external/wpt/app-history/navigate/navigate-respondWith.html index 70a560d..c65da90 100644 --- a/third_party/blink/web_tests/external/wpt/app-history/navigate/navigate-respondWith.html +++ b/third_party/blink/web_tests/external/wpt/app-history/navigate/navigate-respondWith.html
@@ -8,6 +8,7 @@ appHistory.onnavigate = e => e.respondWith(promise); let returned_promise = appHistory.navigate("#1"); assert_not_equals(promise, returned_promise); - assert_equals(promise_value, await returned_promise); + let result = await returned_promise; + assert_equals(result, undefined); }, "navigate() and respondWith"); </script>
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/offscreen/pixel-manipulation/2d.imageData.create2.nonfinite-expected.txt b/third_party/blink/web_tests/external/wpt/html/canvas/offscreen/pixel-manipulation/2d.imageData.create2.nonfinite-expected.txt deleted file mode 100644 index 3047af2..0000000 --- a/third_party/blink/web_tests/external/wpt/html/canvas/offscreen/pixel-manipulation/2d.imageData.create2.nonfinite-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL createImageData() throws TypeError if arguments are not finite assert_throws_js: function "function() { ctx.createImageData(Infinity, 10); }" threw object "IndexSizeError: Failed to execute 'createImageData' on 'OffscreenCanvasRenderingContext2D': The source width is zero or not a number." ("IndexSizeError") expected instance of function "function TypeError() { [native code] }" ("TypeError") -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/offscreen/pixel-manipulation/2d.imageData.get.nonfinite-expected.txt b/third_party/blink/web_tests/external/wpt/html/canvas/offscreen/pixel-manipulation/2d.imageData.get.nonfinite-expected.txt deleted file mode 100644 index 0755a31..0000000 --- a/third_party/blink/web_tests/external/wpt/html/canvas/offscreen/pixel-manipulation/2d.imageData.get.nonfinite-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL getImageData() throws TypeError if arguments are not finite assert_throws_js: function "function() { ctx.getImageData(Infinity, 10, 10, 10); }" did not throw -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/external/wpt/html/canvas/offscreen/pixel-manipulation/2d.imageData.put.nonfinite-expected.txt b/third_party/blink/web_tests/external/wpt/html/canvas/offscreen/pixel-manipulation/2d.imageData.put.nonfinite-expected.txt deleted file mode 100644 index d52021c..0000000 --- a/third_party/blink/web_tests/external/wpt/html/canvas/offscreen/pixel-manipulation/2d.imageData.put.nonfinite-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL putImageData() throws TypeError if arguments are not finite assert_throws_js: function "function() { ctx.putImageData(imgdata, Infinity, 10); }" did not throw -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/interactive-elements/the-popup-element/popup-light-dismiss-resize.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/interactive-elements/the-popup-element/popup-light-dismiss-resize.tentative.html new file mode 100644 index 0000000..cec65f77 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/interactive-elements/the-popup-element/popup-light-dismiss-resize.tentative.html
@@ -0,0 +1,55 @@ +<!DOCTYPE html> +<meta charset="utf-8" /> +<title>Popup light dismiss behavior</title> +<link rel="author" href="mailto:masonf@chromium.org"> +<link rel=help href="https://open-ui.org/components/popup.research.explainer"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-actions.js"></script> +<script src="/resources/testdriver-vendor.js"></script> + +<button popup=popup>Popup 1</button> +<popup id=popup><span>Inside popup 1</span></popup> + +<style> + popup { border: 5px solid red; top: 50px; } +</style> + +<script> + const popup = document.querySelector('#popup'); + + function waitForHide() { + return new Promise(function(resolve) { + popup.addEventListener('hide', () => resolve(), {'once': true}); + }); + } + + promise_test(async () => { + return new Promise(async resolve => { + popup.show(); + assert_true(popup.open,'popup should be open'); + popup.style.width = "250px"; + assert_true(popup.open,'popup should be hidden asynchronously'); + await waitForHide(); // Wait for the popup to be hidden + assert_false(popup.open,'popup should close when resized'); + popup.style.width = ""; // Reset + resolve(); + }); + },'Popup should be closed by an explicit resize of the popup'); + + promise_test(async () => { + return new Promise(async resolve => { + popup.show(); + assert_true(popup.open,'popup should be open'); + const popupText = popup.querySelector('span'); + const originalText = popupText.textContent; + popupText.textContent = "This is a test, which is longer than the original"; + assert_true(popup.open,'popup should be hidden asynchronously'); + await waitForHide(); // Wait for the popup to be hidden + assert_false(popup.open,'popup should close when text content forces its size to change'); + popupText.textContent = originalText; // Reset + resolve(); + }); + },'Popup should be closed by an implicit resize of the popup'); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/interactive-elements/the-popup-element/popup-light-dismiss.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/interactive-elements/the-popup-element/popup-light-dismiss.tentative.html index 649b594c..e001258 100644 --- a/third_party/blink/web_tests/external/wpt/html/semantics/interactive-elements/the-popup-element/popup-light-dismiss.tentative.html +++ b/third_party/blink/web_tests/external/wpt/html/semantics/interactive-elements/the-popup-element/popup-light-dismiss.tentative.html
@@ -58,9 +58,6 @@ .pointerUp({button: actions.ButtonType.LEFT}) .send(); } - function eventLoop() { - return new Promise(resolve => setTimeout(resolve, 0)); - } const popup1 = document.querySelector('#p1'); const button1 = document.querySelector('#b1'); @@ -187,28 +184,6 @@ popup6.hide(); },'Scrolling within a popup should not close the popup'); - popup1.show(); - await eventLoop(); // Wait for initial resize observer to run - assert_true(popup1.open,'popup1 should be open'); - popup1.style.width = "250px"; - await eventLoop(); // Wait for style change resize to run - test(t => { - assert_false(popup1.open,'popup1 should close when resized'); - popup1.style.width = ""; - },'Popup should be closed by an explicit resize of the popup'); - - popup1.show(); - await eventLoop(); // Wait for initial resize observer to run - assert_true(popup1.open); - const popup1Text = popup1.querySelector('span'); - const originalText = popup1Text.textContent; - popup1Text.textContent = "This is a test, which is longer than the original"; - await eventLoop(); // Wait for style change resize to run - test(t => { - assert_false(popup1.open,'popup1 should close when text content forces its size to change'); - popup1Text.textContent = originalText; - },'Popup should be closed by an implicit resize of the popup'); - done(); })(); </script>
diff --git a/third_party/blink/web_tests/external/wpt/lint.ignore b/third_party/blink/web_tests/external/wpt/lint.ignore index 49a71f640..d486fb9 100644 --- a/third_party/blink/web_tests/external/wpt/lint.ignore +++ b/third_party/blink/web_tests/external/wpt/lint.ignore
@@ -167,7 +167,6 @@ SET TIMEOUT: html/editing/dnd/* SET TIMEOUT: html/semantics/embedded-content/the-iframe-element/* SET TIMEOUT: html/semantics/embedded-content/the-img-element/* -SET TIMEOUT: html/semantics/interactive-elements/the-popup-element/popup-light-dismiss.tentative.html SET TIMEOUT: html/semantics/scripting-1/the-script-element/* SET TIMEOUT: html/webappapis/dynamic-markup-insertion/opening-the-input-stream/0* SET TIMEOUT: html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/history-frame.html
diff --git a/third_party/blink/web_tests/external/wpt/webrtc-stats/supported-stats-expected.txt b/third_party/blink/web_tests/external/wpt/webrtc-stats/supported-stats-expected.txt index 75425233..0ba4f70d 100644 --- a/third_party/blink/web_tests/external/wpt/webrtc-stats/supported-stats-expected.txt +++ b/third_party/blink/web_tests/external/wpt/webrtc-stats/supported-stats-expected.txt
@@ -1,5 +1,5 @@ This is a testharness.js-based test. -Found 310 tests; 196 PASS, 114 FAIL, 0 TIMEOUT, 0 NOTRUN. +Found 310 tests; 197 PASS, 113 FAIL, 0 TIMEOUT, 0 NOTRUN. PASS getStats succeeds PASS Validating stats PASS codec's payloadType @@ -59,7 +59,7 @@ PASS inbound-rtp's packetsReceived PASS inbound-rtp's packetsLost PASS inbound-rtp's jitter -FAIL inbound-rtp's packetsDiscarded assert_true: Is packetsDiscarded present expected true got false +PASS inbound-rtp's packetsDiscarded FAIL inbound-rtp's packetsRepaired assert_true: Is packetsRepaired present expected true got false FAIL inbound-rtp's burstPacketsLost assert_true: Is burstPacketsLost present expected true got false FAIL inbound-rtp's burstPacketsDiscarded assert_true: Is burstPacketsDiscarded present expected true got false
diff --git a/third_party/blink/web_tests/external/wpt/webrtc/RTCRtpTransceiver.https-expected.txt b/third_party/blink/web_tests/external/wpt/webrtc/RTCRtpTransceiver.https-expected.txt index d7dae0f..cba73637 100644 --- a/third_party/blink/web_tests/external/wpt/webrtc/RTCRtpTransceiver.https-expected.txt +++ b/third_party/blink/web_tests/external/wpt/webrtc/RTCRtpTransceiver.https-expected.txt
@@ -37,6 +37,6 @@ FAIL checkMsectionReuse assert_equals: expected "[{currentDirection:null,mid:null}]" but got "[{currentDirection:\"inactive\",mid:\"0\"}]" PASS checkStopAfterCreateOfferWithReusedMsection PASS checkAddIceCandidateToStoppedTransceiver -FAIL checkBundleTagRejected promise_test: Unhandled rejection with value: object "InvalidAccessError: Failed to execute 'setRemoteDescription' on 'RTCPeerConnection': Failed to set remote offer sdp: The m= section with mid='1' should be rejected." +PASS checkBundleTagRejected Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-zoom110.html b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-zoom110.html index 3acf244..f5df943 100644 --- a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-zoom110.html +++ b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-zoom110.html
@@ -9,10 +9,10 @@ </head> <body style="zoom:1.1;"> <p>There is no whitespace at the bottom of the popup in 110% zoom level.</p> -<!-- TODO(tkent): The pixel result on Linux has unexepcted scroll bar. We +<!-- TODO(tkent): The pixel result on Linux has unexpected scroll bar. We -- should understand the cause. The scrollbar doesn't appear on content_shell -- and chrome. So, it's not a serious issue. --> -<select id="menu" style="font-size: 12px; font-family: 'Segoe UI', Tahoma, -webkit-sans-serif; width: 145.455px;"> +<select id="menu" style="font-size: 12px; font-family: 'Segoe UI', Tahoma, sans-serif; width: 145.455px;"> <option>25%</option> <option>33%</option> <option>50%</option>
diff --git a/third_party/fdlibm/OWNERS b/third_party/fdlibm/OWNERS index da724767..5b0e8df 100644 --- a/third_party/fdlibm/OWNERS +++ b/third_party/fdlibm/OWNERS
@@ -1,5 +1,4 @@ hongchan@chromium.org -rtoy@chromium.org # ***************************************************************************** # If this file is changed, make sure to update the watchlist in v8/WATCHLISTS,
diff --git a/third_party/sqlite/fuzz/sql_generate_corpus.cc b/third_party/sqlite/fuzz/sql_generate_corpus.cc index 72f9a43b..11cb782 100644 --- a/third_party/sqlite/fuzz/sql_generate_corpus.cc +++ b/third_party/sqlite/fuzz/sql_generate_corpus.cc
@@ -807,7 +807,7 @@ GenQueries( queries, 1, 1, false, main_schema.num_tables, [&](SQLQuery* q, int i) { i::Table t = i::Table{ - .table_num = i, + .table_num = static_cast<uint32_t>(i), .num_columns = RandInt(1, 8), }; for (int j = 0; j < t.num_columns; j++) {
diff --git a/tools/metrics/actions/actions.xml b/tools/metrics/actions/actions.xml index e13468b..9aedab5f 100644 --- a/tools/metrics/actions/actions.xml +++ b/tools/metrics/actions/actions.xml
@@ -13895,6 +13895,14 @@ </description> </action> +<action name="MobileBookmarkManagerReopenBookmarksInSameSession"> + <owner>wylieb@chromium.org</owner> + <owner>clank-app-team@google.com</owner> + <description> + Tracks the bookmark manager being reopened while clank was running. + </description> +</action> + <action name="MobileBookmarkManagerShowInFolder"> <owner>twellington@google.com</owner> <owner>clank-app-team@google.com</owner>
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 45e1c16..6861bbc0 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -7784,10 +7784,16 @@ </enum> <enum name="BatteryStatusNumberBatteries"> + <obsolete> + Removed 2021-08-11. https://crbug.com/1165237 + </obsolete> <int value="5" label="5+"/> </enum> <enum name="BatteryStatusNumberBatteriesWin"> + <obsolete> + Removed 2021-08-11. https://crbug.com/1165237 + </obsolete> <int value="0" label="Unknown"/> <int value="1" label="0"/> <int value="2" label="1+"/> @@ -49884,6 +49890,7 @@ <int value="426199960" label="Commander:enabled"/> <int value="426540253" label="PowerScheduler:disabled"/> <int value="427184788" label="WebFeed:enabled"/> + <int value="427807224" label="IPH_Snooze:disabled"/> <int value="427945554" label="StrictExtensionIsolation:enabled"/> <int value="430776375" label="TextureLayerSkipWaitForActivation:disabled"/> <int value="430959979" label="SyncStandaloneTransport:disabled"/> @@ -50022,6 +50029,7 @@ <int value="541667888" label="ContentLanguagesInLanguagePicker:disabled"/> <int value="542930298" label="WebAppEnableLinkCapturing:disabled"/> <int value="542960889" label="HeavyAdIntervention:enabled"/> + <int value="543210543" label="DisableQuickAnswersV2Translation:disabled"/> <int value="544443920" label="QuickAnswers:disabled"/> <int value="546043947" label="ImplicitRootScroller:enabled"/> <int value="546464390" label="LiveCaption:enabled"/> @@ -50065,6 +50073,7 @@ <int value="576701073" label="WebPaymentsJustInTimePaymentApp:disabled"/> <int value="576878329" label="enable-background-blur"/> <int value="578695119" label="ImprovedCookieControls:disabled"/> + <int value="578894559" label="IPH_Snooze:enabled"/> <int value="581118445" label="enable-eol-notification"/> <int value="581355159" label="ContentSuggestionsCategoryRanker:disabled"/> <int value="582187448" label="DontPrefetchLibraries:enabled"/> @@ -50443,6 +50452,7 @@ <int value="877238334" label="WebUITabStripTabDragIntegration:enabled"/> <int value="877257918" label="InterestFeedV2ClickAndViewActionsConditionalUpload:enabled"/> + <int value="877432034" label="DisableQuickAnswersV2Translation:enabled"/> <int value="877907263" label="StrictExtensionIsolation:disabled"/> <int value="878773995" label="ChromeHomeBottomNavLabels:disabled"/> <int value="879699575" label="disable-gesture-tap-highlight"/> @@ -88251,6 +88261,16 @@ <int value="3" label="From non-ad script and non-ad frame"/> </enum> +<enum name="WindowsDriveType"> + <int value="0" label="DRIVE_UNKNOWN"/> + <int value="1" label="DRIVE_NO_ROOT_DIR"/> + <int value="2" label="DRIVE_REMOVABLE"/> + <int value="3" label="DRIVE_FIXED"/> + <int value="4" label="DRIVE_REMOTE"/> + <int value="5" label="DRIVE_CDROM"/> + <int value="6" label="DRIVE_RAMDISK"/> +</enum> + <enum name="WindowsExitCode"> <!-- These are raw exit codes returned from Windows APIs. See also the CrashExitCodes enum. -->
diff --git a/tools/metrics/histograms/metadata/histogram_suffixes_list.xml b/tools/metrics/histograms/metadata/histogram_suffixes_list.xml index f0d48b7e..a800778 100644 --- a/tools/metrics/histograms/metadata/histogram_suffixes_list.xml +++ b/tools/metrics/histograms/metadata/histogram_suffixes_list.xml
@@ -4882,6 +4882,7 @@ <suffix name="CleanBrowsingSecure" label="CleanBrowsing secure filter."/> <suffix name="Cloudflare" label="Cloudflare."/> <suffix name="Comcast" label="Comcast."/> + <suffix name="Cox" label="Cox."/> <suffix name="Cznic" label="CZ.NIC ODVR."/> <suffix name="Dnssb" label="DNS.SB."/> <suffix name="DnssbUserSelected" label="DNS.SB (user-selected).">
diff --git a/tools/metrics/histograms/metadata/oobe/histograms.xml b/tools/metrics/histograms/metadata/oobe/histograms.xml index e2a5b288..85a9e09 100644 --- a/tools/metrics/histograms/metadata/oobe/histograms.xml +++ b/tools/metrics/histograms/metadata/oobe/histograms.xml
@@ -343,6 +343,37 @@ </summary> </histogram> +<histogram name="OOBE.SyncConsentScreen.IsCapabilityKnown" enum="BooleanKnown" + expires_after="2022-02-06"> + <owner>yunkez@google.com</owner> + <owner>cros-oac@google.com</owner> + <summary> + Indicates whether account capability information is fetched for user when + SyncConsent screen is shown. + </summary> +</histogram> + +<histogram name="OOBE.SyncConsentScreen.IsMinorUser" enum="Boolean" + expires_after="2022-02-06"> + <owner>yunkez@google.com</owner> + <owner>cros-oac@google.com</owner> + <summary> + Indicates whether the current user is a minor user (impacted by AADC + regulations). We cannot use nudge techniques on UI if the user is a minor + user. + </summary> +</histogram> + +<histogram name="OOBE.SyncConsentScreen.LoadingTime" units="ms" + expires_after="2022-02-06"> + <owner>yunkez@google.com</owner> + <owner>cros-oac@google.com</owner> + <summary> + Records the amount of time while waiting for sync engine to be initialized, + before the SyncConsent screen is shown. + </summary> +</histogram> + <histogram name="OOBE.SyncConsentScreen.ReviewFollowingSetup" enum="BooleanChecked" expires_after="2022-02-01"> <owner>raleksandrov@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/others/histograms.xml b/tools/metrics/histograms/metadata/others/histograms.xml index a7edf5f..063d47a 100644 --- a/tools/metrics/histograms/metadata/others/histograms.xml +++ b/tools/metrics/histograms/metadata/others/histograms.xml
@@ -1401,6 +1401,9 @@ <histogram name="BatteryStatus.NumberBatteriesLinux" enum="BatteryStatusNumberBatteries" expires_after="2021-02-18"> + <obsolete> + Removed 2021-08-11. https://crbug.com/1165237 + </obsolete> <owner>timvolodine@chromium.org</owner> <owner>device-dev@chromium.org</owner> <summary> @@ -1411,6 +1414,9 @@ <histogram name="BatteryStatus.NumberBatteriesMac" enum="BatteryStatusNumberBatteries" expires_after="2021-02-18"> + <obsolete> + Removed 2021-08-11. https://crbug.com/1165237 + </obsolete> <owner>timvolodine@chromium.org</owner> <summary> Number of internal batteries reported by MacOS at the start of the Battery @@ -1420,6 +1426,9 @@ <histogram name="BatteryStatus.NumberBatteriesWin" enum="BatteryStatusNumberBatteriesWin" expires_after="2021-02-18"> + <obsolete> + Removed 2021-08-11. https://crbug.com/1165237 + </obsolete> <owner>timvolodine@chromium.org</owner> <summary> Number of batteries reported by Windows at the start of the Battery Status @@ -9099,6 +9108,20 @@ </summary> </histogram> +<histogram name="Lens.QuickActionSearchWidget.LensSupportStatus" + enum="LensSupportStatus" expires_after="2022-04-01"> + <owner>ender@google.com</owner> + <owner>fgorski@chromium.org</owner> + <owner>benwgold@chromium.org</owner> + <owner>yusuyoutube@google.com</owner> + <owner>lens-chrome@google.com</owner> + <summary> + Whether the user supports the camera assisted search with Google Lens and if + not, the reason why. Recorded only when the Lens button is tapped on the + Quick Action Search Widget. + </summary> +</histogram> + <histogram name="LevelDB.ApproximateMemTableMemoryUse" units="bytes" expires_after="2021-08-24"> <owner>nyquist@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/permissions/histograms.xml b/tools/metrics/histograms/metadata/permissions/histograms.xml index b1d75cf..eb71590 100644 --- a/tools/metrics/histograms/metadata/permissions/histograms.xml +++ b/tools/metrics/histograms/metadata/permissions/histograms.xml
@@ -427,13 +427,25 @@ </summary> </histogram> +<histogram name="Permissions.PredictionService.GeolocationRequest" + enum="BooleanSent" expires_after="M96"> + <owner>engedy@chromium.org</owner> + <owner>src/components/permissions/PERMISSIONS_OWNERS</owner> + <summary> + Recorded whenever a geolocation permission request is eligible for + Permissions predictions service. Records whether the request was sent to the + backend or if it was held back. + </summary> +</histogram> + <histogram name="Permissions.PredictionService.Request" enum="BooleanSent" expires_after="M96"> <owner>engedy@chromium.org</owner> <owner>src/components/permissions/PERMISSIONS_OWNERS</owner> <summary> - Recorded whenever a request is eligible for Permissions predictions service. - Records whether the request was sent to the backend or if it was held back. + Recorded whenever a notification permission request is eligible for + Permissions predictions service. Records whether the request was sent to the + backend or if it was held back. </summary> </histogram>
diff --git a/tools/metrics/histograms/metadata/uma/histograms.xml b/tools/metrics/histograms/metadata/uma/histograms.xml index 0b51c4b..a27cccc 100644 --- a/tools/metrics/histograms/metadata/uma/histograms.xml +++ b/tools/metrics/histograms/metadata/uma/histograms.xml
@@ -575,6 +575,17 @@ <token key="PersistentAllocatorType" variants="PersistentAllocatorType"/> </histogram> +<histogram name="UMA.PersistentHistograms.DriveType" enum="WindowsDriveType" + expires_after="2021-10-31"> + <owner>asvitkine@chromium.org</owner> + <owner>chrome-metrics-team@google.com</owner> + <summary> + Records the drive type the persistent histograms file opened on start up is + on. Only logged on Windows based on the result of the GetDriveTypeW() API. + Added to diagnose crbug.com/1176977. + </summary> +</histogram> + <histogram name="UMA.PersistentHistograms.HistogramsInStartupFile" enum="HistogramNameHash" expires_after="2021-10-31"> <owner>asvitkine@chromium.org</owner>
diff --git a/tools/metrics/ukm/ukm.xml b/tools/metrics/ukm/ukm.xml index 8ffbaba..b53d7a50 100644 --- a/tools/metrics/ukm/ukm.xml +++ b/tools/metrics/ukm/ukm.xml
@@ -144,6 +144,39 @@ </metric> </event> +<event name="AccuracyTipDialog"> + <owner>dullweber@chromium.org</owner> + <owner>eokoyomon@chromium.org</owner> + <summary> + Recorded when an action on the accuracy tip dialog is taken. + </summary> + <metric name="Interaction" enum="AccuracyTipInteraction"> + <summary> + Records an enum value representing which action in the accuracy tip was + taken. + </summary> + </metric> + <metric name="TimeSpent"> + <summary> + The amount of time spent on the dialog until it was closed. In seconds. + </summary> + </metric> +</event> + +<event name="AccuracyTipStatus"> + <owner>dullweber@chromium.org</owner> + <owner>eokoyomon@chromium.org</owner> + <summary> + Recorded on each page load when the AccuracyService determines whether an + accuracy tip should be shown or the reason why it was not shown. + </summary> + <metric name="Status" enum="AccuracyTipStatus"> + <summary> + The accuracy tip status that was determined for a pageload. + </summary> + </metric> +</event> + <event name="AdFrameLoad"> <owner>johnidel@chromium.org</owner> <owner>jkarlin@chromium.org</owner> @@ -7982,6 +8015,9 @@ </event> <event name="Layout.DisplayCutout.StateChanged"> + <obsolete> + Obsolete as of 08/2021. + </obsolete> <owner>beccahughes@chromium.org</owner> <owner>media-dev@chromium.org</owner> <summary> @@ -9292,7 +9328,6 @@ <event name="Media.WebAudio.AudioContext.AudibleTime"> <owner>hongchan@chromium.org</owner> - <owner>rtoy@chromium.org</owner> <owner>webaudio-dev@chromium.org</owner> <summary> Records the AudioContext audible time information.
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json index 6b33a16..88531933 100644 --- a/tools/perf/core/perfetto_binary_roller/binary_deps.json +++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -5,8 +5,8 @@ "remote_path": "perfetto_binaries/trace_processor_shell/linux_arm/49b4b5dcbc312d8d2c3751cf29238b8efeb4e494/trace_processor_shell" }, "win": { - "hash": "a8b866bd834dd410f7f5c4e3e7939db581d4286c", - "remote_path": "perfetto_binaries/trace_processor_shell/win/b34dc62800c061e62c78039a60b9efd9786ede89/trace_processor_shell.exe" + "hash": "1202c0883c68706d24d33229cb772730dbee4b3a", + "remote_path": "perfetto_binaries/trace_processor_shell/win/f73e19a324498c7896ddb2e082fad8cb4607545d/trace_processor_shell.exe" }, "mac": { "hash": "0cfe0976cb4f931833b822104d2c212a1e737f65", @@ -18,7 +18,7 @@ }, "linux": { "hash": "f5cfa6d6c5c869b45c48d523322f4a3f061aceb2", - "remote_path": "perfetto_binaries/trace_processor_shell/linux/f73e19a324498c7896ddb2e082fad8cb4607545d/trace_processor_shell" + "remote_path": "perfetto_binaries/trace_processor_shell/linux/91a6d3a9b815351984230325e644e263c00825f0/trace_processor_shell" } }, "power_profile.sql": {
diff --git a/ui/accessibility/BUILD.gn b/ui/accessibility/BUILD.gn index 1eb45db..3702a77 100644 --- a/ui/accessibility/BUILD.gn +++ b/ui/accessibility/BUILD.gn
@@ -155,6 +155,7 @@ deps = [ "//base", + "//components/crash/core/common:crash_key", "//third_party/cld_3/src/src:cld_3", ]
diff --git a/ui/accessibility/DEPS b/ui/accessibility/DEPS index 103d728..94aff0c 100644 --- a/ui/accessibility/DEPS +++ b/ui/accessibility/DEPS
@@ -43,4 +43,7 @@ "ax_range_unittest.cc": [ "+ui/accessibility/platform", ], + "ax_tree.cc": [ + "+components/crash/core/common/crash_key.h", + ], }
diff --git a/ui/accessibility/ax_tree.cc b/ui/accessibility/ax_tree.cc index f199925..1acc8b2 100644 --- a/ui/accessibility/ax_tree.cc +++ b/ui/accessibility/ax_tree.cc
@@ -14,12 +14,12 @@ #include "base/check_op.h" #include "base/command_line.h" #include "base/containers/contains.h" -#include "base/debug/activity_tracker.h" #include "base/memory/ptr_util.h" #include "base/metrics/histogram_macros.h" #include "base/no_destructor.h" #include "base/notreached.h" #include "base/strings/stringprintf.h" +#include "components/crash/core/common/crash_key.h" #include "ui/accessibility/accessibility_switches.h" #include "ui/accessibility/ax_enums.mojom.h" #include "ui/accessibility/ax_language_detection.h" @@ -1979,12 +1979,13 @@ : kInvalidAXNodeID) << "\nTree update: " << update_state->pending_tree_update.ToString(); - // Add the error message to "breadcrumbs" in crash reports: - base::debug::ScopedActivity scoped_activity; - base::debug::ActivityUserData& user_data = - scoped_activity.user_data(); - user_data.SetString("ax_reparenting_error", error.str()); - CHECK(false) << error.str(); + + // Add a crash key so we can figure out why this is happening. + static crash_reporter::CrashKeyString<256> ax_tree_error( + "ax_reparenting_error"); + ax_tree_error.Set(error.str()); + LOG(ERROR) << error.str(); + CHECK(false); // --- End temporary change --- } success = false; @@ -2533,6 +2534,14 @@ if (!error_.empty()) error_ = error_ + "\n"; // Add visual separation between errors. error_ = error_ + new_error; + + if (!error_.empty()) { + // Add a crash key so we can figure out why this is happening. + static crash_reporter::CrashKeyString<256> ax_tree_error( + "ax_tree_unserialize_error"); + ax_tree_error.Set(error_); + LOG(ERROR) << error_; + } } } // namespace ui
diff --git a/ui/base/interaction/README.md b/ui/base/interaction/README.md index 26d9614..797fafa 100644 --- a/ui/base/interaction/README.md +++ b/ui/base/interaction/README.md
@@ -75,7 +75,7 @@ // also make the identifier protected or private if you wanted. class MyClass { public: - DECLARE_CLASS_ELEMENT_IDENTIFIER_VALUE(kClassMemberIdentifier); + DECLARE_CLASS_ELEMENT_IDENTIFIER_VALUE(MyClass, kClassMemberIdentifier); }; // This goes in the .cc file: @@ -148,6 +148,21 @@ // Do something with the view that was shown here. } ``` + +Then, in your production code, assign an element identifier to the element you +want to track: +``` cpp +// Note: matching DECLARE macro must go in header file. +DEFINE_CLASS_ELEMENT_IDENTIFIER_VALUE(MyView, kMyElementIdentifier); + +MyView::MyView() { + auto* const child_view = AddChildView(std::make_unique<ChildViewType>()); + + // This child view will now generate events with the given identifier. + // The context will be derived from the widget the parent view is added to. + child_view->SetProperty(views::kElementIdentifierKey, kMyElementIdentifier); +} +``` ## Defining and following user interaction sequences The `InteractionSequence` class provides a way to describe a sequence of @@ -172,9 +187,9 @@ To create an interaction sequence, use a `InteractionSequence::Builder`. To add steps to the builder, use an `InteractionSequence::StepBuilder`, or call a -convenience method like `InitialElement()`. Here is an example that expects the -user to interact with a feature entry point and then displays a help bubble on -the resulting dialog: +convenience method like `WithInitialElement()`. Here is an example that expects +the user to interact with a feature entry point and then displays a help bubble +on the resulting dialog: ``` cpp initial_element = @@ -183,7 +198,7 @@ .SetCompletedCallback(base::BindOnce( &MyClass::OnSequenceComplete, base::Unretained(this))) - .AddStep(InteractionSequence::InitialElement(initial_element)) + .AddStep(InteractionSequence::WithInitialElement(initial_element)) .AddStep(InteractionSequence::StepBuilder() .SetElementID(initial_element->identifier()) .SetType(StepType::kActivated) @@ -215,16 +230,17 @@ will be assigned according to the type of step. All callbacks are optional. Instead of using `StepBuilder`, for the initial step you can call -`InteractionSequence::InitialElement()`. This creates a default **shown** step -for an element that is already visible; it expects the element to be visible -when `Start()` is called or the sequence will abort. You may pass optional -step start and end callbacks to `InitialElement()`; these are useful for -displaying an initial prompt to the user (in the case of a tutorial). +`InteractionSequence::WithInitialElement()`. This creates a default **shown** +step for an element that is already visible; it expects the element to be +visible when `Start()` is called or the sequence will abort. You may pass +optional step start and end callbacks to `WithInitialElement()`; these are +useful for displaying an initial prompt to the user (in the case of a +tutorial). There is an additional method on `StepBuilder`, `SetContext()`, but it is only used by helper methods and for testing. You should instead use -`Builder::SetContext()` or `InteractionSequence::InitialElement()`. There is -currently no support for cross-context sequences and setting conflicting +`Builder::SetContext()` or `InteractionSequence::WithInitialElement()`. There +is currently no support for cross-context sequences and setting conflicting contexts in a sequence is an error and will crash if DCHECK is enabled. ### Step callbacks @@ -250,8 +266,8 @@ In general, it will be pretty obvious how to construct your sequence, because you know the steps you need to perform in the UI to get where you want to go. However, keep the following in mind: -* Try to start the sequence with a step generated by `InitialElement()`, keyed - to a UI element you know will be visible when the sequence starts. +* Try to start the sequence with a step generated by `WithInitialElement()`, + keyed to a UI element you know will be visible when the sequence starts. * Do not assume the order in which elements will become visible when a surface is shown. * Do not assume that interacting with a button or menu item will bring up a
diff --git a/ui/chromeos/translations/ui_chromeos_strings_te.xtb b/ui/chromeos/translations/ui_chromeos_strings_te.xtb index 2cbbf8b..a26a6dd 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_te.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_te.xtb
@@ -28,7 +28,7 @@ <translation id="1178581264944972037">పాజ్ చేయి</translation> <translation id="1190144681599273207">ఈ ఫైల్ను పొందడానికి మొబైల్ డేటాలో సుమారుగా <ph name="FILE_SIZE" /> ఉపయోగించబడుతుంది.</translation> <translation id="1201402288615127009">తరువాత</translation> -<translation id="1209796539517632982">స్వయంచాలక పేరు సర్వర్లు</translation> +<translation id="1209796539517632982">ఆటోమేటిక్ పేరు సర్వర్లు</translation> <translation id="1210831758834677569">లావో</translation> <translation id="1243314992276662751">అప్లోడ్ చేయి</translation> <translation id="1249250836236328755">కళా ప్రక్రియ</translation> @@ -223,7 +223,7 @@ <translation id="2994669386200004489"><ph name="FILE_NAME" />ను బ్యాకప్ చేయడం సాధ్యపడలేదు</translation> <translation id="299638574917407533">ఫ్రెంచ్ (కెనడా)</translation> <translation id="3003189754374775221"><ph name="NETWORK_COUNT" />లో <ph name="NETWORK_INDEX" /> నెట్వర్క్, <ph name="NETWORK_NAME" />, <ph name="NETWORK_PROVIDER_NAME" />, సిగ్నల్ సామర్థ్యం <ph name="SIGNAL_STRENGTH" />%, కనెక్ట్ చేయండి</translation> -<translation id="3003633581067744647">సూక్ష్మచిత్రం వీక్షణకు మార్చు</translation> +<translation id="3003633581067744647">థంబ్నెయిల్ వీక్షణకు మార్చు</translation> <translation id="3029114385395636667">Docs, Sheets, Slidesను ఆఫ్లైన్లో అందుబాటులో ఉంచడానికి Google డాక్స్ ఆఫ్లైన్ను ఎనేబుల్ చేయండి.</translation> <translation id="303198083543495566">భూగోళ శాస్త్రం</translation> <translation id="3047197340186497470">చైనీస్ డేయి</translation> @@ -483,7 +483,7 @@ Google డిస్క్లోని ఫైళ్లు అప్డేట్ చేయబడి ఉంటాయి, ఇవి ఏ పరికరం నుండైనా అందుబాటులో ఉంటాయి.<ph name="MARKUP_3" /> <ph name="MARKUP_4" />మీ ఫైళ్లను సురక్షితంగా ఉంచుకోండి.<ph name="MARKUP_5" /> మీ పరికరానికి ఏ విధమైన ఆపద సంభవించినా ఫర్వాలేదు, మీ ఫైళ్లు Google డిస్క్లో సురక్షితంగా నిల్వ చేయబడి ఉంటాయి.<ph name="MARKUP_6" /> - అన్ని ఫైళ్లు ఒకే చోట ఉంటాయి, కాబట్టి <ph name="MARKUP_7" />షేర్ చేయండి, సృష్టించండి, + అన్ని ఫైళ్లు ఒకే చోట ఉంటాయి, కాబట్టి <ph name="MARKUP_7" />షేర్ చేయండి, క్రియేట్ చేయండి, వాటిపై ఇతరులతో కలిసి పని చేయండి<ph name="MARKUP_8" />.<ph name="MARKUP_9" /></translation> <translation id="5275973617553375938">Google డిస్క్ నుండి పునరుద్ధరించబడిన ఫైళ్లు</translation> <translation id="5288441970121584418">బర్గర్</translation>
diff --git a/ui/ozone/platform/drm/gpu/drm_window_unittest.cc b/ui/ozone/platform/drm/gpu/drm_window_unittest.cc index 9370fc1..0270ec0 100644 --- a/ui/ozone/platform/drm/gpu/drm_window_unittest.cc +++ b/ui/ozone/platform/drm/gpu/drm_window_unittest.cc
@@ -8,12 +8,14 @@ #include <stdint.h> #include <xf86drm.h> #include <memory> +#include <string> #include <utility> #include <vector> #include "base/bind.h" #include "base/files/platform_file.h" #include "base/macros.h" +#include "base/strings/string_number_conversions.h" #include "base/test/task_environment.h" #include "base/time/time.h" #include "testing/gtest/include/gtest/gtest.h" @@ -21,10 +23,12 @@ #include "third_party/skia/include/core/SkColor.h" #include "third_party/skia/include/core/SkImageInfo.h" #include "third_party/skia/include/core/SkSurface.h" +#include "ui/gfx/geometry/size.h" #include "ui/gfx/gpu_fence.h" #include "ui/gfx/linux/gbm_buffer.h" #include "ui/gfx/linux/test/mock_gbm_device.h" #include "ui/gfx/presentation_feedback.h" +#include "ui/ozone/platform/drm/common/drm_util.h" #include "ui/ozone/platform/drm/gpu/drm_device_generator.h" #include "ui/ozone/platform/drm/gpu/drm_device_manager.h" #include "ui/ozone/platform/drm/gpu/drm_framebuffer.h" @@ -80,20 +84,29 @@ } void OnPresentation(const gfx::PresentationFeedback& feedback) { - on_swap_buffers_count_++; + if (!feedback.failed()) + on_successful_swap_buffers_count_++; last_presentation_feedback_ = feedback; } + scoped_refptr<ui::DrmFramebuffer> CreateBuffer() { + const gfx::Size window_size = ui::ModeSize(kDefaultMode); + std::unique_ptr<ui::GbmBuffer> buffer = drm_->gbm_device()->CreateBuffer( + DRM_FORMAT_XRGB8888, window_size, GBM_BO_USE_SCANOUT); + return ui::DrmFramebuffer::AddFramebuffer(drm_, buffer.get(), window_size); + } + protected: void InitializeDrmState(ui::MockDrmDevice* drm, bool is_atomic = true); base::test::SingleThreadTaskEnvironment task_environment_{ + base::test::TaskEnvironment::TimeSource::MOCK_TIME, base::test::SingleThreadTaskEnvironment::MainThreadType::UI}; scoped_refptr<ui::MockDrmDevice> drm_; std::unique_ptr<ui::ScreenManager> screen_manager_; std::unique_ptr<ui::DrmDeviceManager> drm_device_manager_; - int on_swap_buffers_count_; + int on_successful_swap_buffers_count_; gfx::SwapResult last_swap_buffers_result_; gfx::PresentationFeedback last_presentation_feedback_; @@ -110,7 +123,7 @@ }; void DrmWindowTest::SetUp() { - on_swap_buffers_count_ = 0; + on_successful_swap_buffers_count_ = 0; last_swap_buffers_result_ = gfx::SwapResult::SWAP_FAILED; auto gbm_device = std::make_unique<ui::MockGbmDevice>(); @@ -303,38 +316,74 @@ EXPECT_NE(0u, drm->get_cursor_handle_for_crtc(kDefaultCrtc)); } -TEST_F(DrmWindowTest, CheckDeathOnFailedSwap) { - const gfx::Size window_size(6, 4); - ui::DrmWindow* window = screen_manager_->GetWindow(kDefaultWidgetHandle); - - std::unique_ptr<ui::GbmBuffer> buffer = drm_->gbm_device()->CreateBuffer( - DRM_FORMAT_XRGB8888, window_size, GBM_BO_USE_SCANOUT); - ASSERT_TRUE(buffer); - scoped_refptr<ui::DrmFramebuffer> framebuffer = - ui::DrmFramebuffer::AddFramebuffer(drm_, buffer.get(), window_size); - ui::DrmOverlayPlane plane(framebuffer, nullptr); - - drm_->set_page_flip_expectation(false); - +TEST_F(DrmWindowTest, CheckPageflipSuccessOnSuccessfulSwap) { ui::DrmOverlayPlaneList planes; - planes.push_back(plane.Clone()); + planes.emplace_back(CreateBuffer(), nullptr); // Window was re-sized, so the expectation is to re-create the buffers first. + ui::DrmWindow* window = screen_manager_->GetWindow(kDefaultWidgetHandle); + drm_->set_page_flip_expectation(false); window->SchedulePageFlip( ui::DrmOverlayPlane::Clone(planes), base::BindOnce(&DrmWindowTest::OnSubmission, base::Unretained(this)), base::BindOnce(&DrmWindowTest::OnPresentation, base::Unretained(this))); - EXPECT_EQ(1, on_swap_buffers_count_); + drm_->RunCallbacks(); + EXPECT_EQ(0, on_successful_swap_buffers_count_); EXPECT_EQ(gfx::SwapResult::SWAP_NAK_RECREATE_BUFFERS, last_swap_buffers_result_); EXPECT_EQ(static_cast<uint32_t>(gfx::PresentationFeedback::Flags::kFailure), last_presentation_feedback_.flags); + // Page flip succeeds, so GPU self-destruct should not engage. + drm_->set_page_flip_expectation(true); + window->SchedulePageFlip( + ui::DrmOverlayPlane::Clone(planes), + base::BindOnce(&DrmWindowTest::OnSubmission, base::Unretained(this)), + base::BindOnce(&DrmWindowTest::OnPresentation, base::Unretained(this))); + drm_->RunCallbacks(); + EXPECT_EQ(1, on_successful_swap_buffers_count_); + EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_buffers_result_); + + // Ensure self-destruct time runs out without process death. + task_environment_.FastForwardBy(ui::kWaitForModesetTimeout); +} + +TEST_F(DrmWindowTest, CheckPageflipFailureOnFailedSwap) { + ui::DrmOverlayPlaneList planes; + planes.emplace_back(CreateBuffer(), nullptr); + + // Window was re-sized, so the expectation is to re-create the buffers first. + ui::DrmWindow* window = screen_manager_->GetWindow(kDefaultWidgetHandle); + drm_->set_page_flip_expectation(false); + window->SchedulePageFlip( + ui::DrmOverlayPlane::Clone(planes), + base::BindOnce(&DrmWindowTest::OnSubmission, base::Unretained(this)), + base::BindOnce(&DrmWindowTest::OnPresentation, base::Unretained(this))); + drm_->RunCallbacks(); + EXPECT_EQ(0, on_successful_swap_buffers_count_); + EXPECT_EQ(gfx::SwapResult::SWAP_NAK_RECREATE_BUFFERS, + last_swap_buffers_result_); + EXPECT_EQ(static_cast<uint32_t>(gfx::PresentationFeedback::Flags::kFailure), + last_presentation_feedback_.flags); + + // Page flip still fails, so we expect GPU self-destruct timer to kick in. + window->SchedulePageFlip( + ui::DrmOverlayPlane::Clone(planes), + base::BindOnce(&DrmWindowTest::OnSubmission, base::Unretained(this)), + base::BindOnce(&DrmWindowTest::OnPresentation, base::Unretained(this))); + drm_->RunCallbacks(); + EXPECT_EQ(0, on_successful_swap_buffers_count_); + EXPECT_EQ(gfx::SwapResult::SWAP_FAILED, last_swap_buffers_result_); + EXPECT_EQ(static_cast<uint32_t>(gfx::PresentationFeedback::Flags::kFailure), + last_presentation_feedback_.flags); + + // Since no modeset event was detected, death occurs after + // |kWaitForModesetTimeout| seconds. + const std::string gpu_crash_log = + "Failed to modeset within " + + base::NumberToString(ui::kWaitForModesetTimeout.InSeconds()) + + " s of the first page flip failure. Crashing GPU process. Goodbye."; EXPECT_DEATH_IF_SUPPORTED( - window->SchedulePageFlip( - ui::DrmOverlayPlane::Clone(planes), - base::BindOnce(&DrmWindowTest::OnSubmission, base::Unretained(this)), - base::BindOnce(&DrmWindowTest::OnPresentation, - base::Unretained(this))), - "SchedulePageFlip failed"); + task_environment_.FastForwardBy(ui::kWaitForModesetTimeout), + gpu_crash_log); }
diff --git a/ui/ozone/platform/drm/gpu/hardware_display_controller.cc b/ui/ozone/platform/drm/gpu/hardware_display_controller.cc index d19b722..0abc1923 100644 --- a/ui/ozone/platform/drm/gpu/hardware_display_controller.cc +++ b/ui/ozone/platform/drm/gpu/hardware_display_controller.cc
@@ -13,6 +13,7 @@ #include "base/bind.h" #include "base/logging.h" #include "base/stl_util.h" +#include "base/syslog_logging.h" #include "base/trace_event/trace_event.h" #include "third_party/libdrm/src/include/drm/drm_fourcc.h" #include "third_party/skia/include/core/SkCanvas.h" @@ -125,6 +126,16 @@ void HardwareDisplayController::UpdateState( const CrtcCommitRequest& crtc_request) { + if (crash_gpu_timer_.IsRunning()) { + crash_gpu_timer_.AbandonAndStop(); + SYSLOG(INFO) + << "Detected a modeset attempt after " << failed_page_flip_counter_ + << " failed page flips. Aborting GPU process self-destruct with " + << crash_gpu_timer_.desired_run_time() - base::TimeTicks::Now() + << " to spare."; + failed_page_flip_counter_ = 0; + } + // Verify that the current state matches the requested state. if (crtc_request.should_enable() && IsEnabled()) { DCHECK(!crtc_request.overlays().empty()); @@ -162,10 +173,30 @@ return; } } + + // No outdated buffers detected which makes this a true page flip failure. + // Start the GPU self-destruct timer if needed and report the failure. + failed_page_flip_counter_++; + if (!crash_gpu_timer_.IsRunning()) { + DCHECK_EQ(1, failed_page_flip_counter_); + LOG(WARNING) << "Initiating GPU process self-destruct in " + << kWaitForModesetTimeout + << " unless a modeset attempt is detected."; + + crash_gpu_timer_.Start( + FROM_HERE, kWaitForModesetTimeout, base::BindOnce([] { + LOG(FATAL) << "Failed to modeset within " << kWaitForModesetTimeout + << " of the first page flip failure. Crashing GPU " + "process. Goodbye."; + })); + } + + std::move(submission_callback) + .Run(gfx::SwapResult::SWAP_FAILED, + /*release_fence=*/gfx::GpuFenceHandle()); + std::move(presentation_callback).Run(gfx::PresentationFeedback::Failure()); + return; } - - CHECK(status) << "SchedulePageFlip failed"; - if (page_flip_request->page_flip_count() == 0) { // Apparently, there was nothing to do. This probably should not be // able to happen but both CrtcController::AssignOverlayPlanes and
diff --git a/ui/ozone/platform/drm/gpu/hardware_display_controller.h b/ui/ozone/platform/drm/gpu/hardware_display_controller.h index e92304e..0e7acd3d 100644 --- a/ui/ozone/platform/drm/gpu/hardware_display_controller.h +++ b/ui/ozone/platform/drm/gpu/hardware_display_controller.h
@@ -16,6 +16,7 @@ #include "base/containers/flat_map.h" #include "base/macros.h" #include "base/time/time.h" +#include "base/timer/timer.h" #include "third_party/skia/include/core/SkBitmap.h" #include "ui/gfx/buffer_types.h" #include "ui/gfx/swap_result.h" @@ -30,6 +31,11 @@ namespace ui { +// The maximum amount of time we will wait for a new modeset attempt before we +// crash the GPU process. +constexpr base::TimeDelta kWaitForModesetTimeout = + base::TimeDelta::FromSeconds(15); + class CrtcController; class DrmFramebuffer; class DrmDumbBuffer; @@ -121,7 +127,7 @@ // be modified as it could still be displayed. // // Note that this function does not block. Also, this function should not be - // called again before the page flip occurrs. + // called again before the page flip occurs. void SchedulePageFlip(DrmOverlayPlaneList plane_list, SwapCompletionOnceCallback submission_callback, PresentationOnceCallback presentation_callback); @@ -215,6 +221,11 @@ base::flat_map<uint32_t /*fourcc_format*/, uint64_t /*preferred_modifier*/> preferred_format_modifier_; + // Used to crash the GPU process if a page flip commit fails and no new + // modeset attempts come in. + base::OneShotTimer crash_gpu_timer_; + int16_t failed_page_flip_counter_ = 0; + base::WeakPtrFactory<HardwareDisplayController> weak_ptr_factory_{this}; DISALLOW_COPY_AND_ASSIGN(HardwareDisplayController);
diff --git a/ui/ozone/platform/drm/gpu/hardware_display_controller_unittest.cc b/ui/ozone/platform/drm/gpu/hardware_display_controller_unittest.cc index 4285fb5..b6a5966 100644 --- a/ui/ozone/platform/drm/gpu/hardware_display_controller_unittest.cc +++ b/ui/ozone/platform/drm/gpu/hardware_display_controller_unittest.cc
@@ -6,12 +6,16 @@ #include <stddef.h> #include <stdint.h> #include <memory> +#include <string> #include <utility> #include "base/bind.h" #include "base/containers/contains.h" #include "base/files/file_util.h" #include "base/macros.h" +#include "base/strings/string_number_conversions.h" +#include "base/test/task_environment.h" +#include "base/time/time.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/skia/include/core/SkCanvas.h" #include "ui/gfx/geometry/rect_conversions.h" @@ -125,6 +129,10 @@ return ui::DrmFramebuffer::AddFramebuffer(drm_, buffer.get(), kOverlaySize); } + base::test::SingleThreadTaskEnvironment task_environment_{ + base::test::TaskEnvironment::TimeSource::MOCK_TIME, + base::test::SingleThreadTaskEnvironment::MainThreadType::UI}; + protected: bool ModesetWithPlanes(const ui::DrmOverlayPlaneList& modeset_planes); bool DisableController(); @@ -132,7 +140,7 @@ std::unique_ptr<ui::HardwareDisplayController> controller_; scoped_refptr<ui::MockDrmDevice> drm_; - int page_flips_ = 0; + int successful_page_flips_count_ = 0; gfx::SwapResult last_swap_result_; gfx::PresentationFeedback last_presentation_feedback_; @@ -141,7 +149,7 @@ }; void HardwareDisplayControllerTest::SetUp() { - page_flips_ = 0; + successful_page_flips_count_ = 0; last_swap_result_ = gfx::SwapResult::SWAP_FAILED; auto gbm_device = std::make_unique<ui::MockGbmDevice>(); @@ -253,7 +261,7 @@ ui::CommitRequest request_for_update = commit_request; bool status = drm_->plane_manager()->Commit(std::move(commit_request), DRM_MODE_ATOMIC_ALLOW_MODESET); - for (const ui::CrtcCommitRequest& crtc_request : commit_request) + for (const ui::CrtcCommitRequest& crtc_request : request_for_update) controller_->UpdateState(crtc_request); return status; @@ -265,7 +273,7 @@ ui::CommitRequest request_for_update = commit_request; bool status = drm_->plane_manager()->Commit(std::move(commit_request), DRM_MODE_ATOMIC_ALLOW_MODESET); - for (const ui::CrtcCommitRequest& crtc_request : commit_request) + for (const ui::CrtcCommitRequest& crtc_request : request_for_update) controller_->UpdateState(crtc_request); return status; @@ -289,7 +297,8 @@ void HardwareDisplayControllerTest::OnPresentation( const gfx::PresentationFeedback& feedback) { - page_flips_++; + if (!feedback.failed()) + successful_page_flips_count_++; last_presentation_feedback_ = feedback; } @@ -623,7 +632,7 @@ EXPECT_FALSE(page_flip_plane.buffer->HasOneRef()); EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_); - EXPECT_EQ(1, page_flips_); + EXPECT_EQ(1, successful_page_flips_count_); EXPECT_EQ(2, drm_->get_commit_count()); // Verify only the primary display have a valid framebuffer. EXPECT_NE(0u, GetPlanePropertyValue(kPlaneOffset, "FB_ID")); @@ -652,7 +661,7 @@ SchedulePageFlip(std::move(planes)); drm_->RunCallbacks(); EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_); - EXPECT_EQ(1, page_flips_); + EXPECT_EQ(1, successful_page_flips_count_); EXPECT_EQ(2, drm_->get_commit_count()); // Verify both planes on the primary display have a valid framebuffer. EXPECT_NE(0u, GetPlanePropertyValue(kPlaneOffset, "FB_ID")); @@ -679,14 +688,14 @@ EXPECT_TRUE(controller_->TestPageFlip(planes)); drm_->RunCallbacks(); EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_); - EXPECT_EQ(1, page_flips_); + EXPECT_EQ(1, successful_page_flips_count_); EXPECT_EQ(3, drm_->get_commit_count()); // Regular flips should continue on normally. SchedulePageFlip(ui::DrmOverlayPlane::Clone(planes)); drm_->RunCallbacks(); EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_); - EXPECT_EQ(2, page_flips_); + EXPECT_EQ(2, successful_page_flips_count_); EXPECT_EQ(4, drm_->get_commit_count()); // Verify both planes on the primary display have a valid framebuffer. EXPECT_NE(0u, GetPlanePropertyValue(kPlaneOffset, "FB_ID")); @@ -705,7 +714,7 @@ SchedulePageFlip(std::move(planes)); drm_->RunCallbacks(); EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_); - EXPECT_EQ(1, page_flips_); + EXPECT_EQ(1, successful_page_flips_count_); } TEST_F(HardwareDisplayControllerTest, PageflipMirroredControllers) { @@ -721,7 +730,7 @@ SchedulePageFlip(std::move(planes)); drm_->RunCallbacks(); EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_); - EXPECT_EQ(1, page_flips_); + EXPECT_EQ(1, successful_page_flips_count_); EXPECT_EQ(2, drm_->get_commit_count()); // Verify only the displays have a valid framebuffer on the primary plane. // First display: @@ -743,7 +752,7 @@ SchedulePageFlip(ui::DrmOverlayPlane::Clone(planes)); drm_->RunCallbacks(); EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_); - EXPECT_EQ(1, page_flips_); + EXPECT_EQ(1, successful_page_flips_count_); const ui::HardwareDisplayPlane* primary_crtc_plane = nullptr; const ui::HardwareDisplayPlane* secondary_crtc_plane = nullptr; @@ -771,7 +780,7 @@ SchedulePageFlip(ui::DrmOverlayPlane::Clone(planes)); drm_->RunCallbacks(); EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_); - EXPECT_EQ(2, page_flips_); + EXPECT_EQ(2, successful_page_flips_count_); EXPECT_FALSE(primary_crtc_plane->in_use()); EXPECT_TRUE(secondary_crtc_plane->in_use()); EXPECT_EQ(kSecondaryCrtc, secondary_crtc_plane->owning_crtc()); @@ -785,7 +794,7 @@ SchedulePageFlip(std::move(planes)); drm_->RunCallbacks(); EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_); - EXPECT_EQ(1, page_flips_); + EXPECT_EQ(1, successful_page_flips_count_); const ui::HardwareDisplayPlane* owned_plane = nullptr; for (const auto& plane : drm_->plane_manager()->planes()) @@ -813,7 +822,7 @@ SchedulePageFlip(ui::DrmOverlayPlane::Clone(planes)); drm_->RunCallbacks(); EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_); - EXPECT_EQ(1, page_flips_); + EXPECT_EQ(1, successful_page_flips_count_); ui::HardwareDisplayPlane* primary_crtc_plane = nullptr; for (const auto& plane : drm_->plane_manager()->planes()) { @@ -828,7 +837,7 @@ SchedulePageFlip(ui::DrmOverlayPlane::Clone(planes)); drm_->RunCallbacks(); EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_); - EXPECT_EQ(2, page_flips_); + EXPECT_EQ(2, successful_page_flips_count_); EXPECT_FALSE(primary_crtc_plane->in_use()); // We reset state of plane here to test that the plane was actually added to @@ -844,7 +853,7 @@ base::Unretained(this))); drm_->RunCallbacks(); EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_); - EXPECT_EQ(3, page_flips_); + EXPECT_EQ(3, successful_page_flips_count_); EXPECT_TRUE(primary_crtc_plane->in_use()); EXPECT_EQ(kPrimaryCrtc, primary_crtc_plane->owning_crtc()); } @@ -859,10 +868,10 @@ EXPECT_TRUE(ModesetWithPlanes(planes)); drm_->RunCallbacks(); EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_); - EXPECT_EQ(1, page_flips_); + EXPECT_EQ(1, successful_page_flips_count_); } -TEST_F(HardwareDisplayControllerTest, FailPageFlipping) { +TEST_F(HardwareDisplayControllerTest, FailPageFlippingWithNoSavingModeset) { ui::DrmOverlayPlaneList modeset_planes; modeset_planes.emplace_back(CreateBuffer(), nullptr); ASSERT_TRUE(ModesetWithPlanes(modeset_planes)); @@ -870,9 +879,46 @@ std::vector<ui::DrmOverlayPlane> page_flip_planes; page_flip_planes.emplace_back(CreateBuffer(), nullptr); + // Page flip fails, so a GPU process self-destruct sequence is initiated. drm_->set_commit_expectation(false); - EXPECT_DEATH_IF_SUPPORTED(SchedulePageFlip(std::move(page_flip_planes)), - "SchedulePageFlip failed"); + SchedulePageFlip(std::move(page_flip_planes)); + + // Since no modeset event was detected, death occurs after + // |kWaitForModesetTimeout| seconds. + const std::string gpu_crash_log = + "Failed to modeset within " + + base::NumberToString(ui::kWaitForModesetTimeout.InSeconds()) + + " s of the first page flip failure. Crashing GPU process. Goodbye."; + EXPECT_DEATH_IF_SUPPORTED( + task_environment_.FastForwardBy(ui::kWaitForModesetTimeout), + gpu_crash_log); +} + +TEST_F(HardwareDisplayControllerTest, FailPageFlippingWithSavingModeset) { + ui::DrmOverlayPlaneList modeset_planes; + modeset_planes.emplace_back(CreateBuffer(), nullptr); + ASSERT_TRUE(ModesetWithPlanes(modeset_planes)); + + std::vector<ui::DrmOverlayPlane> page_flip_planes; + page_flip_planes.emplace_back(CreateBuffer(), nullptr); + + // Page flip fails, so a GPU process self-destruct sequence is initiated. + drm_->set_commit_expectation(false); + SchedulePageFlip(std::move(page_flip_planes)); + drm_->RunCallbacks(); + EXPECT_EQ(gfx::SwapResult::SWAP_FAILED, last_swap_result_); + EXPECT_EQ(0, successful_page_flips_count_); + + // Some time passes. + task_environment_.FastForwardBy(base::TimeDelta::FromMilliseconds(1623)); + + // A modeset event occurs and prevents the GPU process from crashing. + modeset_planes.clear(); + modeset_planes.emplace_back(CreateBuffer(), nullptr); + ASSERT_TRUE(ModesetWithPlanes(modeset_planes)); + + // Ensure self-destruct time runs out without process death. + task_environment_.FastForwardBy(ui::kWaitForModesetTimeout); } TEST_F(HardwareDisplayControllerTest, @@ -881,9 +927,26 @@ planes.emplace_back(CreateBuffer(), nullptr); ASSERT_TRUE(ModesetWithPlanes(planes)); + // Page flip fails due to planes being allocated prior to the last modeset. drm_->set_commit_expectation(false); SchedulePageFlip(std::move(planes)); + drm_->RunCallbacks(); + // We recreate the buffers. EXPECT_EQ(gfx::SwapResult::SWAP_NAK_RECREATE_BUFFERS, last_swap_result_); + EXPECT_EQ(0, successful_page_flips_count_); + + // Next page flip passes, so the GPU process is safe. + drm_->set_commit_expectation(true); + planes.clear(); + planes.emplace_back(CreateBuffer(), nullptr); + SchedulePageFlip(std::move(planes)); + + // Ensure self-destruct time runs out without process death. + task_environment_.FastForwardBy(ui::kWaitForModesetTimeout); + + drm_->RunCallbacks(); + EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_); + EXPECT_EQ(1, successful_page_flips_count_); } TEST_F(HardwareDisplayControllerTest, CheckNoPrimaryPlaneOnFlip) { @@ -899,7 +962,7 @@ drm_->RunCallbacks(); EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_); - EXPECT_EQ(1, page_flips_); + EXPECT_EQ(1, successful_page_flips_count_); } TEST_F(HardwareDisplayControllerTest, AddCrtcMidPageFlip) { @@ -914,7 +977,7 @@ drm_->RunCallbacks(); EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_); - EXPECT_EQ(1, page_flips_); + EXPECT_EQ(1, successful_page_flips_count_); } TEST_F(HardwareDisplayControllerTest, RemoveCrtcMidPageFlip) { @@ -928,7 +991,7 @@ drm_->RunCallbacks(); EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_); - EXPECT_EQ(1, page_flips_); + EXPECT_EQ(1, successful_page_flips_count_); } TEST_F(HardwareDisplayControllerTest, Disable) {
diff --git a/ui/views/BUILD.gn b/ui/views/BUILD.gn index 0ebc76f..21abe49 100644 --- a/ui/views/BUILD.gn +++ b/ui/views/BUILD.gn
@@ -291,8 +291,6 @@ "animation/animation_builder.cc", "animation/animation_delegate_views.cc", "animation/animation_key.h", - "animation/animation_sequence.cc", - "animation/animation_sequence.h", "animation/animation_sequence_block.cc", "animation/bounds_animator.cc", "animation/bubble_slide_animator.cc",
diff --git a/ui/views/animation/animation_builder.cc b/ui/views/animation/animation_builder.cc index 6c496cb..c03e1a3d 100644 --- a/ui/views/animation/animation_builder.cc +++ b/ui/views/animation/animation_builder.cc
@@ -5,19 +5,22 @@ #include "ui/views/animation/animation_builder.h" #include <algorithm> +#include <tuple> #include <utility> #include <vector> #include "base/callback.h" +#include "base/check_op.h" #include "base/ranges/algorithm.h" #include "base/time/time.h" #include "base/types/pass_key.h" #include "ui/compositor/layer.h" +#include "ui/compositor/layer_animation_element.h" #include "ui/compositor/layer_animation_observer.h" #include "ui/compositor/layer_animation_sequence.h" #include "ui/compositor/layer_animator.h" #include "ui/compositor/layer_owner.h" -#include "ui/views/animation/animation_sequence.h" +#include "ui/views/animation/animation_key.h" #include "ui/views/animation/animation_sequence_block.h" namespace views { @@ -116,6 +119,15 @@ std::move(on_scheduled_).Run(); } +struct AnimationBuilder::Value { + base::TimeDelta start; + std::unique_ptr<ui::LayerAnimationElement> element; + + bool operator<(const Value& key) const { + return std::tie(start, element) < std::tie(key.start, key.element); + } +}; + AnimationBuilder::AnimationBuilder() = default; AnimationBuilder::~AnimationBuilder() { @@ -138,25 +150,15 @@ } AnimationSequenceBlock AnimationBuilder::Once() { - return NewSequence(false); -} - -AnimationSequenceBlock AnimationBuilder::Repeatedly() { - return NewSequence(true); -} - -AnimationSequenceBlock AnimationBuilder::NewSequence(bool repeating) { - base::PassKey<AnimationBuilder> pass_key; - animation_sequences_.emplace_back(pass_key, this, repeating); - return AnimationSequenceBlock(pass_key, &animation_sequences_.back(), + repeating_ = false; + return AnimationSequenceBlock(base::PassKey<AnimationBuilder>(), this, base::TimeDelta()); } -void AnimationBuilder::AddLayerAnimationSequence( - base::PassKey<AnimationSequence>, - ui::LayerOwner* target, - std::unique_ptr<ui::LayerAnimationSequence> sequence) { - layer_animation_sequences_.insert({target, std::move(sequence)}); +AnimationSequenceBlock AnimationBuilder::Repeatedly() { + repeating_ = true; + return AnimationSequenceBlock(base::PassKey<AnimationBuilder>(), this, + base::TimeDelta()); } AnimationBuilder& AnimationBuilder::OnStarted(base::OnceClosure callback) { @@ -185,6 +187,42 @@ return *this; } +void AnimationBuilder::AddLayerAnimationElement( + base::PassKey<AnimationSequenceBlock>, + AnimationKey key, + base::TimeDelta start, + std::unique_ptr<ui::LayerAnimationElement> element) { + auto& values = values_[key]; + Value value = {start, std::move(element)}; + auto it = base::ranges::upper_bound(values, value); + values.insert(it, std::move(value)); +} + +void AnimationBuilder::TerminateSequence( + base::PassKey<AnimationSequenceBlock>) { + for (auto& pair : values_) { + auto sequence = std::make_unique<ui::LayerAnimationSequence>(); + sequence->set_is_repeating(repeating_); + + base::TimeDelta start; + for (auto& value : pair.second) { + DCHECK_GE(value.start, start) + << "Do not overlap animations of the same property on the same view."; + if (value.start > start) { + sequence->AddElement(ui::LayerAnimationElement::CreatePauseElement( + value.element->properties(), value.start - start)); + start = value.start; + } + start += value.element->duration(); + sequence->AddElement(std::move(value.element)); + } + + layer_animation_sequences_.insert({pair.first.target, std::move(sequence)}); + } + + values_.clear(); +} + AnimationBuilder::Observer* AnimationBuilder::GetObserver() { if (!animation_observer_) animation_observer_ = std::make_unique<Observer>();
diff --git a/ui/views/animation/animation_builder.h b/ui/views/animation/animation_builder.h index 83b9108f..45b3f34 100644 --- a/ui/views/animation/animation_builder.h +++ b/ui/views/animation/animation_builder.h
@@ -13,7 +13,7 @@ #include "base/types/pass_key.h" #include "ui/compositor/layer_animation_observer.h" #include "ui/compositor/layer_animation_sequence.h" -#include "ui/views/animation/animation_sequence.h" +#include "ui/views/animation/animation_key.h" #include "ui/views/animation/animation_sequence_block.h" #include "ui/views/views_export.h" @@ -48,22 +48,32 @@ // Called when the animation is scheduled. AnimationBuilder& OnScheduled(base::OnceClosure callback); - // Adds `sequence` for `target`. - void AddLayerAnimationSequence( - base::PassKey<AnimationSequence>, - ui::LayerOwner* target, - std::unique_ptr<ui::LayerAnimationSequence> sequence); + // Adds an animation element `element` for `key` at `start` to `values`. + void AddLayerAnimationElement( + base::PassKey<AnimationSequenceBlock>, + AnimationKey key, + base::TimeDelta start, + std::unique_ptr<ui::LayerAnimationElement> element); + + // Called when the sequence is ended. Converts `values_` to + // `layer_animation_sequences_`. + void TerminateSequence(base::PassKey<AnimationSequenceBlock>); private: class Observer; + struct Value; - AnimationSequenceBlock NewSequence(bool repeating); Observer* GetObserver(); + // Data for all sequences. std::multimap<ui::LayerOwner*, std::unique_ptr<ui::LayerAnimationSequence>> layer_animation_sequences_; - std::vector<AnimationSequence> animation_sequences_; std::unique_ptr<Observer> animation_observer_; + + // Data for the current sequence. + bool repeating_; + // Each vector is kept in sorted order. + std::map<AnimationKey, std::vector<Value>> values_; }; } // namespace views
diff --git a/ui/views/animation/animation_sequence.cc b/ui/views/animation/animation_sequence.cc deleted file mode 100644 index d8fe9404..0000000 --- a/ui/views/animation/animation_sequence.cc +++ /dev/null
@@ -1,84 +0,0 @@ -// Copyright 2021 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "ui/views/animation/animation_sequence.h" - -#include <map> -#include <memory> -#include <utility> -#include <vector> - -#include "base/check_op.h" -#include "base/ranges/algorithm.h" -#include "base/time/time.h" -#include "base/types/pass_key.h" -#include "ui/compositor/layer_animation_element.h" -#include "ui/compositor/layer_animation_sequence.h" -#include "ui/views/animation/animation_builder.h" -#include "ui/views/animation/animation_key.h" - -namespace views { - -struct AnimationSequence::Value { - base::TimeDelta start; - std::unique_ptr<ui::LayerAnimationElement> element; - - bool operator<(const Value& key) const { - return std::tie(start, element) < std::tie(key.start, key.element); - } -}; - -AnimationSequence::AnimationSequence(base::PassKey<AnimationBuilder>, - AnimationBuilder* owner, - bool repeating) - : owner_(owner), repeating_(repeating) {} - -AnimationSequence::AnimationSequence(AnimationSequence&&) = default; - -AnimationSequence& AnimationSequence::operator=(AnimationSequence&&) = default; - -AnimationSequence::~AnimationSequence() { - DCHECK(values_.empty()); -} - -void AnimationSequence::AddElement( - base::PassKey<AnimationSequenceBlock>, - AnimationKey key, - base::TimeDelta start, - std::unique_ptr<ui::LayerAnimationElement> element) { - auto& values = values_[key]; - Value value = {start, std::move(element)}; - auto it = base::ranges::upper_bound(values, value); - values.insert(it, std::move(value)); -} - -AnimationBuilder& AnimationSequence::TerminateSequence( - base::PassKey<AnimationSequenceBlock>) { - for (auto& pair : values_) { - auto sequence = std::make_unique<ui::LayerAnimationSequence>(); - sequence->set_is_repeating(repeating_); - - base::TimeDelta start; - for (auto& value : pair.second) { - DCHECK_GE(value.start, start) - << "Do not overlap animations of the same property on the same view."; - if (value.start > start) { - sequence->AddElement(ui::LayerAnimationElement::CreatePauseElement( - value.element->properties(), value.start - start)); - start = value.start; - } - start += value.element->duration(); - sequence->AddElement(std::move(value.element)); - } - - owner_->AddLayerAnimationSequence(base::PassKey<AnimationSequence>(), - pair.first.target, std::move(sequence)); - } - - values_.clear(); - - return *owner_; -} - -} // namespace views
diff --git a/ui/views/animation/animation_sequence.h b/ui/views/animation/animation_sequence.h deleted file mode 100644 index 29154a9ed..0000000 --- a/ui/views/animation/animation_sequence.h +++ /dev/null
@@ -1,62 +0,0 @@ -// Copyright 2021 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef UI_VIEWS_ANIMATION_ANIMATION_SEQUENCE_H_ -#define UI_VIEWS_ANIMATION_ANIMATION_SEQUENCE_H_ - -#include <map> -#include <memory> -#include <vector> - -#include "base/time/time.h" -#include "base/types/pass_key.h" -#include "ui/views/animation/animation_key.h" - -namespace ui { -class LayerAnimationElement; -} - -namespace views { - -class AnimationBuilder; -class AnimationSequenceBlock; - -// An animation sequence is populated by zero or more possibly-overlapping -// animation sequence blocks. The sequence doesn't own the blocks directly; -// rather, they hold pointers to it and repeatedly call AddElement() to add -// layer animation elements to the sequence. Once the sequence is complete, -// TerminateSequence() causes the sequence to collect together all elements into -// layer animation sequences, which are added to the owning AnimationBuilder. -class AnimationSequence { - public: - explicit AnimationSequence(base::PassKey<AnimationBuilder>, - AnimationBuilder* owner, - bool repeating); - AnimationSequence(AnimationSequence&&); - AnimationSequence& operator=(AnimationSequence&&); - ~AnimationSequence(); - - // Adds an animation element `element` for `key` at `start`. - void AddElement(base::PassKey<AnimationSequenceBlock>, - AnimationKey key, - base::TimeDelta start, - std::unique_ptr<ui::LayerAnimationElement> element); - - // Called when the sequence is ended by EndSequence[Repeating](). Converts - // `values_` to LayerAnimationSequences on the `owner_`. - AnimationBuilder& TerminateSequence(base::PassKey<AnimationSequenceBlock>); - - private: - struct Value; - - AnimationBuilder* owner_; - bool repeating_; - - // Each vector is kept in sorted order. - std::map<AnimationKey, std::vector<Value>> values_; -}; - -} // namespace views - -#endif // UI_VIEWS_ANIMATION_ANIMATION_SEQUENCE_H_
diff --git a/ui/views/animation/animation_sequence_block.cc b/ui/views/animation/animation_sequence_block.cc index f5c8d5e..f56c5bc 100644 --- a/ui/views/animation/animation_sequence_block.cc +++ b/ui/views/animation/animation_sequence_block.cc
@@ -18,8 +18,8 @@ #include "ui/gfx/geometry/rect.h" #include "ui/gfx/geometry/rounded_corners_f.h" #include "ui/gfx/interpolated_transform.h" +#include "ui/views/animation/animation_builder.h" #include "ui/views/animation/animation_key.h" -#include "ui/views/animation/animation_sequence.h" namespace views { @@ -27,7 +27,7 @@ AnimationSequenceBlock::AnimationSequenceBlock( base::PassKey<AnimationBuilder> builder_key, - AnimationSequence* owner, + AnimationBuilder* owner, base::TimeDelta start) : builder_key_(builder_key), owner_(owner), start_(start) {} @@ -178,7 +178,8 @@ default: NOTREACHED(); } - owner_->AddElement(PassKey(), pair.first, start_, std::move(element)); + owner_->AddLayerAnimationElement(PassKey(), pair.first, start_, + std::move(element)); } elements_.clear();
diff --git a/ui/views/animation/animation_sequence_block.h b/ui/views/animation/animation_sequence_block.h index e7428cb..91578398 100644 --- a/ui/views/animation/animation_sequence_block.h +++ b/ui/views/animation/animation_sequence_block.h
@@ -33,7 +33,6 @@ namespace views { class AnimationBuilder; -class AnimationSequence; // An animation sequence block is a single unit of a larger animation sequence, // which has a start time, duration, and zero or more (target, property) @@ -44,7 +43,7 @@ class VIEWS_EXPORT AnimationSequenceBlock { public: AnimationSequenceBlock(base::PassKey<AnimationBuilder> builder_key, - AnimationSequence* owner, + AnimationBuilder* owner, base::TimeDelta start); AnimationSequenceBlock(AnimationSequenceBlock&&); AnimationSequenceBlock& operator=(AnimationSequenceBlock&&); @@ -94,7 +93,7 @@ void TerminateBlock(); base::PassKey<AnimationBuilder> builder_key_; - AnimationSequence* owner_; + AnimationBuilder* owner_; base::TimeDelta start_; // The block duration. This will contain nullopt (interpreted as zero) until
diff --git a/weblayer/browser/android/javatests/skew/expectations.txt b/weblayer/browser/android/javatests/skew/expectations.txt index 6b6932f5..16d3ac0 100644 --- a/weblayer/browser/android/javatests/skew/expectations.txt +++ b/weblayer/browser/android/javatests/skew/expectations.txt
@@ -25,28 +25,29 @@ # navigation which the test depends on. crbug.com/1196803 [ client_lte_91 ] org.chromium.weblayer.test.ExternalNavigationTest#testExternalIntentWithNoRedirectInBrowserStartupInIncognitoBlockedWhenBackgroundLaunchesAllowedAndUserForbids [ Skip ] +crbug.com/1238481 [ all ] org.chromium.weblayer.test.TabTest#testRotationDoesntChangeVisibility [ Skip ] +crbug.com/1239026 [ all ] org.chromium.weblayer.test.TabCallbackTest#testDismissTransientUi [ Skip ] +crbug.com/1239028 [ all ] org.chromium.weblayer.test.MediaSessionTest#basic [ Skip ] +crbug.com/1239032 [ all ] org.chromium.weblayer.test.NewTabCallbackTest#testNewBrowser [ Skip ] +crbug.com/1239034 [ all ] org.chromium.weblayer.test.TabCallbackTest#testTabModalOverlay [ Skip ] +crbug.com/1222694 [ all ] org.chromium.weblayer.test.FullscreenCallbackTest* [ Skip ] +crbug.com/1239032 [ all ] org.chromium.weblayer.test.TabListCallbackTest#testCallbackInvokedWhenTabClosedViaWebContents [ Skip ] +crbug.com/1239032 [ all ] org.chromium.weblayer.test.NewTabCallbackTest#testNewTabHasFocus [ Skip ] +crbug.com/1225662 [ all ] org.chromium.weblayer.test.NavigationTest#testDestroyTabWithModalDialog [ Skip ] + # Bulk disable to get bot green. -crbug.com/1191751 [ all ] org.chromium.weblayer.test.FullscreenCallbackTest* [ Skip ] -crbug.com/1191751 [ all ] org.chromium.weblayer.test.MediaSessionTest#basic [ Skip ] crbug.com/1191751 [ all ] org.chromium.weblayer.test.InputTypesTest* [ Skip ] -crbug.com/1191751 [ all ] org.chromium.weblayer.test.NavigationTest#testDestroyTabWithModalDialog [ Skip ] crbug.com/1191751 [ all ] org.chromium.weblayer.test.NavigationTest#testRepostConfirmation [ Skip ] crbug.com/1191751 [ all ] org.chromium.weblayer.test.NewTabCallbackTest#testDestroyTabInOnNewTab [ Skip ] crbug.com/1191751 [ all ] org.chromium.weblayer.test.TabCallbackTest#testScrollNotificationDirectionChange [ Skip ] -crbug.com/1191751 [ all ] org.chromium.weblayer.test.TabCallbackTest#testTabModalOverlay [ Skip ] crbug.com/1191751 [ all ] org.chromium.weblayer.test.TabListCallbackTest#testMoveToDifferentFragment [ Skip ] crbug.com/1191751 [ all ] org.chromium.weblayer.test.TabListCallbackTest#testDestroyTab [ Skip ] crbug.com/1191751 [ all ] org.chromium.weblayer.test.TabListCallbackTest#testActiveTabChanged [ Skip ] -crbug.com/1191751 [ all ] org.chromium.weblayer.test.TabTest#testRotationDoesntChangeVisibility [ Skip ] crbug.com/1191751 [ all ] org.chromium.weblayer.test.TabTest#testBeforeUnload [ Skip ] -crbug.com/1191751 [ all ] org.chromium.weblayer.test.NewTabCallbackTest#testNewBrowser [ Skip ] crbug.com/1191751 [ all ] org.chromium.weblayer.test.DownloadCallbackTest#testBasic [ Skip ] -crbug.com/1191751 [ all ] org.chromium.weblayer.test.NewTabCallbackTest#testNewTabHasFocus [ Skip ] crbug.com/1191751 [ all ] org.chromium.weblayer.test.FindInPageTest#testHideOnNewTab [ Skip ] crbug.com/1191751 [ all ] org.chromium.weblayer.test.TabCallbackTest#testTabModalOverlayOnBackgroundTab [ Skip ] crbug.com/1191751 [ all ] org.chromium.weblayer.test.CookieManagerTest#testCookieChanged [ Skip ] -crbug.com/1191751 [ all ] org.chromium.weblayer.test.TabCallbackTest#testDismissTransientUi [ Skip ] crbug.com/1191751 [ all ] org.chromium.weblayer.test.NavigationTest#testIsFormSubmission [ Skip ] crbug.com/1191751 [ all ] org.chromium.weblayer.test.TabCallbackTest#testOnRenderProcessGone [ Skip ] crbug.com/1191751 [ all ] org.chromium.weblayer.test.ScrollOffsetCallbackTest#testBasic [ Skip ] -crbug.com/1191751 [ all ] org.chromium.weblayer.test.TabListCallbackTest#testCallbackInvokedWhenTabClosedViaWebContents [ Skip ]
diff --git a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/FullscreenCallbackTest.java b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/FullscreenCallbackTest.java index b093e68..34d7d1f9 100644 --- a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/FullscreenCallbackTest.java +++ b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/FullscreenCallbackTest.java
@@ -15,6 +15,7 @@ import org.chromium.base.test.util.CallbackHelper; import org.chromium.base.test.util.DisableIf; +import org.chromium.base.test.util.DisabledTest; import org.chromium.content_public.browser.test.util.TestThreadUtils; import org.chromium.weblayer.Browser; import org.chromium.weblayer.BrowserControlsOffsetCallback; @@ -47,6 +48,7 @@ @Test @SmallTest + @DisabledTest(message = "crbug.com/1222694") public void testFullscreen() { enterFullscreen(); // Second touch exits. @@ -57,6 +59,7 @@ @Test @SmallTest + @DisabledTest(message = "crbug.com/1222694") public void testExitFullscreenWhenDelegateCleared() { enterFullscreen(); // Clearing the FullscreenCallback should exit fullscreen. @@ -68,6 +71,7 @@ @Test @SmallTest + @DisabledTest(message = "crbug.com/1222694") public void testExitFullscreenUsingRunnable() { enterFullscreen(); // Running the runnable supplied to the delegate should exit fullscreen. @@ -78,6 +82,7 @@ @Test @SmallTest + @DisabledTest(message = "crbug.com/1222694") public void testExitFullscreenWhenTabDestroyed() { enterFullscreen(); // Destroying the tab should exit fullscreen. @@ -92,6 +97,7 @@ */ @Test @SmallTest + @DisabledTest(message = "crbug.com/1222694") public void testDestroyFragmentWhileFullscreen() { enterFullscreen(); TestThreadUtils.runOnUiThreadBlocking(() -> { mActivity.destroyFragment(); }); @@ -117,6 +123,7 @@ @MinWebLayerVersion(88) @DisableIf. Build(sdk_is_less_than = Build.VERSION_CODES.M, message = "https://crbug.com/1159781") + @DisabledTest(message = "crbug.com/1222694") public void testTopViewRemainsHiddenOnFullscreenRotation() throws Exception { String url = mActivityTestRule.getTestDataURL("rotation2.html"); mActivity = mActivityTestRule.launchShellWithUrl(url);
diff --git a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/MediaSessionTest.java b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/MediaSessionTest.java index 30f6cc6..d187ca4 100644 --- a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/MediaSessionTest.java +++ b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/MediaSessionTest.java
@@ -23,6 +23,7 @@ import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.Criteria; import org.chromium.base.test.util.CriteriaHelper; +import org.chromium.base.test.util.DisabledTest; import org.chromium.base.test.util.MinAndroidSdkLevel; import org.chromium.weblayer.shell.InstrumentationActivity; @@ -41,6 +42,7 @@ @Test @MediumTest @MinAndroidSdkLevel(Build.VERSION_CODES.M) + @DisabledTest(message = "crbug.com/1239028") public void basic() throws Throwable { mActivity = mActivityTestRule.launchShellWithUrl( mActivityTestRule.getTestDataURL("media_session.html"));
diff --git a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/NavigationTest.java b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/NavigationTest.java index 86317ab7..4df8bde 100644 --- a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/NavigationTest.java +++ b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/NavigationTest.java
@@ -1169,6 +1169,7 @@ // This is a regression test for https://crbug.com/1121388. @Test @SmallTest + @DisabledTest(message = "crbug.com/1225662") public void testDestroyTabWithModalDialog() throws Exception { // Load a page with a form. InstrumentationActivity activity =
diff --git a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/NewTabCallbackTest.java b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/NewTabCallbackTest.java index 03196b53..599300b 100644 --- a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/NewTabCallbackTest.java +++ b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/NewTabCallbackTest.java
@@ -13,6 +13,7 @@ import org.chromium.base.test.util.CallbackHelper; import org.chromium.base.test.util.CriteriaHelper; +import org.chromium.base.test.util.DisabledTest; import org.chromium.content_public.browser.test.util.TestThreadUtils; import org.chromium.weblayer.NewTabCallback; import org.chromium.weblayer.Tab; @@ -31,6 +32,7 @@ @Test @SmallTest + @DisabledTest(message = "crbug.com/1239032") public void testNewBrowser() { String url = mActivityTestRule.getTestDataURL("new_browser.html"); mActivity = mActivityTestRule.launchShellWithUrl(url); @@ -78,6 +80,7 @@ @Test @SmallTest + @DisabledTest(message = "crbug.com/1239032") public void testNewTabHasFocus() { String url = mActivityTestRule.getTestDataURL("new_browser.html"); mActivity = mActivityTestRule.launchShellWithUrl(url);
diff --git a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/TabCallbackTest.java b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/TabCallbackTest.java index f63e10b9..cf66eb1 100644 --- a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/TabCallbackTest.java +++ b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/TabCallbackTest.java
@@ -20,6 +20,7 @@ import org.chromium.base.test.util.Criteria; import org.chromium.base.test.util.CriteriaHelper; import org.chromium.base.test.util.DisableIf; +import org.chromium.base.test.util.DisabledTest; import org.chromium.content_public.browser.test.util.TestThreadUtils; import org.chromium.content_public.browser.test.util.TestTouchUtils; import org.chromium.weblayer.ContextMenuParams; @@ -195,6 +196,7 @@ @Test @SmallTest + @DisabledTest(message = "crbug.com/1239034") public void testTabModalOverlay() throws TimeoutException { String pageUrl = mActivityTestRule.getTestDataURL("alert.html"); InstrumentationActivity activity = mActivityTestRule.launchShellWithUrl(pageUrl); @@ -228,6 +230,7 @@ @Test @SmallTest + @DisabledTest(message = "crbug.com/1239026") public void testDismissTransientUi() throws TimeoutException { String pageUrl = mActivityTestRule.getTestDataURL("alert.html"); InstrumentationActivity activity = mActivityTestRule.launchShellWithUrl(pageUrl);
diff --git a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/TabListCallbackTest.java b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/TabListCallbackTest.java index e5ead80..5791810 100644 --- a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/TabListCallbackTest.java +++ b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/TabListCallbackTest.java
@@ -12,6 +12,7 @@ import org.junit.runner.RunWith; import org.chromium.base.test.util.CallbackHelper; +import org.chromium.base.test.util.DisabledTest; import org.chromium.content_public.browser.test.util.TestThreadUtils; import org.chromium.weblayer.Browser; import org.chromium.weblayer.Tab; @@ -160,6 +161,7 @@ @Test @SmallTest + @DisabledTest(message = "crbug.com/1239032") public void testCallbackInvokedWhenTabClosedViaWebContents() { initialize("new_tab_then_close.html");
diff --git a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/TabTest.java b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/TabTest.java index 0069f322..2636353 100644 --- a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/TabTest.java +++ b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/TabTest.java
@@ -21,6 +21,7 @@ import org.chromium.base.test.util.CallbackHelper; import org.chromium.base.test.util.Criteria; import org.chromium.base.test.util.CriteriaHelper; +import org.chromium.base.test.util.DisabledTest; import org.chromium.content_public.browser.test.util.TestThreadUtils; import org.chromium.weblayer.ActionModeCallback; import org.chromium.weblayer.ActionModeItemType; @@ -266,6 +267,7 @@ @Test @SmallTest @MinWebLayerVersion(88) // Bug fix in 88. + @DisabledTest(message = "crbug.com/1238481") // This is a regression test for https://crbug.com/1075744 . public void testRotationDoesntChangeVisibility() throws Exception { String url = mActivityTestRule.getTestDataURL("rotation.html");