diff --git a/AUTHORS b/AUTHORS index 6a31d5c..dfe36977 100644 --- a/AUTHORS +++ b/AUTHORS
@@ -1051,6 +1051,7 @@ Satoshi Matsuzaki <satoshi.matsuzaki@gmail.com> Satyajit Sahu <satyajit.sahu@amd.com> Sayan Nayak <sayan.nayak@samsung.com> +Sayan Sivakumaran <sivakusayan@gmail.com> Scott D Phillips <scott.d.phillips@intel.com> Sean Bryant <sean@cyberwang.net> Sean DuBois <seaduboi@amazon.com>
diff --git a/DEPS b/DEPS index 981914e..11db529 100644 --- a/DEPS +++ b/DEPS
@@ -297,7 +297,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Skia # and whatever else without interference from each other. - 'skia_revision': 'f347229d264d9d26ba6f25cceaf27091d11741c8', + 'skia_revision': '4407fe6d4442eacb561a41659fceeb1ad97787f8', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. @@ -376,7 +376,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling devtools-frontend # and whatever else without interference from each other. - 'devtools_frontend_revision': '476e4cbacf8ea94495da30bb2f73a5e2134e15c2', + 'devtools_frontend_revision': '1347dd5cd4f855b7a3dd42987a03b16cafc6b93f', # 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. @@ -773,7 +773,7 @@ Var('chromium_git') + '/external/github.com/toji/webvr.info.git' + '@' + 'c58ae99b9ff9e2aa4c524633519570bf33536248', 'src/docs/website': { - 'url': Var('chromium_git') + '/website.git' + '@' + '0945f43c18b49d7530a47acb2e09bdc609155c5d', + 'url': Var('chromium_git') + '/website.git' + '@' + '5e1a404c80aedcb4353772ef8fd8b0cef29cb1ac', }, 'src/ios/third_party/earl_grey2/src': { @@ -873,7 +873,7 @@ 'packages': [ { 'package': 'chromium/rts/model/mac-amd64', - 'version': 'CPhzNoasDtJ45F8bwTLs7lIQDiy-PhdReFmXrlL5FDoC', + 'version': 'wAjyq5GljVRQUzLUcPheVMJNL0033TRDVSO8UkAAsQYC', }, ], 'dep_type': 'cipd', @@ -1156,7 +1156,7 @@ # Tools used when building Chrome for Chrome OS. This affects both the Simple # Chrome workflow, as well as the chromeos-chrome ebuild. 'src/third_party/chromite': { - 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '60350fcfeb0bca00eba2794f53661a1b996a79a5', + 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + 'cdd3bdd509da1f6be93c6f09cf36a282e1062f67', 'condition': 'checkout_chromeos', }, @@ -1754,7 +1754,7 @@ Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + 'e88fcf99da482fb22a3f90e0f74bed85d84e0f99', 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + '082d270b317a0cb56e4325abee0d1e21766f6e4f', + Var('webrtc_git') + '/src.git' + '@' + '08492a199058dce016d31aa30464987198561498', 'src/third_party/libgifcodec': Var('skia_git') + '/libgifcodec' + '@'+ Var('libgifcodec_revision'), @@ -1827,7 +1827,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@6a69e5a4e552509efdadf077f170f90f8e955af0', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@e770ec7d2df709f557748a2aa1ed45db5a21c670', 'condition': 'checkout_src_internal', }, @@ -1868,7 +1868,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/media_app/app', - 'version': 'tV1aN61vvzGiDSJgQxN_namEG8pvO6RTuO-qbQMC51IC', + 'version': 'A3-1ppzoYBXutSEX9YR0gx5MUqLxN2nOZWrqIetQFVYC', }, ], 'condition': 'checkout_chromeos and checkout_src_internal',
diff --git a/ash/ash_interfaces.cc b/ash/ash_interfaces.cc index 284e2110..a5216d0 100644 --- a/ash/ash_interfaces.cc +++ b/ash/ash_interfaces.cc
@@ -13,7 +13,8 @@ namespace ash { void BindCrosDisplayConfigController( - mojo::PendingReceiver<mojom::CrosDisplayConfigController> receiver) { + mojo::PendingReceiver<crosapi::mojom::CrosDisplayConfigController> + receiver) { if (Shell::HasInstance()) Shell::Get()->cros_display_config()->BindReceiver(std::move(receiver)); }
diff --git a/ash/clipboard/clipboard_history_controller_impl.cc b/ash/clipboard/clipboard_history_controller_impl.cc index 46213447..0a62146 100644 --- a/ash/clipboard/clipboard_history_controller_impl.cc +++ b/ash/clipboard/clipboard_history_controller_impl.cc
@@ -671,6 +671,12 @@ // recorded only once. See `ClipboardHistory::OnDataChanged()` for further // explanation. base::RecordAction(base::UserMetricsAction("Ash_Clipboard_CopiedItem")); + } else { + // Pastes from clipboard history are already recorded in + // `PasteMenuItemData()`. Here, we record just pastes from the standard + // clipboard, to see how standard clipboard pastes interleave with + // clipboard history pastes. + base::RecordAction(base::UserMetricsAction("Ash_Clipboard_PastedItem")); } // Verify that this operation did not interleave with a clipboard history
diff --git a/ash/display/cros_display_config.cc b/ash/display/cros_display_config.cc index ce5081e..df1d16f 100644 --- a/ash/display/cros_display_config.cc +++ b/ash/display/cros_display_config.cc
@@ -17,7 +17,6 @@ #include "ash/display/touch_calibrator_controller.h" #include "ash/display/window_tree_host_manager.h" #include "ash/public/cpp/tablet_mode_observer.h" -#include "ash/public/mojom/cros_display_config.mojom.h" #include "ash/shell.h" #include "ash/touch/ash_touch_transform_controller.h" #include "ash/wm/tablet_mode/tablet_mode_controller.h" @@ -76,40 +75,40 @@ return display_manager->GetDisplayForId(display_id); } -mojom::DisplayLayoutPosition GetMojomDisplayLayoutPosition( +crosapi::mojom::DisplayLayoutPosition GetMojomDisplayLayoutPosition( display::DisplayPlacement::Position position) { switch (position) { case display::DisplayPlacement::TOP: - return mojom::DisplayLayoutPosition::kTop; + return crosapi::mojom::DisplayLayoutPosition::kTop; case display::DisplayPlacement::RIGHT: - return mojom::DisplayLayoutPosition::kRight; + return crosapi::mojom::DisplayLayoutPosition::kRight; case display::DisplayPlacement::BOTTOM: - return mojom::DisplayLayoutPosition::kBottom; + return crosapi::mojom::DisplayLayoutPosition::kBottom; case display::DisplayPlacement::LEFT: - return mojom::DisplayLayoutPosition::kLeft; + return crosapi::mojom::DisplayLayoutPosition::kLeft; } NOTREACHED(); - return mojom::DisplayLayoutPosition::kLeft; + return crosapi::mojom::DisplayLayoutPosition::kLeft; } display::DisplayPlacement::Position GetDisplayPlacementPosition( - mojom::DisplayLayoutPosition position) { + crosapi::mojom::DisplayLayoutPosition position) { switch (position) { - case mojom::DisplayLayoutPosition::kTop: + case crosapi::mojom::DisplayLayoutPosition::kTop: return display::DisplayPlacement::TOP; - case mojom::DisplayLayoutPosition::kRight: + case crosapi::mojom::DisplayLayoutPosition::kRight: return display::DisplayPlacement::RIGHT; - case mojom::DisplayLayoutPosition::kBottom: + case crosapi::mojom::DisplayLayoutPosition::kBottom: return display::DisplayPlacement::BOTTOM; - case mojom::DisplayLayoutPosition::kLeft: + case crosapi::mojom::DisplayLayoutPosition::kLeft: return display::DisplayPlacement::LEFT; } NOTREACHED(); return display::DisplayPlacement::LEFT; } -std::vector<mojom::DisplayLayoutPtr> GetDisplayLayouts() { - auto layouts = std::vector<mojom::DisplayLayoutPtr>(); +std::vector<crosapi::mojom::DisplayLayoutPtr> GetDisplayLayouts() { + auto layouts = std::vector<crosapi::mojom::DisplayLayoutPtr>(); display::Screen* screen = display::Screen::GetScreen(); const std::vector<display::Display>& displays = screen->GetAllDisplays(); display::DisplayManager* display_manager = GetDisplayManager(); @@ -119,7 +118,7 @@ display.id()); if (placement.display_id == display::kInvalidDisplayId) continue; - auto layout = mojom::DisplayLayout::New(); + auto layout = crosapi::mojom::DisplayLayout::New(); layout->id = base::NumberToString(placement.display_id); layout->parent_id = base::NumberToString(placement.parent_display_id); layout->position = GetMojomDisplayLayoutPosition(placement.position); @@ -129,8 +128,8 @@ return layouts; } -std::vector<mojom::DisplayLayoutPtr> GetDisplayUnifiedLayouts() { - auto layouts = std::vector<mojom::DisplayLayoutPtr>(); +std::vector<crosapi::mojom::DisplayLayoutPtr> GetDisplayUnifiedLayouts() { + auto layouts = std::vector<crosapi::mojom::DisplayLayoutPtr>(); display::DisplayManager* display_manager = GetDisplayManager(); const display::UnifiedDesktopLayoutMatrix& matrix = @@ -142,7 +141,7 @@ // No placement for the primary display. continue; } - auto layout = mojom::DisplayLayout::New(); + auto layout = crosapi::mojom::DisplayLayout::New(); const int64_t display_id = row[column_index]; // Parent display is either the one in the above row, or the one on the // left in the same row. @@ -152,8 +151,8 @@ layout->id = base::NumberToString(display_id); layout->parent_id = base::NumberToString(parent_id); layout->position = column_index == 0 - ? mojom::DisplayLayoutPosition::kBottom - : mojom::DisplayLayoutPosition::kRight; + ? crosapi::mojom::DisplayLayoutPosition::kBottom + : crosapi::mojom::DisplayLayoutPosition::kRight; layout->offset = 0; layouts.emplace_back(std::move(layout)); } @@ -161,43 +160,43 @@ return layouts; } -mojom::DisplayConfigResult SetDisplayLayoutMode( - const mojom::DisplayLayoutInfo& info) { +crosapi::mojom::DisplayConfigResult SetDisplayLayoutMode( + const crosapi::mojom::DisplayLayoutInfo& info) { display::DisplayManager* display_manager = GetDisplayManager(); - if (info.layout_mode == mojom::DisplayLayoutMode::kNormal) { + if (info.layout_mode == crosapi::mojom::DisplayLayoutMode::kNormal) { display_manager->SetDefaultMultiDisplayModeForCurrentDisplays( display::DisplayManager::EXTENDED); display_manager->SetMirrorMode(display::MirrorMode::kOff, absl::nullopt); - return mojom::DisplayConfigResult::kSuccess; + return crosapi::mojom::DisplayConfigResult::kSuccess; } - if (info.layout_mode == mojom::DisplayLayoutMode::kUnified) { + if (info.layout_mode == crosapi::mojom::DisplayLayoutMode::kUnified) { if (!display_manager->unified_desktop_enabled()) - return mojom::DisplayConfigResult::kUnifiedNotEnabledError; + return crosapi::mojom::DisplayConfigResult::kUnifiedNotEnabledError; display_manager->SetDefaultMultiDisplayModeForCurrentDisplays( display::DisplayManager::UNIFIED); display_manager->SetMirrorMode(display::MirrorMode::kOff, absl::nullopt); - return mojom::DisplayConfigResult::kSuccess; + return crosapi::mojom::DisplayConfigResult::kSuccess; } - DCHECK(info.layout_mode == mojom::DisplayLayoutMode::kMirrored); + DCHECK(info.layout_mode == crosapi::mojom::DisplayLayoutMode::kMirrored); // 'Normal' mirror mode. if (!info.mirror_source_id) { display_manager->SetMirrorMode(display::MirrorMode::kNormal, absl::nullopt); - return mojom::DisplayConfigResult::kSuccess; + return crosapi::mojom::DisplayConfigResult::kSuccess; } // 'Mixed' mirror mode. display::Display source = GetDisplay(*info.mirror_source_id); if (source.id() == display::kInvalidDisplayId) - return mojom::DisplayConfigResult::kMirrorModeSourceIdError; + return crosapi::mojom::DisplayConfigResult::kMirrorModeSourceIdError; display::DisplayIdList destination_ids; if (info.mirror_destination_ids) { for (const std::string& id_str : *info.mirror_destination_ids) { int64_t destination_id = GetDisplayId(id_str); if (destination_id == display::kInvalidDisplayId) - return mojom::DisplayConfigResult::kMirrorModeDestIdError; + return crosapi::mojom::DisplayConfigResult::kMirrorModeDestIdError; destination_ids.emplace_back(destination_id); } } else { @@ -213,24 +212,24 @@ display_manager->GetConnectedDisplayIdList(), *mixed_params); switch (error_type) { case display::MixedMirrorModeParamsErrors::kErrorSingleDisplay: - return mojom::DisplayConfigResult::kMirrorModeSingleDisplayError; + return crosapi::mojom::DisplayConfigResult::kMirrorModeSingleDisplayError; case display::MixedMirrorModeParamsErrors::kErrorSourceIdNotFound: - return mojom::DisplayConfigResult::kMirrorModeSourceIdError; + return crosapi::mojom::DisplayConfigResult::kMirrorModeSourceIdError; case display::MixedMirrorModeParamsErrors::kErrorDestinationIdsEmpty: case display::MixedMirrorModeParamsErrors::kErrorDestinationIdNotFound: case display::MixedMirrorModeParamsErrors::kErrorDuplicateId: - return mojom::DisplayConfigResult::kMirrorModeDestIdError; + return crosapi::mojom::DisplayConfigResult::kMirrorModeDestIdError; case display::MixedMirrorModeParamsErrors::kSuccess: break; } display_manager->SetMirrorMode(display::MirrorMode::kMixed, mixed_params); - return mojom::DisplayConfigResult::kSuccess; + return crosapi::mojom::DisplayConfigResult::kSuccess; } -mojom::DisplayModePtr GetDisplayMode( +crosapi::mojom::DisplayModePtr GetDisplayMode( const display::ManagedDisplayInfo& display_info, const display::ManagedDisplayMode& display_mode) { - auto result = mojom::DisplayMode::New(); + auto result = crosapi::mojom::DisplayMode::New(); gfx::Size size_dip = display_mode.GetSizeInDIP(); result->size = size_dip; result->size_in_native_pixels = display_mode.size(); @@ -242,26 +241,26 @@ } display::Display::Rotation DisplayRotationFromRotationOptions( - mojom::DisplayRotationOptions option) { + crosapi::mojom::DisplayRotationOptions option) { switch (option) { - case mojom::DisplayRotationOptions::kAutoRotate: + case crosapi::mojom::DisplayRotationOptions::kAutoRotate: return display::Display::ROTATE_0; - case mojom::DisplayRotationOptions::kZeroDegrees: + case crosapi::mojom::DisplayRotationOptions::kZeroDegrees: return display::Display::ROTATE_0; - case mojom::DisplayRotationOptions::k90Degrees: + case crosapi::mojom::DisplayRotationOptions::k90Degrees: return display::Display::ROTATE_90; - case mojom::DisplayRotationOptions::k180Degrees: + case crosapi::mojom::DisplayRotationOptions::k180Degrees: return display::Display::ROTATE_180; - case mojom::DisplayRotationOptions::k270Degrees: + case crosapi::mojom::DisplayRotationOptions::k270Degrees: return display::Display::ROTATE_270; } } -mojom::DisplayRotationOptions RotationOptionsFromDisplayRotation( +crosapi::mojom::DisplayRotationOptions RotationOptionsFromDisplayRotation( display::Display::Rotation rotation) { auto* screen_orientation_controller = Shell::Get()->screen_orientation_controller(); @@ -270,30 +269,31 @@ const bool is_auto_rotate_enabled = !screen_orientation_controller->user_rotation_locked(); if (is_auto_rotation_allowed && is_auto_rotate_enabled) - return mojom::DisplayRotationOptions::kAutoRotate; + return crosapi::mojom::DisplayRotationOptions::kAutoRotate; switch (rotation) { case display::Display::ROTATE_0: - return mojom::DisplayRotationOptions::kZeroDegrees; + return crosapi::mojom::DisplayRotationOptions::kZeroDegrees; case display::Display::ROTATE_90: - return mojom::DisplayRotationOptions::k90Degrees; + return crosapi::mojom::DisplayRotationOptions::k90Degrees; case display::Display::ROTATE_180: - return mojom::DisplayRotationOptions::k180Degrees; + return crosapi::mojom::DisplayRotationOptions::k180Degrees; case display::Display::ROTATE_270: - return mojom::DisplayRotationOptions::k270Degrees; + return crosapi::mojom::DisplayRotationOptions::k270Degrees; } } -mojom::DisplayUnitInfoPtr GetDisplayUnitInfo(const display::Display& display, - int64_t primary_id) { +crosapi::mojom::DisplayUnitInfoPtr GetDisplayUnitInfo( + const display::Display& display, + int64_t primary_id) { display::DisplayManager* display_manager = GetDisplayManager(); const display::ManagedDisplayInfo& display_info = display_manager->GetDisplayInfo(display.id()); - auto info = mojom::DisplayUnitInfo::New(); + auto info = crosapi::mojom::DisplayUnitInfo::New(); info->id = base::NumberToString(display.id()); info->name = display_manager->GetDisplayNameForId(display.id()); @@ -301,7 +301,7 @@ !display_info.product_id().empty() || (display_info.year_of_manufacture() != display::kInvalidYearOfManufacture)) { - info->edid = mojom::Edid::New(); + info->edid = crosapi::mojom::Edid::New(); info->edid->manufacturer_id = display_info.manufacturer_id(); info->edid->product_id = display_info.product_id(); info->edid->year_of_manufacture = display_info.year_of_manufacture(); @@ -359,25 +359,26 @@ // Validates that DisplayProperties are valid with the current DisplayManager // configuration. Returns an error on failure. -mojom::DisplayConfigResult ValidateDisplayProperties( - const mojom::DisplayConfigProperties& properties, +crosapi::mojom::DisplayConfigResult ValidateDisplayProperties( + const crosapi::mojom::DisplayConfigProperties& properties, const display::Display& display) { display::DisplayManager* display_manager = GetDisplayManager(); int64_t id = display.id(); if (id == display::kInvalidDisplayId) - return mojom::DisplayConfigResult::kInvalidDisplayIdError; + return crosapi::mojom::DisplayConfigResult::kInvalidDisplayIdError; // Overscan cannot be changed for the internal display, and should be at most // half of the screen size. if (properties.overscan) { if (display.IsInternal()) - return mojom::DisplayConfigResult::kNotSupportedOnInternalDisplayError; + return crosapi::mojom::DisplayConfigResult:: + kNotSupportedOnInternalDisplayError; if (properties.overscan->left() < 0 || properties.overscan->top() < 0 || properties.overscan->right() < 0 || properties.overscan->bottom() < 0) { DLOG(ERROR) << "Negative overscan"; - return mojom::DisplayConfigResult::kPropertyValueOutOfRangeError; + return crosapi::mojom::DisplayConfigResult::kPropertyValueOutOfRangeError; } const gfx::Insets overscan = display_manager->GetOverscanInsets(id); @@ -391,7 +392,7 @@ DLOG(ERROR) << "Overscan: " << properties.overscan->ToString() << " exceeds bounds: " << screen_width << "x" << screen_height; - return mojom::DisplayConfigResult::kPropertyValueOutOfRangeError; + return crosapi::mojom::DisplayConfigResult::kPropertyValueOutOfRangeError; } } @@ -401,13 +402,14 @@ const display::Display& primary = display::Screen::GetScreen()->GetPrimaryDisplay(); if (id == primary.id() || properties.set_primary) - return mojom::DisplayConfigResult::kNotSupportedOnInternalDisplayError; + return crosapi::mojom::DisplayConfigResult:: + kNotSupportedOnInternalDisplayError; if (properties.bounds_origin->x() > kMaxBoundsOrigin || properties.bounds_origin->x() < -kMaxBoundsOrigin || properties.bounds_origin->y() > kMaxBoundsOrigin || properties.bounds_origin->y() < -kMaxBoundsOrigin) { DLOG(ERROR) << "Bounds origin out of range"; - return mojom::DisplayConfigResult::kPropertyValueOutOfRangeError; + return crosapi::mojom::DisplayConfigResult::kPropertyValueOutOfRangeError; } } @@ -415,7 +417,7 @@ display::ManagedDisplayMode current_mode; if (!display_manager->GetActiveModeForDisplayId(id, ¤t_mode)) { DLOG(ERROR) << "No active mode for display: " << id; - return mojom::DisplayConfigResult::kInvalidDisplayIdError; + return crosapi::mojom::DisplayConfigResult::kInvalidDisplayIdError; } // This check is added to limit the range of display zoom that can be // applied via the system display API. The said range is such that when a @@ -432,11 +434,11 @@ if (current_width / properties.display_zoom_factor > max_allowed_width || current_width / properties.display_zoom_factor < min_allowed_width) { DLOG(ERROR) << "Display zoom factor out of range"; - return mojom::DisplayConfigResult::kPropertyValueOutOfRangeError; + return crosapi::mojom::DisplayConfigResult::kPropertyValueOutOfRangeError; } } - return mojom::DisplayConfigResult::kSuccess; + return crosapi::mojom::DisplayConfigResult::kSuccess; } // Sets the display layout for the target display in reference to the primary @@ -460,15 +462,15 @@ } // Attempts to set the display mode for display |id|. -mojom::DisplayConfigResult SetDisplayMode( +crosapi::mojom::DisplayConfigResult SetDisplayMode( int64_t id, - const mojom::DisplayMode& display_mode, - mojom::DisplayConfigSource source) { + const crosapi::mojom::DisplayMode& display_mode, + crosapi::mojom::DisplayConfigSource source) { display::DisplayManager* display_manager = GetDisplayManager(); display::ManagedDisplayMode current_mode; if (!display_manager->GetActiveModeForDisplayId(id, ¤t_mode)) - return mojom::DisplayConfigResult::kInvalidDisplayIdError; + return crosapi::mojom::DisplayConfigResult::kInvalidDisplayIdError; display::ManagedDisplayMode new_mode( display_mode.size_in_native_pixels, display_mode.refresh_rate, @@ -487,15 +489,15 @@ id, current_mode, new_mode, source, base::BindOnce([]() { Shell::Get()->display_prefs()->MaybeStoreDisplayPrefs(); }))) { - return mojom::DisplayConfigResult::kSetDisplayModeError; + return crosapi::mojom::DisplayConfigResult::kSetDisplayModeError; } } - return mojom::DisplayConfigResult::kSuccess; + return crosapi::mojom::DisplayConfigResult::kSuccess; } display::TouchCalibrationData::CalibrationPointPair GetCalibrationPair( - const mojom::TouchCalibrationPair& pair) { + const crosapi::mojom::TouchCalibrationPair& pair) { return std::make_pair(pair.display_point, pair.touch_point); } @@ -526,10 +528,11 @@ } void AddObserver( - mojo::PendingAssociatedRemote<mojom::CrosDisplayConfigObserver> + mojo::PendingAssociatedRemote<crosapi::mojom::CrosDisplayConfigObserver> observer) { - observers_.Add(mojo::AssociatedRemote<mojom::CrosDisplayConfigObserver>( - std::move(observer))); + observers_.Add( + mojo::AssociatedRemote<crosapi::mojom::CrosDisplayConfigObserver>( + std::move(observer))); } // display::DisplayObserver: @@ -562,7 +565,8 @@ observer->OnDisplayConfigChanged(); } - mojo::AssociatedRemoteSet<mojom::CrosDisplayConfigObserver> observers_; + mojo::AssociatedRemoteSet<crosapi::mojom::CrosDisplayConfigObserver> + observers_; display::ScopedDisplayObserver display_observer_{this}; }; @@ -575,12 +579,14 @@ CrosDisplayConfig::~CrosDisplayConfig() = default; void CrosDisplayConfig::BindReceiver( - mojo::PendingReceiver<mojom::CrosDisplayConfigController> receiver) { + mojo::PendingReceiver<crosapi::mojom::CrosDisplayConfigController> + receiver) { receivers_.Add(this, std::move(receiver)); } void CrosDisplayConfig::AddObserver( - mojo::PendingAssociatedRemote<mojom::CrosDisplayConfigObserver> observer) { + mojo::PendingAssociatedRemote<crosapi::mojom::CrosDisplayConfigObserver> + observer) { observer_impl_->AddObserver(std::move(observer)); } @@ -588,18 +594,18 @@ GetDisplayLayoutInfoCallback callback) { display::DisplayManager* display_manager = GetDisplayManager(); - auto info = mojom::DisplayLayoutInfo::New(); + auto info = crosapi::mojom::DisplayLayoutInfo::New(); if (display_manager->IsInUnifiedMode()) { - info->layout_mode = mojom::DisplayLayoutMode::kUnified; + info->layout_mode = crosapi::mojom::DisplayLayoutMode::kUnified; } else if (display_manager->IsInMirrorMode()) { - info->layout_mode = mojom::DisplayLayoutMode::kMirrored; + info->layout_mode = crosapi::mojom::DisplayLayoutMode::kMirrored; info->mirror_source_id = base::NumberToString(display_manager->mirroring_source_id()); info->mirror_destination_ids = std::vector<std::string>(); for (int64_t id : display_manager->GetMirroringDestinationDisplayIdList()) info->mirror_destination_ids->emplace_back(base::NumberToString(id)); } else { - info->layout_mode = mojom::DisplayLayoutMode::kNormal; + info->layout_mode = crosapi::mojom::DisplayLayoutMode::kNormal; } if (display_manager->IsInUnifiedMode()) { @@ -611,26 +617,26 @@ std::move(callback).Run(std::move(info)); } -mojom::DisplayConfigResult SetDisplayLayouts( - const std::vector<mojom::DisplayLayoutPtr>& layouts) { +crosapi::mojom::DisplayConfigResult SetDisplayLayouts( + const std::vector<crosapi::mojom::DisplayLayoutPtr>& layouts) { display::DisplayManager* display_manager = GetDisplayManager(); display::DisplayLayoutBuilder builder( display_manager->GetCurrentResolvedDisplayLayout()); int64_t root_id = display::kInvalidDisplayId; std::set<int64_t> layout_ids; builder.ClearPlacements(); - for (const mojom::DisplayLayoutPtr& layout_ptr : layouts) { - const mojom::DisplayLayout& layout = *layout_ptr; + for (const crosapi::mojom::DisplayLayoutPtr& layout_ptr : layouts) { + const crosapi::mojom::DisplayLayout& layout = *layout_ptr; display::Display display = GetDisplay(layout.id); if (display.id() == display::kInvalidDisplayId) { LOG(ERROR) << "Display layout has invalid id: " << layout.id; - return mojom::DisplayConfigResult::kInvalidDisplayIdError; + return crosapi::mojom::DisplayConfigResult::kInvalidDisplayIdError; } display::Display parent = GetDisplay(layout.parent_id); if (parent.id() == display::kInvalidDisplayId) { if (root_id != display::kInvalidDisplayId) { LOG(ERROR) << "Display layout has invalid parent: " << layout.parent_id; - return mojom::DisplayConfigResult::kInvalidDisplayLayoutError; + return crosapi::mojom::DisplayConfigResult::kInvalidDisplayLayoutError; } root_id = display.id(); continue; // No placement for root (primary) display. @@ -656,50 +662,50 @@ } if (root_id == display::kInvalidDisplayId) { LOG(ERROR) << "Invalid unified layout: No root id"; - return mojom::DisplayConfigResult::kInvalidDisplayLayoutError; + return crosapi::mojom::DisplayConfigResult::kInvalidDisplayLayoutError; } } layout->primary_id = root_id; display::UnifiedDesktopLayoutMatrix matrix; if (!display::BuildUnifiedDesktopMatrix(display_ids, *layout, &matrix)) { LOG(ERROR) << "Invalid unified layout: No proper conversion to a matrix"; - return mojom::DisplayConfigResult::kInvalidDisplayLayoutError; + return crosapi::mojom::DisplayConfigResult::kInvalidDisplayLayoutError; } Shell::Get() ->display_configuration_controller() ->SetUnifiedDesktopLayoutMatrix(matrix); } else { if (!display::DisplayLayout::Validate(display_ids, *layout)) { - return mojom::DisplayConfigResult::kInvalidDisplayLayoutError; + return crosapi::mojom::DisplayConfigResult::kInvalidDisplayLayoutError; } Shell::Get()->display_configuration_controller()->SetDisplayLayout( std::move(layout)); } - return mojom::DisplayConfigResult::kSuccess; + return crosapi::mojom::DisplayConfigResult::kSuccess; } void CrosDisplayConfig::SetDisplayLayoutInfo( - mojom::DisplayLayoutInfoPtr info, + crosapi::mojom::DisplayLayoutInfoPtr info, SetDisplayLayoutInfoCallback callback) { - mojom::DisplayConfigResult result = SetDisplayLayoutMode(*info); - if (result != mojom::DisplayConfigResult::kSuccess) { + crosapi::mojom::DisplayConfigResult result = SetDisplayLayoutMode(*info); + if (result != crosapi::mojom::DisplayConfigResult::kSuccess) { std::move(callback).Run(result); return; } if (info->layouts) { result = SetDisplayLayouts(*info->layouts); - if (result != mojom::DisplayConfigResult::kSuccess) { + if (result != crosapi::mojom::DisplayConfigResult::kSuccess) { std::move(callback).Run(result); return; } } - std::move(callback).Run(mojom::DisplayConfigResult::kSuccess); + std::move(callback).Run(crosapi::mojom::DisplayConfigResult::kSuccess); } void CrosDisplayConfig::GetDisplayUnitInfoList( bool single_unified, GetDisplayUnitInfoListCallback callback) { - std::vector<mojom::DisplayUnitInfoPtr> info_list; + std::vector<crosapi::mojom::DisplayUnitInfoPtr> info_list; display::DisplayManager* display_manager = GetDisplayManager(); std::vector<display::Display> displays; @@ -726,13 +732,13 @@ void CrosDisplayConfig::SetDisplayProperties( const std::string& id, - mojom::DisplayConfigPropertiesPtr properties, - mojom::DisplayConfigSource source, + crosapi::mojom::DisplayConfigPropertiesPtr properties, + crosapi::mojom::DisplayConfigSource source, SetDisplayPropertiesCallback callback) { const display::Display display = GetDisplay(id); - mojom::DisplayConfigResult result = + crosapi::mojom::DisplayConfigResult result = ValidateDisplayProperties(*properties, display); - if (result != mojom::DisplayConfigResult::kSuccess) { + if (result != crosapi::mojom::DisplayConfigResult::kSuccess) { std::move(callback).Run(result); return; } @@ -752,14 +758,14 @@ display_manager->SetOverscanInsets(display.id(), *properties->overscan); if (properties->rotation) { - const mojom::DisplayRotationOptions rotation_options = + const crosapi::mojom::DisplayRotationOptions rotation_options = properties->rotation->rotation; auto* screen_orientation_controller = Shell::Get()->screen_orientation_controller(); const bool is_auto_rotation_allowed = screen_orientation_controller->IsAutoRotationAllowed(); const bool auto_rotate_requested = - rotation_options == mojom::DisplayRotationOptions::kAutoRotate; + rotation_options == crosapi::mojom::DisplayRotationOptions::kAutoRotate; if (auto_rotate_requested && !is_auto_rotation_allowed) { LOG(ERROR) << "Auto-rotate is supported when the device is in physical " << "tablet state or kSupportsClamshellAutoRotation is set. " @@ -802,13 +808,13 @@ // before applying any properties. if (properties->display_mode) { result = SetDisplayMode(display.id(), *properties->display_mode, source); - if (result != mojom::DisplayConfigResult::kSuccess) { + if (result != crosapi::mojom::DisplayConfigResult::kSuccess) { std::move(callback).Run(result); return; } } - std::move(callback).Run(mojom::DisplayConfigResult::kSuccess); + std::move(callback).Run(crosapi::mojom::DisplayConfigResult::kSuccess); } void CrosDisplayConfig::SetUnifiedDesktopEnabled(bool enabled) { @@ -817,24 +823,25 @@ void CrosDisplayConfig::OverscanCalibration( const std::string& display_id, - mojom::DisplayConfigOperation op, + crosapi::mojom::DisplayConfigOperation op, const absl::optional<gfx::Insets>& delta, OverscanCalibrationCallback callback) { display::Display display = GetDisplay(display_id); if (display.id() == display::kInvalidDisplayId) { - std::move(callback).Run(mojom::DisplayConfigResult::kInvalidDisplayIdError); + std::move(callback).Run( + crosapi::mojom::DisplayConfigResult::kInvalidDisplayIdError); return; } OverscanCalibrator* calibrator = GetOverscanCalibrator(display_id); - if (!calibrator && op != mojom::DisplayConfigOperation::kStart) { + if (!calibrator && op != crosapi::mojom::DisplayConfigOperation::kStart) { LOG(ERROR) << "Calibrator does not exist for op=" << op; std::move(callback).Run( - mojom::DisplayConfigResult::kCalibrationNotAvailableError); + crosapi::mojom::DisplayConfigResult::kCalibrationNotAvailableError); return; } switch (op) { - case mojom::DisplayConfigOperation::kStart: { + case crosapi::mojom::DisplayConfigOperation::kStart: { DVLOG(1) << "OverscanCalibrationStart: " << display_id; gfx::Insets insets = Shell::Get()->window_tree_host_manager()->GetOverscanInsets( @@ -845,69 +852,71 @@ std::make_unique<OverscanCalibrator>(display, insets); break; } - case mojom::DisplayConfigOperation::kAdjust: + case crosapi::mojom::DisplayConfigOperation::kAdjust: DVLOG(1) << "OverscanCalibrationAdjust: " << display_id; if (!delta) { LOG(ERROR) << "Delta not provided for for adjust: " << display_id; std::move(callback).Run( - mojom::DisplayConfigResult::kCalibrationFailedError); + crosapi::mojom::DisplayConfigResult::kCalibrationFailedError); return; } calibrator->UpdateInsets(calibrator->insets() + *delta); break; - case mojom::DisplayConfigOperation::kReset: + case crosapi::mojom::DisplayConfigOperation::kReset: DVLOG(1) << "OverscanCalibrationReset: " << display_id; calibrator->Reset(); break; - case mojom::DisplayConfigOperation::kComplete: + case crosapi::mojom::DisplayConfigOperation::kComplete: DVLOG(1) << "OverscanCalibrationComplete: " << display_id; calibrator->Commit(); overscan_calibrators_[display_id].reset(); break; - case mojom::DisplayConfigOperation::kShowNative: + case crosapi::mojom::DisplayConfigOperation::kShowNative: LOG(ERROR) << "Operation not supported: " << op; std::move(callback).Run( - mojom::DisplayConfigResult::kInvalidOperationError); + crosapi::mojom::DisplayConfigResult::kInvalidOperationError); return; } - std::move(callback).Run(mojom::DisplayConfigResult::kSuccess); + std::move(callback).Run(crosapi::mojom::DisplayConfigResult::kSuccess); } -void CrosDisplayConfig::TouchCalibration(const std::string& display_id, - mojom::DisplayConfigOperation op, - mojom::TouchCalibrationPtr calibration, - TouchCalibrationCallback callback) { +void CrosDisplayConfig::TouchCalibration( + const std::string& display_id, + crosapi::mojom::DisplayConfigOperation op, + crosapi::mojom::TouchCalibrationPtr calibration, + TouchCalibrationCallback callback) { display::Display display = GetDisplay(display_id); if (display.id() == display::kInvalidDisplayId) { - std::move(callback).Run(mojom::DisplayConfigResult::kInvalidDisplayIdError); + std::move(callback).Run( + crosapi::mojom::DisplayConfigResult::kInvalidDisplayIdError); return; } if (display.IsInternal()) { LOG(ERROR) << "Internal display cannot be calibrated for touch: " << display_id; std::move(callback).Run( - mojom::DisplayConfigResult::kCalibrationNotAvailableError); + crosapi::mojom::DisplayConfigResult::kCalibrationNotAvailableError); return; } if (!display::HasExternalTouchscreenDevice()) { LOG(ERROR) << "Touch calibration called with no external touch screen device."; std::move(callback).Run( - mojom::DisplayConfigResult::kCalibrationNotAvailableError); + crosapi::mojom::DisplayConfigResult::kCalibrationNotAvailableError); return; } - if (op == mojom::DisplayConfigOperation::kStart || - op == mojom::DisplayConfigOperation::kShowNative) { + if (op == crosapi::mojom::DisplayConfigOperation::kStart || + op == crosapi::mojom::DisplayConfigOperation::kShowNative) { if (touch_calibrator_ && touch_calibrator_->IsCalibrating()) { LOG(ERROR) << "Touch calibration already active."; std::move(callback).Run( - mojom::DisplayConfigResult::kCalibrationInProgressError); + crosapi::mojom::DisplayConfigResult::kCalibrationInProgressError); return; } if (!touch_calibrator_) touch_calibrator_ = std::make_unique<TouchCalibratorController>(); - if (op == mojom::DisplayConfigOperation::kShowNative) { + if (op == crosapi::mojom::DisplayConfigOperation::kShowNative) { // For native calibration, |callback| is not run until calibration // completes. touch_calibrator_->StartCalibration( @@ -915,9 +924,9 @@ base::BindOnce( [](TouchCalibrationCallback callback, bool result) { std::move(callback).Run( - result - ? mojom::DisplayConfigResult::kSuccess - : mojom::DisplayConfigResult::kCalibrationFailedError); + result ? crosapi::mojom::DisplayConfigResult::kSuccess + : crosapi::mojom::DisplayConfigResult:: + kCalibrationFailedError); }, std::move(callback))); return; @@ -925,35 +934,35 @@ // For custom calibration, start calibration and run |callback| now. touch_calibrator_->StartCalibration(display, /*is_custom_calibration=*/true, base::OnceCallback<void(bool)>()); - std::move(callback).Run(mojom::DisplayConfigResult::kSuccess); + std::move(callback).Run(crosapi::mojom::DisplayConfigResult::kSuccess); return; } - if (op == mojom::DisplayConfigOperation::kReset) { + if (op == crosapi::mojom::DisplayConfigOperation::kReset) { Shell::Get()->display_manager()->ClearTouchCalibrationData(display.id(), absl::nullopt); - std::move(callback).Run(mojom::DisplayConfigResult::kSuccess); + std::move(callback).Run(crosapi::mojom::DisplayConfigResult::kSuccess); return; } - if (op != mojom::DisplayConfigOperation::kComplete) { + if (op != crosapi::mojom::DisplayConfigOperation::kComplete) { LOG(ERROR) << "Unknown operation: " << op; std::move(callback).Run( - mojom::DisplayConfigResult::kCalibrationNotStartedError); + crosapi::mojom::DisplayConfigResult::kCalibrationNotStartedError); return; } if (!touch_calibrator_) { LOG(ERROR) << "Touch calibration not active."; std::move(callback).Run( - mojom::DisplayConfigResult::kCalibrationNotStartedError); + crosapi::mojom::DisplayConfigResult::kCalibrationNotStartedError); return; } if (!calibration || calibration->pairs.size() != 4) { LOG(ERROR) << "Touch calibration requires four calibration pairs."; std::move(callback).Run( - mojom::DisplayConfigResult::kCalibrationInvalidDataError); + crosapi::mojom::DisplayConfigResult::kCalibrationInvalidDataError); return; } @@ -976,7 +985,7 @@ << "Display points and touch points cannot have negative coordinates"; touch_calibrator_->StopCalibrationAndResetParams(); std::move(callback).Run( - mojom::DisplayConfigResult::kCalibrationInvalidDataError); + crosapi::mojom::DisplayConfigResult::kCalibrationInvalidDataError); return; } // Coordinates for display points cannot be greater than the screen @@ -987,13 +996,13 @@ "display."; touch_calibrator_->StopCalibrationAndResetParams(); std::move(callback).Run( - mojom::DisplayConfigResult::kCalibrationInvalidDataError); + crosapi::mojom::DisplayConfigResult::kCalibrationInvalidDataError); return; } } touch_calibrator_->CompleteCalibration(calibration_points, bounds); - std::move(callback).Run(mojom::DisplayConfigResult::kSuccess); + std::move(callback).Run(crosapi::mojom::DisplayConfigResult::kSuccess); } OverscanCalibrator* CrosDisplayConfig::GetOverscanCalibrator(
diff --git a/ash/display/cros_display_config.h b/ash/display/cros_display_config.h index 12e3bf8..3744544 100644 --- a/ash/display/cros_display_config.h +++ b/ash/display/cros_display_config.h
@@ -10,7 +10,7 @@ #include <string> #include "ash/ash_export.h" -#include "ash/public/mojom/cros_display_config.mojom.h" +#include "chromeos/crosapi/mojom/cros_display_config.mojom.h" #include "mojo/public/cpp/bindings/pending_associated_remote.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/receiver_set.h" @@ -22,7 +22,8 @@ class TouchCalibratorController; // ASH_EXPORT for use in chrome unit_tests for DisplayInfoProviderChromeOS. -class ASH_EXPORT CrosDisplayConfig : public mojom::CrosDisplayConfigController { +class ASH_EXPORT CrosDisplayConfig + : public crosapi::mojom::CrosDisplayConfigController { public: CrosDisplayConfig(); @@ -32,29 +33,31 @@ ~CrosDisplayConfig() override; void BindReceiver( - mojo::PendingReceiver<mojom::CrosDisplayConfigController> receiver); + mojo::PendingReceiver<crosapi::mojom::CrosDisplayConfigController> + receiver); - // mojom::CrosDisplayConfigController: + // crosapi::mojom::CrosDisplayConfigController: void AddObserver( - mojo::PendingAssociatedRemote<mojom::CrosDisplayConfigObserver> observer) - override; + mojo::PendingAssociatedRemote<crosapi::mojom::CrosDisplayConfigObserver> + observer) override; void GetDisplayLayoutInfo(GetDisplayLayoutInfoCallback callback) override; - void SetDisplayLayoutInfo(mojom::DisplayLayoutInfoPtr info, + void SetDisplayLayoutInfo(crosapi::mojom::DisplayLayoutInfoPtr info, SetDisplayLayoutInfoCallback callback) override; void GetDisplayUnitInfoList(bool single_unified, GetDisplayUnitInfoListCallback callback) override; - void SetDisplayProperties(const std::string& id, - mojom::DisplayConfigPropertiesPtr properties, - mojom::DisplayConfigSource source, - SetDisplayPropertiesCallback callback) override; + void SetDisplayProperties( + const std::string& id, + crosapi::mojom::DisplayConfigPropertiesPtr properties, + crosapi::mojom::DisplayConfigSource source, + SetDisplayPropertiesCallback callback) override; void SetUnifiedDesktopEnabled(bool enabled) override; void OverscanCalibration(const std::string& display_id, - mojom::DisplayConfigOperation op, + crosapi::mojom::DisplayConfigOperation op, const absl::optional<gfx::Insets>& delta, OverscanCalibrationCallback callback) override; void TouchCalibration(const std::string& display_id, - mojom::DisplayConfigOperation op, - mojom::TouchCalibrationPtr calibration, + crosapi::mojom::DisplayConfigOperation op, + crosapi::mojom::TouchCalibrationPtr calibration, TouchCalibrationCallback callback) override; void HighlightDisplay(int64_t display_id) override; void DragDisplayDelta(int64_t display_id, @@ -72,7 +75,7 @@ OverscanCalibrator* GetOverscanCalibrator(const std::string& id); std::unique_ptr<ObserverImpl> observer_impl_; - mojo::ReceiverSet<mojom::CrosDisplayConfigController> receivers_; + mojo::ReceiverSet<crosapi::mojom::CrosDisplayConfigController> receivers_; std::map<std::string, std::unique_ptr<OverscanCalibrator>> overscan_calibrators_; std::unique_ptr<TouchCalibratorController> touch_calibrator_;
diff --git a/ash/display/cros_display_config_unittest.cc b/ash/display/cros_display_config_unittest.cc index 9ca5b493a..060557d 100644 --- a/ash/display/cros_display_config_unittest.cc +++ b/ash/display/cros_display_config_unittest.cc
@@ -10,7 +10,6 @@ #include "ash/display/screen_orientation_controller.h" #include "ash/display/screen_orientation_controller_test_api.h" #include "ash/display/touch_calibrator_controller.h" -#include "ash/public/mojom/cros_display_config.mojom.h" #include "ash/shell.h" #include "ash/test/ash_test_base.h" #include "ash/touch/ash_touch_transform_controller.h" @@ -20,6 +19,7 @@ #include "base/containers/contains.h" #include "base/strings/string_number_conversions.h" #include "base/test/scoped_feature_list.h" +#include "chromeos/crosapi/mojom/cros_display_config.mojom.h" #include "mojo/public/cpp/bindings/associated_receiver.h" #include "mojo/public/cpp/bindings/associated_remote.h" #include "ui/display/display_switches.h" @@ -35,9 +35,9 @@ namespace { -void SetResult(mojom::DisplayConfigResult* result_ptr, +void SetResult(crosapi::mojom::DisplayConfigResult* result_ptr, base::OnceClosure callback, - mojom::DisplayConfigResult result) { + crosapi::mojom::DisplayConfigResult result) { *result_ptr = result; std::move(callback).Run(); } @@ -59,14 +59,14 @@ ->ConfigureTouchDevices(transforms); } -class TestObserver : public mojom::CrosDisplayConfigObserver { +class TestObserver : public crosapi::mojom::CrosDisplayConfigObserver { public: TestObserver() = default; TestObserver(const TestObserver&) = delete; TestObserver& operator=(const TestObserver&) = delete; - // mojom::CrosDisplayConfigObserver: + // crosapi::mojom::CrosDisplayConfigObserver: void OnDisplayConfigChanged() override { display_changes_++; } int display_changes() const { return display_changes_; } @@ -97,12 +97,13 @@ cros_display_config_ = Shell::Get()->cros_display_config(); } - mojom::DisplayLayoutInfoPtr GetDisplayLayoutInfo() { - mojom::DisplayLayoutInfoPtr display_layout_info; + crosapi::mojom::DisplayLayoutInfoPtr GetDisplayLayoutInfo() { + crosapi::mojom::DisplayLayoutInfoPtr display_layout_info; base::RunLoop run_loop; cros_display_config_->GetDisplayLayoutInfo(base::BindOnce( - [](mojom::DisplayLayoutInfoPtr* result_ptr, base::OnceClosure callback, - mojom::DisplayLayoutInfoPtr result) { + [](crosapi::mojom::DisplayLayoutInfoPtr* result_ptr, + base::OnceClosure callback, + crosapi::mojom::DisplayLayoutInfoPtr result) { *result_ptr = std::move(result); std::move(callback).Run(); }, @@ -111,9 +112,9 @@ return display_layout_info; } - mojom::DisplayConfigResult SetDisplayLayoutInfo( - mojom::DisplayLayoutInfoPtr display_layout_info) { - mojom::DisplayConfigResult result; + crosapi::mojom::DisplayConfigResult SetDisplayLayoutInfo( + crosapi::mojom::DisplayLayoutInfoPtr display_layout_info) { + crosapi::mojom::DisplayConfigResult result; base::RunLoop run_loop; cros_display_config_->SetDisplayLayoutInfo( std::move(display_layout_info), @@ -122,15 +123,15 @@ return result; } - std::vector<mojom::DisplayUnitInfoPtr> GetDisplayUnitInfoList() { - std::vector<mojom::DisplayUnitInfoPtr> display_info_list; + std::vector<crosapi::mojom::DisplayUnitInfoPtr> GetDisplayUnitInfoList() { + std::vector<crosapi::mojom::DisplayUnitInfoPtr> display_info_list; base::RunLoop run_loop; cros_display_config_->GetDisplayUnitInfoList( /*single_unified=*/false, base::BindOnce( - [](std::vector<mojom::DisplayUnitInfoPtr>* result_ptr, + [](std::vector<crosapi::mojom::DisplayUnitInfoPtr>* result_ptr, base::OnceClosure callback, - std::vector<mojom::DisplayUnitInfoPtr> result) { + std::vector<crosapi::mojom::DisplayUnitInfoPtr> result) { *result_ptr = std::move(result); std::move(callback).Run(); }, @@ -139,28 +140,28 @@ return display_info_list; } - mojom::DisplayConfigResult SetDisplayProperties( + crosapi::mojom::DisplayConfigResult SetDisplayProperties( const std::string& id, - mojom::DisplayConfigPropertiesPtr properties) { - mojom::DisplayConfigResult result; + crosapi::mojom::DisplayConfigPropertiesPtr properties) { + crosapi::mojom::DisplayConfigResult result; base::RunLoop run_loop; cros_display_config_->SetDisplayProperties( - id, std::move(properties), mojom::DisplayConfigSource::kUser, + id, std::move(properties), crosapi::mojom::DisplayConfigSource::kUser, base::BindOnce(&SetResult, &result, run_loop.QuitClosure())); run_loop.Run(); return result; } bool OverscanCalibration(int64_t id, - mojom::DisplayConfigOperation op, + crosapi::mojom::DisplayConfigOperation op, const absl::optional<gfx::Insets>& delta) { - mojom::DisplayConfigResult result; + crosapi::mojom::DisplayConfigResult result; base::RunLoop run_loop; cros_display_config()->OverscanCalibration( base::NumberToString(id), op, delta, base::BindOnce(&SetResult, &result, run_loop.QuitClosure())); run_loop.Run(); - return result == mojom::DisplayConfigResult::kSuccess; + return result == crosapi::mojom::DisplayConfigResult::kSuccess; } bool DisplayExists(int64_t display_id) { @@ -169,35 +170,37 @@ return display.id() != display::kInvalidDisplayId; } - mojom::TouchCalibrationPtr GetDefaultCalibration() { - auto calibration = mojom::TouchCalibration::New(); + crosapi::mojom::TouchCalibrationPtr GetDefaultCalibration() { + auto calibration = crosapi::mojom::TouchCalibration::New(); for (int i = 0; i < 4; ++i) - calibration->pairs.emplace_back(mojom::TouchCalibrationPair::New()); + calibration->pairs.emplace_back( + crosapi::mojom::TouchCalibrationPair::New()); return calibration; } bool StartTouchCalibration(const std::string& display_id) { return CallTouchCalibration( - display_id, ash::mojom::DisplayConfigOperation::kStart, nullptr); + display_id, crosapi::mojom::DisplayConfigOperation::kStart, nullptr); } - bool CompleteCustomTouchCalibration(const std::string& display_id, - mojom::TouchCalibrationPtr calibration) { - return CallTouchCalibration(display_id, - ash::mojom::DisplayConfigOperation::kComplete, - std::move(calibration)); + bool CompleteCustomTouchCalibration( + const std::string& display_id, + crosapi::mojom::TouchCalibrationPtr calibration) { + return CallTouchCalibration( + display_id, crosapi::mojom::DisplayConfigOperation::kComplete, + std::move(calibration)); } bool CallTouchCalibration(const std::string& id, - ash::mojom::DisplayConfigOperation op, - ash::mojom::TouchCalibrationPtr calibration) { - mojom::DisplayConfigResult result; + crosapi::mojom::DisplayConfigOperation op, + crosapi::mojom::TouchCalibrationPtr calibration) { + crosapi::mojom::DisplayConfigResult result; base::RunLoop run_loop; cros_display_config_->TouchCalibration( id, op, std::move(calibration), base::BindOnce(&SetResult, &result, run_loop.QuitClosure())); run_loop.Run(); - return result == mojom::DisplayConfigResult::kSuccess; + return result == crosapi::mojom::DisplayConfigResult::kSuccess; } bool IsTouchCalibrationActive() { @@ -231,8 +234,9 @@ TEST_F(CrosDisplayConfigTest, OnDisplayConfigChanged) { TestObserver observer; - mojo::AssociatedRemote<mojom::CrosDisplayConfigObserver> observer_remote; - mojo::AssociatedReceiver<mojom::CrosDisplayConfigObserver> receiver( + mojo::AssociatedRemote<crosapi::mojom::CrosDisplayConfigObserver> + observer_remote; + mojo::AssociatedReceiver<crosapi::mojom::CrosDisplayConfigObserver> receiver( &observer, observer_remote.BindNewEndpointAndPassDedicatedReceiver()); cros_display_config()->AddObserver(observer_remote.Unbind()); base::RunLoop().RunUntilIdle(); @@ -255,21 +259,24 @@ display::Screen::GetScreen()->GetAllDisplays(); ASSERT_EQ(3u, displays.size()); - mojom::DisplayLayoutInfoPtr display_layout_info = GetDisplayLayoutInfo(); + crosapi::mojom::DisplayLayoutInfoPtr display_layout_info = + GetDisplayLayoutInfo(); ASSERT_TRUE(display_layout_info); - const std::vector<mojom::DisplayLayoutPtr>& layouts = + const std::vector<crosapi::mojom::DisplayLayoutPtr>& layouts = *display_layout_info->layouts; ASSERT_EQ(2u, layouts.size()); EXPECT_EQ(base::NumberToString(displays[1].id()), layouts[0]->id); EXPECT_EQ(base::NumberToString(displays[0].id()), layouts[0]->parent_id); - EXPECT_EQ(mojom::DisplayLayoutPosition::kRight, layouts[0]->position); + EXPECT_EQ(crosapi::mojom::DisplayLayoutPosition::kRight, + layouts[0]->position); EXPECT_EQ(0, layouts[0]->offset); EXPECT_EQ(base::NumberToString(displays[2].id()), layouts[1]->id); EXPECT_EQ(layouts[0]->id, layouts[1]->parent_id); - EXPECT_EQ(mojom::DisplayLayoutPosition::kRight, layouts[1]->position); + EXPECT_EQ(crosapi::mojom::DisplayLayoutPosition::kRight, + layouts[1]->position); EXPECT_EQ(0, layouts[1]->offset); } @@ -283,18 +290,18 @@ EXPECT_TRUE(display_manager()->IsInUnifiedMode()); // Disable unified mode. - auto properties = mojom::DisplayLayoutInfo::New(); - properties->layout_mode = mojom::DisplayLayoutMode::kNormal; - mojom::DisplayConfigResult result = + auto properties = crosapi::mojom::DisplayLayoutInfo::New(); + properties->layout_mode = crosapi::mojom::DisplayLayoutMode::kNormal; + crosapi::mojom::DisplayConfigResult result = SetDisplayLayoutInfo(std::move(properties)); - EXPECT_EQ(mojom::DisplayConfigResult::kSuccess, result); + EXPECT_EQ(crosapi::mojom::DisplayConfigResult::kSuccess, result); EXPECT_FALSE(display_manager()->IsInUnifiedMode()); // Enable unified mode. - properties = mojom::DisplayLayoutInfo::New(); - properties->layout_mode = mojom::DisplayLayoutMode::kUnified; + properties = crosapi::mojom::DisplayLayoutInfo::New(); + properties->layout_mode = crosapi::mojom::DisplayLayoutMode::kUnified; result = SetDisplayLayoutInfo(std::move(properties)); - EXPECT_EQ(mojom::DisplayConfigResult::kSuccess, result); + EXPECT_EQ(crosapi::mojom::DisplayConfigResult::kSuccess, result); EXPECT_TRUE(display_manager()->IsInUnifiedMode()); // Restore extended mode. @@ -305,20 +312,20 @@ TEST_F(CrosDisplayConfigTest, SetLayoutMirroredDefault) { UpdateDisplay("500x400,500x400,500x400"); - auto properties = mojom::DisplayLayoutInfo::New(); - properties->layout_mode = mojom::DisplayLayoutMode::kMirrored; - mojom::DisplayConfigResult result = + auto properties = crosapi::mojom::DisplayLayoutInfo::New(); + properties->layout_mode = crosapi::mojom::DisplayLayoutMode::kMirrored; + crosapi::mojom::DisplayConfigResult result = SetDisplayLayoutInfo(std::move(properties)); - EXPECT_EQ(mojom::DisplayConfigResult::kSuccess, result); + EXPECT_EQ(crosapi::mojom::DisplayConfigResult::kSuccess, result); EXPECT_TRUE(display_manager()->IsInMirrorMode()); display::DisplayIdList id_list = display_manager()->GetMirroringDestinationDisplayIdList(); ASSERT_EQ(2u, id_list.size()); - properties = mojom::DisplayLayoutInfo::New(); - properties->layout_mode = mojom::DisplayLayoutMode::kNormal; + properties = crosapi::mojom::DisplayLayoutInfo::New(); + properties->layout_mode = crosapi::mojom::DisplayLayoutMode::kNormal; result = SetDisplayLayoutInfo(std::move(properties)); - EXPECT_EQ(mojom::DisplayConfigResult::kSuccess, result); + EXPECT_EQ(crosapi::mojom::DisplayConfigResult::kSuccess, result); EXPECT_FALSE(display_manager()->IsInMirrorMode()); } @@ -329,16 +336,16 @@ display::Screen::GetScreen()->GetAllDisplays(); ASSERT_EQ(4u, displays.size()); - auto properties = mojom::DisplayLayoutInfo::New(); - properties->layout_mode = mojom::DisplayLayoutMode::kMirrored; + auto properties = crosapi::mojom::DisplayLayoutInfo::New(); + properties->layout_mode = crosapi::mojom::DisplayLayoutMode::kMirrored; properties->mirror_source_id = base::NumberToString(displays[0].id()); properties->mirror_destination_ids = absl::make_optional<std::vector<std::string>>( {base::NumberToString(displays[1].id()), base::NumberToString(displays[3].id())}); - mojom::DisplayConfigResult result = + crosapi::mojom::DisplayConfigResult result = SetDisplayLayoutInfo(std::move(properties)); - EXPECT_EQ(mojom::DisplayConfigResult::kSuccess, result); + EXPECT_EQ(crosapi::mojom::DisplayConfigResult::kSuccess, result); EXPECT_TRUE(display_manager()->IsInMirrorMode()); display::DisplayIdList id_list = display_manager()->GetMirroringDestinationDisplayIdList(); @@ -349,13 +356,14 @@ TEST_F(CrosDisplayConfigTest, GetDisplayUnitInfoListBasic) { UpdateDisplay("500x600,400x520"); - std::vector<mojom::DisplayUnitInfoPtr> result = GetDisplayUnitInfoList(); + std::vector<crosapi::mojom::DisplayUnitInfoPtr> result = + GetDisplayUnitInfoList(); ASSERT_EQ(2u, result.size()); int64_t display_id; ASSERT_TRUE(base::StringToInt64(result[0]->id, &display_id)); ASSERT_TRUE(DisplayExists(display_id)); - const mojom::DisplayUnitInfo& info_0 = *result[0]; + const crosapi::mojom::DisplayUnitInfo& info_0 = *result[0]; EXPECT_TRUE(info_0.is_primary); EXPECT_TRUE(info_0.is_internal); EXPECT_TRUE(info_0.is_enabled); @@ -364,19 +372,19 @@ EXPECT_FALSE(info_0.has_accelerometer_support); EXPECT_EQ(96, info_0.dpi_x); EXPECT_EQ(96, info_0.dpi_y); - EXPECT_EQ(mojom::DisplayRotationOptions::kZeroDegrees, + EXPECT_EQ(crosapi::mojom::DisplayRotationOptions::kZeroDegrees, info_0.rotation_options); EXPECT_EQ(gfx::Rect(0, 0, 500, 600), info_0.bounds); EXPECT_EQ(gfx::Insets(), info_0.overscan); ASSERT_TRUE(base::StringToInt64(result[1]->id, &display_id)); ASSERT_TRUE(DisplayExists(display_id)); - const mojom::DisplayUnitInfo& info_1 = *result[1]; + const crosapi::mojom::DisplayUnitInfo& info_1 = *result[1]; EXPECT_EQ(display_manager()->GetDisplayNameForId(display_id), info_1.name); // Second display is left of the primary display whose width 500. EXPECT_EQ(gfx::Rect(500, 0, 400, 520), info_1.bounds); EXPECT_EQ(gfx::Insets(), info_1.overscan); - EXPECT_EQ(mojom::DisplayRotationOptions::kZeroDegrees, + EXPECT_EQ(crosapi::mojom::DisplayRotationOptions::kZeroDegrees, info_1.rotation_options); EXPECT_FALSE(info_1.is_primary); EXPECT_FALSE(info_1.is_internal); @@ -387,10 +395,11 @@ TEST_F(CrosDisplayConfigTest, GetDisplayUnitInfoListZoomFactor) { UpdateDisplay("1024x512,1024x512"); - std::vector<mojom::DisplayUnitInfoPtr> result = GetDisplayUnitInfoList(); + std::vector<crosapi::mojom::DisplayUnitInfoPtr> result = + GetDisplayUnitInfoList(); ASSERT_EQ(2u, result.size()); - const mojom::DisplayUnitInfo& info_0 = *result[0]; + const crosapi::mojom::DisplayUnitInfo& info_0 = *result[0]; EXPECT_EQ(1.0, info_0.display_zoom_factor); const std::vector<double>& zoom_factors = info_0.available_display_zoom_factors; @@ -414,11 +423,11 @@ .id(); ASSERT_NE(primary_id, secondary_id); - auto properties = mojom::DisplayConfigProperties::New(); + auto properties = crosapi::mojom::DisplayConfigProperties::New(); properties->set_primary = true; - mojom::DisplayConfigResult result = SetDisplayProperties( + crosapi::mojom::DisplayConfigResult result = SetDisplayProperties( base::NumberToString(secondary_id), std::move(properties)); - EXPECT_EQ(mojom::DisplayConfigResult::kSuccess, result); + EXPECT_EQ(crosapi::mojom::DisplayConfigResult::kSuccess, result); // secondary display should now be primary. primary_id = display::Screen::GetScreen()->GetPrimaryDisplay().id(); @@ -431,11 +440,11 @@ display::test::DisplayManagerTestApi(display_manager()) .GetSecondaryDisplay(); - auto properties = mojom::DisplayConfigProperties::New(); + auto properties = crosapi::mojom::DisplayConfigProperties::New(); properties->overscan = gfx::Insets::TLBR(199, 20, 51, 130); - mojom::DisplayConfigResult result = SetDisplayProperties( + crosapi::mojom::DisplayConfigResult result = SetDisplayProperties( base::NumberToString(secondary.id()), std::move(properties)); - EXPECT_EQ(mojom::DisplayConfigResult::kSuccess, result); + EXPECT_EQ(crosapi::mojom::DisplayConfigResult::kSuccess, result); EXPECT_EQ(gfx::Rect(1200, 0, 150, 250), secondary.bounds()); const gfx::Insets overscan = display_manager()->GetOverscanInsets(secondary.id()); @@ -451,34 +460,34 @@ display::test::DisplayManagerTestApi(display_manager()) .GetSecondaryDisplay(); - mojom::DisplayConfigResult result; + crosapi::mojom::DisplayConfigResult result; - auto properties = mojom::DisplayConfigProperties::New(); - properties->rotation = - mojom::DisplayRotation::New(mojom::DisplayRotationOptions::k90Degrees); + auto properties = crosapi::mojom::DisplayConfigProperties::New(); + properties->rotation = crosapi::mojom::DisplayRotation::New( + crosapi::mojom::DisplayRotationOptions::k90Degrees); result = SetDisplayProperties(base::NumberToString(secondary.id()), std::move(properties)); - EXPECT_EQ(mojom::DisplayConfigResult::kSuccess, result); + EXPECT_EQ(crosapi::mojom::DisplayConfigResult::kSuccess, result); EXPECT_EQ(gfx::Rect(1200, 0, 500, 300), secondary.bounds()); EXPECT_EQ(display::Display::ROTATE_90, secondary.rotation()); - properties = mojom::DisplayConfigProperties::New(); - properties->rotation = - mojom::DisplayRotation::New(mojom::DisplayRotationOptions::k270Degrees); + properties = crosapi::mojom::DisplayConfigProperties::New(); + properties->rotation = crosapi::mojom::DisplayRotation::New( + crosapi::mojom::DisplayRotationOptions::k270Degrees); result = SetDisplayProperties(base::NumberToString(secondary.id()), std::move(properties)); - EXPECT_EQ(mojom::DisplayConfigResult::kSuccess, result); + EXPECT_EQ(crosapi::mojom::DisplayConfigResult::kSuccess, result); EXPECT_EQ(gfx::Rect(1200, 0, 500, 300), secondary.bounds()); EXPECT_EQ(display::Display::ROTATE_270, secondary.rotation()); // Test setting primary and rotating. - properties = mojom::DisplayConfigProperties::New(); + properties = crosapi::mojom::DisplayConfigProperties::New(); properties->set_primary = true; - properties->rotation = - mojom::DisplayRotation::New(mojom::DisplayRotationOptions::k180Degrees); + properties->rotation = crosapi::mojom::DisplayRotation::New( + crosapi::mojom::DisplayRotationOptions::k180Degrees); result = SetDisplayProperties(base::NumberToString(secondary.id()), std::move(properties)); - EXPECT_EQ(mojom::DisplayConfigResult::kSuccess, result); + EXPECT_EQ(crosapi::mojom::DisplayConfigResult::kSuccess, result); const display::Display& primary = display::Screen::GetScreen()->GetPrimaryDisplay(); EXPECT_EQ(secondary.id(), primary.id()); @@ -492,34 +501,34 @@ display::test::DisplayManagerTestApi(display_manager()) .GetSecondaryDisplay(); - mojom::DisplayConfigResult result; + crosapi::mojom::DisplayConfigResult result; - auto properties = mojom::DisplayConfigProperties::New(); + auto properties = crosapi::mojom::DisplayConfigProperties::New(); properties->bounds_origin = gfx::Point({-520, 50}); result = SetDisplayProperties(base::NumberToString(secondary.id()), std::move(properties)); - EXPECT_EQ(mojom::DisplayConfigResult::kSuccess, result); + EXPECT_EQ(crosapi::mojom::DisplayConfigResult::kSuccess, result); EXPECT_EQ(gfx::Rect(-520, 50, 520, 400), secondary.bounds()); - properties = mojom::DisplayConfigProperties::New(); + properties = crosapi::mojom::DisplayConfigProperties::New(); properties->bounds_origin = gfx::Point({1200, 100}); result = SetDisplayProperties(base::NumberToString(secondary.id()), std::move(properties)); - EXPECT_EQ(mojom::DisplayConfigResult::kSuccess, result); + EXPECT_EQ(crosapi::mojom::DisplayConfigResult::kSuccess, result); EXPECT_EQ(gfx::Rect(1200, 100, 520, 400), secondary.bounds()); - properties = mojom::DisplayConfigProperties::New(); + properties = crosapi::mojom::DisplayConfigProperties::New(); properties->bounds_origin = gfx::Point({1100, -400}); result = SetDisplayProperties(base::NumberToString(secondary.id()), std::move(properties)); - EXPECT_EQ(mojom::DisplayConfigResult::kSuccess, result); + EXPECT_EQ(crosapi::mojom::DisplayConfigResult::kSuccess, result); EXPECT_EQ(gfx::Rect(1100, -400, 520, 400), secondary.bounds()); - properties = mojom::DisplayConfigProperties::New(); + properties = crosapi::mojom::DisplayConfigProperties::New(); properties->bounds_origin = gfx::Point({-350, 600}); result = SetDisplayProperties(base::NumberToString(secondary.id()), std::move(properties)); - EXPECT_EQ(mojom::DisplayConfigResult::kSuccess, result); + EXPECT_EQ(crosapi::mojom::DisplayConfigResult::kSuccess, result); EXPECT_EQ(gfx::Rect(-350, 600, 520, 400), secondary.bounds()); } @@ -548,11 +557,11 @@ display_manager()->GetDisplayInfo(display_id_list[1]).zoom_factor()); // Set zoom factor for display 0, should not affect display 1. - auto properties = mojom::DisplayConfigProperties::New(); + auto properties = crosapi::mojom::DisplayConfigProperties::New(); properties->display_zoom_factor = zoom_factor_1; - mojom::DisplayConfigResult result = SetDisplayProperties( + crosapi::mojom::DisplayConfigResult result = SetDisplayProperties( base::NumberToString(display_id_list[0]), std::move(properties)); - EXPECT_EQ(mojom::DisplayConfigResult::kSuccess, result); + EXPECT_EQ(crosapi::mojom::DisplayConfigResult::kSuccess, result); EXPECT_EQ( zoom_factor_1, display_manager()->GetDisplayInfo(display_id_list[0]).zoom_factor()); @@ -561,11 +570,11 @@ display_manager()->GetDisplayInfo(display_id_list[1]).zoom_factor()); // Set zoom factor for display 1. - properties = mojom::DisplayConfigProperties::New(); + properties = crosapi::mojom::DisplayConfigProperties::New(); properties->display_zoom_factor = zoom_factor_2; result = SetDisplayProperties(base::NumberToString(display_id_list[1]), std::move(properties)); - EXPECT_EQ(mojom::DisplayConfigResult::kSuccess, result); + EXPECT_EQ(crosapi::mojom::DisplayConfigResult::kSuccess, result); EXPECT_EQ( zoom_factor_1, display_manager()->GetDisplayInfo(display_id_list[0]).zoom_factor()); @@ -575,12 +584,13 @@ // Invalid zoom factor should fail. const float invalid_zoom_factor = 0.01f; - properties = mojom::DisplayConfigProperties::New(); + properties = crosapi::mojom::DisplayConfigProperties::New(); properties->display_zoom_factor = invalid_zoom_factor; result = SetDisplayProperties(base::NumberToString(display_id_list[1]), std::move(properties)); - EXPECT_EQ(mojom::DisplayConfigResult::kPropertyValueOutOfRangeError, - result); + EXPECT_EQ( + crosapi::mojom::DisplayConfigResult::kPropertyValueOutOfRangeError, + result); EXPECT_EQ( zoom_factor_2, display_manager()->GetDisplayInfo(display_id_list[1]).zoom_factor()); @@ -589,16 +599,17 @@ TEST_F(CrosDisplayConfigTest, SetDisplayMode) { UpdateDisplay("1024x512,1024x512"); - std::vector<mojom::DisplayUnitInfoPtr> result = GetDisplayUnitInfoList(); + std::vector<crosapi::mojom::DisplayUnitInfoPtr> result = + GetDisplayUnitInfoList(); ASSERT_EQ(2u, result.size()); // Internal display has just one mode. EXPECT_EQ(0, result[0]->selected_display_mode_index); ASSERT_EQ(1u, result[0]->available_display_modes.size()); - auto properties = mojom::DisplayConfigProperties::New(); + auto properties = crosapi::mojom::DisplayConfigProperties::New(); auto display_mode = result[0]->available_display_modes[0].Clone(); properties->display_mode = std::move(display_mode); - ASSERT_EQ(mojom::DisplayConfigResult::kSuccess, + ASSERT_EQ(crosapi::mojom::DisplayConfigResult::kSuccess, SetDisplayProperties(result[0]->id, std::move(properties))); result = GetDisplayUnitInfoList(); @@ -612,18 +623,18 @@ ASSERT_NE(display::kInvalidDisplayId, id); // Test that kAdjust succeeds after kComplete call. - EXPECT_TRUE(OverscanCalibration(id, mojom::DisplayConfigOperation::kStart, - absl::nullopt)); + EXPECT_TRUE(OverscanCalibration( + id, crosapi::mojom::DisplayConfigOperation::kStart, absl::nullopt)); EXPECT_EQ(gfx::Insets(), display_manager()->GetOverscanInsets(id)); gfx::Insets insets(10); - EXPECT_TRUE( - OverscanCalibration(id, mojom::DisplayConfigOperation::kAdjust, insets)); + EXPECT_TRUE(OverscanCalibration( + id, crosapi::mojom::DisplayConfigOperation::kAdjust, insets)); // Adjust has no effect until Complete. EXPECT_EQ(gfx::Insets(), display_manager()->GetOverscanInsets(id)); - EXPECT_TRUE(OverscanCalibration(id, mojom::DisplayConfigOperation::kComplete, - absl::nullopt)); + EXPECT_TRUE(OverscanCalibration( + id, crosapi::mojom::DisplayConfigOperation::kComplete, absl::nullopt)); gfx::Insets overscan = display_manager()->GetOverscanInsets(id); EXPECT_EQ(insets, overscan) << "Overscan: " << overscan.ToString() << " != " << insets.ToString(); @@ -631,21 +642,21 @@ // Test that kReset clears restores previous insets. // Start clears any overscan values. - EXPECT_TRUE(OverscanCalibration(id, mojom::DisplayConfigOperation::kStart, - absl::nullopt)); + EXPECT_TRUE(OverscanCalibration( + id, crosapi::mojom::DisplayConfigOperation::kStart, absl::nullopt)); EXPECT_EQ(gfx::Insets(), display_manager()->GetOverscanInsets(id)); // Reset + Complete restores previously set insets. - EXPECT_TRUE(OverscanCalibration(id, mojom::DisplayConfigOperation::kReset, - absl::nullopt)); + EXPECT_TRUE(OverscanCalibration( + id, crosapi::mojom::DisplayConfigOperation::kReset, absl::nullopt)); EXPECT_EQ(gfx::Insets(), display_manager()->GetOverscanInsets(id)); - EXPECT_TRUE(OverscanCalibration(id, mojom::DisplayConfigOperation::kComplete, - absl::nullopt)); + EXPECT_TRUE(OverscanCalibration( + id, crosapi::mojom::DisplayConfigOperation::kComplete, absl::nullopt)); EXPECT_EQ(insets, display_manager()->GetOverscanInsets(id)); // Additional complete call should fail. - EXPECT_FALSE(OverscanCalibration(id, mojom::DisplayConfigOperation::kComplete, - absl::nullopt)); + EXPECT_FALSE(OverscanCalibration( + id, crosapi::mojom::DisplayConfigOperation::kComplete, absl::nullopt)); } TEST_F(CrosDisplayConfigTest, CustomTouchCalibrationInternal) { @@ -713,7 +724,7 @@ std::string id = base::NumberToString(display_id); EXPECT_TRUE(StartTouchCalibration(id)); - mojom::TouchCalibrationPtr calibration = GetDefaultCalibration(); + crosapi::mojom::TouchCalibrationPtr calibration = GetDefaultCalibration(); calibration->pairs[0]->display_point.set_x(-1); EXPECT_FALSE(CompleteCustomTouchCalibration(id, std::move(calibration))); @@ -745,14 +756,15 @@ EXPECT_TRUE(StartTouchCalibration(id)); EXPECT_TRUE(IsTouchCalibrationActive()); - mojom::TouchCalibrationPtr calibration = GetDefaultCalibration(); + crosapi::mojom::TouchCalibrationPtr calibration = GetDefaultCalibration(); EXPECT_TRUE(CompleteCustomTouchCalibration(id, std::move(calibration))); } TEST_F(CrosDisplayConfigTest, TabletModeAutoRotation) { TestObserver observer; - mojo::AssociatedRemote<mojom::CrosDisplayConfigObserver> observer_remote; - mojo::AssociatedReceiver<mojom::CrosDisplayConfigObserver> receiver( + mojo::AssociatedRemote<crosapi::mojom::CrosDisplayConfigObserver> + observer_remote; + mojo::AssociatedReceiver<crosapi::mojom::CrosDisplayConfigObserver> receiver( &observer, observer_remote.BindNewEndpointAndPassDedicatedReceiver()); cros_display_config()->AddObserver(observer_remote.Unbind()); base::RunLoop().RunUntilIdle(); @@ -764,12 +776,12 @@ // is treated as a request to set the rotation to 0. const display::Display& display = display_manager()->GetPrimaryDisplayCandidate(); - auto properties = mojom::DisplayConfigProperties::New(); - properties->rotation = - mojom::DisplayRotation::New(mojom::DisplayRotationOptions::kAutoRotate); + auto properties = crosapi::mojom::DisplayConfigProperties::New(); + properties->rotation = crosapi::mojom::DisplayRotation::New( + crosapi::mojom::DisplayRotationOptions::kAutoRotate); auto result = SetDisplayProperties(base::NumberToString(display.id()), std::move(properties)); - EXPECT_EQ(mojom::DisplayConfigResult::kSuccess, result); + EXPECT_EQ(crosapi::mojom::DisplayConfigResult::kSuccess, result); auto* screen_orientation_controller = Shell::Get()->screen_orientation_controller(); EXPECT_FALSE(screen_orientation_controller->user_rotation_locked()); @@ -787,12 +799,12 @@ base::RunLoop().RunUntilIdle(); observer.reset_display_changes(); - properties = mojom::DisplayConfigProperties::New(); - properties->rotation = - mojom::DisplayRotation::New(mojom::DisplayRotationOptions::k90Degrees); + properties = crosapi::mojom::DisplayConfigProperties::New(); + properties->rotation = crosapi::mojom::DisplayRotation::New( + crosapi::mojom::DisplayRotationOptions::k90Degrees); result = SetDisplayProperties(base::NumberToString(display.id()), std::move(properties)); - EXPECT_EQ(mojom::DisplayConfigResult::kSuccess, result); + EXPECT_EQ(crosapi::mojom::DisplayConfigResult::kSuccess, result); EXPECT_TRUE(screen_orientation_controller->user_rotation_locked()); EXPECT_EQ(display::Display::ROTATE_90, display.rotation()); // OnDisplayConfigChanged() will be called twice, once as a result of the @@ -813,12 +825,12 @@ base::RunLoop().RunUntilIdle(); observer.reset_display_changes(); - properties = mojom::DisplayConfigProperties::New(); - properties->rotation = - mojom::DisplayRotation::New(mojom::DisplayRotationOptions::kAutoRotate); + properties = crosapi::mojom::DisplayConfigProperties::New(); + properties->rotation = crosapi::mojom::DisplayRotation::New( + crosapi::mojom::DisplayRotationOptions::kAutoRotate); result = SetDisplayProperties(base::NumberToString(display.id()), std::move(properties)); - EXPECT_EQ(mojom::DisplayConfigResult::kSuccess, result); + EXPECT_EQ(crosapi::mojom::DisplayConfigResult::kSuccess, result); EXPECT_FALSE(screen_orientation_controller->user_rotation_locked()); // Unlocking auto-rotate doesn't actually change the display rotation. It // simply allows it to auto-rotate in response to accelerometer updates.
diff --git a/ash/display/display_prefs_unittest.cc b/ash/display/display_prefs_unittest.cc index 8f8cd5a..e95e0c2b 100644 --- a/ash/display/display_prefs_unittest.cc +++ b/ash/display/display_prefs_unittest.cc
@@ -678,7 +678,8 @@ display::ManagedDisplayMode new_mode(gfx::Size(500, 400), 60.0f, false, true); EXPECT_TRUE(shell->resolution_notification_controller() ->PrepareNotificationAndSetDisplayMode( - id, old_mode, new_mode, mojom::DisplayConfigSource::kUser, + id, old_mode, new_mode, + crosapi::mojom::DisplayConfigSource::kUser, base::OnceClosure())); UpdateDisplay("500x400#500x400|400x300|300x200");
diff --git a/ash/display/overscan_calibrator_unittest.cc b/ash/display/overscan_calibrator_unittest.cc index dc3f265..b91992c 100644 --- a/ash/display/overscan_calibrator_unittest.cc +++ b/ash/display/overscan_calibrator_unittest.cc
@@ -23,8 +23,8 @@ OverscanCalibrator* StartCalibration(const std::string& id) { Shell::Get()->cros_display_config()->OverscanCalibration( - id, mojom::DisplayConfigOperation::kStart, gfx::Insets() /* not used */, - base::DoNothing()); + id, crosapi::mojom::DisplayConfigOperation::kStart, + gfx::Insets() /* not used */, base::DoNothing()); return Shell::Get()->cros_display_config()->GetOverscanCalibrator(id); } };
diff --git a/ash/display/resolution_notification_controller.cc b/ash/display/resolution_notification_controller.cc index 333e313..a732737 100644 --- a/ash/display/resolution_notification_controller.cc +++ b/ash/display/resolution_notification_controller.cc
@@ -77,13 +77,13 @@ int64_t display_id, const display::ManagedDisplayMode& old_resolution, const display::ManagedDisplayMode& new_resolution, - mojom::DisplayConfigSource source, + crosapi::mojom::DisplayConfigSource source, base::OnceClosure accept_callback) { Shell::Get()->screen_layout_observer()->SetDisplayChangedFromSettingsUI( display_id); display::DisplayManager* const display_manager = Shell::Get()->display_manager(); - if (source == mojom::DisplayConfigSource::kPolicy || + if (source == crosapi::mojom::DisplayConfigSource::kPolicy || display::IsInternalDisplayId(display_id)) { // We don't show notifications to confirm/revert the resolution change in // the case of an internal display or policy-forced changes.
diff --git a/ash/display/resolution_notification_controller.h b/ash/display/resolution_notification_controller.h index c444c16..ae564b2 100644 --- a/ash/display/resolution_notification_controller.h +++ b/ash/display/resolution_notification_controller.h
@@ -10,10 +10,10 @@ #include "ash/ash_export.h" #include "ash/display/display_change_dialog.h" #include "ash/display/window_tree_host_manager.h" -#include "ash/public/mojom/cros_display_config.mojom.h" #include "base/callback.h" #include "base/gtest_prod_util.h" #include "base/memory/weak_ptr.h" +#include "chromeos/crosapi/mojom/cros_display_config.mojom.h" #include "ui/display/display_observer.h" #include "ui/gfx/geometry/size.h" @@ -63,7 +63,7 @@ int64_t display_id, const display::ManagedDisplayMode& old_resolution, const display::ManagedDisplayMode& new_resolution, - mojom::DisplayConfigSource source, + crosapi::mojom::DisplayConfigSource source, base::OnceClosure accept_callback); DisplayChangeDialog* dialog_for_testing() const {
diff --git a/ash/display/resolution_notification_controller_unittest.cc b/ash/display/resolution_notification_controller_unittest.cc index 77729ef8..ac5b51e 100644 --- a/ash/display/resolution_notification_controller_unittest.cc +++ b/ash/display/resolution_notification_controller_unittest.cc
@@ -105,7 +105,8 @@ float new_refresh_rate, bool old_is_native, bool new_is_native, - mojom::DisplayConfigSource source = mojom::DisplayConfigSource::kUser) { + crosapi::mojom::DisplayConfigSource source = + crosapi::mojom::DisplayConfigSource::kUser) { const display::ManagedDisplayInfo& info = display_manager()->GetDisplayInfo(display.id()); display::ManagedDisplayMode old_mode(info.size_in_pixel(), @@ -145,7 +146,8 @@ float refresh_rate, bool old_is_native, bool new_is_native, - mojom::DisplayConfigSource source = mojom::DisplayConfigSource::kUser) { + crosapi::mojom::DisplayConfigSource source = + crosapi::mojom::DisplayConfigSource::kUser) { SetDisplayResolutionAndNotifyWithResolution( display, new_resolution, new_resolution, refresh_rate, old_is_native, new_is_native, source); @@ -238,7 +240,7 @@ SetDisplayResolutionAndNotify(display_manager_test.GetSecondaryDisplay(), gfx::Size(300, 200), 60, /*old_is_native=*/true, /*new_is_native=*/false, - mojom::DisplayConfigSource::kPolicy); + crosapi::mojom::DisplayConfigSource::kPolicy); EXPECT_FALSE(IsNotificationVisible()); display::ManagedDisplayMode mode; EXPECT_TRUE(display_manager()->GetSelectedModeForDisplayId(id2, &mode));
diff --git a/ash/public/ash_interfaces.h b/ash/public/ash_interfaces.h index ebcf0a1..9d96d23 100644 --- a/ash/public/ash_interfaces.h +++ b/ash/public/ash_interfaces.h
@@ -6,8 +6,8 @@ #define ASH_PUBLIC_ASH_INTERFACES_H_ #include "ash/ash_export.h" -#include "ash/public/mojom/cros_display_config.mojom.h" #include "ash/public/mojom/tray_action.mojom.h" +#include "chromeos/crosapi/mojom/cros_display_config.mojom.h" #include "mojo/public/cpp/bindings/pending_receiver.h" namespace ash { @@ -15,7 +15,8 @@ // Helper methods for binding interfaces exposed by Ash. Must only be called on // the main thread. ASH_EXPORT void BindCrosDisplayConfigController( - mojo::PendingReceiver<mojom::CrosDisplayConfigController> receiver); + mojo::PendingReceiver<crosapi::mojom::CrosDisplayConfigController> + receiver); ASH_EXPORT void BindTrayAction(mojo::PendingReceiver<mojom::TrayAction> receiver);
diff --git a/ash/public/mojom/BUILD.gn b/ash/public/mojom/BUILD.gn index a27c2f5..7a0ca42f 100644 --- a/ash/public/mojom/BUILD.gn +++ b/ash/public/mojom/BUILD.gn
@@ -13,7 +13,6 @@ sources = [ "accelerator_keys.mojom", "assistant_volume_control.mojom", - "cros_display_config.mojom", "tray_action.mojom", "voice_interaction_controller.mojom", ] @@ -25,7 +24,6 @@ "//mojo/public/mojom/base", "//services/preferences/public/mojom", "//skia/public/mojom", - "//ui/display/mojom:mojom", "//ui/gfx/geometry/mojom", "//ui/gfx/image/mojom", "//ui/gfx/range/mojom",
diff --git a/ash/strings/ash_strings_as.xtb b/ash/strings/ash_strings_as.xtb index a9b1918e..e0a8dc9 100644 --- a/ash/strings/ash_strings_as.xtb +++ b/ash/strings/ash_strings_as.xtb
@@ -306,6 +306,7 @@ <translation id="2805756323405976993">এপ্</translation> <translation id="2814448776515246190">আংশিক কেপচাৰ</translation> <translation id="2819276065543622893">আপুনি এতিয়া ছাইন আউট হ’ব।</translation> +<translation id="2822551631199737692">কেমেৰা ব্যৱহাৰ হৈ আছে</translation> <translation id="2825224105325558319"><ph name="DISPLAY_NAME" />এ <ph name="SPECIFIED_RESOLUTION" /> সমর্থন নকৰে। ৰিজ’লিউশ্বনটো <ph name="FALLBACK_RESOLUTION" />লৈ সলনি কৰা হৈছে।</translation> <translation id="2825619548187458965">শ্বেল্ফ</translation> <translation id="2831035692318564937">সূৰ্যোদয় পৰ্যন্ত অন কৰক</translation> @@ -807,6 +808,7 @@ <translation id="5682642926269496722">Google Assistant বৰ্তমানৰ ব্যৱহাৰকাৰী একাউণ্টৰ বাবে উপলব্ধ নহয়।</translation> <translation id="5689633613396158040">ৰাতিৰ পোহৰে আপোনাৰ স্ক্ৰীনখনলৈ চোৱা অথবা কম পোহৰত পঢ়া সহজ কৰি তোলে। ৰাতিৰ পোহৰ কোন সময়ত অন হয় সেয়া সলনি কৰিবলৈ অথবা এইটো সম্পূর্ণকৈ অফ কৰিবলৈ টিপক।</translation> <translation id="5691772641933328258">ফিংগাৰপ্ৰিণ্ট চিনাক্ত কৰিব পৰা নগ’ল</translation> +<translation id="5693255400847650006">মাইক্ৰ’ফ’ন ব্যৱহাৰ হৈ আছে</translation> <translation id="570390244361237317">আটাইবোৰ এপ্, আটাইবোৰ এপ্ এক্সেছ কৰিবলৈ কাঁড়চিহ্নৰ কী ব্যৱহাৰ কৰি নেভিগে’ট কৰক</translation> <translation id="5707775774148071965">আপোনাৰ ডিভাইচটোৱে আপোনাৰ কে’বলতকৈ উচ্চ ডেটাৰ হাৰ সমৰ্থন কৰে। ডিভাইচৰ কাৰ্যক্ষমতা সীমিত হ’ব পাৰে।</translation> <translation id="5710450975648804523">অসুবিধা নিদিব ম’ড অন হৈ আছে</translation> @@ -981,6 +983,7 @@ <translation id="6723839937902243910">পাৱাৰ</translation> <translation id="6727969043791803658">সংযোগ কৰা আছে, <ph name="BATTERY_PERCENTAGE" />% বেটাৰী</translation> <translation id="6732800389263199929">+<ph name="COUNT" /> টা</translation> +<translation id="6737983188036277605">কেমেৰা আৰু মাইক্ৰ’ফ’ন ব্যৱহাৰ হৈ আছে</translation> <translation id="6739144137573853180">ছেটিঙলৈ যাওক</translation> <translation id="6751052314767925245">আপোনাৰ প্ৰশাসকে বলৱৎ কৰা</translation> <translation id="6751826523481687655">কাৰ্যদক্ষতাৰ ট্ৰেচিং অন কৰা হৈছে</translation>
diff --git a/ash/strings/ash_strings_az.xtb b/ash/strings/ash_strings_az.xtb index f85c1ee..81a1630 100644 --- a/ash/strings/ash_strings_az.xtb +++ b/ash/strings/ash_strings_az.xtb
@@ -27,6 +27,7 @@ <translation id="1111021433905331574">Klaviatura işıqlandırmasının rəngini Ayarlar > <ph name="APP_TITLE" /> bölməsində dəyişə bilərsiniz</translation> <translation id="112308213915226829">Rəfi avtomatik gizlədin</translation> <translation id="1142002900084379065">Son fotolar</translation> +<translation id="114451698114044150">Avtomatik miqyaslama aktivdir.</translation> <translation id="1148499908455722006"><ph name="USER_NAME" /> üçün məlumat dialoqunu açın</translation> <translation id="1150989369772528668">Təqvim</translation> <translation id="1153356358378277386">Birləşmiş cihazlar</translation> @@ -449,6 +450,7 @@ <translation id="3593039967545720377">Mübadilə buferinə baxmaq üçün <ph name="SHORTCUT_KEY_NAME" /> + V düyməsinə basaraq mübadilə buferi tarixçəsinə giriş edin. Başlamaq üçün bir elementi kopyalayın.</translation> <translation id="3593646411856133110">Açıq tətbiqləri görmək üçün yuxarı çəkib saxlayın</translation> <translation id="3595596368722241419">Batareya doludur</translation> +<translation id="3600061223661453002">Deaktiv</translation> <translation id="3604801046548457007">Masa <ph name="DESK_TITILE" /> yaradıldı</translation> <translation id="3606978283550408104">Brayl displeyi qoşuludur.</translation> <translation id="3615926715408477684">Mobil datanın aktiv edilməsi ilə Bluetooh da aktiv ediləcək</translation> @@ -967,6 +969,7 @@ <translation id="6637729079642709226">Vaxtı dəyişin</translation> <translation id="6641720045729354415">Canlı Altyazını keçirin. <ph name="STATE_TEXT" /></translation> <translation id="6643169293433369663">Ad üzrə çeşidləmə sırasını ləğv edin</translation> +<translation id="6649641931981131786">Sizi ekranın ortasına yerləşdirmək üçün kameranı tənzimləyin.</translation> <translation id="6650072551060208490"><ph name="ORIGIN_NAME" /> siz olduğunuzu təsdiqləmək istəyir</translation> <translation id="6650933572246256093">"<ph name="DEVICE_NAME" />" cihazı cütlənmək üçün icazə istəyir. Bu parolu həmin cihazda daxil edin: <ph name="PASSKEY" /></translation> <translation id="6657585470893396449">Parol</translation> @@ -1008,6 +1011,7 @@ <translation id="685782768769951078">{NUM_DIGITS,plural, =1{Bir rəqəm qalıb}other{# rəqəm qalıb}}</translation> <translation id="6867938213751067702"><ph name="FILENAME" /> endirilməsi durdurulub</translation> <translation id="6878400149835617132">Qısayol deaktiv edildi</translation> +<translation id="6878709625737492815">Avtomatik miqyaslama deaktivdir.</translation> <translation id="6884665277231944629">Bugünə qayıdın</translation> <translation id="6886172995547742638">Sizin <ph name="DEVICE_TYPE" /> aşağı performans göstərə bilər. Sertifikatlı <ph name="PREFERRED_MINIMUM_POWER" />W və ya daha yüksək USB-C cərəyan yuvasından istifadə edin.</translation> <translation id="688631446150864480">Pəncərələri dəyişdirmək üçün Aşağı ox düyməsini basın</translation> @@ -1087,6 +1091,7 @@ <translation id="7378203170292176219">Çəkmək üçün sahə seçmək məqsədilə sürüşdürün</translation> <translation id="7378594059915113390">Media Nəzarətləri</translation> <translation id="7378889811480108604">Enerjiyə qənaət rejimi deaktivdir</translation> +<translation id="7382680553121047388">Aktiv</translation> <translation id="7384028040782072252">Tətbiqləri yenidən sıralamaq üçün istənilən yerə sağ düymə ilə klikləyin</translation> <translation id="7392563512730092880">İstənilən vaxt Ayarlar bölməsində ayarlaya bilərsiniz.</translation> <translation id="7405710164030118432">Cihazı kiliddən çıxarmaq üçün Family Link ailə giriş kodunu daxil edin</translation> @@ -1169,6 +1174,7 @@ <translation id="7868900307798234037">Barmaq izi ilə kiliddən çıxarma</translation> <translation id="7872195908557044066">Administratorunuz eSIM-inizi sıfırlayır. Bir neçə dəqiqə gözləyin.</translation> <translation id="7872786842639831132">Deaktiv</translation> +<translation id="7875280185395705476">Avtomatik miqyaslama</translation> <translation id="7875575368831396199">Görünür, Bluetooth <ph name="DEVICE_TYPE" /> cihazınızda deaktiv edilib. Telefon Mərkəzindən istifadə etmək üçün Bluetooth'u aktiv edin.</translation> <translation id="7877557217297072640">{0,plural, =0{İndi cihazı əvvəlki versiyaya dəyişdirin}=1{1 saniyə ərzində cihazı əvvəlki versiyaya dəyişdirin}other{# saniyə ərzində cihazı əvvəlki versiyaya dəyişdirin}}</translation> <translation id="7886169021410746335">Məxfilik ayarlarını tənzimləyin</translation> @@ -1289,6 +1295,7 @@ <translation id="856298576161209842"><ph name="MANAGER" /> <ph name="DEVICE_TYPE" /> cihazını güncəlləməyinizi tövsiyə edir</translation> <translation id="8563862697512465947">Bildiriş Ayarları</translation> <translation id="857201607579416096">Menyu ekranın aşağı sağ küncünə köçürülüb.</translation> +<translation id="8576288697319745668">Avtomatik miqyaslamanı keçirin. <ph name="STATE_TEXT" /></translation> <translation id="8594115950068821369">-<ph name="FORMATTED_TIME" /></translation> <translation id="8598235756057743477">Tətbiqləri ada və ya rəngə görə sıralayın</translation> <translation id="8614517853887502247">Baxış qoruması aktiv olduğuna görə <ph name="APP_1_TITLE" /> və <ph name="APP_2_TITLE" /> bildirişləri gizlədilib</translation>
diff --git a/ash/strings/ash_strings_da.xtb b/ash/strings/ash_strings_da.xtb index f8490ee..568d032 100644 --- a/ash/strings/ash_strings_da.xtb +++ b/ash/strings/ash_strings_da.xtb
@@ -306,6 +306,7 @@ <translation id="2805756323405976993">Apps</translation> <translation id="2814448776515246190">Afgrænset screenshot</translation> <translation id="2819276065543622893">Du bliver logget ud nu.</translation> +<translation id="2822551631199737692">Kameraet er i brug</translation> <translation id="2825224105325558319"><ph name="DISPLAY_NAME" /> understøtter ikke <ph name="SPECIFIED_RESOLUTION" />. Opløsningen blev ændret til <ph name="FALLBACK_RESOLUTION" />.</translation> <translation id="2825619548187458965">Hylde</translation> <translation id="2831035692318564937">Aktiveret indtil solopgang</translation> @@ -807,6 +808,7 @@ <translation id="5682642926269496722">Google Assistent er ikke tilgængelig for den aktuelle brugerkonto.</translation> <translation id="5689633613396158040">Nattelys gør det mere behageligt at kigge på din skærm eller læse på den i svag belysning. Tryk for at ændre indstillingerne for, hvornår Nattelys aktiveres, eller for at deaktivere funktionen helt.</translation> <translation id="5691772641933328258">Fingeraftrykket kunne ikke genkendes</translation> +<translation id="5693255400847650006">Mikrofonen er i brug</translation> <translation id="570390244361237317">Alle apps, naviger med piletasterne for at få adgang til alle apps</translation> <translation id="5707775774148071965">Din enhed understøtter en højere datahastighed end dit kabel. Enhedens ydeevne kan være begrænset.</translation> <translation id="5710450975648804523">Forstyr ikke er aktiveret</translation> @@ -981,6 +983,7 @@ <translation id="6723839937902243910">Strøm</translation> <translation id="6727969043791803658">Tilsluttet, <ph name="BATTERY_PERCENTAGE" /> % batteri</translation> <translation id="6732800389263199929">+<ph name="COUNT" /></translation> +<translation id="6737983188036277605">Kameraet og mikrofonen er i brug</translation> <translation id="6739144137573853180">GÅ TIL INDSTILLINGER</translation> <translation id="6751052314767925245">Håndhæves af din administrator</translation> <translation id="6751826523481687655">Sporing af effektivitet er slået til</translation>
diff --git a/ash/strings/ash_strings_el.xtb b/ash/strings/ash_strings_el.xtb index 0ed658f0..6f29fe60 100644 --- a/ash/strings/ash_strings_el.xtb +++ b/ash/strings/ash_strings_el.xtb
@@ -306,6 +306,7 @@ <translation id="2805756323405976993">Εφαρμογές </translation> <translation id="2814448776515246190">Μερική λήψη</translation> <translation id="2819276065543622893">Θα αποσυνδεθείτε τώρα.</translation> +<translation id="2822551631199737692">Κάμερα σε χρήση</translation> <translation id="2825224105325558319">Η οθόνη <ph name="DISPLAY_NAME" /> δεν υποστηρίζει το <ph name="SPECIFIED_RESOLUTION" />. Η ανάλυση άλλαξε σε <ph name="FALLBACK_RESOLUTION" />.</translation> <translation id="2825619548187458965">Ράφι</translation> <translation id="2831035692318564937">Ενεργό μέχρι την ανατολή</translation> @@ -807,6 +808,7 @@ <translation id="5682642926269496722">Ο Βοηθός Google δεν είναι διαθέσιμος για τον τρέχοντα λογαριασμό χρήστη.</translation> <translation id="5689633613396158040">Ο Νυχτερινός φωτισμός διευκολύνει το θέαση της οθόνης ή την ανάγνωση σε συνθήκες χαμηλού φωτισμού. Πατήστε για να αλλάξετε την ώρα που ενεργοποιείται ο Νυχτερινός φωτισμός ή απενεργοποιήστε τον πλήρως.</translation> <translation id="5691772641933328258">Δεν είναι δυνατή η αναγνώριση του δακτυλικού αποτυπώματος</translation> +<translation id="5693255400847650006">Μικρόφωνο σε χρήση</translation> <translation id="570390244361237317">Όλες οι εφαρμογές, πλοηγηθείτε με τα πλήκτρα βέλους για πρόσβαση σε όλες τις εφαρμογές</translation> <translation id="5707775774148071965">Η συσκευή σας υποστηρίζει υψηλότερο ρυθμό μετάδοσης δεδομένων σε σχέση με το καλώδιό σας. Η απόδοση της συσκευής ενδέχεται να είναι περιορισμένη.</translation> <translation id="5710450975648804523">Η λειτουργία "Μην ενοχλείτε" είναι ενεργή</translation> @@ -981,6 +983,7 @@ <translation id="6723839937902243910">Ενεργοποίηση</translation> <translation id="6727969043791803658">Συνδεδεμένη, μπαταρία <ph name="BATTERY_PERCENTAGE" /> %</translation> <translation id="6732800389263199929">+<ph name="COUNT" /></translation> +<translation id="6737983188036277605">Κάμερα και μικρόφωνο σε χρήση</translation> <translation id="6739144137573853180">ΜΕΤΑΒΑΣΗ ΣΤΙΣ ΡΥΘΜΙΣΕΙΣ</translation> <translation id="6751052314767925245">Επιβάλλεται από τον διαχειριστή σας</translation> <translation id="6751826523481687655">Η παρακολούθηση απόδοσης έχει ενεργοποιηθεί</translation>
diff --git a/ash/strings/ash_strings_en-GB.xtb b/ash/strings/ash_strings_en-GB.xtb index e4004e6..561b5fa3 100644 --- a/ash/strings/ash_strings_en-GB.xtb +++ b/ash/strings/ash_strings_en-GB.xtb
@@ -27,6 +27,7 @@ <translation id="1111021433905331574">You can change the colour of your keyboard backlight in Settings > <ph name="APP_TITLE" /></translation> <translation id="112308213915226829">Autohide shelf</translation> <translation id="1142002900084379065">Recent photos</translation> +<translation id="114451698114044150">Auto-zoom is on.</translation> <translation id="1148499908455722006">Open info dialogue for <ph name="USER_NAME" /></translation> <translation id="1150989369772528668">Calendar</translation> <translation id="1153356358378277386">Paired devices</translation> @@ -306,6 +307,7 @@ <translation id="2805756323405976993">Apps</translation> <translation id="2814448776515246190">Partial capture</translation> <translation id="2819276065543622893">You will be signed out now.</translation> +<translation id="2822551631199737692">Camera in use</translation> <translation id="2825224105325558319"><ph name="DISPLAY_NAME" /> doesn't support <ph name="SPECIFIED_RESOLUTION" />. The resolution was changed to <ph name="FALLBACK_RESOLUTION" />.</translation> <translation id="2825619548187458965">Shelf</translation> <translation id="2831035692318564937">On until sunrise</translation> @@ -448,6 +450,7 @@ <translation id="3593039967545720377">Access your clipboard history by pressing <ph name="SHORTCUT_KEY_NAME" /> + V to view your clipboard. Copy an item to get started.</translation> <translation id="3593646411856133110">Swipe up and hold to see open apps</translation> <translation id="3595596368722241419">Battery full</translation> +<translation id="3600061223661453002">Off</translation> <translation id="3604801046548457007">Desk <ph name="DESK_TITILE" /> created</translation> <translation id="3606978283550408104">Braille display connected.</translation> <translation id="3615926715408477684">Enabling mobile data will enable Bluetooth</translation> @@ -807,6 +810,7 @@ <translation id="5682642926269496722">The Google Assistant is not available for current user account.</translation> <translation id="5689633613396158040">Night Light makes it easier to look at your screen or read in dim light. Tap to change what time Night Light turns on, or turn it off completely.</translation> <translation id="5691772641933328258">Fingerprint not recognised</translation> +<translation id="5693255400847650006">Microphone in use</translation> <translation id="570390244361237317">All apps; navigate with arrow keys to access all apps</translation> <translation id="5707775774148071965">Your device supports a higher data rate than your cable. Device performance may be limited.</translation> <translation id="5710450975648804523">Do Not Disturb is on</translation> @@ -965,6 +969,7 @@ <translation id="6637729079642709226">Change time</translation> <translation id="6641720045729354415">Toggle Live Caption. <ph name="STATE_TEXT" /></translation> <translation id="6643169293433369663">Undo sort order by name</translation> +<translation id="6649641931981131786">Adjust camera to put you in the centre of the screen.</translation> <translation id="6650072551060208490"><ph name="ORIGIN_NAME" /> would like to confirm that it's you</translation> <translation id="6650933572246256093">Bluetooth device "<ph name="DEVICE_NAME" />" would like permission to pair. Please enter this passkey on that device: <ph name="PASSKEY" /></translation> <translation id="6657585470893396449">Password</translation> @@ -981,6 +986,7 @@ <translation id="6723839937902243910">Power</translation> <translation id="6727969043791803658">Connected, <ph name="BATTERY_PERCENTAGE" />% battery</translation> <translation id="6732800389263199929">+<ph name="COUNT" /></translation> +<translation id="6737983188036277605">Camera and microphone in use</translation> <translation id="6739144137573853180">GO TO SETTINGS</translation> <translation id="6751052314767925245">Enforced by your administrator</translation> <translation id="6751826523481687655">Performance tracing is turned on</translation> @@ -1005,6 +1011,7 @@ <translation id="685782768769951078">{NUM_DIGITS,plural, =1{One digit remaining}other{# digits remaining}}</translation> <translation id="6867938213751067702">Download paused <ph name="FILENAME" /></translation> <translation id="6878400149835617132">Shortcut turned off</translation> +<translation id="6878709625737492815">Auto-zoom is off.</translation> <translation id="6884665277231944629">Go back to today</translation> <translation id="6886172995547742638">Your <ph name="DEVICE_TYPE" /> may experience lower performance. Use a certified <ph name="PREFERRED_MINIMUM_POWER" />W or higher USB-C power adaptor.</translation> <translation id="688631446150864480">Press the Down arrow key to switch windows</translation> @@ -1084,6 +1091,7 @@ <translation id="7378203170292176219">Drag to select an area to record</translation> <translation id="7378594059915113390">Media controls</translation> <translation id="7378889811480108604">Battery saver mode is off</translation> +<translation id="7382680553121047388">On</translation> <translation id="7384028040782072252">Right-click anywhere to reorder your apps</translation> <translation id="7392563512730092880">You can always perform setup later from Settings.</translation> <translation id="7405710164030118432">To unlock the device, enter your Family Link parent access code</translation> @@ -1166,6 +1174,7 @@ <translation id="7868900307798234037">Unlocking with fingerprint</translation> <translation id="7872195908557044066">Your administrator is resetting your eSIM. Wait a few minutes.</translation> <translation id="7872786842639831132">Off</translation> +<translation id="7875280185395705476">Auto-zoom</translation> <translation id="7875575368831396199">Looks like Bluetooth is turned off on your <ph name="DEVICE_TYPE" />. Please turn on Bluetooth to use Phone Hub.</translation> <translation id="7877557217297072640">{0,plural, =0{Change device to previous version now}=1{Change device to previous version within 1 second}other{Change device to previous version within # seconds}}</translation> <translation id="7886169021410746335">Adjust privacy settings</translation> @@ -1286,6 +1295,7 @@ <translation id="856298576161209842"><ph name="MANAGER" /> recommends that you update your <ph name="DEVICE_TYPE" /></translation> <translation id="8563862697512465947">Notification Settings</translation> <translation id="857201607579416096">Menu moved to the bottom-right corner of the screen.</translation> +<translation id="8576288697319745668">Toggle auto-zoom. <ph name="STATE_TEXT" /></translation> <translation id="8594115950068821369">-<ph name="FORMATTED_TIME" /></translation> <translation id="8598235756057743477">Sort your apps by name or colour</translation> <translation id="8614517853887502247"><ph name="APP_1_TITLE" /> and <ph name="APP_2_TITLE" /> notifications are hidden because viewing protection is on</translation>
diff --git a/ash/strings/ash_strings_fil.xtb b/ash/strings/ash_strings_fil.xtb index e880371..9a1efc6 100644 --- a/ash/strings/ash_strings_fil.xtb +++ b/ash/strings/ash_strings_fil.xtb
@@ -306,6 +306,7 @@ <translation id="2805756323405976993">Mga App</translation> <translation id="2814448776515246190">Pag-capture ng isang bahagi ng screen</translation> <translation id="2819276065543622893">Masa-sign out ka ngayon.</translation> +<translation id="2822551631199737692">Ginagamit ang camera</translation> <translation id="2825224105325558319">Hindi sinusuportahan ng <ph name="DISPLAY_NAME" /> ang <ph name="SPECIFIED_RESOLUTION" />. Ginawang <ph name="FALLBACK_RESOLUTION" /> ang resolution.</translation> <translation id="2825619548187458965">Shelf</translation> <translation id="2831035692318564937">Naka-on hanggang pagsikat ng araw</translation> @@ -807,6 +808,7 @@ <translation id="5682642926269496722">Hindi available ang Google Assistant para sa kasalukuyang user account.</translation> <translation id="5689633613396158040">Mas pinapadali ng Night Light na tumingin sa iyong screen o magbasa sa dilim. I-tap para baguhin kung anong oras mao-on ang Night Light o tuluyan itong i-off.</translation> <translation id="5691772641933328258">Hindi nakilala ang fingerprint</translation> +<translation id="5693255400847650006">Ginagamit ang mikropono</translation> <translation id="570390244361237317">Lahat ng App, mag-navigate gamit ang mga arrow key para ma-access ang lahat ng app</translation> <translation id="5707775774148071965">Sinusuportahan ng iyong device ang mas mataas na rate ng data kaysa sa iyong cable. Posibleng maging limitado ang performance ng device.</translation> <translation id="5710450975648804523">Naka-on ang Huwag Istorbohin</translation> @@ -981,6 +983,7 @@ <translation id="6723839937902243910">Power</translation> <translation id="6727969043791803658">Nakakonekta, <ph name="BATTERY_PERCENTAGE" />% ang baterya</translation> <translation id="6732800389263199929">+<ph name="COUNT" /></translation> +<translation id="6737983188036277605">Ginagamit ang camera at mikropono</translation> <translation id="6739144137573853180">PUMUNTA SA MGA SETTING</translation> <translation id="6751052314767925245">Ipinapatupad ng iyong administrator</translation> <translation id="6751826523481687655">Naka-on ang pag-trace ng performance</translation>
diff --git a/ash/strings/ash_strings_hu.xtb b/ash/strings/ash_strings_hu.xtb index df4295b..62b5c0e 100644 --- a/ash/strings/ash_strings_hu.xtb +++ b/ash/strings/ash_strings_hu.xtb
@@ -27,6 +27,7 @@ <translation id="1111021433905331574">Lehetősége van a billentyűzet háttérvilágítása színének módosítására, amelyet a következő pontban tehet meg: Beállítások > <ph name="APP_TITLE" /></translation> <translation id="112308213915226829">Polc automatikus elrejtése</translation> <translation id="1142002900084379065">Nemrégiben feltöltött fotók</translation> +<translation id="114451698114044150">Az automatikus nagyítás be van kapcsolva.</translation> <translation id="1148499908455722006">Információs párbeszédpanel, <ph name="USER_NAME" /></translation> <translation id="1150989369772528668">Naptár</translation> <translation id="1153356358378277386">Párosított eszközök</translation> @@ -449,6 +450,7 @@ <translation id="3593039967545720377">Nyomja le a(z) <ph name="SHORTCUT_KEY_NAME" /> + V billentyűkombinációt a vágólap előzményeinek megtekintéséhez. Kezdésként másoljon valamit a vágólapra.</translation> <translation id="3593646411856133110">Felfelé csúsztatva és nyomva tartva megjelenik a többi alkalmazás</translation> <translation id="3595596368722241419">Akkumulátor feltöltve</translation> +<translation id="3600061223661453002">Ki</translation> <translation id="3604801046548457007">Létrehozta a(z) „<ph name="DESK_TITILE" />” asztalt</translation> <translation id="3606978283550408104">Braille-kijelző csatlakoztatva.</translation> <translation id="3615926715408477684">A mobiladat-kapcsolat engedélyezésével a Bluetooth is bekapcsol.</translation> @@ -968,6 +970,7 @@ <translation id="6637729079642709226">Idő módosítása</translation> <translation id="6641720045729354415">Az Élő feliratozás be- és kikapcsolása. <ph name="STATE_TEXT" /></translation> <translation id="6643169293433369663">Név szerinti rendezés visszavonása</translation> +<translation id="6649641931981131786">Állítsa a kamerát úgy, hogy Ön a képernyő közepén legyen.</translation> <translation id="6650072551060208490">A(z) <ph name="ORIGIN_NAME" /> szeretne meggyőződni a személyazonosságáról</translation> <translation id="6650933572246256093">A(z) „<ph name="DEVICE_NAME" />” Bluetooth-eszköz engedélyt kér a párosításra. Kérjük, adja meg ezt a biztonsági kódot azon az eszközön: <ph name="PASSKEY" /></translation> <translation id="6657585470893396449">Jelszó</translation> @@ -1009,6 +1012,7 @@ <translation id="685782768769951078">{NUM_DIGITS,plural, =1{1 számjegy maradt}other{# számjegy maradt}}</translation> <translation id="6867938213751067702">A következő letöltése szünetel: <ph name="FILENAME" /></translation> <translation id="6878400149835617132">A billentyűparancs ki van kapcsolva</translation> +<translation id="6878709625737492815">Az automatikus nagyítás ki van kapcsolva.</translation> <translation id="6884665277231944629">Vissza a mai napra</translation> <translation id="6886172995547742638">A(z) <ph name="DEVICE_TYPE" /> eszközön a teljesítmény csökkenése észlelhető. Használjon tanúsítvánnyal rendelkező, <ph name="PREFERRED_MINIMUM_POWER" /> W-os vagy nagyobb teljesítményű USB-C tápcsatlakozót.</translation> <translation id="688631446150864480">Ablakváltáshoz nyomja le a lefelé mutató nyilat</translation> @@ -1088,6 +1092,7 @@ <translation id="7378203170292176219">Húzással jelöljön ki egy területet a videó készítéséhez</translation> <translation id="7378594059915113390">Médiatartalmak vezérlői</translation> <translation id="7378889811480108604">Az Akkumulátorkímélő mód ki van kapcsolva</translation> +<translation id="7382680553121047388">Be</translation> <translation id="7384028040782072252">Az alkalmazások átrendezéséhez kattintson jobb egérgombbal bárhol</translation> <translation id="7392563512730092880">Később bármikor beállíthatja a Beállítások között.</translation> <translation id="7405710164030118432">Az eszköz zárolásának feloldásához adja meg a Family Link szülői hozzáférési kódot</translation> @@ -1170,6 +1175,7 @@ <translation id="7868900307798234037">Feloldás ujjlenyomattal</translation> <translation id="7872195908557044066">A rendszergazda visszaállítja az Ön eSIM-jét. Várjon néhány percet.</translation> <translation id="7872786842639831132">Ki</translation> +<translation id="7875280185395705476">Auto. nagyítás</translation> <translation id="7875575368831396199">Úgy tűnik, ki van kapcsolva a Bluetooth a(z) <ph name="DEVICE_TYPE" /> eszközön. Kapcsolja be a Bluetootht a Telefonközpont használatához.</translation> <translation id="7877557217297072640">{0,plural, =0{Eszköz módosítása az előző verzióra}=1{Eszköz módosítása az előző verzióra 1 másodpercen belül}other{Eszköz módosítása az előző verzióra # másodpercen belül}}</translation> <translation id="7886169021410746335">Adatvédelmi beállítások módosítása</translation> @@ -1290,6 +1296,7 @@ <translation id="856298576161209842">A(z) <ph name="MANAGER" /> azt javasolja, hogy frissítse a(z) <ph name="DEVICE_TYPE" /> eszközét.</translation> <translation id="8563862697512465947">Értesítési beállítások</translation> <translation id="857201607579416096">A menü a képernyő jobb alsó sarkába került.</translation> +<translation id="8576288697319745668">Az automatikus nagyítás be- vagy kikapcsolása. <ph name="STATE_TEXT" /></translation> <translation id="8594115950068821369">-<ph name="FORMATTED_TIME" /></translation> <translation id="8598235756057743477">Alkalmazások rendezése név vagy szín szerint</translation> <translation id="8614517853887502247">A(z) <ph name="APP_1_TITLE" /> és a(z) <ph name="APP_2_TITLE" /> alkalmazás értesítései rejtve vannak, mert be van kapcsolva a megtekintési védelem</translation>
diff --git a/ash/strings/ash_strings_mk.xtb b/ash/strings/ash_strings_mk.xtb index 648acec0..83eb0d6 100644 --- a/ash/strings/ash_strings_mk.xtb +++ b/ash/strings/ash_strings_mk.xtb
@@ -306,6 +306,7 @@ <translation id="2805756323405976993">Апликации</translation> <translation id="2814448776515246190">Делумно снимање</translation> <translation id="2819276065543622893">Сега ќе бидете одјавени.</translation> +<translation id="2822551631199737692">Камерата е во употреба</translation> <translation id="2825224105325558319"><ph name="DISPLAY_NAME" /> не поддржува <ph name="SPECIFIED_RESOLUTION" />. Резолуцијата е сменета во <ph name="FALLBACK_RESOLUTION" />.</translation> <translation id="2825619548187458965">Полица</translation> <translation id="2831035692318564937">Вклучено до изгрејсонце</translation> @@ -808,6 +809,7 @@ <translation id="5682642926269496722">„Помошникот на Google“ не е достапен за тековната корисничка сметка.</translation> <translation id="5689633613396158040">„Ноќно светло“ го олеснува гледањето во екранот или читањето при слаба светлина. Допрете за да го промените времето на вклучување на „Ноќно светло“ или исклучете го целосно.</translation> <translation id="5691772641933328258">Отпечатокот не е препознаен</translation> +<translation id="5693255400847650006">Микрофонот е во употреба</translation> <translation id="570390244361237317">Сите апликации, користете ги стрелките за да пристапувате до сите апликации</translation> <translation id="5707775774148071965">Вашиот уред поддржува поголем проток на податоци отколку кабелот. Изведбата на уредот може да биде ограничена.</translation> <translation id="5710450975648804523">Вклучено е „Не вознемирувај“</translation> @@ -982,6 +984,7 @@ <translation id="6723839937902243910">Енергија</translation> <translation id="6727969043791803658">Поврзан, <ph name="BATTERY_PERCENTAGE" /> % батерија</translation> <translation id="6732800389263199929">+ <ph name="COUNT" /></translation> +<translation id="6737983188036277605">Камерата и микрофонот се во употреба</translation> <translation id="6739144137573853180">ОДИ ВО ПОСТАВКИ</translation> <translation id="6751052314767925245">Наметнато од администраторот</translation> <translation id="6751826523481687655">Следењето на изведбата е вклучено</translation>
diff --git a/ash/strings/ash_strings_mn.xtb b/ash/strings/ash_strings_mn.xtb index 1b4cbe40..7568df3 100644 --- a/ash/strings/ash_strings_mn.xtb +++ b/ash/strings/ash_strings_mn.xtb
@@ -306,6 +306,7 @@ <translation id="2805756323405976993">Програм</translation> <translation id="2814448776515246190">Хэсэгчилсэн зураг авах</translation> <translation id="2819276065543622893">Та нэвтрэх хэсгээс яг одоо гарч байна.</translation> +<translation id="2822551631199737692">Камерыг ашиглаж байна</translation> <translation id="2825224105325558319"><ph name="DISPLAY_NAME" /> <ph name="SPECIFIED_RESOLUTION" />-г дэмждэггүй. Нягтралыг <ph name="FALLBACK_RESOLUTION" /> болгож өөрчилсөн.</translation> <translation id="2825619548187458965">Шельф</translation> <translation id="2831035692318564937">Нар мандах хүртэл асаалттай</translation> @@ -808,6 +809,7 @@ <translation id="5682642926269496722">Одоогийн хэрэглэгчийн бүртгэл дээр Google Туслах боломжгүй байна.</translation> <translation id="5689633613396158040">Шөнийн гэрэл нь бүдэг гэрэлтэй үед дэлгэцээ харах эсвэл уншихад илүү хялбар болгодог. Аль цагт Шөнийн гэрлийг бүрмөсөн асааж эсвэл унтраахыг өөрчлөхийн тулд товшино уу.</translation> <translation id="5691772641933328258">Хурууны хээг таньсангүй</translation> +<translation id="5693255400847650006">Микрофоныг ашиглаж байна</translation> <translation id="570390244361237317">Бүх апп, бүх аппад хандахын тулд суман товчоор шилжинэ үү</translation> <translation id="5707775774148071965">Таны төхөөрөмж кабелиас тань өндөр дата хурдыг дэмжинэ. Төхөөрөмжийн гүйцэтгэл хязгаарлагдмал байж магадгүй.</translation> <translation id="5710450975648804523">Бүү саад бол горим асаалттай байна</translation> @@ -982,6 +984,7 @@ <translation id="6723839937902243910">Эрчим хүч</translation> <translation id="6727969043791803658">Холбогдсон, батарей <ph name="BATTERY_PERCENTAGE" />%</translation> <translation id="6732800389263199929">+<ph name="COUNT" /></translation> +<translation id="6737983188036277605">Камер болон микрофоныг ашиглаж байна</translation> <translation id="6739144137573853180">ТОХИРГОО РУУ ОЧИХ</translation> <translation id="6751052314767925245">Таны администратор хэрэгжүүлдэг</translation> <translation id="6751826523481687655">Гүйцэтгэлийн хяналтыг асаасан</translation>
diff --git a/ash/strings/ash_strings_ms.xtb b/ash/strings/ash_strings_ms.xtb index 21733ec..db3bf32f53 100644 --- a/ash/strings/ash_strings_ms.xtb +++ b/ash/strings/ash_strings_ms.xtb
@@ -306,6 +306,7 @@ <translation id="2805756323405976993">Apl</translation> <translation id="2814448776515246190">Tangkapan separa</translation> <translation id="2819276065543622893">Anda akan dilog keluar sekarang.</translation> +<translation id="2822551631199737692">Kamera sedang digunakan</translation> <translation id="2825224105325558319"><ph name="DISPLAY_NAME" /> tidak menyokong <ph name="SPECIFIED_RESOLUTION" />. Peleraian telah ditukar kepada <ph name="FALLBACK_RESOLUTION" />.</translation> <translation id="2825619548187458965">Rak</translation> <translation id="2831035692318564937">Dihidupkan sehingga matahari terbit</translation> @@ -808,6 +809,7 @@ <translation id="5682642926269496722">Google Assistant tidak tersedia untuk akaun pengguna semasa.</translation> <translation id="5689633613396158040">Cahaya Malam memudahkan anda melihat skrin atau membaca dalam cahaya malap. Ketik untuk menukar masa Malam Cahaya dihidupkan atau mematikan ciri ini sepenuhnya.</translation> <translation id="5691772641933328258">Cap jari tidak dikenali</translation> +<translation id="5693255400847650006">Mikrofon sedang digunakan</translation> <translation id="570390244361237317">Semua Apl, navigasi dengan kekunci anak panah untuk mengakses semua apl</translation> <translation id="5707775774148071965">Peranti anda menyokong kadar data yang lebih tinggi daripada kabel anda. Prestasi peranti mungkin terhad.</translation> <translation id="5710450975648804523">Jangan Ganggu dihidupkan</translation> @@ -982,6 +984,7 @@ <translation id="6723839937902243910">Kuasa</translation> <translation id="6727969043791803658">Disambungkan, bateri <ph name="BATTERY_PERCENTAGE" />%</translation> <translation id="6732800389263199929">+<ph name="COUNT" /></translation> +<translation id="6737983188036277605">Kamera dan mikrofon sedang digunakan</translation> <translation id="6739144137573853180">PERGI KE TETAPAN</translation> <translation id="6751052314767925245">Dikuatkuasakan oleh pentadbir anda</translation> <translation id="6751826523481687655">Pengesanan prestasi dihidupkan</translation>
diff --git a/ash/strings/ash_strings_my.xtb b/ash/strings/ash_strings_my.xtb index c21ed0f4..8eb947e 100644 --- a/ash/strings/ash_strings_my.xtb +++ b/ash/strings/ash_strings_my.xtb
@@ -27,6 +27,7 @@ <translation id="1111021433905331574">သင့်ကီးဘုတ်နောက်ခံမီးရောင်ကို ဆက်တင်များ > <ph name="APP_TITLE" /> တွင် ပြောင်းနိုင်သည်</translation> <translation id="112308213915226829">အလိုအလျောက် ဝှက်သည့် စင်</translation> <translation id="1142002900084379065">လတ်တလော ဓာတ်ပုံများ</translation> +<translation id="114451698114044150">အလိုအလျောက်ဇူးမ် ဖွင့်ထားသည်။</translation> <translation id="1148499908455722006"><ph name="USER_NAME" /> အတွက် အချက်အလက်ဒိုင်ယာလော့ ဖွင့်ပါ</translation> <translation id="1150989369772528668">ပြက္ခဒိန်</translation> <translation id="1153356358378277386">တွဲချိတ်ထားသည့် စက်ပစ္စည်းများ</translation> @@ -449,6 +450,7 @@ <translation id="3593039967545720377">သင်၏ကလစ်ဘုတ်ကိုကြည့်ရန် <ph name="SHORTCUT_KEY_NAME" /> + V နှိပ်ခြင်းဖြင့် သင့်ကလစ်ဘုတ်မှတ်တမ်းကို ဝင်ကြည့်ပါ။ စတင်ရန် အကြောင်းအရာတစ်ခုကို မိတ္တူကူးပါ။</translation> <translation id="3593646411856133110">ဖွင့်ထားသောအက်ပ်များ ကြည့်ရန် အပေါ်သို့ပွတ်ဆွဲပြီး ဖိထားပါ</translation> <translation id="3595596368722241419">ဘက်ထရီ အားပြည့်နေ</translation> +<translation id="3600061223661453002">ပိတ်</translation> <translation id="3604801046548457007">'မြင်ကွင်း <ph name="DESK_TITILE" />' ကို ပြုလုပ်လိုက်သည်</translation> <translation id="3606978283550408104">မျက်မမြင်စာ ဖော်ပြချက် ချိတ်ဆက်ထားသည်။</translation> <translation id="3615926715408477684">မိုဘိုင်းဒေတာဖွင့်ပါက ဘလူးတုသ်ကို ဖွင့်ပါမည်</translation> @@ -967,6 +969,7 @@ <translation id="6637729079642709226">အချိန်ပြောင်းခြင်း</translation> <translation id="6641720045729354415">'တိုက်ရိုက်စာတန်း' ကို ပြောင်းပါ။ <ph name="STATE_TEXT" /></translation> <translation id="6643169293433369663">အမည်ဖြင့် အစီအစဉ်တကျစီစဉ်မှုကို နောက်ပြန်ရန်</translation> +<translation id="6649641931981131786">မျက်နှာပြင်ဗဟိုတွင် သင့်ကိုထားရန် ကင်မရာကို ချိန်ညှိပါ။</translation> <translation id="6650072551060208490">သင်ဖြစ်ကြောင်း <ph name="ORIGIN_NAME" /> က အတည်ပြုလိုသည်</translation> <translation id="6650933572246256093">ဘလူးတုသ် ကိရိယာ"<ph name="DEVICE_NAME" />"က ချိတ်တွဲရန် ခွင့်ပြုချက် ရယူလိုသည်။ ကျေးဇူးပြုပြီး ထိုကိရိယာ ထဲသို့ ဒီခွင့်ပြုသော့ ကို ထည့်ပေးပါ: <ph name="PASSKEY" /></translation> <translation id="6657585470893396449">စကားဝှက်</translation> @@ -1008,6 +1011,7 @@ <translation id="685782768769951078">{NUM_DIGITS,plural, =1{ဂဏန်းတစ်လုံး ကျန်သည်}other{ဂဏန်း # လုံး ကျန်သည်}}</translation> <translation id="6867938213751067702"><ph name="FILENAME" /> ဒေါင်းလုဒ်လုပ်ခြင်း ခဏရပ်ထားသည်</translation> <translation id="6878400149835617132">ဖြတ်လမ်းလင့်ခ်ကို ပိတ်ထားသည်</translation> +<translation id="6878709625737492815">အလိုအလျောက်ဇူးမ် ပိတ်ထားသည်။</translation> <translation id="6884665277231944629">ယနေ့သို့ ပြန်သွားရန်</translation> <translation id="6886172995547742638">သင့် <ph name="DEVICE_TYPE" /> သည် စွမ်းဆောင်ရည် နိမ့်နေနိုင်သည်။ အသိအမှတ်ပြုထားသော <ph name="PREFERRED_MINIMUM_POWER" />W သို့မဟုတ် ပိုမြင့်သော USB-C ပါဝါ ကြားခံကိရိယာ အသုံးပြုပါ။</translation> <translation id="688631446150864480">ဝင်းဒိုးများပြောင်းရန် 'အောက်ညွှန်မြား' နှိပ်ပါ</translation> @@ -1087,6 +1091,7 @@ <translation id="7378203170292176219">ရိုက်ကူးမည့်နေရာ ရွေးရန် ဖိဆွဲပါ</translation> <translation id="7378594059915113390">မီဒီယာ ထိန်းချုပ်မှုများ</translation> <translation id="7378889811480108604">ဘက်ထရီအားထိန်းမုဒ် ပိတ်ထားသည်</translation> +<translation id="7382680553121047388">ဖွင့်</translation> <translation id="7384028040782072252">နှစ်သက်ရာနေရာတွင် ညာဘက်ခလုတ်နှိပ်ပြီး သင့်အက်ပ်များကို ပြန်စီနိုင်သည်</translation> <translation id="7392563512730092880">နောက်ပိုင်းတွင် 'ဆက်တင်များ' မှ အချိန်မရွေး စနစ်ထည့်သွင်းနိုင်သည်။</translation> <translation id="7405710164030118432">စက်ပစ္စည်းကို လော့ခ်ဖွင့်ရန် သင်၏ Family Link မိဘသုံးခွင့်ကုဒ်ကို ထည့်ပါ</translation> @@ -1169,6 +1174,7 @@ <translation id="7868900307798234037">လက်ဗွေဖြင့် လော့ခ်ဖွင့်ခြင်း</translation> <translation id="7872195908557044066">သင်၏စီမံခန့်ခွဲသူသည် eSIM ကို ပြင်ဆင်သတ်မှတ်နေသည်။ မိနစ်အနည်းငယ် စောင့်ပါ။</translation> <translation id="7872786842639831132">ပိတ်</translation> +<translation id="7875280185395705476">အလိုအလျောက်ဇူးမ်</translation> <translation id="7875575368831396199">သင့် <ph name="DEVICE_TYPE" /> တွင် ဘလူးတုသ် ပိတ်ထားပုံရသည်။ 'ဖုန်းစင်တာ' အသုံးပြုရန် ဘလူးတုသ် ဖွင့်ပါ။</translation> <translation id="7877557217297072640">{0,plural, =0{စက်ကို ယခင်ဗားရှင်းသို့ ယခုပြောင်းပါ}=1{စက်ကို ယခင်ဗားရှင်းသို့ 1 စက္ကန့်အတွင်း ပြောင်းပါ}other{စက်ကို ယခင်ဗားရှင်းသို့ # စက္ကန့်အတွင်း ပြောင်းပါ}}</translation> <translation id="7886169021410746335">ကန့်သတ်ရန် ဆက်တင်များကို ချိန်ညှိပါ</translation> @@ -1289,6 +1295,7 @@ <translation id="856298576161209842">သင့် <ph name="DEVICE_TYPE" /> ကိုအပ်ဒိတ်လုပ်ရန် <ph name="MANAGER" /> ကအကြံပြုသည်</translation> <translation id="8563862697512465947">အကြောင်းကြားချက် ဆက်တင်များ</translation> <translation id="857201607579416096">မီနူးကို ဖန်သားပြင်၏ ညာဘက်အောက်ခြေထောင့်သို့ ရွှေ့လိုက်သည်။</translation> +<translation id="8576288697319745668">အလိုအလျောက်ဇူးမ် ခလုတ်။ <ph name="STATE_TEXT" /></translation> <translation id="8594115950068821369">-<ph name="FORMATTED_TIME" /></translation> <translation id="8598235756057743477">အက်ပ်များကို အမည် (သို့) အရောင်ဖြင့်စီရန်</translation> <translation id="8614517853887502247">ကြည့်ရှုမှုဆိုင်ရာ အကာအကွယ်ကို ဖွင့်ထားသောကြောင့် <ph name="APP_1_TITLE" /> နှင့် <ph name="APP_2_TITLE" /> အကြောင်းကြားချက်များကို ဖျောက်ထားသည်</translation>
diff --git a/ash/strings/ash_strings_nl.xtb b/ash/strings/ash_strings_nl.xtb index fec91f46f..0d768111 100644 --- a/ash/strings/ash_strings_nl.xtb +++ b/ash/strings/ash_strings_nl.xtb
@@ -306,6 +306,7 @@ <translation id="2805756323405976993">Apps</translation> <translation id="2814448776515246190">Gedeeltelijke opname</translation> <translation id="2819276065543622893">Je wordt nu uitgelogd.</translation> +<translation id="2822551631199737692">Camera in gebruik</translation> <translation id="2825224105325558319"><ph name="DISPLAY_NAME" /> ondersteunt <ph name="SPECIFIED_RESOLUTION" /> niet. De resolutie is gewijzigd in <ph name="FALLBACK_RESOLUTION" />.</translation> <translation id="2825619548187458965">Plank</translation> <translation id="2831035692318564937">Aan tot zonsopgang</translation> @@ -807,6 +808,7 @@ <translation id="5682642926269496722">De Google Assistent is niet beschikbaar voor het huidige gebruikersaccount.</translation> <translation id="5689633613396158040">Met Nachtverlichting kun je je scherm beter zien en lezen bij weinig licht. Tik om te wijzigen wanneer Nachtverlichting wordt aangezet of zet de functie helemaal uit.</translation> <translation id="5691772641933328258">Vingerafdruk niet herkend</translation> +<translation id="5693255400847650006">Microfoon in gebruik</translation> <translation id="570390244361237317">Alle apps, navigeer met de pijltoetsen voor toegang tot alle apps</translation> <translation id="5707775774148071965">Je apparaat ondersteunt een hogere datasnelheid dan je kabel. De prestaties van het apparaat kunnen beperkt zijn.</translation> <translation id="5710450975648804523">Niet storen staat aan</translation> @@ -981,6 +983,7 @@ <translation id="6723839937902243910">Voeding</translation> <translation id="6727969043791803658">Verbonden, batterij <ph name="BATTERY_PERCENTAGE" />%</translation> <translation id="6732800389263199929">+<ph name="COUNT" /></translation> +<translation id="6737983188036277605">Camera en microfoon in gebruik</translation> <translation id="6739144137573853180">NAAR INSTELLINGEN</translation> <translation id="6751052314767925245">Afgedwongen door je beheerder</translation> <translation id="6751826523481687655">Bijhouden van prestaties staat aan</translation>
diff --git a/ash/strings/ash_strings_no.xtb b/ash/strings/ash_strings_no.xtb index 8114a88..10b3cd9 100644 --- a/ash/strings/ash_strings_no.xtb +++ b/ash/strings/ash_strings_no.xtb
@@ -306,6 +306,7 @@ <translation id="2805756323405976993">Apper</translation> <translation id="2814448776515246190">Delvis opptak</translation> <translation id="2819276065543622893">Du blir nå logget av.</translation> +<translation id="2822551631199737692">Kameraet er i bruk</translation> <translation id="2825224105325558319"><ph name="DISPLAY_NAME" /> støtter ikke <ph name="SPECIFIED_RESOLUTION" />. Oppløsningen ble endret til <ph name="FALLBACK_RESOLUTION" />.</translation> <translation id="2825619548187458965">Hylle</translation> <translation id="2831035692318564937">Påslått til soloppgang</translation> @@ -807,6 +808,7 @@ <translation id="5682642926269496722">Google-assistenten er ikke tilgjengelig for denne brukerkontoen.</translation> <translation id="5689633613396158040">Nattlys gjør det lettere å se på skjermen og lese i svakt lys. Trykk for å endre når Nattlys slås på, eller slå det helt av.</translation> <translation id="5691772641933328258">Gjenkjenner ikke fingeravtrykket</translation> +<translation id="5693255400847650006">Mikrofonen er i bruk</translation> <translation id="570390244361237317">Alle apper – naviger med piltastene for å få tilgang til alle appene</translation> <translation id="5707775774148071965">Enheten støtter en høyere datafrekvens enn kabelen. Enhetens ytelse kan være begrenset.</translation> <translation id="5710450975648804523">Ikke forstyrr er på</translation> @@ -981,6 +983,7 @@ <translation id="6723839937902243910">Strøm</translation> <translation id="6727969043791803658">Koblet til – <ph name="BATTERY_PERCENTAGE" /> % batteri</translation> <translation id="6732800389263199929">+<ph name="COUNT" /></translation> +<translation id="6737983188036277605">Kameraet og mikrofonen er i bruk</translation> <translation id="6739144137573853180">GÅ TIL INNSTILLINGER</translation> <translation id="6751052314767925245">Påkreves av administratoren din</translation> <translation id="6751826523481687655">Ytelsessporing er slått på</translation>
diff --git a/ash/strings/ash_strings_pa.xtb b/ash/strings/ash_strings_pa.xtb index 79c31dc..d885018 100644 --- a/ash/strings/ash_strings_pa.xtb +++ b/ash/strings/ash_strings_pa.xtb
@@ -306,6 +306,7 @@ <translation id="2805756323405976993">ਐਪਸ</translation> <translation id="2814448776515246190">ਅੰਸ਼ਕ ਕੈਪਚਰ</translation> <translation id="2819276065543622893">ਤੁਹਾਨੂੰ ਹੁਣ ਸਾਈਨ ਆਉਟ ਕੀਤਾ ਜਾਏਗਾ।</translation> +<translation id="2822551631199737692">ਕੈਮਰਾ ਵਰਤੋਂ ਵਿੱਚ ਹੈ</translation> <translation id="2825224105325558319"><ph name="DISPLAY_NAME" />, <ph name="SPECIFIED_RESOLUTION" /> ਦਾ ਸਮਰਥਨ ਨਹੀਂ ਕਰਦਾ। ਰੈਜ਼ੋਲਿਊਸ਼ਨ <ph name="FALLBACK_RESOLUTION" /> ਵਿੱਚ ਬਦਲਿਆ ਗਿਆ ਸੀ।</translation> <translation id="2825619548187458965">Shelf</translation> <translation id="2831035692318564937">ਸੂਰਜ ਚੜ੍ਹਨ ਤੱਕ ਚਾਲੂ ਰਹੇਗਾ</translation> @@ -808,6 +809,7 @@ <translation id="5682642926269496722">Google Assistant ਮੌਜੂਦਾ ਵਰਤੋਂਕਾਰ ਖਾਤੇ ਲਈ ਉਪਲਬਧ ਨਹੀਂ ਹੈ।</translation> <translation id="5689633613396158040">ਰਾਤ ਦੀ ਰੋਸ਼ਨੀ ਵਿਸ਼ੇਸ਼ਤਾ ਤੁਹਾਡੀ ਸਕ੍ਰੀਨ ਨੂੰ ਘੱਟ ਰੋਸ਼ਨੀ ਵਿੱਚ ਦੇਖਣਾ ਜਾਂ ਪੜ੍ਹਨਾ ਵਧੇਰੇ ਆਸਾਨ ਬਣਾਉਂਦੀ ਹੈ। ਰਾਤ ਦੀ ਰੋਸ਼ਨੀ ਵਿਸ਼ੇਸ਼ਤਾ ਦੇ ਚਾਲੂ ਜਾਂ ਬੰਦ ਹੋਣ ਦਾ ਸਮਾਂ ਬਦਲਣ ਲਈ ਟੈਪ ਕਰੋ</translation> <translation id="5691772641933328258">ਫਿੰਗਰਪ੍ਰਿੰਟ ਦੀ ਪਛਾਣ ਨਹੀਂ ਹੋਈ</translation> +<translation id="5693255400847650006">ਮਾਈਕ੍ਰੋਫ਼ੋਨ ਵਰਤੋਂ ਵਿੱਚ ਹੈ</translation> <translation id="570390244361237317">ਸਾਰੀਆਂ ਐਪਾਂ, ਸਾਰੀਆਂ ਐਪਾਂ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਲਈ ਤੀਰ ਕੁੰਜੀਆਂ ਨਾਲ ਨੈਵੀਗੇਟ ਕਰੋ</translation> <translation id="5707775774148071965">ਤੁਹਾਡਾ ਡੀਵਾਈਸ ਤੁਹਾਡੀ ਕੇਬਲ ਨਾਲੋਂ ਵੱਧ ਡਾਟਾ ਦਰ ਦਾ ਸਮਰਥਨ ਕਰਦਾ ਹੈ। ਡੀਵਾਈਸ ਦੀ ਕਾਰਗੁਜ਼ਾਰੀ ਸੀਮਤ ਹੋ ਸਕਦੀ ਹੈ।</translation> <translation id="5710450975648804523">'ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ' ਚਾਲੂ ਹੈ</translation> @@ -982,6 +984,7 @@ <translation id="6723839937902243910">ਪਾਵਰ</translation> <translation id="6727969043791803658">ਕਨੈਕਟ ਕੀਤਾ ਗਿਆ, <ph name="BATTERY_PERCENTAGE" />% ਬੈਟਰੀ</translation> <translation id="6732800389263199929">+<ph name="COUNT" /></translation> +<translation id="6737983188036277605">ਕੈਮਰਾ ਅਤੇ ਮਾਈਕ੍ਰੋਫ਼ੋਨ ਵਰਤੋਂ ਵਿੱਚ ਹਨ</translation> <translation id="6739144137573853180">ਸੈਟਿੰਗਾਂ 'ਤੇ ਜਾਓ</translation> <translation id="6751052314767925245">ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਵੱਲੋਂ ਲਾਗੂ ਕੀਤਾ ਗਿਆ</translation> <translation id="6751826523481687655">ਪ੍ਰਦਰਸ਼ਨ ਟ੍ਰੇਸਿੰਗ ਚਾਲੂ ਹੈ</translation>
diff --git a/ash/strings/ash_strings_pl.xtb b/ash/strings/ash_strings_pl.xtb index 663311c9..a93ae28 100644 --- a/ash/strings/ash_strings_pl.xtb +++ b/ash/strings/ash_strings_pl.xtb
@@ -27,6 +27,7 @@ <translation id="1111021433905331574">Kolor podświetlenia klawiatury możesz zmienić, klikając Ustawienia > <ph name="APP_TITLE" /></translation> <translation id="112308213915226829">Autoukrywanie półki</translation> <translation id="1142002900084379065">Najnowsze zdjęcia</translation> +<translation id="114451698114044150">Automatyczne powiększenie jest włączone.</translation> <translation id="1148499908455722006">Otwórz okno informacyjne dla konta <ph name="USER_NAME" /></translation> <translation id="1150989369772528668">Kalendarz</translation> <translation id="1153356358378277386">Sparowane urządzenia</translation> @@ -449,6 +450,7 @@ <translation id="3593039967545720377">Aby wyświetlić schowek i jego historię, naciśnij <ph name="SHORTCUT_KEY_NAME" /> + V. Najpierw skopiuj element.</translation> <translation id="3593646411856133110">Aby zobaczyć otwarte aplikacje, przesuń palcem w górę i przytrzymaj</translation> <translation id="3595596368722241419">Bateria naładowana</translation> +<translation id="3600061223661453002">Wył.</translation> <translation id="3604801046548457007">Utworzono biurko <ph name="DESK_TITILE" /></translation> <translation id="3606978283550408104">Podłączono monitor brajlowski.</translation> <translation id="3615926715408477684">Wraz z mobilną transmisją danych zostanie włączony Bluetooth</translation> @@ -966,6 +968,7 @@ <translation id="6637729079642709226">Zmień czas</translation> <translation id="6641720045729354415">Włącz lub wyłącz napisy na żywo. <ph name="STATE_TEXT" /></translation> <translation id="6643169293433369663">Cofnij sortowanie według nazwy</translation> +<translation id="6649641931981131786">Dostosuj kamerę tak, aby pokazywała Cię pośrodku ekranu.</translation> <translation id="6650072551060208490">Strona <ph name="ORIGIN_NAME" /> wymaga potwierdzenia, że to Ty</translation> <translation id="6650933572246256093">Urządzenie Bluetooth „<ph name="DEVICE_NAME" />” chce się sparować. Wpisz na nim ten klucz: <ph name="PASSKEY" /></translation> <translation id="6657585470893396449">Hasło</translation> @@ -1007,6 +1010,7 @@ <translation id="685782768769951078">{NUM_DIGITS,plural, =1{Pozostała 1 cyfra}few{Pozostały # cyfry}many{Pozostało # cyfr}other{Pozostało # cyfry}}</translation> <translation id="6867938213751067702">Pobieranie wstrzymane: <ph name="FILENAME" /></translation> <translation id="6878400149835617132">Skrót wyłączony</translation> +<translation id="6878709625737492815">Automatyczne powiększenie jest wyłączone.</translation> <translation id="6884665277231944629">Wróć do dzisiaj</translation> <translation id="6886172995547742638">Twoje urządzenie <ph name="DEVICE_TYPE" /> może mieć gorszą wydajność. Używaj certyfikowanego zasilacza USB-C o mocy co najmniej <ph name="PREFERRED_MINIMUM_POWER" /> W.</translation> <translation id="688631446150864480">Aby przełączać okna, naciskaj klawisz strzałki w dół</translation> @@ -1086,6 +1090,7 @@ <translation id="7378203170292176219">Przeciągnij, by wybrać obszar, który chcesz nagrać</translation> <translation id="7378594059915113390">Sterowanie multimediami</translation> <translation id="7378889811480108604">Oszczędzanie baterii jest wyłączone.</translation> +<translation id="7382680553121047388">Wł.</translation> <translation id="7384028040782072252">Kliknij prawym przyciskiem w dowolnym miejscu, aby zmienić kolejność aplikacji</translation> <translation id="7392563512730092880">W każdej chwili możesz skonfigurować sterowanie telefonem w Ustawieniach.</translation> <translation id="7405710164030118432">Aby odblokować urządzenie, wpisz kod dostępu Family Link rodzica</translation> @@ -1168,6 +1173,7 @@ <translation id="7868900307798234037">Odblokowano odciskiem palca</translation> <translation id="7872195908557044066">Administrator resetuje Twoją kartę eSIM. Zaczekaj kilka minut.</translation> <translation id="7872786842639831132">Wyłączono</translation> +<translation id="7875280185395705476">Automatyczne powiększenie</translation> <translation id="7875575368831396199">Wygląda na to, że Twoje urządzenie (<ph name="DEVICE_TYPE" />) ma wyłączony Bluetooth. Włącz go, by korzystać ze sterowania telefonem.</translation> <translation id="7877557217297072640">{0,plural, =0{Przywróć na tym urządzeniu wcześniejszą wersję systemu operacyjnego teraz}=1{Przywróć na tym urządzeniu wcześniejszą wersję systemu operacyjnego w ciągu 1 sekundy}few{Przywróć na tym urządzeniu wcześniejszą wersję systemu operacyjnego w ciągu # sekund}many{Przywróć na tym urządzeniu wcześniejszą wersję systemu operacyjnego w ciągu # sekund}other{Przywróć na tym urządzeniu wcześniejszą wersję systemu operacyjnego w ciągu # sekundy}}</translation> <translation id="7886169021410746335">Dostosowywać ustawienia prywatności</translation> @@ -1288,6 +1294,7 @@ <translation id="856298576161209842"><ph name="MANAGER" /> zaleca aktualizację tego urządzenia <ph name="DEVICE_TYPE" /></translation> <translation id="8563862697512465947">Ustawienia powiadomień</translation> <translation id="857201607579416096">Menu zostało przeniesione w prawy dolny róg ekranu.</translation> +<translation id="8576288697319745668">Przełącz automatyczne powiększenie. <ph name="STATE_TEXT" /></translation> <translation id="8594115950068821369">–<ph name="FORMATTED_TIME" /></translation> <translation id="8598235756057743477">Posortuj aplikacje według nazwy lub koloru</translation> <translation id="8614517853887502247">Powiadomienia z aplikacji <ph name="APP_1_TITLE" /> i <ph name="APP_2_TITLE" /> zostały ukryte, bo masz włączoną ochronę przeglądania</translation>
diff --git a/ash/strings/ash_strings_ro.xtb b/ash/strings/ash_strings_ro.xtb index cdcba5b..120c2788 100644 --- a/ash/strings/ash_strings_ro.xtb +++ b/ash/strings/ash_strings_ro.xtb
@@ -306,6 +306,7 @@ <translation id="2805756323405976993">Aplicații</translation> <translation id="2814448776515246190">Captură parțială</translation> <translation id="2819276065543622893">Veți fi deconectat(ă) acum.</translation> +<translation id="2822551631199737692">Camera foto este în uz</translation> <translation id="2825224105325558319"><ph name="DISPLAY_NAME" /> nu acceptă <ph name="SPECIFIED_RESOLUTION" />. Rezoluția a fost modificată la <ph name="FALLBACK_RESOLUTION" />.</translation> <translation id="2825619548187458965">Raft</translation> <translation id="2831035692318564937">Activată până la răsărit</translation> @@ -807,6 +808,7 @@ <translation id="5682642926269496722">Asistentul Google nu este disponibil pentru contul de utilizator actual.</translation> <translation id="5689633613396158040">Lumină de noapte îți oferă mai multă comoditate când privești ecranul sau citești într-o lumină slabă. Atinge pentru a schimba ora la care se activează Lumina de noapte sau dezactiveaz-o complet.</translation> <translation id="5691772641933328258">Amprenta nu a fost recunoscută</translation> +<translation id="5693255400847650006">Microfonul este în uz</translation> <translation id="570390244361237317">Toate aplicațiile, navighează cu tastele săgeți ca să le accesezi</translation> <translation id="5707775774148071965">Dispozitivul acceptă o rată mai mare de transfer de date decât cablul. Este posibil ca performanța dispozitivului să fie limitată.</translation> <translation id="5710450975648804523">Funcția Nu deranja este activată</translation> @@ -981,6 +983,7 @@ <translation id="6723839937902243910">Alimentare</translation> <translation id="6727969043791803658">Conectat, nivelul bateriei: <ph name="BATTERY_PERCENTAGE" /> %</translation> <translation id="6732800389263199929">+<ph name="COUNT" /></translation> +<translation id="6737983188036277605">Camera foto și microfonul sunt în uz</translation> <translation id="6739144137573853180">ACCESEAZĂ SETĂRILE</translation> <translation id="6751052314767925245">Impusă de administrator</translation> <translation id="6751826523481687655">Urmărirea performanțelor este activată</translation>
diff --git a/ash/strings/ash_strings_sk.xtb b/ash/strings/ash_strings_sk.xtb index 0281600..26ae9c6 100644 --- a/ash/strings/ash_strings_sk.xtb +++ b/ash/strings/ash_strings_sk.xtb
@@ -306,6 +306,7 @@ <translation id="2805756323405976993">Aplikácie</translation> <translation id="2814448776515246190">Čiastočná snímka</translation> <translation id="2819276065543622893">Teraz prebehne odhlásenie.</translation> +<translation id="2822551631199737692">Kamera sa používa</translation> <translation id="2825224105325558319"><ph name="DISPLAY_NAME" /> nepodporuje rozlíšenie <ph name="SPECIFIED_RESOLUTION" />. Preto bolo zmenené na <ph name="FALLBACK_RESOLUTION" />.</translation> <translation id="2825619548187458965">Polička</translation> <translation id="2831035692318564937">Zapnutý do východu slnka</translation> @@ -807,6 +808,7 @@ <translation id="5682642926269496722">Asistent Google nie je k dispozícii pre aktuálny používateľský účet.</translation> <translation id="5689633613396158040">Vďaka nočnému režimu bude vaša obrazovka pri tlmenom osvetlení menej rušivá a čitateľnejšia. Klepnutím môžete zmeniť čas zapnutia nočného režimu, prípadne ho môžete úplne vypnúť.</translation> <translation id="5691772641933328258">Odtlačok prsta nebol rozpoznaný</translation> +<translation id="5693255400847650006">Mikrofón sa používa</translation> <translation id="570390244361237317">Všetky aplikácie: prístup k všetkým aplikáciám získate klávesmi so šípkami</translation> <translation id="5707775774148071965">Zariadenie podporuje vyššiu rýchlosť prenosu dát než kábel. Výkonnosť zariadenia môže byť obmedzená.</translation> <translation id="5710450975648804523">Režim Nerušiť je zapnutý</translation> @@ -981,6 +983,7 @@ <translation id="6723839937902243910">Napájanie</translation> <translation id="6727969043791803658">Pripojené, <ph name="BATTERY_PERCENTAGE" /> % batérie</translation> <translation id="6732800389263199929">+<ph name="COUNT" /></translation> +<translation id="6737983188036277605">Kamera a mikrofón sa používajú</translation> <translation id="6739144137573853180">PREJSŤ DO NASTAVENÍ</translation> <translation id="6751052314767925245">Presadzuje váš správca</translation> <translation id="6751826523481687655">Trasovanie výkonnosti je zapnuté</translation>
diff --git a/ash/strings/ash_strings_sr-Latn.xtb b/ash/strings/ash_strings_sr-Latn.xtb index 773c0a44..cd0d7154 100644 --- a/ash/strings/ash_strings_sr-Latn.xtb +++ b/ash/strings/ash_strings_sr-Latn.xtb
@@ -306,6 +306,7 @@ <translation id="2805756323405976993">Aplikacije</translation> <translation id="2814448776515246190">Delimično snimanje</translation> <translation id="2819276065543622893">Bićete odmah odjavljeni.</translation> +<translation id="2822551631199737692">Kamera se koristi</translation> <translation id="2825224105325558319"><ph name="DISPLAY_NAME" /> ne podržava rezoluciju <ph name="SPECIFIED_RESOLUTION" />. Rezolucija je promenjena u <ph name="FALLBACK_RESOLUTION" />.</translation> <translation id="2825619548187458965">Polica</translation> <translation id="2831035692318564937">Uključeno do svitanja</translation> @@ -807,6 +808,7 @@ <translation id="5682642926269496722">Google nije dostupan za aktuelni korisnički nalog.</translation> <translation id="5689633613396158040">Noćno svetlo vam olakšava da pregledate sadržaj ekrana ili da čitate pri prigušenom svetlu. Dodirnite da biste promenili vreme kada se noćno svetlo uključuje ili ga potpuno isključite.</translation> <translation id="5691772641933328258">Otisak prsta nije prepoznat</translation> +<translation id="5693255400847650006">Mikrofon se koristi</translation> <translation id="570390244361237317">Sve aplikacije, krećite se pomoću tastera sa strelicama da biste pristupali svim aplikacijama</translation> <translation id="5707775774148071965">Uređaj podržava veći protok podataka u odnosu na kabl. Učinak uređaja će možda biti ograničen.</translation> <translation id="5710450975648804523">Režim Ne uznemiravaj je uključen</translation> @@ -981,6 +983,7 @@ <translation id="6723839937902243910">Energija</translation> <translation id="6727969043791803658">Povezano, nivo baterije je <ph name="BATTERY_PERCENTAGE" />%</translation> <translation id="6732800389263199929">+<ph name="COUNT" /></translation> +<translation id="6737983188036277605">Kamera i mikrofon se koriste</translation> <translation id="6739144137573853180">IDI U PODEŠAVANJA</translation> <translation id="6751052314767925245">Primenjuje administrator</translation> <translation id="6751826523481687655">Praćenje učinka je uključeno</translation>
diff --git a/ash/strings/ash_strings_sr.xtb b/ash/strings/ash_strings_sr.xtb index a5e1a46..35e51b9 100644 --- a/ash/strings/ash_strings_sr.xtb +++ b/ash/strings/ash_strings_sr.xtb
@@ -306,6 +306,7 @@ <translation id="2805756323405976993">Апликације</translation> <translation id="2814448776515246190">Делимично снимање</translation> <translation id="2819276065543622893">Бићете одмах одјављени.</translation> +<translation id="2822551631199737692">Камера се користи</translation> <translation id="2825224105325558319"><ph name="DISPLAY_NAME" /> не подржава резолуцију <ph name="SPECIFIED_RESOLUTION" />. Резолуција је промењена у <ph name="FALLBACK_RESOLUTION" />.</translation> <translation id="2825619548187458965">Полица</translation> <translation id="2831035692318564937">Укључено до свитања</translation> @@ -807,6 +808,7 @@ <translation id="5682642926269496722">Google није доступан за актуелни кориснички налог.</translation> <translation id="5689633613396158040">Ноћно светло вам олакшава да прегледате садржај екрана или да читате при пригушеном светлу. Додирните да бисте променили време када се ноћно светло укључује или га потпуно искључите.</translation> <translation id="5691772641933328258">Отисак прста није препознат</translation> +<translation id="5693255400847650006">Микрофон се користи</translation> <translation id="570390244361237317">Све апликације, крећите се помоћу тастера са стрелицама да бисте приступали свим апликацијама</translation> <translation id="5707775774148071965">Уређај подржава већи проток података у односу на кабл. Учинак уређаја ће можда бити ограничен.</translation> <translation id="5710450975648804523">Режим Не узнемиравај је укључен</translation> @@ -981,6 +983,7 @@ <translation id="6723839937902243910">Енергија</translation> <translation id="6727969043791803658">Повезано, ниво батерије је <ph name="BATTERY_PERCENTAGE" />%</translation> <translation id="6732800389263199929">+<ph name="COUNT" /></translation> +<translation id="6737983188036277605">Камера и микрофон се користе</translation> <translation id="6739144137573853180">ИДИ У ПОДЕШАВАЊА</translation> <translation id="6751052314767925245">Примењује администратор</translation> <translation id="6751826523481687655">Праћење учинка је укључено</translation>
diff --git a/ash/strings/ash_strings_te.xtb b/ash/strings/ash_strings_te.xtb index b27f53b..f2106b2 100644 --- a/ash/strings/ash_strings_te.xtb +++ b/ash/strings/ash_strings_te.xtb
@@ -306,6 +306,7 @@ <translation id="2805756323405976993">యాప్స్</translation> <translation id="2814448776515246190">పాక్షికంగా క్యాప్చర్ చేయండి</translation> <translation id="2819276065543622893">మీరు ఇప్పుడు సైన్ అవుట్ చేయబడతారు.</translation> +<translation id="2822551631199737692">కెమెరా ఉపయోగంలో ఉంది</translation> <translation id="2825224105325558319"><ph name="DISPLAY_NAME" /> <ph name="SPECIFIED_RESOLUTION" />కు మద్దతివ్వదు. రిజల్యూషన్ <ph name="FALLBACK_RESOLUTION" />కు మార్చబడింది.</translation> <translation id="2825619548187458965">అర</translation> <translation id="2831035692318564937">సూర్యోదయం వరకు ఆన్లో ఉంటుంది</translation> @@ -808,6 +809,7 @@ <translation id="5682642926269496722">ప్రస్తుత వినియోగదారు ఖాతాలో Google Assistant పని చేయదు.</translation> <translation id="5689633613396158040">రాత్రి కాంతి ఫీచర్ అనేది తక్కువ కాంతి ఉన్న సందర్భాలలో మీ స్క్రీన్ను స్పష్టంగా చూడటాన్ని లేదా చదవడాన్ని మరింత సులభతరం చేస్తుంది. నైట్ లైట్ ఆన్ చేసే సమయాన్ని మార్చడానికి నొక్కండి లేదా దాన్ని పూర్తిగా ఆపివేయండి.</translation> <translation id="5691772641933328258">వేలిముద్ర గుర్తించబడలేదు</translation> +<translation id="5693255400847650006">మైక్రోఫోన్ ఉపయోగంలో ఉంది</translation> <translation id="570390244361237317">అన్ని యాప్లు, అన్ని యాప్లను యాక్సెస్ చేయడానికి బాణం కీలతో నావిగేట్ చేయండి</translation> <translation id="5707775774148071965">మీ పరికరం మీ కేబుల్ కంటే ఎక్కువ డేటా రేట్ను సపోర్ట్ చేస్తుంది. పరికర పనితీరు పరిమితంగా ఉండవచ్చు.</translation> <translation id="5710450975648804523">'అంతరాయం కలిగించవద్దు' మోడ్ ఆన్లో ఉంది</translation> @@ -982,6 +984,7 @@ <translation id="6723839937902243910">పవర్</translation> <translation id="6727969043791803658">కనెక్ట్ చేయబడింది, <ph name="BATTERY_PERCENTAGE" />% బ్యాటరీ ఉంది</translation> <translation id="6732800389263199929">+<ph name="COUNT" /></translation> +<translation id="6737983188036277605">కెమెరా, మైక్రోఫోన్ ఉపయోగంలో ఉన్నాయి</translation> <translation id="6739144137573853180">సెట్టింగ్లకు వెళ్లండి</translation> <translation id="6751052314767925245">మీ నిర్వాహకుని ద్వారా అమలు చేయబడింది</translation> <translation id="6751826523481687655">పనితీరు స్థితిగతి కనుగొనడం ఆన్లో ఉంది</translation>
diff --git a/ash/strings/ash_strings_th.xtb b/ash/strings/ash_strings_th.xtb index c3b10a2..cc80da4 100644 --- a/ash/strings/ash_strings_th.xtb +++ b/ash/strings/ash_strings_th.xtb
@@ -306,6 +306,7 @@ <translation id="2805756323405976993">แอป</translation> <translation id="2814448776515246190">จับภาพบางส่วน</translation> <translation id="2819276065543622893">คุณจะออกจากระบบในตอนนี้</translation> +<translation id="2822551631199737692">ใช้กล้องอยู่</translation> <translation id="2825224105325558319"><ph name="DISPLAY_NAME" /> ไม่รองรับ <ph name="SPECIFIED_RESOLUTION" /> ระบบเปลี่ยนความละเอียดเป็น <ph name="FALLBACK_RESOLUTION" /></translation> <translation id="2825619548187458965">ชั้นวาง</translation> <translation id="2831035692318564937">เปิดจนถึงพระอาทิตย์ขึ้น</translation> @@ -807,6 +808,7 @@ <translation id="5682642926269496722">Google Assistant ไม่พร้อมใช้งานกับบัญชีผู้ใช้ปัจจุบัน</translation> <translation id="5689633613396158040">แสงตอนกลางคืนช่วยให้มองหรืออ่านหน้าจอในแสงสลัวได้ง่ายขึ้น แตะเพื่อเปลี่ยนเวลาเปิดแสงตอนกลางคืนหรือจะปิดไปเลยก็ได้</translation> <translation id="5691772641933328258">ระบบไม่รู้จักลายนิ้วมือนี้</translation> +<translation id="5693255400847650006">ใช้ไมโครโฟนอยู่</translation> <translation id="570390244361237317">แอปทั้งหมด ใช้แป้นลูกศรเพื่อเข้าถึงแอปทั้งหมด</translation> <translation id="5707775774148071965">อุปกรณ์รองรับอัตราข้อมูลที่สูงกว่าสายสัญญาณ และอาจจำกัดประสิทธิภาพของอุปกรณ์</translation> <translation id="5710450975648804523">โหมดห้ามรบกวนเปิดอยู่</translation> @@ -981,6 +983,7 @@ <translation id="6723839937902243910">พลังงาน</translation> <translation id="6727969043791803658">เชื่อมต่อแล้ว แบตเตอรี่ <ph name="BATTERY_PERCENTAGE" />%</translation> <translation id="6732800389263199929">+<ph name="COUNT" /></translation> +<translation id="6737983188036277605">ใช้กล้องและไมโครโฟนอยู่</translation> <translation id="6739144137573853180">ไปที่การตั้งค่า</translation> <translation id="6751052314767925245">บังคับใช้โดยผู้ดูแลระบบของคุณ</translation> <translation id="6751826523481687655">การติดตามประสิทธิภาพเปิดอยู่</translation>
diff --git a/ash/strings/ash_strings_vi.xtb b/ash/strings/ash_strings_vi.xtb index ab4679e0a..06c7609 100644 --- a/ash/strings/ash_strings_vi.xtb +++ b/ash/strings/ash_strings_vi.xtb
@@ -306,6 +306,7 @@ <translation id="2805756323405976993">Ứng dụng</translation> <translation id="2814448776515246190">Chụp một phần màn hình</translation> <translation id="2819276065543622893">Bạn sẽ bị đăng xuất bây giờ.</translation> +<translation id="2822551631199737692">Máy ảnh đang được sử dụng</translation> <translation id="2825224105325558319"><ph name="DISPLAY_NAME" /> không hỗ trợ <ph name="SPECIFIED_RESOLUTION" />. Độ phân giải đã được thay đổi thành <ph name="FALLBACK_RESOLUTION" />.</translation> <translation id="2825619548187458965">Giá</translation> <translation id="2831035692318564937">Bật cho đến bình minh</translation> @@ -807,6 +808,7 @@ <translation id="5682642926269496722">Tài khoản người dùng hiện tại chưa hỗ trợ Trợ lý Google.</translation> <translation id="5689633613396158040">Chế độ Ánh sáng đêm giúp bạn cảm thấy dễ chịu khi nhìn màn hình hoặc đọc trong điều kiện ánh sáng yếu. Hãy nhấn để thay đổi thời gian bật hoặc tắt hoàn toàn chế Ánh sáng đêm.</translation> <translation id="5691772641933328258">Không nhận dạng được vân tay</translation> +<translation id="5693255400847650006">Micrô đang được sử dụng</translation> <translation id="570390244361237317">Tất cả ứng dụng, di chuyển bằng phím mũi tên để truy cập tất cả ứng dụng</translation> <translation id="5707775774148071965">Thiết bị của bạn hỗ trợ tốc độ dữ liệu cao hơn cáp của bạn. Hiệu suất của thiết bị có thể bị hạn chế.</translation> <translation id="5710450975648804523">Chế độ Không làm phiền đang bật</translation> @@ -981,6 +983,7 @@ <translation id="6723839937902243910">Nguồn</translation> <translation id="6727969043791803658">Đã kết nối, <ph name="BATTERY_PERCENTAGE" />% pin</translation> <translation id="6732800389263199929">+ <ph name="COUNT" /></translation> +<translation id="6737983188036277605">Máy ảnh và micrô đang được sử dụng</translation> <translation id="6739144137573853180">CHUYỂN ĐẾN PHẦN CÀI ĐẶT</translation> <translation id="6751052314767925245">Do quản trị viên thực thi</translation> <translation id="6751826523481687655">Tính năng theo dõi hiệu suất đang bật</translation>
diff --git a/ash/strings/ash_strings_zh-HK.xtb b/ash/strings/ash_strings_zh-HK.xtb index e781648..8f2f6de 100644 --- a/ash/strings/ash_strings_zh-HK.xtb +++ b/ash/strings/ash_strings_zh-HK.xtb
@@ -27,6 +27,7 @@ <translation id="1111021433905331574">您可在「設定」>「<ph name="APP_TITLE" />」中變更鍵盤背光的顏色</translation> <translation id="112308213915226829">自動隱藏捷徑列</translation> <translation id="1142002900084379065">最近的相片</translation> +<translation id="114451698114044150">自動放大功能已開啟。</translation> <translation id="1148499908455722006">打開 <ph name="USER_NAME" /> 嘅資料對話框</translation> <translation id="1150989369772528668">日曆</translation> <translation id="1153356358378277386">已配對的裝置</translation> @@ -448,6 +449,7 @@ <translation id="3593039967545720377">如要存取剪貼簿記錄,按下<ph name="SHORTCUT_KEY_NAME" /> + V 鍵即可查看剪貼簿。複製項目即可開始使用。</translation> <translation id="3593646411856133110">向上滑動並按住螢幕,即可查看開啟的應用程式</translation> <translation id="3595596368722241419">電池已滿</translation> +<translation id="3600061223661453002">關閉</translation> <translation id="3604801046548457007">已建立桌面 <ph name="DESK_TITILE" /></translation> <translation id="3606978283550408104">已連接點字顯示器。</translation> <translation id="3615926715408477684">如果您啟用流動數據,藍牙亦會隨之開啟</translation> @@ -963,6 +965,7 @@ <translation id="6637729079642709226">變更時間</translation> <translation id="6641720045729354415">切換「即時字幕」。<ph name="STATE_TEXT" /></translation> <translation id="6643169293433369663">根據名稱復原排列次序</translation> +<translation id="6649641931981131786">調整攝影機,讓自己保持在畫面中央。</translation> <translation id="6650072551060208490"><ph name="ORIGIN_NAME" /> 要求確認您的身分</translation> <translation id="6650933572246256093">藍牙裝置「<ph name="DEVICE_NAME" />」要求配對權限,請在裝置上輸入這個密碼金鑰:<ph name="PASSKEY" /></translation> <translation id="6657585470893396449">密碼</translation> @@ -1003,6 +1006,7 @@ <translation id="685782768769951078">{NUM_DIGITS,plural, =1{淨返 1 個數字}other{淨返 # 個數字}}</translation> <translation id="6867938213751067702">暫停咗下載 <ph name="FILENAME" /></translation> <translation id="6878400149835617132">已關閉快速鍵功能</translation> +<translation id="6878709625737492815">自動放大功能已關閉。</translation> <translation id="6884665277231944629">返回今天</translation> <translation id="6886172995547742638">您的 <ph name="DEVICE_TYPE" /> 效能或會降低。請使用 <ph name="PREFERRED_MINIMUM_POWER" />W 或以上且符合標準的 USB-C 電源適配器。</translation> <translation id="688631446150864480">㩒向下箭咀掣就可以轉換視窗</translation> @@ -1082,6 +1086,7 @@ <translation id="7378203170292176219">拖曳以選取要錄影的範圍</translation> <translation id="7378594059915113390">媒體控制項</translation> <translation id="7378889811480108604">「省電模式」已關閉</translation> +<translation id="7382680553121047388">開啟</translation> <translation id="7384028040782072252">在任何地方按一下右鍵,即可將應用程式重新排序</translation> <translation id="7392563512730092880">您稍後可隨時前往「設定」頁面進行設定。</translation> <translation id="7405710164030118432">如要解鎖裝置,請輸入您的 Family Link 家長存取碼</translation> @@ -1164,6 +1169,7 @@ <translation id="7868900307798234037">用緊指紋解鎖</translation> <translation id="7872195908557044066">管理員正在重設您的 eSIM 卡。請等候幾分鐘。</translation> <translation id="7872786842639831132">關閉</translation> +<translation id="7875280185395705476">自動放大</translation> <translation id="7875575368831396199"><ph name="DEVICE_TYPE" /> 上的藍牙似乎已關閉。請開啟藍牙,才能使用 Phone Hub。</translation> <translation id="7877557217297072640">{0,plural, =0{現在將裝置回復為先前的版本}=1{在 1 秒內將裝置回復為先前的版本}other{在 # 秒內將裝置回復為先前的版本}}</translation> <translation id="7886169021410746335">調整私隱權設定</translation> @@ -1284,6 +1290,7 @@ <translation id="856298576161209842"><ph name="MANAGER" /> 建議您更新 <ph name="DEVICE_TYPE" /></translation> <translation id="8563862697512465947">通知設定</translation> <translation id="857201607579416096">已經將選單移去螢幕右下角。</translation> +<translation id="8576288697319745668">切換自動放大功能。<ph name="STATE_TEXT" /></translation> <translation id="8594115950068821369">-<ph name="FORMATTED_TIME" /></translation> <translation id="8598235756057743477">按名稱或顏色將應用程式排序</translation> <translation id="8614517853887502247">檢視保護功能已開啟,因此系統已隱藏 <ph name="APP_1_TITLE" /> 和 <ph name="APP_2_TITLE" /> 的通知</translation>
diff --git a/ash/strings/ash_strings_zh-TW.xtb b/ash/strings/ash_strings_zh-TW.xtb index 7a5319f..88eeca9 100644 --- a/ash/strings/ash_strings_zh-TW.xtb +++ b/ash/strings/ash_strings_zh-TW.xtb
@@ -27,6 +27,7 @@ <translation id="1111021433905331574">你可以在「設定」>「<ph name="APP_TITLE" />」中變更鍵盤背光的顏色</translation> <translation id="112308213915226829">自動隱藏檔案櫃</translation> <translation id="1142002900084379065">最近的相片</translation> +<translation id="114451698114044150">自動放大功能已開啟。</translation> <translation id="1148499908455722006">開啟「<ph name="USER_NAME" />」的資訊對話方塊</translation> <translation id="1150989369772528668">日曆</translation> <translation id="1153356358378277386">配對裝置</translation> @@ -448,6 +449,7 @@ <translation id="3593039967545720377">按下 <ph name="SHORTCUT_KEY_NAME" /> + V 鍵查看剪貼簿,藉此存取剪貼簿歷史記錄。複製任一項目即可開始。</translation> <translation id="3593646411856133110">向上滑動並按住螢幕即可查看開啟的應用程式</translation> <translation id="3595596368722241419">電池已充滿</translation> +<translation id="3600061223661453002">關閉</translation> <translation id="3604801046548457007">已建立桌面 <ph name="DESK_TITILE" /></translation> <translation id="3606978283550408104">已連接點字顯示器。</translation> <translation id="3615926715408477684">如果啟用行動數據,藍牙功能也會一併開啟</translation> @@ -964,6 +966,7 @@ <translation id="6637729079642709226">變更時間</translation> <translation id="6641720045729354415">切換即時字幕。<ph name="STATE_TEXT" /></translation> <translation id="6643169293433369663">復原依名稱排列順序</translation> +<translation id="6649641931981131786">調整攝影機,讓自己保持在畫面中央。</translation> <translation id="6650072551060208490"><ph name="ORIGIN_NAME" /> 要求確認你的身分</translation> <translation id="6650933572246256093">藍牙裝置「<ph name="DEVICE_NAME" />」要求配對權限,請在裝置上輸入此密碼金鑰:<ph name="PASSKEY" /></translation> <translation id="6657585470893396449">密碼</translation> @@ -1004,6 +1007,7 @@ <translation id="685782768769951078">{NUM_DIGITS,plural, =1{剩餘一個位數}other{剩餘 # 個位數}}</translation> <translation id="6867938213751067702">已暫停下載 <ph name="FILENAME" /></translation> <translation id="6878400149835617132">已關閉快速鍵功能</translation> +<translation id="6878709625737492815">自動放大功能已關閉。</translation> <translation id="6884665277231944629">返回今天</translation> <translation id="6886172995547742638">你的「<ph name="DEVICE_TYPE" />」可能會有效能低落的問題。請使用 <ph name="PREFERRED_MINIMUM_POWER" /> 瓦以上且符合標準的 USB-C 電源變壓器。</translation> <translation id="688631446150864480">按下向下鍵即可切換視窗</translation> @@ -1083,6 +1087,7 @@ <translation id="7378203170292176219">拖曳選取要錄影的區域</translation> <translation id="7378594059915113390">媒體控制項</translation> <translation id="7378889811480108604">省電模式已關閉</translation> +<translation id="7382680553121047388">開啟</translation> <translation id="7384028040782072252">在任一處按一下滑鼠右鍵,即可將應用程式重新排序</translation> <translation id="7392563512730092880">你稍後可以隨時前往「設定」頁面進行設定。</translation> <translation id="7405710164030118432">如要將這部裝置解鎖,請輸入你的 Family Link 家長存取碼</translation> @@ -1165,6 +1170,7 @@ <translation id="7868900307798234037">指紋辨識成功,正在解鎖</translation> <translation id="7872195908557044066">管理員正在重設 eSIM 卡,請稍候片刻。</translation> <translation id="7872786842639831132">關閉</translation> +<translation id="7875280185395705476">自動放大</translation> <translation id="7875575368831396199"><ph name="DEVICE_TYPE" /> 的藍牙功能似乎已關閉。請開啟藍牙功能,才能使用 Phone Hub。</translation> <translation id="7877557217297072640">{0,plural, =0{立即將裝置復原為較舊的版本}=1{在 1 秒內將裝置復原為較舊的版本}other{在 # 秒內將裝置復原為較舊的版本}}</translation> <translation id="7886169021410746335">調整隱私權設定</translation> @@ -1285,6 +1291,7 @@ <translation id="856298576161209842"><ph name="MANAGER" /> 建議你更新 <ph name="DEVICE_TYPE" /></translation> <translation id="8563862697512465947">通知設定</translation> <translation id="857201607579416096">已將選單移至畫面右下角。</translation> +<translation id="8576288697319745668">切換自動放大功能。<ph name="STATE_TEXT" /></translation> <translation id="8594115950068821369">-<ph name="FORMATTED_TIME" /></translation> <translation id="8598235756057743477">依名稱或顏色將應用程式排序</translation> <translation id="8614517853887502247">檢視防護功能已開啟,因此系統隱藏了 <ph name="APP_1_TITLE" /> 和 <ph name="APP_2_TITLE" /> 的通知</translation>
diff --git a/ash/style/ash_color_id.h b/ash/style/ash_color_id.h index 11b7b93c..cbbbbd4 100644 --- a/ash/style/ash_color_id.h +++ b/ash/style/ash_color_id.h
@@ -20,13 +20,75 @@ E_CPONLY(kColorAshShieldAndBase90) \ E_CPONLY(kColorAshShieldAndBase95) \ E_CPONLY(kColorAshShieldAndBaseOpaque) \ + /* Controls Layer colors. */ \ E_CPONLY(kColorAshHairlineBorderColor) \ E_CPONLY(kColorAshControlBackgroundColorActive) \ E_CPONLY(kColorAshControlBackgroundColorAlert) \ E_CPONLY(kColorAshControlBackgroundColorInactive) \ E_CPONLY(kColorAshControlBackgroundColorWarning) \ E_CPONLY(kColorAshControlBackgroundColorPositive) \ - E_CPONLY(kColorAshFocusAuraColor) + E_CPONLY(kColorAshFocusAuraColor) \ + /* Content layer colors. */ \ + E_CPONLY(kColorAshScrollBarColor) \ + E_CPONLY(kColorAshSeparatorColor) \ + E_CPONLY(kColorAshTextColorPrimary) \ + /* Inverted `kColorAshTextColorPrimary` on current color mode. */ \ + E_CPONLY(kColorAshInvertedTextColorPrimary) \ + E_CPONLY(kColorAshTextColorSecondary) \ + E_CPONLY(kColorAshTextColorAlert) \ + E_CPONLY(kColorAshTextColorWarning) \ + E_CPONLY(kColorAshTextColorPositive) \ + E_CPONLY(kColorAshTextColorURL) \ + E_CPONLY(kColorAshIconColorPrimary) \ + E_CPONLY(kColorAshIconColorSecondary) \ + E_CPONLY(kColorAshIconColorAlert) \ + E_CPONLY(kColorAshIconColorWarning) \ + E_CPONLY(kColorAshIconColorPositive) \ + /* Color for prominent icon, e.g, "Add connection" icon button inside + VPN detailed view. */ \ + E_CPONLY(kColorAshIconColorProminent) \ + /* Background for kColorAshIconColorSecondary. */ \ + E_CPONLY(kColorAshIconColorSecondaryBackground) \ + /* The default color for button labels. */ \ + E_CPONLY(kColorAshButtonLabelColor) \ + /* Inverted `kColorAshButtonLabelColor` on current color mode. */ \ + E_CPONLY(kColorAshInvertedButtonLabelColor) \ + E_CPONLY(kColorAshButtonLabelColorPrimary) \ + /* Color for blue button labels, e.g, 'Retry' button of the system toast. */ \ + E_CPONLY(kColorAshButtonLabelColorBlue) \ + E_CPONLY(kColorAshButtonIconColor) \ + E_CPONLY(kColorAshButtonIconColorPrimary) \ + E_CPONLY(kColorAshAppStateIndicatorColor) \ + E_CPONLY(kColorAshAppStateIndicatorColorInactive) \ + /* Color for the shelf drag handle in tablet mode. */ \ + E_CPONLY(kColorAshShelfHandleColor) \ + E_CPONLY(kColorAshSliderColorActive) \ + E_CPONLY(kColorAshSliderColorInactive) \ + E_CPONLY(kColorAshRadioColorActive) \ + E_CPONLY(kColorAshRadioColorInactive) \ + /* Colors for toggle button. */ \ + E_CPONLY(kColorAshSwitchKnobColorActive) \ + E_CPONLY(kColorAshSwitchKnobColorInactive) \ + E_CPONLY(kColorAshSwitchTrackColorActive) \ + E_CPONLY(kColorAshSwitchTrackColorInactive) \ + /* Color for current active desk's border. */ \ + E_CPONLY(kColorAshCurrentDeskColor) \ + /* Color for the battery's badge (bolt, unreliable, X). */ \ + E_CPONLY(kColorAshBatteryBadgeColor) \ + /* Colors for the switch access's back button. */ \ + E_CPONLY(kColorAshSwitchAccessInnerStrokeColor) \ + E_CPONLY(kColorAshSwitchAccessOuterStrokeColor) \ + /* Colors for the media controls. */ \ + E_CPONLY(kColorAshProgressBarColorForeground) \ + E_CPONLY(kColorAshProgressBarColorBackground) \ + /* Color used to highlight a hovered view. */ \ + E_CPONLY(kColorAshHighlightColorHover) \ + /* Color for the background of battery system info view. */ \ + E_CPONLY(kColorAshBatterySystemInfoBackgroundColor) \ + /* Color for the battery icon in the system info view. */ \ + E_CPONLY(kColorAshBatterySystemInfoIconColor) \ + /* Color of the capture region in the capture session. */ \ + E_CPONLY(kColorAshCaptureRegionColor) #include "ui/color/color_id_macros.inc"
diff --git a/ash/style/ash_color_mixer.cc b/ash/style/ash_color_mixer.cc index 30a3f1fa..5cf6217 100644 --- a/ash/style/ash_color_mixer.cc +++ b/ash/style/ash_color_mixer.cc
@@ -28,6 +28,15 @@ constexpr int kAlpha90 = SK_AlphaOPAQUE * 0.9f; constexpr int kAlpha95 = SK_AlphaOPAQUE * 0.95f; +constexpr int kLightInkDropOpacity = SK_AlphaOPAQUE * 0.08f; +constexpr int kDarkInkDropOpacity = SK_AlphaOPAQUE * 0.06f; + +// Color of second tone is always 30% opacity of the color of first tone. +constexpr int kSecondToneOpacity = SK_AlphaOPAQUE * 0.3f; + +// The disabled color is always 38% opacity of the enabled color. +constexpr int kDisabledColorOpacity = SK_AlphaOPAQUE * 0.38f; + void AddShieldAndBaseColors(ui::ColorMixer& mixer, const ui::ColorProviderManager::Key& key) { const bool use_dark_color = @@ -101,6 +110,92 @@ ui::kColorAshSystemUIHighlightColor1}; } +// Mappings the Content layer colors for Material 2. +void AddContentColors(ui::ColorMixer& mixer, + const ui::ColorProviderManager::Key& key) { + const bool use_dark_color = + key.color_mode == ui::ColorProviderManager::ColorMode::kDark; + + // ContentLayer colors. + mixer[kColorAshScrollBarColor] = + use_dark_color ? ui::ColorTransform(gfx::kGoogleGrey200) + : ui::ColorTransform(gfx::kGoogleGrey700); + mixer[kColorAshSeparatorColor] = + use_dark_color ? ui::ColorTransform(SkColorSetA(SK_ColorWHITE, 0x24)) + : ui::ColorTransform(SkColorSetA(SK_ColorBLACK, 0x24)); + mixer[kColorAshTextColorPrimary] = + use_dark_color ? ui::ColorTransform(gfx::kGoogleGrey200) + : ui::ColorTransform(gfx::kGoogleGrey900); + mixer[kColorAshTextColorSecondary] = + use_dark_color ? ui::ColorTransform(gfx::kGoogleGrey400) + : ui::ColorTransform(gfx::kGoogleGrey700); + mixer[kColorAshTextColorAlert] = use_dark_color + ? ui::ColorTransform(gfx::kGoogleRed300) + : ui::ColorTransform(gfx::kGoogleRed600); + mixer[kColorAshTextColorWarning] = + use_dark_color ? ui::ColorTransform(gfx::kGoogleYellow300) + : ui::ColorTransform(gfx::kGoogleYellow900); + mixer[kColorAshTextColorPositive] = + use_dark_color ? ui::ColorTransform(gfx::kGoogleGreen300) + : ui::ColorTransform(gfx::kGoogleGreen600); + mixer[kColorAshTextColorURL] = use_dark_color + ? ui::ColorTransform(gfx::kGoogleBlue300) + : ui::ColorTransform(gfx::kGoogleBlue600); + mixer[kColorAshIconColorPrimary] = {kColorAshTextColorPrimary}; + mixer[kColorAshIconColorSecondary] = {kColorAshTextColorSecondary}; + mixer[kColorAshIconColorAlert] = {kColorAshTextColorAlert}; + mixer[kColorAshIconColorWarning] = {kColorAshTextColorWarning}; + mixer[kColorAshIconColorPositive] = {kColorAshTextColorPositive}; + mixer[kColorAshIconColorProminent] = {kColorAshTextColorURL}; + mixer[kColorAshIconColorSecondaryBackground] = + use_dark_color ? ui::ColorTransform(gfx::kGoogleGrey100) + : ui::ColorTransform(gfx::kGoogleGrey800); + mixer[kColorAshButtonLabelColor] = {kColorAshTextColorPrimary}; + mixer[kColorAshButtonLabelColorPrimary] = + use_dark_color ? ui::ColorTransform(gfx::kGoogleGrey900) + : ui::ColorTransform(gfx::kGoogleGrey200); + mixer[kColorAshInvertedTextColorPrimary] = {kColorAshButtonLabelColorPrimary}; + mixer[kColorAshInvertedButtonLabelColor] = {kColorAshButtonLabelColorPrimary}; + mixer[kColorAshButtonLabelColorBlue] = {kColorAshTextColorURL}; + mixer[kColorAshButtonIconColor] = {kColorAshTextColorPrimary}; + mixer[kColorAshButtonIconColorPrimary] = {kColorAshButtonLabelColorPrimary}; + mixer[kColorAshAppStateIndicatorColor] = {kColorAshTextColorPrimary}; + mixer[kColorAshAppStateIndicatorColorInactive] = + ui::SetAlpha(kColorAshAppStateIndicatorColor, kDisabledColorOpacity); + mixer[kColorAshShelfHandleColor] = {kColorAshSeparatorColor}; + mixer[kColorAshSliderColorActive] = {kColorAshTextColorURL}; + mixer[kColorAshSliderColorInactive] = {kColorAshScrollBarColor}; + mixer[kColorAshRadioColorActive] = {kColorAshTextColorURL}; + mixer[kColorAshRadioColorInactive] = {kColorAshScrollBarColor}; + mixer[kColorAshSwitchKnobColorActive] = {kColorAshTextColorURL}; + mixer[kColorAshSwitchKnobColorInactive] = + use_dark_color ? ui::ColorTransform(gfx::kGoogleGrey400) + : ui::ColorTransform(SK_ColorWHITE); + mixer[kColorAshSwitchTrackColorActive] = + ui::SetAlpha(kColorAshSwitchKnobColorActive, kSecondToneOpacity); + mixer[kColorAshSwitchTrackColorInactive] = + ui::SetAlpha(kColorAshScrollBarColor, kSecondToneOpacity); + mixer[kColorAshCurrentDeskColor] = use_dark_color + ? ui::ColorTransform(SK_ColorWHITE) + : ui::ColorTransform(SK_ColorBLACK); + mixer[kColorAshBatteryBadgeColor] = {kColorAshButtonLabelColorPrimary}; + mixer[kColorAshSwitchAccessInnerStrokeColor] = + ui::ColorTransform(gfx::kGoogleBlue300); + mixer[kColorAshSwitchAccessOuterStrokeColor] = + ui::ColorTransform(gfx::kGoogleBlue900); + mixer[kColorAshProgressBarColorForeground] = {kColorAshTextColorURL}; + mixer[kColorAshProgressBarColorBackground] = + ui::SetAlpha(kColorAshTextColorURL, 0x4C); + mixer[kColorAshHighlightColorHover] = + use_dark_color ? ui::ColorTransform(SkColorSetA(SK_ColorWHITE, 0x0D)) + : ui::ColorTransform(SkColorSetA(SK_ColorBLACK, 0x14)); + mixer[kColorAshBatterySystemInfoBackgroundColor] = { + kColorAshTextColorPositive}; + mixer[kColorAshBatterySystemInfoIconColor] = { + kColorAshButtonLabelColorPrimary}; + mixer[kColorAshCaptureRegionColor] = {kColorAshProgressBarColorBackground}; +} + // Remaps colors generated by cros_colors.json5 to point to equivalent tokens. void RemapLegacySemanticColors(ui::ColorMixer& mixer) { // The colors here that have 'generate_per_mode: true' in the @@ -261,11 +356,11 @@ void AddAshColorMixer(ui::ColorProvider* provider, const ui::ColorProviderManager::Key& key) { - auto* ash_color_provider = AshColorProvider::Get(); ui::ColorMixer& mixer = provider->AddMixer(); AddShieldAndBaseColors(mixer, key); AddControlsColors(mixer, key); + AddContentColors(mixer, key); mixer[ui::kColorAshActionLabelFocusRingEdit] = {gfx::kGoogleBlue300}; mixer[ui::kColorAshActionLabelFocusRingError] = {gfx::kGoogleRed300}; @@ -301,19 +396,13 @@ return; } - mixer[ui::kColorAshSystemUIMenuBackground] = { - ash_color_provider->GetBaseLayerColor( - AshColorProvider::BaseLayerType::kTransparent80)}; - mixer[ui::kColorAshSystemUIMenuIcon] = { - ash_color_provider->GetContentLayerColor( - AshColorProvider::ContentLayerType::kIconColorPrimary)}; - - auto [color, opacity] = ash_color_provider->GetInkDropBaseColorAndOpacity(); - mixer[ui::kColorAshSystemUIMenuItemBackgroundSelected] = { - SkColorSetA(color, opacity * SK_AlphaOPAQUE)}; - mixer[ui::kColorAshSystemUIMenuSeparator] = { - ash_color_provider->GetContentLayerColor( - AshColorProvider::ContentLayerType::kSeparatorColor)}; + mixer[ui::kColorAshSystemUIMenuBackground] = {kColorAshShieldAndBase80}; + mixer[ui::kColorAshSystemUIMenuIcon] = {kColorAshIconColorPrimary}; + mixer[ui::kColorAshSystemUIMenuItemBackgroundSelected] = + key.color_mode == ui::ColorProviderManager::ColorMode::kDark + ? ui::SetAlpha(SK_ColorWHITE, kDarkInkDropOpacity) + : ui::SetAlpha(SK_ColorBLACK, kLightInkDropOpacity); + mixer[ui::kColorAshSystemUIMenuSeparator] = {kColorAshSeparatorColor}; } } // namespace ash
diff --git a/ash/style/ash_color_provider_unittest.cc b/ash/style/ash_color_provider_unittest.cc index 18052b9..70cde3af 100644 --- a/ash/style/ash_color_provider_unittest.cc +++ b/ash/style/ash_color_provider_unittest.cc
@@ -242,6 +242,9 @@ {ColorMode::kLight, ColorProvider::ContentLayerType::kTextColorPrimary, SkColorSetRGB(0x20, 0x21, 0x24)}, {ColorMode::kLight, + ColorProvider::ContentLayerType::kInvertedTextColorPrimary, + SkColorSetRGB(0xE8, 0xEA, 0xED)}, + {ColorMode::kLight, ColorProvider::ContentLayerType::kTextColorSecondary, SkColorSetRGB(0x5F, 0x63, 0x68)}, {ColorMode::kLight, ColorProvider::ContentLayerType::kTextColorAlert, @@ -277,6 +280,9 @@ {ColorMode::kLight, ColorProvider::ContentLayerType::kButtonLabelColor, SkColorSetRGB(0x20, 0x21, 0x24)}, {ColorMode::kLight, + ColorProvider::ContentLayerType::kInvertedButtonLabelColor, + SkColorSetRGB(0xE8, 0xEA, 0xED)}, + {ColorMode::kLight, ColorProvider::ContentLayerType::kButtonLabelColorPrimary, SkColorSetRGB(0xE8, 0xEA, 0xED)}, @@ -372,6 +378,9 @@ {ColorMode::kDark, ColorProvider::ContentLayerType::kTextColorPrimary, SkColorSetRGB(0xE8, 0xEA, 0xED)}, {ColorMode::kDark, + ColorProvider::ContentLayerType::kInvertedTextColorPrimary, + SkColorSetRGB(0x20, 0x21, 0x24)}, + {ColorMode::kDark, ColorProvider::ContentLayerType::kTextColorSecondary, SkColorSetRGB(0xBD, 0xC1, 0xC6)}, {ColorMode::kDark, ColorProvider::ContentLayerType::kTextColorAlert, @@ -405,6 +414,9 @@ {ColorMode::kDark, ColorProvider::ContentLayerType::kButtonLabelColor, SkColorSetRGB(0xE8, 0xEA, 0xED)}, {ColorMode::kDark, + ColorProvider::ContentLayerType::kInvertedButtonLabelColor, + SkColorSetRGB(0x20, 0x21, 0x24)}, + {ColorMode::kDark, ColorProvider::ContentLayerType::kButtonLabelColorPrimary, SkColorSetRGB(0x20, 0x21, 0x24)},
diff --git a/ash/wallpaper/wallpaper_controller_impl.cc b/ash/wallpaper/wallpaper_controller_impl.cc index 897ee50a..8365b296 100644 --- a/ash/wallpaper/wallpaper_controller_impl.cc +++ b/ash/wallpaper/wallpaper_controller_impl.cc
@@ -72,7 +72,6 @@ #include "components/prefs/pref_registry_simple.h" #include "components/prefs/pref_service.h" #include "components/prefs/scoped_user_pref_update.h" -#include "components/user_manager/user_manager.h" #include "components/user_manager/user_type.h" #include "net/http/http_request_headers.h" #include "net/traffic_annotation/network_traffic_annotation.h" @@ -544,22 +543,31 @@ // Returns true if the user's wallpaper is to be treated as ephemeral. bool IsEphemeralUser(const AccountId& id) { - if (user_manager::UserManager::IsInitialized()) { - return user_manager::UserManager::Get()->IsUserNonCryptohomeDataEphemeral( - id); + const UserSession* user_session = + Shell::Get()->session_controller()->GetUserSessionByAccountId(id); + if (!user_session) { + // If we don't know if a user is logged in, assume there is a user. + return false; } - // Unit tests may not have a UserManager. - return false; + + return user_session->user_info.is_ephemeral; } // Returns the type of the user with the specified |id| or USER_TYPE_REGULAR. user_manager::UserType GetUserType(const AccountId& id) { - if (user_manager::UserManager::IsInitialized()) { - if (auto* user = user_manager::UserManager::Get()->FindUser(id)) - return user->GetType(); + const UserSession* user_session = + Shell::Get()->session_controller()->GetUserSessionByAccountId(id); + // If we can't match the account with a session, we can't safely continue. + if (!user_session) { + // TODO(crbug.com/1329256): Change tests that hit this codepath to sign in + // users first if they have an active session so that this can be changed to + // a CHECK. + LOG(ERROR) << "Cannot resolve user. Assuming regular. This should only " + "happen in tests"; + return user_manager::USER_TYPE_REGULAR; } - // Unit tests may not have a UserManager. - return user_manager::USER_TYPE_REGULAR; + + return user_session->user_info.type; } // Gets |account_id|'s custom wallpaper at |wallpaper_path|. Falls back to the
diff --git a/ash/wallpaper/wallpaper_controller_unittest.cc b/ash/wallpaper/wallpaper_controller_unittest.cc index ca549a5..6066706 100644 --- a/ash/wallpaper/wallpaper_controller_unittest.cc +++ b/ash/wallpaper/wallpaper_controller_unittest.cc
@@ -53,8 +53,6 @@ #include "base/time/time_override.h" #include "chromeos/constants/chromeos_features.h" #include "components/prefs/scoped_user_pref_update.h" -#include "components/user_manager/fake_user_manager.h" -#include "components/user_manager/scoped_user_manager.h" #include "components/user_manager/user_names.h" #include "services/data_decoder/public/cpp/test_support/in_process_data_decoder.h" #include "testing/gmock/include/gmock/gmock-matchers.h" @@ -340,9 +338,11 @@ const char pref_name[], AccountId account_id, WallpaperInfo info) { + const base::Value* dict = pref_service->GetDictionary(pref_name); + DCHECK(dict); const base::Value* stored_info_dict = - pref_service->GetDictionary(pref_name)->FindDictKey( - account_id.GetUserEmail()); + dict->FindDictKey(account_id.GetUserEmail()); + DCHECK(stored_info_dict); base::Value expected_info_dict = CreateWallpaperInfoDict(info); EXPECT_EQ(expected_info_dict, *stored_info_dict); } @@ -426,10 +426,6 @@ void SetUp() override { AshTestBase::SetUp(); - auto fake_user_manager = std::make_unique<user_manager::FakeUserManager>(); - fake_user_manager_ = fake_user_manager.get(); - scoped_user_manager_ = std::make_unique<user_manager::ScopedUserManager>( - std::move(fake_user_manager)); TestSessionControllerClient* const client = GetSessionControllerClient(); client->ProvidePrefServiceForUser(account_id_1); @@ -744,8 +740,6 @@ base::ScopedTempDir default_wallpaper_dir_; base::HistogramTester histogram_tester_; - user_manager::FakeUserManager* fake_user_manager_ = nullptr; - std::unique_ptr<user_manager::ScopedUserManager> scoped_user_manager_; TestWallpaperControllerClient client_; std::unique_ptr<TestImageDownloader> test_image_downloader_; @@ -1547,7 +1541,7 @@ TEST_F(WallpaperControllerTest, SetDefaultWallpaperForChildAccount) { CreateDefaultWallpapers(); - fake_user_manager_->AddChildUser(kChildAccountId); + SimulateUserLogin(kChildAccountId, user_manager::USER_TYPE_CHILD); // Verify the large child wallpaper is set successfully with the correct file // path. @@ -1602,7 +1596,7 @@ const AccountId guest_id = AccountId::FromUserEmail(user_manager::kGuestUserName); - fake_user_manager_->AddGuestUser(guest_id); + SimulateUserLogin(guest_id, user_manager::USER_TYPE_GUEST); controller_->SetDefaultWallpaper(guest_id, /*show_wallpaper=*/true, base::DoNothing()); @@ -1662,7 +1656,7 @@ const AccountId guest_id = AccountId::FromUserEmail(user_manager::kGuestUserName); - fake_user_manager_->AddGuestUser(guest_id); + SimulateUserLogin(guest_id, user_manager::USER_TYPE_GUEST); // Verify that during a guest session, |SetDefaultWallpaper| removes the user // custom wallpaper info, but a guest specific wallpaper should be set, @@ -3131,6 +3125,9 @@ // Although ephemeral users' custom wallpapers are not saved to disk, they // should be kept within the user session. Test for https://crbug.com/825237. TEST_F(WallpaperControllerTest, ShowWallpaperForEphemeralUser) { + // Clear the local pref so we can make sure nothing writes to it. + local_state()->ClearPref(prefs::kUserWallpaperInfo); + // Add an ephemeral user session and simulate login, like SimulateUserLogin. UserSession session; session.session_id = 0; @@ -3157,6 +3154,9 @@ EXPECT_EQ(1, GetWallpaperCount()); EXPECT_EQ(WallpaperType::kCustomized, controller_->GetWallpaperType()); EXPECT_EQ(kWallpaperColor, GetWallpaperColor()); + // Assert that we do not use local state for an ephemeral user. + auto* dict = local_state()->GetUserPrefValue(prefs::kUserWallpaperInfo); + ASSERT_FALSE(dict) << *dict; // The custom wallpaper is cached. EXPECT_TRUE(
diff --git a/ash/wm/desks/DEPS b/ash/wm/desks/DEPS index c7649cc6..a4b9f52 100644 --- a/ash/wm/desks/DEPS +++ b/ash/wm/desks/DEPS
@@ -7,4 +7,7 @@ "desks_controller.cc": [ "+components/user_manager/user_manager.h", ], + "saved_desk_unittest.cc": [ + "+cc/test/pixel_comparator.h", + ], }
diff --git a/ash/wm/desks/templates/save_desk_template_button.cc b/ash/wm/desks/templates/save_desk_template_button.cc index b865704..ee01596 100644 --- a/ash/wm/desks/templates/save_desk_template_button.cc +++ b/ash/wm/desks/templates/save_desk_template_button.cc
@@ -6,10 +6,11 @@ #include "ash/constants/ash_features.h" #include "ash/style/ash_color_provider.h" -#include "ash/wm/wm_highlight_item_border.h" +#include "ash/style/style_util.h" +#include "ash/wm/overview/overview_constants.h" #include "ui/base/metadata/metadata_impl_macros.h" -#include "ui/gfx/geometry/rounded_corners_f.h" #include "ui/gfx/vector_icon_types.h" +#include "ui/views/controls/focus_ring.h" #include "ui/views/highlight_border.h" namespace ash { @@ -23,7 +24,19 @@ : PillButton(callback, text, PillButton::Type::kIcon, icon), callback_(callback), button_type_(button_type) { - SetBorder(std::make_unique<WmHighlightItemBorder>(kCornerRadius)); + views::FocusRing* focus_ring = + StyleUtil::SetUpFocusRingForView(this, kFocusRingHaloInset); + focus_ring->SetHasFocusPredicate([](views::View* view) { + return static_cast<SaveDeskTemplateButton*>(view)->IsViewHighlighted(); + }); + focus_ring->SetColorId(ui::kColorAshFocusRing); + + if (features::IsDarkLightModeEnabled()) { + SetBorder(std::make_unique<views::HighlightBorder>( + /*corner_radius=*/kCornerRadius, + views::HighlightBorder::Type::kHighlightBorder2, + /*use_light_colors=*/false)); + } } SaveDeskTemplateButton::~SaveDeskTemplateButton() = default; @@ -41,33 +54,17 @@ void SaveDeskTemplateButton::MaybeSwapHighlightedView(bool right) {} void SaveDeskTemplateButton::OnViewHighlighted() { - UpdateBorderState(); + views::FocusRing::Get(this)->SchedulePaint(); } void SaveDeskTemplateButton::OnViewUnhighlighted() { - UpdateBorderState(); + views::FocusRing::Get(this)->SchedulePaint(); } void SaveDeskTemplateButton::OnThemeChanged() { PillButton::OnThemeChanged(); SetBackgroundColor(AshColorProvider::Get()->GetBaseLayerColor( AshColorProvider::BaseLayerType::kTransparent80)); - UpdateBorderState(); -} - -void SaveDeskTemplateButton::OnPaintBorder(gfx::Canvas* canvas) { - if (features::IsDarkLightModeEnabled()) { - views::HighlightBorder::PaintBorderToCanvas( - canvas, *this, GetLocalBounds(), gfx::RoundedCornersF(kCornerRadius), - views::HighlightBorder::Type::kHighlightBorder2, - /*use_light_colors=*/false); - } -} - -void SaveDeskTemplateButton::UpdateBorderState() { - auto* border = static_cast<WmHighlightItemBorder*>(GetBorder()); - border->SetFocused(IsViewHighlighted()); - SchedulePaint(); } BEGIN_METADATA(SaveDeskTemplateButton, PillButton)
diff --git a/ash/wm/desks/templates/save_desk_template_button.h b/ash/wm/desks/templates/save_desk_template_button.h index 71caf33..15841e8 100644 --- a/ash/wm/desks/templates/save_desk_template_button.h +++ b/ash/wm/desks/templates/save_desk_template_button.h
@@ -47,9 +47,6 @@ // PillButton: void OnThemeChanged() override; - void OnPaintBorder(gfx::Canvas* canvas) override; - - void UpdateBorderState(); base::RepeatingClosure callback_; Type button_type_;
diff --git a/ash/wm/desks/templates/saved_desk_unittest.cc b/ash/wm/desks/templates/saved_desk_unittest.cc index 6033f40..1555ab3 100644 --- a/ash/wm/desks/templates/saved_desk_unittest.cc +++ b/ash/wm/desks/templates/saved_desk_unittest.cc
@@ -63,6 +63,7 @@ #include "base/test/metrics/histogram_tester.h" #include "base/test/scoped_feature_list.h" #include "base/time/time.h" +#include "cc/test/pixel_comparator.h" #include "components/app_constants/constants.h" #include "components/app_restore/app_launch_info.h" #include "components/app_restore/full_restore_utils.h" @@ -78,6 +79,7 @@ #include "ui/compositor/scoped_animation_duration_scale_mode.h" #include "ui/events/keycodes/keyboard_codes_posix.h" #include "ui/events/test/event_generator.h" +#include "ui/gfx/canvas.h" #include "ui/views/controls/label.h" #include "ui/views/controls/textfield/textfield.h" #include "ui/views/widget/any_widget_observer.h" @@ -406,6 +408,30 @@ ->set_disable_app_id_check_for_saved_desks(disabled); } + SkBitmap GetFocusRingBitmap(views::FocusRing* focus_ring) { + gfx::Canvas canvas(focus_ring->size(), /*image_scale=*/1.0f, + /*is_opaque=*/false); + focus_ring->OnPaint(&canvas); + return canvas.GetBitmap(); + } + + SkBitmap GetBitmapWithInnerRoundedRect(gfx::Size size, + int stroke_width, + SkColor color) { + gfx::Canvas canvas(size, /*image_scale=*/1.0f, /*is_opaque=*/false); + gfx::RectF bounds(size.width(), size.height()); + + cc::PaintFlags paint_flags; + paint_flags.setAntiAlias(true); + paint_flags.setColor(color); + paint_flags.setStrokeWidth(stroke_width); + paint_flags.setStyle(cc::PaintFlags::Style::kStroke_Style); + bounds.Inset(gfx::InsetsF(static_cast<float>(stroke_width) / 2.0f)); + canvas.DrawRoundRect(bounds, /*radius=*/bounds.height() / 2.0f, + paint_flags); + return canvas.GetBitmap(); + } + // OverviewTestBase: void SetUp() override { scoped_feature_list_.InitWithFeatures( @@ -922,6 +948,60 @@ verify_save_desk_widget_bounds(); } +// Tests that the color of save desk button focus ring is as expected. +TEST_F(SavedDeskTest, SaveDeskButtonFocusRingColor) { + // Create a test window in the current desk. + auto test_window = CreateAppWindow(); + + ToggleOverview(); + aura::Window* root_window = Shell::GetPrimaryRootWindow(); + auto* save_as_template_button = + GetSaveDeskAsTemplateButtonForRoot(root_window); + auto* save_for_later_button = GetSaveDeskForLaterButtonForRoot(root_window); + + // Verify the focus ring of the given button is as expected. + auto verify_button_focus_ring_color = [this](SaveDeskTemplateButton* button, + bool highlighted) { + EXPECT_EQ( + cc::ExactPixelComparator(/*discard_alpha=*/false) + .Compare( + GetFocusRingBitmap(views::FocusRing::Get(button)), + GetBitmapWithInnerRoundedRect( + views::FocusRing::Get(button)->size(), + /*stroke_width=*/2, + ColorProvider::Get()->GetControlsLayerColor( + ColorProvider::ControlsLayerType::kFocusRingColor))), + highlighted); + }; + + // Both buttons are not highlighted. + ASSERT_FALSE(save_as_template_button->IsViewHighlighted()); + ASSERT_FALSE(save_for_later_button->IsViewHighlighted()); + verify_button_focus_ring_color(save_as_template_button, false); + verify_button_focus_ring_color(save_for_later_button, false); + + // Reverse tab, then `Save desk for later` button is highlighted. + SendKey(ui::VKEY_TAB, ui::EF_SHIFT_DOWN); + ASSERT_FALSE(save_as_template_button->IsViewHighlighted()); + ASSERT_TRUE(save_for_later_button->IsViewHighlighted()); + verify_button_focus_ring_color(save_as_template_button, false); + verify_button_focus_ring_color(save_for_later_button, true); + + // Reverse tab, then `Save desk as a template` button is highlighted. + SendKey(ui::VKEY_TAB, ui::EF_SHIFT_DOWN); + ASSERT_TRUE(save_as_template_button->IsViewHighlighted()); + ASSERT_FALSE(save_for_later_button->IsViewHighlighted()); + verify_button_focus_ring_color(save_as_template_button, true); + verify_button_focus_ring_color(save_for_later_button, false); + + // Reverse tab, then both buttons are not highlighted. + SendKey(ui::VKEY_TAB, ui::EF_SHIFT_DOWN); + ASSERT_FALSE(save_as_template_button->IsViewHighlighted()); + ASSERT_FALSE(save_for_later_button->IsViewHighlighted()); + verify_button_focus_ring_color(save_as_template_button, false); + verify_button_focus_ring_color(save_for_later_button, false); +} + // Tests that the save desk as template button and save for later button are // enabled and disabled as expected based on the number of templates. TEST_F(SavedDeskTest, SaveDeskButtonsEnabledDisabled) {
diff --git a/base/allocator/allocator.gni b/base/allocator/allocator.gni index 2f879ed7..605a2d4 100644 --- a/base/allocator/allocator.gni +++ b/base/allocator/allocator.gni
@@ -84,12 +84,20 @@ _is_brp_supported = (is_win || is_android || is_linux || is_mac || is_chromeos) && use_allocator == "partition" +_is_mcp_supported = is_win && use_allocator == "partition" + +declare_args() { + # We jam MTECheckedPtr off by default, but can set it to + # `_is_mcp_supported` to activate it. + use_mte_checked_ptr = false +} + declare_args() { # Set use_backup_ref_ptr true to use BackupRefPtr (BRP) as the implementation # of raw_ptr<T>, and enable PartitionAlloc support for it. - use_backup_ref_ptr = _is_brp_supported - - use_mte_checked_ptr = false + # We also disable BRP in the presence of MTECheckedPtr, which is almost + # never enabled. + use_backup_ref_ptr = _is_brp_supported && !use_mte_checked_ptr } assert(!(use_backup_ref_ptr && use_mte_checked_ptr),
diff --git a/base/task/sequence_manager/task_queue_impl.cc b/base/task/sequence_manager/task_queue_impl.cc index f88a9fff..3cbdf53 100644 --- a/base/task/sequence_manager/task_queue_impl.cc +++ b/base/task/sequence_manager/task_queue_impl.cc
@@ -15,6 +15,7 @@ #include "base/feature_list.h" #include "base/logging.h" #include "base/memory/scoped_refptr.h" +#include "base/metrics/histogram_macros.h" #include "base/notreached.h" #include "base/observer_list.h" #include "base/ranges/algorithm.h" @@ -522,6 +523,7 @@ sequence_manager_->WillQueueTask(&pending_task, name_); MaybeReportIpcTaskQueuedFromMainThread(pending_task, name_); } + RecordQueuingDelayedTaskMetrics(pending_task, lazy_now); main_thread_only().delayed_incoming_queue.push(std::move(pending_task)); UpdateWakeUp(lazy_now); @@ -570,6 +572,34 @@ TraceQueueSize(); } +void TaskQueueImpl::RecordQueuingDelayedTaskMetrics(const Task& pending_task, + LazyNow* lazy_now) { + // The sampling depends on having a high-resolution clock. + if (!base::TimeTicks::IsHighResolution()) + return; + + // A sample is taken on average every kSampleRate tasks. + static constexpr int kSampleRate = 10000; + + // Use pseudorandom sampling to avoid "running jank," which may occur + // when emitting many samples to a histogram in parallel. (This function is + // called a lot in parallel.) See https://crbug/1254354 for more details. The + // current time is used as a source of pseudorandomness. + if (((lazy_now->Now() - TimeTicks::UnixEpoch()).InMicroseconds() ^ + pending_task.sequence_num) % + kSampleRate == + 0) { + // The |delay| will be different than the delay passed to PostDelayedTask + // for cross-thread delayed tasks. + const TimeDelta delay = pending_task.delayed_run_time - lazy_now->Now(); + UMA_HISTOGRAM_LONG_TIMES("Scheduler.TaskQueueImpl.PostDelayedTaskDelay", + delay); + UMA_HISTOGRAM_COUNTS_1000( + "Scheduler.TaskQueueImpl.DelayedIncomingQueueSize", + static_cast<int>(main_thread_only().delayed_incoming_queue.size())); + } +} + void TaskQueueImpl::ReloadEmptyImmediateWorkQueue() { DCHECK(main_thread_only().immediate_work_queue->Empty()); main_thread_only().immediate_work_queue->TakeImmediateIncomingQueueTasks();
diff --git a/base/task/sequence_manager/task_queue_impl.h b/base/task/sequence_manager/task_queue_impl.h index 4786875..c0590b2a 100644 --- a/base/task/sequence_manager/task_queue_impl.h +++ b/base/task/sequence_manager/task_queue_impl.h
@@ -502,6 +502,11 @@ void MoveReadyImmediateTasksToImmediateWorkQueueLocked() EXCLUSIVE_LOCKS_REQUIRED(any_thread_lock_); + // Records the delay for some tasks in the main thread and the size of the + // |delayed_incoming_queue| pseudorandomly in a histogram. + void RecordQueuingDelayedTaskMetrics(const Task& pending_task, + LazyNow* lazy_now); + // LazilyDeallocatedDeque use TimeTicks to figure out when to resize. We // should use real time here always. using TaskDeque =
diff --git a/build/lacros/test_runner.py b/build/lacros/test_runner.py index 1df80a1..5eaa9fb4 100755 --- a/build/lacros/test_runner.py +++ b/build/lacros/test_runner.py
@@ -423,6 +423,7 @@ ash_ready_file = '%s/ash_ready.txt' % tmp_ash_data_dir_name enable_mojo_crosapi = any(t == os.path.basename(args.command) for t in _TARGETS_REQUIRE_MOJO_CROSAPI) + ash_wayland_socket_name = 'wayland-exo' ash_process = None ash_env = os.environ.copy() @@ -434,6 +435,7 @@ '--no-startup-window', '--enable-features=LacrosSupport,LacrosPrimary,LacrosOnly', '--ash-ready-file-path=%s' % ash_ready_file, + '--wayland-server-socket=%s' % ash_wayland_socket_name, ] if enable_mojo_crosapi: ash_cmd.append(lacros_mojo_socket_arg) @@ -495,6 +497,7 @@ forward_args.append(lacros_mojo_socket_arg) test_env = os.environ.copy() + test_env['WAYLAND_DISPLAY'] = ash_wayland_socket_name test_env['EGL_PLATFORM'] = 'surfaceless' test_env['XDG_RUNTIME_DIR'] = tmp_xdg_dir_name test_process = subprocess.Popen([args.command] + forward_args, env=test_env)
diff --git a/build/lacros/test_runner_test.py b/build/lacros/test_runner_test.py index 35e23cc..13a87d07 100755 --- a/build/lacros/test_runner_test.py +++ b/build/lacros/test_runner_test.py
@@ -53,7 +53,7 @@ ]) @mock.patch.object(os, 'listdir', - return_value=['wayland-0', 'wayland-0.lock']) + return_value=['wayland-exo', 'wayland-exo.lock']) @mock.patch.object(tempfile, 'mkdtemp', side_effect=['/tmp/xdg', '/tmp/ash-data']) @@ -78,10 +78,12 @@ self.assertTrue(ash_chrome_args[0].endswith( 'build/lacros/prebuilt_ash_chrome/793554/test_ash_chrome')) expected_ash_chrome_args = [ - '--user-data-dir=/tmp/ash-data', '--enable-wayland-server', + '--user-data-dir=/tmp/ash-data', + '--enable-wayland-server', '--no-startup-window', '--enable-features=LacrosSupport,LacrosPrimary,LacrosOnly', - '--ash-ready-file-path=/tmp/ash-data/ash_ready.txt' + '--ash-ready-file-path=/tmp/ash-data/ash_ready.txt', + '--wayland-server-socket=wayland-exo', ] if command == 'lacros_chrome_browsertests': expected_ash_chrome_args.append( @@ -102,14 +104,14 @@ test_env = mock_popen.call_args_list[1][1].get('env', {}) self.assertDictEqual( { + 'WAYLAND_DISPLAY': 'wayland-exo', 'XDG_RUNTIME_DIR': '/tmp/xdg', 'EGL_PLATFORM': 'surfaceless' }, test_env) - @mock.patch.object(os, 'listdir', - return_value=['wayland-0', 'wayland-0.lock']) + return_value=['wayland-exo', 'wayland-exo.lock']) @mock.patch.object(os.path, 'exists', return_value=True) @mock.patch.object(os.path, 'isfile', return_value=True) @mock.patch.object(test_runner, @@ -129,7 +131,7 @@ @mock.patch.object(os, 'listdir', - return_value=['wayland-0', 'wayland-0.lock']) + return_value=['wayland-exo', 'wayland-exo.lock']) @mock.patch.object(os.path, 'exists', return_value=True) @mock.patch.object(os.path, 'isfile', return_value=True) @mock.patch.object(test_runner, '_DownloadAshChromeIfNecessary') @@ -150,7 +152,7 @@ @mock.patch.object(os, 'listdir', - return_value=['wayland-0', 'wayland-0.lock']) + return_value=['wayland-exo', 'wayland-exo.lock']) @mock.patch.object(os.path, 'exists', return_value=True) @mock.patch.object(os.path, 'isfile', return_value=True) @mock.patch.object(test_runner, '_GetLatestVersionOfAshChrome') @@ -190,7 +192,7 @@ @mock.patch.dict(os.environ, {'ASH_WRAPPER': 'gdb --args'}, clear=False) @mock.patch.object(os, 'listdir', - return_value=['wayland-0', 'wayland-0.lock']) + return_value=['wayland-exo', 'wayland-exo.lock']) @mock.patch.object(tempfile, 'mkdtemp', side_effect=['/tmp/xdg', '/tmp/ash-data'])
diff --git a/cc/input/input_handler.cc b/cc/input/input_handler.cc index a0a2846..1c6c93b 100644 --- a/cc/input/input_handler.cc +++ b/cc/input/input_handler.cc
@@ -314,10 +314,9 @@ DCHECK(scrolling_node); ActiveTree().SetCurrentlyScrollingNode(scrolling_node); - if (unification_enabled && - !scroll_tree.CanRealizeScrollsOnCompositor(*scrolling_node)) { - scroll_status.needs_main_thread_repaint = true; - } + if (unification_enabled) + scroll_status.main_thread_repaint_reasons = + scroll_tree.GetMainThreadRepaintReasons(*scrolling_node); DidLatchToScroller(*scroll_state, type);
diff --git a/cc/input/input_handler.h b/cc/input/input_handler.h index 585df0d..57e7e5d6 100644 --- a/cc/input/input_handler.h +++ b/cc/input/input_handler.h
@@ -232,12 +232,15 @@ // the main thread to perform a hit test. bool needs_main_thread_hit_test = false; - // Used only in scroll unification. Tells the caller that we have performed + // Used only in scroll unification. A nonzero value means we have performed // the scroll (i.e. updated the offset in the scroll tree) on the compositor // thread, but we will need a main thread lifecycle update + commit before // the user will see the new pixels (for example, because the scroller does - // not have a composited layer). - bool needs_main_thread_repaint = false; + // not have a composited layer). If nonzero, this will be one or more values + // from the MainThreadScrollingReason enum. (Unification avoids setting + // main_thread_scrolling_reasons, to keep that field consistent with + // semantics of ScrollThread::SCROLL_ON_IMPL_THREAD.) + uint32_t main_thread_repaint_reasons = 0; }; enum class TouchStartOrMoveEventListenerType {
diff --git a/cc/input/main_thread_scrolling_reason.h b/cc/input/main_thread_scrolling_reason.h index cc411a5..bc9c25f 100644 --- a/cc/input/main_thread_scrolling_reason.h +++ b/cc/input/main_thread_scrolling_reason.h
@@ -21,6 +21,9 @@ // tools/metrics/histograms/enums.xml // When adding a new MainThreadScrollingReason, make sure the corresponding // [MainThread/Compositor]CanSetScrollReasons function is also updated. +// +// More info at: http://bit.ly/mtsr-details +// struct CC_EXPORT MainThreadScrollingReason { enum : uint32_t { kNotScrollingOnMain = 0,
diff --git a/cc/trees/property_tree.cc b/cc/trees/property_tree.cc index 7a3bb079..ebbdbf54 100644 --- a/cc/trees/property_tree.cc +++ b/cc/trees/property_tree.cc
@@ -1363,7 +1363,15 @@ } bool ScrollTree::CanRealizeScrollsOnCompositor(const ScrollNode& node) const { - return node.is_composited && !node.main_thread_scrolling_reasons; + return GetMainThreadRepaintReasons(node) == + MainThreadScrollingReason::kNotScrollingOnMain; +} + +uint32_t ScrollTree::GetMainThreadRepaintReasons(const ScrollNode& node) const { + uint32_t reasons = node.main_thread_scrolling_reasons; + if (!node.is_composited) + reasons |= MainThreadScrollingReason::kNoScrollingLayer; + return reasons; } void ScrollTree::clear() {
diff --git a/cc/trees/property_tree.h b/cc/trees/property_tree.h index 07fa3d4..f2c01a9 100644 --- a/cc/trees/property_tree.h +++ b/cc/trees/property_tree.h
@@ -583,6 +583,11 @@ // main-thread scrolling reasons (see main_thread_scrolling_reason.h). bool CanRealizeScrollsOnCompositor(const ScrollNode& node) const; + // Reports reasons for blocking scroll updates on main-thread repaint. For use + // only with scroll unification enabled. Returns bitfield of values from + // MainThreadScrollingReason. + uint32_t GetMainThreadRepaintReasons(const ScrollNode& node) const; + private: // ScrollTree doesn't use the needs_update flag. using PropertyTree::needs_update;
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn index 7c56c68..f635bf0 100644 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn
@@ -1585,6 +1585,7 @@ "//chrome/browser/password_check:public_java", "//chrome/browser/password_entry_edit/android/internal:javatests", "//chrome/browser/password_manager/android:java", + "//chrome/browser/password_manager/android:test_support_java", "//chrome/browser/performance_hints/android:java", "//chrome/browser/policy/android:java", "//chrome/browser/preferences:java", @@ -2178,6 +2179,7 @@ "//base/test:test_support", "//chrome:chrome_android_core", "//chrome/browser/android/metrics:ukm_utils_for_test", + "//chrome/browser/password_manager/android:test_support", "//chrome/browser/subresource_filter:android_test_support", "//components/autofill_assistant/browser:test_support", "//components/crash/android:crash_android", @@ -2510,6 +2512,7 @@ ":chrome_test_util_java", "//chrome/android/features/autofill_assistant:autofill_assistant_java_test_support", "//chrome/browser/android/metrics:ukm_java_test_support", + "//chrome/browser/password_manager/android:test_support_java", "//chrome/browser/subresource_filter:subresource_filter_java_test_support", "//chrome/browser/thumbnail:thumbnail_java_test_support", "//components/minidump_uploader:minidump_uploader_java",
diff --git a/chrome/android/chrome_test_java_sources.gni b/chrome/android/chrome_test_java_sources.gni index 418d557..62c859d7f 100644 --- a/chrome/android/chrome_test_java_sources.gni +++ b/chrome/android/chrome_test_java_sources.gni
@@ -315,6 +315,7 @@ "javatests/src/org/chromium/chrome/browser/partnercustomizations/PartnerHomepageUnitTest.java", "javatests/src/org/chromium/chrome/browser/password_manager/PasswordGenerationDialogTest.java", "javatests/src/org/chromium/chrome/browser/password_manager/PasswordManagerDialogTest.java", + "javatests/src/org/chromium/chrome/browser/password_manager/PasswordSavingIntegrationTest.java", "javatests/src/org/chromium/chrome/browser/password_manager/settings/FakePasswordManagerHandler.java", "javatests/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettingsExportTest.java", "javatests/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettingsSearchTest.java",
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogCoordinator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogCoordinator.java index 45a29c3..49ac0832 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogCoordinator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogCoordinator.java
@@ -165,7 +165,6 @@ @Override public void hideDialog(boolean showAnimation) { mMediator.hideDialog(showAnimation); - mTabListCoordinator.postHiding(); } @Override @@ -174,6 +173,11 @@ } @Override + public void postHiding() { + mTabListCoordinator.postHiding(); + } + + @Override public boolean handleBackPressed() { if (!isVisible()) return false; handleBackPress();
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogMediator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogMediator.java index e2589f394..ae468f6 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogMediator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogMediator.java
@@ -78,6 +78,11 @@ void prepareDialog(); /** + * Cleanup post hiding dialog. + */ + void postHiding(); + + /** * @return Whether or not the TabGridDialog consumed the event. */ boolean handleBackPressed(); @@ -334,6 +339,7 @@ mModel.set(TabGridPanelProperties.IS_DIALOG_VISIBLE, true); } else { mModel.set(TabGridPanelProperties.IS_DIALOG_VISIBLE, false); + mDialogController.postHiding(); } }
diff --git a/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogMediatorUnitTest.java b/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogMediatorUnitTest.java index 9fd8012..65b2ea3c 100644 --- a/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogMediatorUnitTest.java +++ b/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogMediatorUnitTest.java
@@ -852,6 +852,7 @@ mMediator.onReset(null); assertThat(mModel.get(TabGridPanelProperties.IS_DIALOG_VISIBLE), equalTo(false)); + verify(mDialogController).postHiding(); } @Test
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/app/bookmarks/BookmarkTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/app/bookmarks/BookmarkTest.java index 5a7b1223..7f5dd33 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/app/bookmarks/BookmarkTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/app/bookmarks/BookmarkTest.java
@@ -14,6 +14,7 @@ import static org.mockito.Mockito.when; +import static org.chromium.base.test.util.Restriction.RESTRICTION_TYPE_NON_LOW_END_DEVICE; import static org.chromium.components.browser_ui.widget.highlight.ViewHighlighterTestUtils.checkHighlightOff; import static org.chromium.components.browser_ui.widget.highlight.ViewHighlighterTestUtils.checkHighlightPulse; @@ -1231,6 +1232,7 @@ @Test @SmallTest @Features.EnableFeatures({ChromeFeatureList.READ_LATER}) + @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) public void testReadingListEmptyView() throws Exception { BookmarkPromoHeader.forcePromoStateForTests(SyncPromoState.NO_PROMO); openBookmarkManager();
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/PowerBookmarkTagChipListRenderTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/PowerBookmarkTagChipListRenderTest.java index 115dbba..44c2bc7 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/PowerBookmarkTagChipListRenderTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/PowerBookmarkTagChipListRenderTest.java
@@ -13,6 +13,8 @@ import static org.hamcrest.CoreMatchers.allOf; import static org.hamcrest.Matchers.containsString; +import static org.chromium.base.test.util.Restriction.RESTRICTION_TYPE_NON_LOW_END_DEVICE; + import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; @@ -25,6 +27,7 @@ import org.junit.runner.RunWith; import org.chromium.base.test.util.Feature; +import org.chromium.base.test.util.Restriction; import org.chromium.chrome.R; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.util.ChromeRenderTestRule; @@ -96,6 +99,7 @@ @Test @MediumTest @Feature({"RenderTest"}) + @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) public void testTagListLarge() throws IOException { PowerBookmarkMeta.Builder meta = PowerBookmarkMeta.newBuilder(); PowerBookmarkMeta.Tag.Builder tag = PowerBookmarkMeta.Tag.newBuilder(); @@ -174,4 +178,4 @@ onView(withText(allOf(containsString("baz")))).check(matches(isDisplayed())); mRenderTestRule.render(mContentView, "tag_list_duplicate"); } -} \ No newline at end of file +}
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/geo/GeolocationHeaderTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/geo/GeolocationHeaderTest.java index 1c956f8..6ad3fa8 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/geo/GeolocationHeaderTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/geo/GeolocationHeaderTest.java
@@ -20,12 +20,14 @@ import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.DisabledTest; import org.chromium.base.test.util.Feature; +import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeTabbedActivityTestRule; import org.chromium.chrome.test.util.OmniboxTestUtils; +import org.chromium.chrome.test.util.browser.Features.DisableFeatures; import org.chromium.chrome.test.util.browser.LocationSettingsTestUtil; import org.chromium.components.browser_ui.site_settings.PermissionInfo; import org.chromium.components.content_settings.ContentSettingValues; @@ -37,6 +39,7 @@ */ @RunWith(ChromeJUnit4ClassRunner.class) @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) +@DisableFeatures({ChromeFeatureList.OPTIMIZE_GEOLOCATION_HEADER_GENERATION}) @DisabledTest(message = "https://crbug.com/1338183") public class GeolocationHeaderTest { @Rule
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/password_manager/PasswordSavingIntegrationTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/password_manager/PasswordSavingIntegrationTest.java new file mode 100644 index 0000000..7555914 --- /dev/null +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/password_manager/PasswordSavingIntegrationTest.java
@@ -0,0 +1,159 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser.password_manager; + +import static org.chromium.base.test.util.Matchers.is; + +import android.widget.TextView; + +import androidx.test.filters.MediumTest; + +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.chromium.base.test.util.CommandLineFlags; +import org.chromium.base.test.util.Criteria; +import org.chromium.base.test.util.CriteriaHelper; +import org.chromium.base.test.util.DoNotBatch; +import org.chromium.base.test.util.Matchers; +import org.chromium.chrome.browser.flags.ChromeFeatureList; +import org.chromium.chrome.browser.flags.ChromeSwitches; +import org.chromium.chrome.browser.password_manager.tests.utils.FakePasswordStoreAndroidBackend; +import org.chromium.chrome.browser.password_manager.tests.utils.FakePasswordStoreAndroidBackendFactoryImpl; +import org.chromium.chrome.browser.password_manager.tests.utils.FakePasswordSyncControllerDelegateFactoryImpl; +import org.chromium.chrome.test.ChromeJUnit4ClassRunner; +import org.chromium.chrome.test.ChromeTabbedActivityTestRule; +import org.chromium.chrome.test.util.ChromeTabUtils; +import org.chromium.chrome.test.util.browser.Features.EnableFeatures; +import org.chromium.chrome.test.util.browser.signin.SigninTestRule; +import org.chromium.components.messages.MessagesTestHelper; +import org.chromium.components.messages.R; +import org.chromium.components.signin.AccountUtils; +import org.chromium.content_public.browser.ImeAdapter; +import org.chromium.content_public.browser.WebContents; +import org.chromium.content_public.browser.test.util.DOMUtils; +import org.chromium.content_public.browser.test.util.TestInputMethodManagerWrapper; +import org.chromium.content_public.browser.test.util.TestThreadUtils; +import org.chromium.content_public.browser.test.util.WebContentsUtils; +import org.chromium.ui.base.WindowAndroid; + +import java.util.concurrent.TimeoutException; + +/** + * Integration test for the whole saving/updating password workflow. + */ +@RunWith(ChromeJUnit4ClassRunner.class) +@DoNotBatch(reason = "TODO(crbug.com/1346583): add resetting logic for" + + "FakePasswordStoreAndroidBackend to allow batching") +@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE, "show-autofill-signatures"}) +@EnableFeatures({ChromeFeatureList.UNIFIED_PASSWORD_MANAGER_ANDROID}) +public class PasswordSavingIntegrationTest { + @Rule + public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); + @Rule + public SigninTestRule mSigninTestRule = new SigninTestRule(); + + private static final String FORM_URL = "/chrome/test/data/password/simple_password.html"; + private static final String DONE_URL = "/chrome/test/data/password/done.html"; + private static final String USERNAME_FIELD_ID = "username_field"; + private static final String PASSWORD_NODE_ID = "password_field"; + private static final String USERNAME_TEXT = "username"; + private static final String PASSWORD_TEXT = "password"; + private static final String SUBMIT_BUTTON_ID = "input_submit_button"; + private static final String PASSWORD_MANAGER_ANNOTATION = "pm_parser_annotation"; + + private PasswordStoreBridge mPasswordStoreBridge; + + @Before + public void setup() throws Exception { + PasswordStoreAndroidBackendFactory.setFactoryInstanceForTesting( + new FakePasswordStoreAndroidBackendFactoryImpl()); + TestThreadUtils.runOnUiThreadBlocking(() -> { + ((FakePasswordStoreAndroidBackend) PasswordStoreAndroidBackendFactory.getInstance() + .createBackend()) + .setSyncingAccount( + AccountUtils.createAccountFromName(SigninTestRule.TEST_ACCOUNT_EMAIL)); + }); + PasswordSyncControllerDelegateFactory.setFactoryInstanceForTesting( + new FakePasswordSyncControllerDelegateFactoryImpl()); + + mActivityTestRule.startMainActivityOnBlankPage(); + PasswordManagerTestUtilsBridge.disableServerPredictions(); + mSigninTestRule.addTestAccountThenSigninAndEnableSync(); + mActivityTestRule.loadUrl(mActivityTestRule.getTestServer().getURL(FORM_URL)); + + TestThreadUtils.runOnUiThreadBlocking( + () -> { mPasswordStoreBridge = new PasswordStoreBridge(); }); + } + + @After + public void tearDown() { + mSigninTestRule.tearDownRule(); + } + + @Test + @MediumTest + public void testSavingNewPassword() throws InterruptedException, TimeoutException { + WebContents webContents = mActivityTestRule.getWebContents(); + enterInput(webContents, USERNAME_FIELD_ID, USERNAME_TEXT); + enterInput(webContents, PASSWORD_NODE_ID, PASSWORD_TEXT); + waitForPmParserAnnotation(webContents); + + DOMUtils.clickNodeWithJavaScript(webContents, SUBMIT_BUTTON_ID); + ChromeTabUtils.waitForTabPageLoaded(mActivityTestRule.getActivity().getActivityTab(), + mActivityTestRule.getTestServer().getURL(DONE_URL)); + waitForMessageShown(); + + clickSaveUpdateButtonOnMessage(); + CriteriaHelper.pollUiThread(() -> { + PasswordStoreCredential[] credentials = mPasswordStoreBridge.getAllCredentials(); + Criteria.checkThat("Should have added one password.", credentials.length, is(1)); + Criteria.checkThat(credentials[0].getUsername(), is(USERNAME_TEXT)); + Criteria.checkThat(credentials[0].getPassword(), is(PASSWORD_TEXT)); + }); + } + + private void enterInput(WebContents webContents, String nodeId, String input) + throws TimeoutException { + ImeAdapter imeAdapter = WebContentsUtils.getImeAdapter(webContents); + TestInputMethodManagerWrapper inputMethodManagerWrapper = + TestInputMethodManagerWrapper.create(imeAdapter); + imeAdapter.setInputMethodManagerWrapper(inputMethodManagerWrapper); + + DOMUtils.clickNode(webContents, nodeId); + CriteriaHelper.pollUiThread(() -> { + Criteria.checkThat(inputMethodManagerWrapper.getShowSoftInputCounter(), Matchers.is(1)); + }); + + imeAdapter.setComposingTextForTest(input, input.length()); + } + + private void clickSaveUpdateButtonOnMessage() { + TestThreadUtils.runOnUiThreadBlocking(() -> { + TextView button = + mActivityTestRule.getActivity().findViewById(R.id.message_primary_button); + button.performClick(); + }); + } + + private void waitForMessageShown() { + WindowAndroid window = mActivityTestRule.getActivity().getWindowAndroid(); + CriteriaHelper.pollUiThread(() -> { + Criteria.checkThat("Message is not enqueued.", + MessagesTestHelper.getMessageCount(window), Matchers.is(1)); + }); + } + + private void waitForPmParserAnnotation(WebContents webContents) { + CriteriaHelper.pollInstrumentationThread(() -> { + String attribute = DOMUtils.getNodeAttribute( + PASSWORD_MANAGER_ANNOTATION, webContents, PASSWORD_NODE_ID, String.class); + return attribute != null; + }); + } +}
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index 09c7b1f..6ee33cf 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd
@@ -5072,7 +5072,7 @@ When I click the extension </message> <message name="IDS_EXTENSIONS_MENU_SITE_ACCESS_COMBOBOX_RUN_ON_SITE" desc="The label in an extension's site access combobox to always allow the extension access to the current origin (sentence case)."> - Always + Always on this site </message> <message name="IDS_EXTENSIONS_MENU_SITE_ACCESS_COMBOBOX_RUN_ON_ALL_SITES" desc="The label in an extension's site access combobox to always allow the extension access on all sites (sentence case)."> Always on all sites @@ -5143,7 +5143,7 @@ When I Click the Extension </message> <message name="IDS_EXTENSIONS_MENU_SITE_ACCESS_COMBOBOX_RUN_ON_SITE" desc="The label in an extension's site access combobox to always allow the extension access to the current origin (title case)."> - Always + Always on This Site </message> <message name="IDS_EXTENSIONS_MENU_SITE_ACCESS_COMBOBOX_RUN_ON_ALL_SITES" desc="The label in an extension's site access combobox to always allow the extension access on all sites (title case)."> Always on All Sites @@ -5495,7 +5495,7 @@ Allowed to read and change <ph name="SITE_NAME">$1<ex>google.com</ex></ph> </message> <message name="IDS_EXTENSIONS_MENU_SITE_ACCESS_TAB_REQUESTS_ACCESS_SECTION_TITLE" desc="Header for section of extensions that request access to the current site's data. $1 is replaced with the current site."> - Requested to read and change <ph name="SITE_NAME">$1<ex>google.com</ex></ph> + Requesting to read and change <ph name="SITE_NAME">$1<ex>google.com</ex></ph> </message> <message name="IDS_EXTENSIONS_MENU_SITE_ACCESS_TAB_BLOCK_ALL_EXTENSIONS_TEXT" desc="Text of the allow all extensions option in the user settings options inside the site access tab."> To allow an extension, change your default setting below. @@ -6543,6 +6543,9 @@ <message name="IDS_NTP_THEME_MANAGED_DIALOG_BODY" desc="Body text for the dialog informing users that their theme is managed when they try selecting a theme on the New Tab Page."> Your administrator has set a default theme which cannot be changed. </message> + <message name="IDS_NTP_THEMES_CONTAINER_LABEL" desc="The accessibility label description read by the screen reader for the Color and Theme container when customizing the New Tab Page."> + Pick a theme color + </message> <message name="IDS_NTP_CUSTOMIZE_DEFAULT_LABEL" desc="The label for the Default theme in the customization menu on the New Tab Page"> Default color </message> @@ -13333,8 +13336,8 @@ <message name="IDS_PRIVACY_SANDBOX_DIALOG_CONSENT_BODY_HEADER_1" desc="1 of 2 subtitles on the page. We want to write for users who skim the page. That means that the page title, the sub titles, and the button label all work well together as a mini story: 1) Help us build a more private web How? 2) Limit sharing between sites 3) More control over the ads you see 4) Yes, I’ll try it"> Limited sharing between sites </message> - <message name="IDS_PRIVACY_SANDBOX_BUBBLE_NOTICE_DESCRIPTION" desc="The body text of the bubble. * “During the trials”: The trials happen in addition to today’s current system (which is based on third-party cookies). In other words, even by agreeing to or remaining in a trial, the user’s core experience doesn’t change much. This is an experiment, and we need the user to understand as much. "> - During trials, Chrome is exploring ways to limit spam, fraud, and sharing between sites. Chrome also <ph name="ESTIMATE_INTERESTS_LINK">$1<ex>estimates your interests</ex></ph> that sites can use to show you ads. You can manage your interests in settings. + <message name="IDS_PRIVACY_SANDBOX_BUBBLE_NOTICE_DESCRIPTION" desc="The body text of the bubble. * “ad spam”: spam related to web advertising"> + Chrome is exploring ways to limit ad spam, fraud, and sharing between sites. Chrome also <ph name="ESTIMATE_INTERESTS_LINK">$1<ex>estimates your interests</ex></ph> that sites can use to show you ads. You can manage your interests in settings. </message> <message name="IDS_PRIVACY_SANDBOX_BUBBLE_NOTICE_SETTINGS_LINK" desc="The user can choose “Go to settings” to visit chrome://settings/privacySandbox. If they do, they’ll find the toggle on for Sandbox trials, which include everything they’ve read above. They can leave trials on or turn them off on this page. Choosing “Go to settings”, the user will navigate away from this page and won’t be able to return here."> Go to settings
diff --git a/chrome/app/generated_resources_grd/IDS_EXTENSIONS_MENU_SITE_ACCESS_COMBOBOX_RUN_ON_SITE.png.sha1 b/chrome/app/generated_resources_grd/IDS_EXTENSIONS_MENU_SITE_ACCESS_COMBOBOX_RUN_ON_SITE.png.sha1 index 00572f1..bbde66c 100644 --- a/chrome/app/generated_resources_grd/IDS_EXTENSIONS_MENU_SITE_ACCESS_COMBOBOX_RUN_ON_SITE.png.sha1 +++ b/chrome/app/generated_resources_grd/IDS_EXTENSIONS_MENU_SITE_ACCESS_COMBOBOX_RUN_ON_SITE.png.sha1
@@ -1 +1 @@ -e5ac077f08987bf931d7638bfc61f04b10ef351e \ No newline at end of file +47cb69add21dcfa2f54a212be6af8b9795a870b0 \ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_EXTENSIONS_MENU_SITE_ACCESS_TAB_REQUESTS_ACCESS_SECTION_TITLE.png.sha1 b/chrome/app/generated_resources_grd/IDS_EXTENSIONS_MENU_SITE_ACCESS_TAB_REQUESTS_ACCESS_SECTION_TITLE.png.sha1 index 553e376..99d144e 100644 --- a/chrome/app/generated_resources_grd/IDS_EXTENSIONS_MENU_SITE_ACCESS_TAB_REQUESTS_ACCESS_SECTION_TITLE.png.sha1 +++ b/chrome/app/generated_resources_grd/IDS_EXTENSIONS_MENU_SITE_ACCESS_TAB_REQUESTS_ACCESS_SECTION_TITLE.png.sha1
@@ -1 +1 @@ -2eb1b882e9c8fa5d2aa0f27a4d84ccb5e1b0a3fc \ No newline at end of file +3ae3b3300ebdb02d687e3b6e9024fb24bc71dd0f \ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_NTP_THEMES_CONTAINER_LABEL.png.sha1 b/chrome/app/generated_resources_grd/IDS_NTP_THEMES_CONTAINER_LABEL.png.sha1 new file mode 100644 index 0000000..401962e --- /dev/null +++ b/chrome/app/generated_resources_grd/IDS_NTP_THEMES_CONTAINER_LABEL.png.sha1
@@ -0,0 +1 @@ +bc73d4c8c36d53b224719ca4c5c39f5e987bd0a7 \ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_PRIVACY_SANDBOX_BUBBLE_NOTICE_DESCRIPTION.png.sha1 b/chrome/app/generated_resources_grd/IDS_PRIVACY_SANDBOX_BUBBLE_NOTICE_DESCRIPTION.png.sha1 index b8a6c5d..cbacdf0 100644 --- a/chrome/app/generated_resources_grd/IDS_PRIVACY_SANDBOX_BUBBLE_NOTICE_DESCRIPTION.png.sha1 +++ b/chrome/app/generated_resources_grd/IDS_PRIVACY_SANDBOX_BUBBLE_NOTICE_DESCRIPTION.png.sha1
@@ -1 +1 @@ -ff7a1754ecdd3a4ecc3032fbb24bd9f4b71996ca \ No newline at end of file +7650a622362ae8d000e8515b206d09d7770d945f \ No newline at end of file
diff --git a/chrome/app/profiles_strings.grdp b/chrome/app/profiles_strings.grdp index a189d16..d2d49a5 100644 --- a/chrome/app/profiles_strings.grdp +++ b/chrome/app/profiles_strings.grdp
@@ -490,6 +490,9 @@ <message name="IDS_PROFILE_CUSTOMIZATION_DONE_BUTTON_LABEL" desc="Text for the Done button on the profile customization bubble"> Done </message> + <message name="IDS_PROFILE_CUSTOMIZATION_THEMES_CONTAINER_LABEL" desc="The accessibility label description read by the screen reader for the section to choose a theme for the profile"> + Pick a theme color + </message> <message name="IDS_PROFILE_CUSTOMIZATION_WELCOME" desc="Title of the profile customization bubble"> Welcome, <ph name="USERNAME">$1<ex>Bob</ex></ph> </message>
diff --git a/chrome/app/profiles_strings_grdp/IDS_PROFILE_CUSTOMIZATION_THEMES_CONTAINER_LABEL.png.sha1 b/chrome/app/profiles_strings_grdp/IDS_PROFILE_CUSTOMIZATION_THEMES_CONTAINER_LABEL.png.sha1 new file mode 100644 index 0000000..345e7e2 --- /dev/null +++ b/chrome/app/profiles_strings_grdp/IDS_PROFILE_CUSTOMIZATION_THEMES_CONTAINER_LABEL.png.sha1
@@ -0,0 +1 @@ +ffb542ce81432b6c67c0d4676223534798d24669 \ No newline at end of file
diff --git a/chrome/app/resources/chromium_strings_as.xtb b/chrome/app/resources/chromium_strings_as.xtb index f301e1d..8df18c7 100644 --- a/chrome/app/resources/chromium_strings_as.xtb +++ b/chrome/app/resources/chromium_strings_as.xtb
@@ -43,6 +43,7 @@ <translation id="2018879682492276940">ইনষ্টল কৰিব পৰা নগ’ল। অনুগ্ৰহ কৰি পুনৰ চেষ্টা কৰক।</translation> <translation id="2020032459870799438">আপোনাৰ অন্য পাছৱৰ্ডসমূহ ডেটা উলংঘন আৰু আন সুৰক্ষা সম্পৰ্কীয় সমস্যাৰ পৰা নিৰাপদে আছেনে নাই পৰীক্ষা কৰিবলৈ <ph name="BEGIN_LINK" />Chromiumত ছাইন ইন কৰক<ph name="END_LINK" />।</translation> <translation id="2049376729098081731">Google সেৱাসমূহত অধিক ব্যক্তিগতকৃত অভিজ্ঞতা লাভ কৰিবলৈ Chromiumৰ ইতিহাস অন্তৰ্ভুক্ত কৰিবনে নকৰে সেয়া বাছনি কৰক</translation> +<translation id="2088953378266246249">Chromiumএ ইয়াৰ মূল প্ৰমাণপত্ৰ কেনেকৈ পৰিচালনা কৰে সেই বিষয়ক তথ্য</translation> <translation id="2174178932569897599">Chromium কাষ্টমাইজ কৰক</translation> <translation id="2174917724755363426">ইনষ্টল কৰাটো সম্পূৰ্ণ হোৱা নাই। আপুনি বাতিল কৰিব বিচাৰে বুলি নিশ্চিতনে?</translation> <translation id="2185166961232948079">Chromium - নেটৱর্কত ছাইন ইন - <ph name="PAGE_TITLE" /></translation> @@ -367,6 +368,7 @@ <translation id="9185526690718004400">&Chromium আপডে'ট কৰিবলৈ পুনৰ লঞ্চ কৰক</translation> <translation id="9190841055450128916">Chromium (mDNS-In)</translation> <translation id="93478295209880648">Chromiumএ সঠিকভাৱে কাম নকৰিবও পাৰে কাৰণ এই সংস্কৰণটো Windows XP বা Windows Vistaত আৰু নচলে</translation> +<translation id="942598560705308788">Chromiumএ পৰিচালনা কৰা প্ৰমাণপত্ৰ</translation> <translation id="945990405696787151">Chromiumৰ ভৱিষ্যতৰ আপডে’টসমূহ পাবলৈ আপোনাক macOS 10.13 অথবা তাৰ পাছৰ সংস্কৰণৰ আৱশ্যক হ’ব। এই কম্পিউটাৰটোৱে OS X 10.11 ব্যৱহাৰ কৰি আছে।</translation> <translation id="965162752251293939">Chromium কোনে ব্যৱহাৰ কৰি আছে?</translation> <translation id="967427899662692980">Chromiumৰ আটাইতকৈ বৰ্ধিত সুৰক্ষাৰ সুবিধা লাভ কৰক</translation>
diff --git a/chrome/app/resources/chromium_strings_da.xtb b/chrome/app/resources/chromium_strings_da.xtb index 901b6dc6..1feee3e 100644 --- a/chrome/app/resources/chromium_strings_da.xtb +++ b/chrome/app/resources/chromium_strings_da.xtb
@@ -41,6 +41,7 @@ <translation id="2018879682492276940">Installationen mislykkedes. Prøv igen.</translation> <translation id="2020032459870799438">Du kan tjekke, om dine andre adgangskoder er beskyttet mod brud på datasikkerheden og andre sikkerhedsproblemer ved at <ph name="BEGIN_LINK" />logge ind på Chromium<ph name="END_LINK" />.</translation> <translation id="2049376729098081731">Vælg, om du vil inkludere Chromium-historikken for at få mere tilpassede oplevelser i Googles tjenester</translation> +<translation id="2088953378266246249">Oplysninger om, hvordan Chromium administrerer sine rodcertifikater</translation> <translation id="2174178932569897599">Tilpas Chromium</translation> <translation id="2174917724755363426">Installationen er ikke fuldført. Er du sikker på, at du vil annullere?</translation> <translation id="2185166961232948079">Chromium – Login på netværk – <ph name="PAGE_TITLE" /></translation> @@ -365,6 +366,7 @@ <translation id="9185526690718004400">Genstart og opdater &Chromium</translation> <translation id="9190841055450128916">Chromium (mDNS-In)</translation> <translation id="93478295209880648">Chromium fungerer muligvis ikke korrekt på grund af manglende understøttelse i Windows XP og Windows Vista</translation> +<translation id="942598560705308788">Certifikater, der administreres af Chromium</translation> <translation id="945990405696787151">Hvis du vil have fremtidige Chromium-opdateringer, skal du have macOS 10.13 eller nyere. Denne computer anvender OS X 10.11.</translation> <translation id="965162752251293939">Hvem bruger Chromium?</translation> <translation id="967427899662692980">Få Chromiums stærkeste beskyttelse</translation>
diff --git a/chrome/app/resources/chromium_strings_el.xtb b/chrome/app/resources/chromium_strings_el.xtb index e8cad02..3aacf340 100644 --- a/chrome/app/resources/chromium_strings_el.xtb +++ b/chrome/app/resources/chromium_strings_el.xtb
@@ -41,6 +41,7 @@ <translation id="2018879682492276940">Αποτυχία εγκατάστασης. Δοκιμάστε ξανά.</translation> <translation id="2020032459870799438">Για να ελέγξετε αν οι άλλοι κωδικοί πρόσβασής σας είναι ασφαλείς από παραβιάσεις δεδομένων και άλλα ζητήματα ασφαλείας, <ph name="BEGIN_LINK" />συνδεθείτε στο Chromium<ph name="END_LINK" />.</translation> <translation id="2049376729098081731">Επιλέξτε αν θέλετε να συμπεριλαμβάνεται το ιστορικό Chromium για πιο εξατομικευμένες εμπειρίες στις υπηρεσίες Google.</translation> +<translation id="2088953378266246249">Πληροφορίες σχετικά με το πώς το Chromium διαχειρίζεται τα πιστοποιητικά ρίζας του</translation> <translation id="2174178932569897599">Προσαρμογή του Chromium</translation> <translation id="2174917724755363426">Η εγκατάσταση δεν έχει ολοκληρωθεί. Είστε βέβαιοι ότι θέλετε να την ακυρώσετε;</translation> <translation id="2185166961232948079">Chromium - Σύνδεση δικτύου - <ph name="PAGE_TITLE" /></translation> @@ -365,6 +366,7 @@ <translation id="9185526690718004400">Επανεκκίνηση για ενημέρωση του &Chromium</translation> <translation id="9190841055450128916">Chromium (mDNS-In)</translation> <translation id="93478295209880648">Το Chromium μπορεί να μην λειτουργεί σωστά, επειδή δεν υποστηρίζεται πια σε Windows XP και Windows Vista</translation> +<translation id="942598560705308788">Πιστοποιητικά που διαχειρίζεται το Chromium</translation> <translation id="945990405696787151">Για τη λήψη μελλοντικών ενημερώσεων του Chromium, θα χρειαστείτε macOS 10.13 ή νεότερη έκδοση. Αυτός ο υπολογιστής χρησιμοποιεί OS X 10.11.</translation> <translation id="965162752251293939">Ποιος χρησιμοποιεί το Chromium;</translation> <translation id="967427899662692980">Λάβετε την ισχυρότερη προστασία του Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_en-GB.xtb b/chrome/app/resources/chromium_strings_en-GB.xtb index c8b86f7..61f44fc 100644 --- a/chrome/app/resources/chromium_strings_en-GB.xtb +++ b/chrome/app/resources/chromium_strings_en-GB.xtb
@@ -43,6 +43,7 @@ <translation id="2018879682492276940">Installation failed. Please try again.</translation> <translation id="2020032459870799438">To check if your other passwords are safe from data breaches and other security issues, <ph name="BEGIN_LINK" />sign in to Chromium<ph name="END_LINK" />.</translation> <translation id="2049376729098081731">Choose whether to include Chromium history for more personalised experiences in Google services</translation> +<translation id="2088953378266246249">Information about how Chromium manages its root certificates</translation> <translation id="2174178932569897599">Customise Chromium</translation> <translation id="2174917724755363426">Installation is not complete. Are you sure that you want to cancel?</translation> <translation id="2185166961232948079">Chromium – Network sign-in – <ph name="PAGE_TITLE" /></translation> @@ -366,6 +367,7 @@ <translation id="9185526690718004400">Relaunch to update &Chromium</translation> <translation id="9190841055450128916">Chromium (mDNS-In)</translation> <translation id="93478295209880648">Chromium may not function correctly because it is no longer supported on Windows XP or Windows Vista</translation> +<translation id="942598560705308788">Certificates managed by Chromium</translation> <translation id="945990405696787151">To get future Chromium updates, you'll need macOS 10.13 or later. This computer is using OS X 10.11.</translation> <translation id="965162752251293939">Who's using Chromium?</translation> <translation id="967427899662692980">Get Chromium's strongest security</translation>
diff --git a/chrome/app/resources/chromium_strings_fil.xtb b/chrome/app/resources/chromium_strings_fil.xtb index 9553df0c..ae1d667 100644 --- a/chrome/app/resources/chromium_strings_fil.xtb +++ b/chrome/app/resources/chromium_strings_fil.xtb
@@ -43,6 +43,7 @@ <translation id="2018879682492276940">Hindi na-install. Pakisubukan ulit.</translation> <translation id="2020032459870799438">Para makita kung ligtas ang iyong iba pang password mula sa mga paglabag sa data at iba pang isyu sa seguridad, <ph name="BEGIN_LINK" />mag-sign in sa Chromium<ph name="END_LINK" />.</translation> <translation id="2049376729098081731">Piliin kung isasama ang history ng Chromium para sa mas naka-personalize na mga karanasan sa mga serbisyo ng Google</translation> +<translation id="2088953378266246249">Impormasyon tungkol sa kung paano pinapamahalaan ng Chromium ang mga root certificate nito</translation> <translation id="2174178932569897599">I-customize ang Chromium</translation> <translation id="2174917724755363426">Hindi nakumpleto ang pag-install. Sigurado ka bang gusto mong kanselahin?</translation> <translation id="2185166961232948079">Chromium - Pag-sign in sa Network - <ph name="PAGE_TITLE" /></translation> @@ -367,6 +368,7 @@ <translation id="9185526690718004400">Ilunsad ulit para ma-update ang Chromium</translation> <translation id="9190841055450128916">Chromium (mDNS-In)</translation> <translation id="93478295209880648">Maaaring hindi gumana nang maayos ang Chromium dahil hindi na ito sinusuportahan sa Windows XP o Windows Vista</translation> +<translation id="942598560705308788">Mga certificate na pinapamahalaan ng Chromium</translation> <translation id="945990405696787151">Para makakuha ng mga update sa Chromium sa hinaharap, kakailanganin mo ng macOS 10.13 o mas bago. Gumagamit ang computer na ito ng OS X 10.11.</translation> <translation id="965162752251293939">Sino ang gumagamit ng Chromium?</translation> <translation id="967427899662692980">Kunin ang pinakamahusay na seguridad ng Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_mk.xtb b/chrome/app/resources/chromium_strings_mk.xtb index 12562904..d650d31 100644 --- a/chrome/app/resources/chromium_strings_mk.xtb +++ b/chrome/app/resources/chromium_strings_mk.xtb
@@ -43,6 +43,7 @@ <translation id="2018879682492276940">Инсталирањето не успеа. Обидете се повторно.</translation> <translation id="2020032459870799438">За да проверите дали другите ваши лозинки се заштитени од упад во податоците и други проблеми со безбедноста, <ph name="BEGIN_LINK" />најавете се на Chromium<ph name="END_LINK" />.</translation> <translation id="2049376729098081731">Изберете дали да се опфати историјата на Chromium за поперсонализирани доживувања во услугите на Google</translation> +<translation id="2088953378266246249">Информации за тоа како Chromium управува со своите сертификати за администраторски права</translation> <translation id="2174178932569897599">Приспособете го Chromium</translation> <translation id="2174917724755363426">Инсталирањето не е завршено. Дали сигурно сакате да го откажете?</translation> <translation id="2185166961232948079">Chromium - Мрежно најавување - <ph name="PAGE_TITLE" /></translation> @@ -367,6 +368,7 @@ <translation id="9185526690718004400">Рестартирајте за да се ажурира &Chromium</translation> <translation id="9190841055450128916">Chromium (mDNS-In)</translation> <translation id="93478295209880648">Chromium може да не функционира правилно затоа што веќе не е поддржан на Windows XP или Windows Vista</translation> +<translation id="942598560705308788">Сертификати управувани од Chromium</translation> <translation id="945990405696787151">За да добивате идни ажурирања на Chromium, потребен ви е macOS 10.13 или понова верзија. Компјутеров користи OS X 10.11.</translation> <translation id="965162752251293939">Кој користи Chromium?</translation> <translation id="967427899662692980">Добијте ја најсилната безбедност на Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_mn.xtb b/chrome/app/resources/chromium_strings_mn.xtb index 9c2917c..4900abc 100644 --- a/chrome/app/resources/chromium_strings_mn.xtb +++ b/chrome/app/resources/chromium_strings_mn.xtb
@@ -43,6 +43,7 @@ <translation id="2018879682492276940">Суулгаж чадсангүй. Дахин оролдоно уу.</translation> <translation id="2020032459870799438">Бусад нууц үгэндээ өгөгдлийн зөрчил болон аюулгүй байдлын өөр асуудал байхгүй болохыг шалгахын тулд <ph name="BEGIN_LINK" />Chromium-д нэвтэрнэ үү<ph name="END_LINK" />.</translation> <translation id="2049376729098081731">Google-н үйлчилгээнүүдэд илүү хувийн болгосон туршлага авахын тулд Chromium-н түүхийг багтаах эсэхээ сонгоно уу</translation> +<translation id="2088953378266246249">Chromium өөрийн үндсэн гэрчилгээг хэрхэн удирддаг тухай мэдээлэл</translation> <translation id="2174178932569897599">Chromium-г өөрчлөх</translation> <translation id="2174917724755363426">Суулгаж дуусаагүй байна. Та цуцлахдаа итгэлтэй байна уу?</translation> <translation id="2185166961232948079">Chromium - Сүлжээнд нэвтрэх - <ph name="PAGE_TITLE" /></translation> @@ -363,6 +364,7 @@ <translation id="9185526690718004400">&Chromium-г шинэчлэхийн тулд дахин ачаалах</translation> <translation id="9190841055450128916">Chromium (mDNS-In)</translation> <translation id="93478295209880648">Windows XP болон Windows Vista нь цаашид Chromium-г дэмжихгүй тул буруу ажиллаж болзошгүй</translation> +<translation id="942598560705308788">Chromium-с удирддаг гэрчилгээ</translation> <translation id="945990405696787151">Chromium-н цаашдын шинэчлэлтийг авахын тулд танд macOS 10.13 эсвэл түүнээс хойших хувилбар хэрэгтэй болно. Энэ компьютер OS X 10.11 хувилбарыг ашиглаж байна.</translation> <translation id="965162752251293939">Chromium-г хэн ашиглаж байна вэ?</translation> <translation id="967427899662692980">Chromium-н хамгийн хүчирхэг аюулгүй байдлыг аваарай</translation>
diff --git a/chrome/app/resources/chromium_strings_ms.xtb b/chrome/app/resources/chromium_strings_ms.xtb index ea8dc97f..b0b7d40 100644 --- a/chrome/app/resources/chromium_strings_ms.xtb +++ b/chrome/app/resources/chromium_strings_ms.xtb
@@ -41,6 +41,7 @@ <translation id="2018879682492276940">Pemasangan gagal. Sila cuba lagi.</translation> <translation id="2020032459870799438">Untuk menyemak sama ada kata laluan anda yang lain selamat daripada pelanggaran data dan isu keselamatan lain, <ph name="BEGIN_LINK" />log masuk ke Chromium<ph name="END_LINK" />.</translation> <translation id="2049376729098081731">Pilih sama ada untuk memasukkan sejarah Chromium untuk mendapatkan pengalaman yang lebih diperibadikan dalam Perkhidmatan Google</translation> +<translation id="2088953378266246249">Maklumat tentang cara Chromium mengurus sijil akarnya</translation> <translation id="2174178932569897599">Sesuaikan Chromium</translation> <translation id="2174917724755363426">Pemasangan belum selesai. Anda pasti ingin membatalkan?</translation> <translation id="2185166961232948079">Chromium - Log Masuk Rangkaian - <ph name="PAGE_TITLE" /></translation> @@ -365,6 +366,7 @@ <translation id="9185526690718004400">Lancarkan semula untuk mengemas kini &Chromium</translation> <translation id="9190841055450128916">Chromium (mDNS-In)</translation> <translation id="93478295209880648">Chromium mungkin tidak akan berfungsi dengan betul kerana tidak lagi disokong pada Windows XP atau Windows Vista</translation> +<translation id="942598560705308788">Sijil diurus oleh Chromium</translation> <translation id="945990405696787151">Untuk mendapatkan kemaskinian Chromium yang akan datang, anda memerlukan macOS 10.13 atau yang lebih baharu. Komputer ini menggunakan OS X 10.11.</translation> <translation id="965162752251293939">Siapakah yang sedang menggunakan Chromium?</translation> <translation id="967427899662692980">Dapatkan keselamatan Chromium yang paling kukuh</translation>
diff --git a/chrome/app/resources/chromium_strings_nl.xtb b/chrome/app/resources/chromium_strings_nl.xtb index af20aba..029ba0d0 100644 --- a/chrome/app/resources/chromium_strings_nl.xtb +++ b/chrome/app/resources/chromium_strings_nl.xtb
@@ -43,6 +43,7 @@ <translation id="2018879682492276940">Installatie mislukt. Probeer het opnieuw.</translation> <translation id="2020032459870799438">Als je wilt checken of je andere wachtwoorden zijn beveiligd tegen gegevenslekken en andere beveiligingsproblemen, <ph name="BEGIN_LINK" />log je in bij Chromium<ph name="END_LINK" />.</translation> <translation id="2049376729098081731">Kies of je de Chromium-geschiedenis wilt opnemen voor meer gepersonaliseerde functies in Google-services</translation> +<translation id="2088953378266246249">Informatie over hoe Chromium rootcertificaten beheert</translation> <translation id="2174178932569897599">Chromium aanpassen</translation> <translation id="2174917724755363426">Installatie niet afgerond. Weet je zeker dat je wilt annuleren?</translation> <translation id="2185166961232948079">Chromium - Inloggen bij netwerk - <ph name="PAGE_TITLE" /></translation> @@ -365,6 +366,7 @@ <translation id="9185526690718004400">Opnieuw starten om &Chromium te updaten</translation> <translation id="9190841055450128916">Chromium (mDNS-In)</translation> <translation id="93478295209880648">Chromium werkt mogelijk niet naar behoren omdat dit niet langer wordt ondersteund op Windows XP en Windows Vista</translation> +<translation id="942598560705308788">Certificaten beheerd door Chromium</translation> <translation id="945990405696787151">Als je toekomstige Chromium-updates wilt krijgen, heb je macOS 10.13 of hoger nodig. Deze computer gebruikt OS X 10.11.</translation> <translation id="965162752251293939">Wie gebruikt Chromium?</translation> <translation id="967427899662692980">Gebruik het hoogste beveiligingsniveau van Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_no.xtb b/chrome/app/resources/chromium_strings_no.xtb index a9da9bb..d645e08e 100644 --- a/chrome/app/resources/chromium_strings_no.xtb +++ b/chrome/app/resources/chromium_strings_no.xtb
@@ -41,6 +41,7 @@ <translation id="2018879682492276940">Installasjonen mislyktes. Prøv igjen.</translation> <translation id="2020032459870799438">For å sjekke om de andre passordene dine er trygge mot databrudd og andre sikkerhetsproblemer, <ph name="BEGIN_LINK" />logg på Chromium<ph name="END_LINK" />.</translation> <translation id="2049376729098081731">Velg om Chromium-loggen skal inkluderes for å gi opplevelser i Google-tjenester mer personlig preg</translation> +<translation id="2088953378266246249">Informasjon om hvordan Chromium administrerer rotsertifikatene sine</translation> <translation id="2174178932569897599">Tilpass Chromium</translation> <translation id="2174917724755363426">Installasjonen er ikke fullført. Er du sikker på at du vil avbryte?</translation> <translation id="2185166961232948079">Chromium – nettverkspålogging – <ph name="PAGE_TITLE" /></translation> @@ -364,6 +365,7 @@ <translation id="9185526690718004400">Start på nytt for å oppdatere &Chromium</translation> <translation id="9190841055450128916">Chromium (mDNS-Inn)</translation> <translation id="93478295209880648">Chromium fungerer kanskje ikke riktig fordi den ikke lenger støttes på Windows XP eller Windows Vista</translation> +<translation id="942598560705308788">Sertifikater administreres av Chromium</translation> <translation id="945990405696787151">For å få fremtidige Chromium-oppdateringer må du ha macOS 10.13 eller nyere. Denne datamaskinen bruker OS X 10.11.</translation> <translation id="965162752251293939">Hvem bruker Chromium?</translation> <translation id="967427899662692980">Få den sterkeste sikkerheten i Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_pa.xtb b/chrome/app/resources/chromium_strings_pa.xtb index 8ecfaaa..d332f1a 100644 --- a/chrome/app/resources/chromium_strings_pa.xtb +++ b/chrome/app/resources/chromium_strings_pa.xtb
@@ -43,6 +43,7 @@ <translation id="2018879682492276940">ਸਥਾਪਨਾ ਅਸਫਲ ਹੋਈ। ਕਿਰਪਾ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</translation> <translation id="2020032459870799438">ਇਹ ਜਾਂਚ ਕਰਨ ਲਈ ਕਿ ਤੁਹਾਡੇ ਹੋਰ ਪਾਸਵਰਡ ਡਾਟਾ ਉਲੰਘਣਾਵਾਂ ਅਤੇ ਹੋਰ ਸੁਰੱਖਿਆ ਸੰਬੰਧੀ ਸਮੱਸਿਆਵਾਂ ਤੋਂ ਸੁਰੱਖਿਅਤ ਹਨ ਜਾਂ ਨਹੀਂ, <ph name="BEGIN_LINK" />Chromium ਵਿੱਚ ਸਾਈਨ-ਇਨ ਕਰੋ<ph name="END_LINK" />।</translation> <translation id="2049376729098081731">ਚੁਣੋ ਕਿ Google ਸੇਵਾਵਾਂ ਵਿੱਚ ਜ਼ਿਆਦਾ ਵਿਅਕਤੀਗਤ ਅਨੁਭਵਾਂ ਲਈ Chromium ਇਤਿਹਾਸ ਨੂੰ ਸ਼ਾਮਲ ਕਰਨਾ ਹੈ ਜਾਂ ਨਹੀਂ</translation> +<translation id="2088953378266246249">Chromium ਵੱਲੋਂ ਇਸਦੇ ਰੂਟ ਸਰਟੀਫਿਕੇਟਾਂ ਦੇ ਪ੍ਰਬੰਧਨ ਦੇ ਤਰੀਕੇ ਬਾਰੇ ਜਾਣਕਾਰੀ</translation> <translation id="2174178932569897599">Chromium ਨੂੰ ਵਿਉਂਤਬੱਧ ਕਰੋ</translation> <translation id="2174917724755363426">ਸਥਾਪਨਾ ਪੂਰੀ ਨਹੀਂ ਹੋਈ। ਕੀ ਤੁਸੀਂ ਪੱਕਾ ਰੱਦ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?</translation> <translation id="2185166961232948079">Chromium - ਨੈੱਟਵਰਕ ਸਾਈਨ-ਇਨ - <ph name="PAGE_TITLE" /></translation> @@ -367,6 +368,7 @@ <translation id="9185526690718004400">&Chromium ਨੂੰ ਅੱਪਡੇਟ ਕਰਨ ਲਈ ਮੁੜ-ਲਾਂਚ ਕਰੋ</translation> <translation id="9190841055450128916">Chromium (mDNS-In)</translation> <translation id="93478295209880648">ਸ਼ਾਇਦ Chromium ਠੀਕ ਢੰਗ ਨਾਲ ਕੰਮ ਨਾ ਕਰੇ ਕਿਉਂਕਿ ਇਹ ਹੁਣ Windows XP ਜਾਂ Windows Vista 'ਤੇ ਕੰਮ ਨਹੀਂ ਕਰਦਾ ਹੈ</translation> +<translation id="942598560705308788">Chromium ਵੱਲੋਂ ਪ੍ਰਬੰਧਿਤ ਕੀਤੇ ਜਾਂਦੇ ਸਰਟੀਫਿਕੇਟ</translation> <translation id="945990405696787151">Chromium ਸੰਬੰਧੀ ਭਵਿੱਖੀ ਅੱਪਡੇਟ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ, ਤੁਹਾਨੂੰ macOS 10.13 ਜਾਂ ਇਸ ਤੋਂ ਬਾਅਦ ਵਾਲੇ ਵਰਜਨ ਦੀ ਲੋੜ ਪਵੇਗੀ। ਇਸ ਕੰਪਿਊਟਰ 'ਤੇ OS X 10.11 ਵਰਜਨ ਵਰਤਿਆ ਜਾ ਰਿਹਾ ਹੈ।</translation> <translation id="965162752251293939">Chromium ਕੌਣ ਵਰਤ ਰਿਹਾ ਹੈ?</translation> <translation id="967427899662692980">Chromium ਦੀ ਸਭ ਤੋਂ ਮਜਬੂਤ ਸੁਰੱਖਿਆ ਪ੍ਰਾਪਤ ਕਰੋ</translation>
diff --git a/chrome/app/resources/chromium_strings_ro.xtb b/chrome/app/resources/chromium_strings_ro.xtb index 874c4ae..221d5376 100644 --- a/chrome/app/resources/chromium_strings_ro.xtb +++ b/chrome/app/resources/chromium_strings_ro.xtb
@@ -41,6 +41,7 @@ <translation id="2018879682492276940">Nu s-a instalat. Încearcă din nou.</translation> <translation id="2020032459870799438">Ca să verifici dacă celelalte parole sunt protejate împotriva încălcării securității datelor și a altor probleme de securitate, <ph name="BEGIN_LINK" />conectează-te la Chromium<ph name="END_LINK" />.</translation> <translation id="2049376729098081731">Alege dacă se include istoricul Chromium pentru experiențe mai personalizate în serviciile Google</translation> +<translation id="2088953378266246249">Informații despre modul în care Chromium gestionează certificatele rădăcină</translation> <translation id="2174178932569897599">Personalizează Chromium</translation> <translation id="2174917724755363426">Instalarea nu este finalizată. Sigur anulezi?</translation> <translation id="2185166961232948079">Chromium – conectare la rețea – <ph name="PAGE_TITLE" /></translation> @@ -363,6 +364,7 @@ <translation id="9185526690718004400">Relansează pentru a actualiza &Chromium</translation> <translation id="9190841055450128916">Chromium (mDNS-In)</translation> <translation id="93478295209880648">Este posibil ca Chromium să nu funcționeze corespunzător, deoarece nu mai este acceptat pe Windows XP sau Windows Vista</translation> +<translation id="942598560705308788">Certificate gestionate de Chromium</translation> <translation id="945990405696787151">Pentru a primi actualizările Chromium viitoare, vei avea nevoie de macOS 10.13 sau o versiune ulterioară. Acest computer folosește OS X 10.11.</translation> <translation id="965162752251293939">Cine folosește Chromium?</translation> <translation id="967427899662692980">Beneficiază de cel mai înalt nivel de securitate de la Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_sk.xtb b/chrome/app/resources/chromium_strings_sk.xtb index e8456ed..8194961e 100644 --- a/chrome/app/resources/chromium_strings_sk.xtb +++ b/chrome/app/resources/chromium_strings_sk.xtb
@@ -43,6 +43,7 @@ <translation id="2018879682492276940">Inštalácia bola neúspešná. Skúste to znova.</translation> <translation id="2020032459870799438">Ak chcete skontrolovať, či sú vaše ostatné heslá chránené pred porušením ochrany údajov a inými bezpečnostnými hrozbami, <ph name="BEGIN_LINK" />prihláste sa do prehliadača Chromium<ph name="END_LINK" />.</translation> <translation id="2049376729098081731">Vyberte, či sa má zahrnúť história prehliadača Chromium na zaistenie prispôsobenejšieho prostredia v službách Googlu</translation> +<translation id="2088953378266246249">Informácie o tom, ako Chromium spravuje koreňové certifikáty</translation> <translation id="2174178932569897599">Prispôsobiť Chromium</translation> <translation id="2174917724755363426">Inštalácia nie je dokončená. Naozaj ju chcete zrušiť?</translation> <translation id="2185166961232948079">Chromium – prihlásenie do siete – <ph name="PAGE_TITLE" /></translation> @@ -366,6 +367,7 @@ <translation id="9185526690718004400">Znova spustiť a aktualizovať Chromium</translation> <translation id="9190841055450128916">Chromium (mDNS-In)</translation> <translation id="93478295209880648">Chromium nemusí fungovať správne, pretože v systémoch Windows XP a Windows Vista už nie je podporovaný</translation> +<translation id="942598560705308788">Certifikáty, ktoré spravuje Chromium</translation> <translation id="945990405696787151">Ak chcete dostávať budúce aktualizácie prehliadača Chromium, musíte používať systém macOS 10.13 alebo novší. V tomto počítači používate OS X 10.11.</translation> <translation id="965162752251293939">Kto používa Chromium?</translation> <translation id="967427899662692980">Získajte najsilnejšie zabezpečenie prehliadača Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_sr-Latn.xtb b/chrome/app/resources/chromium_strings_sr-Latn.xtb index 035ffde..1a09705c 100644 --- a/chrome/app/resources/chromium_strings_sr-Latn.xtb +++ b/chrome/app/resources/chromium_strings_sr-Latn.xtb
@@ -43,6 +43,7 @@ <translation id="2018879682492276940">Instalacija nije uspela. Probajte ponovo.</translation> <translation id="2020032459870799438">Da biste proverili da li su ostale lozinke bezbedne od upada u podatke i drugih bezbednosnih problema, <ph name="BEGIN_LINK" />prijavite se u Chromium<ph name="END_LINK" />.</translation> <translation id="2049376729098081731">Odaberite da li ćete uvrstiti istoriju Chromium-a radi personalizovanijih doživljaja u Google uslugama</translation> +<translation id="2088953378266246249">Informacije o tome kako Chromium upravlja sertifikatima osnovnog nivoa</translation> <translation id="2174178932569897599">Prilagodite Chromium</translation> <translation id="2174917724755363426">Instalacija nije dovršena. Želite stvarno da je otkažete?</translation> <translation id="2185166961232948079">Chromium – prijavljivanje na mrežu – <ph name="PAGE_TITLE" /></translation> @@ -367,6 +368,7 @@ <translation id="9185526690718004400">Ponovo pokreni da bi se &Chromium ažurirao</translation> <translation id="9190841055450128916">Chromium (mDNS-In)</translation> <translation id="93478295209880648">Chromium možda neće ispravno funkcionisati zato što više nije podržan na Windows XP-u ili Windows Vista-i</translation> +<translation id="942598560705308788">Sertifikati kojima upravlja Chromium</translation> <translation id="945990405696787151">Da biste dobijali buduća Chromium ažuriranja, treba vam macOS 10.13 ili novija verzija. Ovaj računar koristi OS X 10.11.</translation> <translation id="965162752251293939">Ko koristi Chromium?</translation> <translation id="967427899662692980">Nabavite najjaču Chromium zaštitu</translation>
diff --git a/chrome/app/resources/chromium_strings_sr.xtb b/chrome/app/resources/chromium_strings_sr.xtb index f81bf2e..0b293fc 100644 --- a/chrome/app/resources/chromium_strings_sr.xtb +++ b/chrome/app/resources/chromium_strings_sr.xtb
@@ -43,6 +43,7 @@ <translation id="2018879682492276940">Инсталација није успела. Пробајте поново.</translation> <translation id="2020032459870799438">Да бисте проверили да ли су остале лозинке безбедне од упада у податке и других безбедносних проблема, <ph name="BEGIN_LINK" />пријавите се у Chromium<ph name="END_LINK" />.</translation> <translation id="2049376729098081731">Одаберите да ли ћете уврстити историју Chromium-а ради персонализованијих доживљаја у Google услугама</translation> +<translation id="2088953378266246249">Информације о томе како Chromium управља сертификатима основног нивоа</translation> <translation id="2174178932569897599">Прилагодите Chromium</translation> <translation id="2174917724755363426">Инсталација није довршена. Желите стварно да је откажете?</translation> <translation id="2185166961232948079">Chromium – пријављивање на мрежу – <ph name="PAGE_TITLE" /></translation> @@ -367,6 +368,7 @@ <translation id="9185526690718004400">Поново покрени да би се &Chromium ажурирао</translation> <translation id="9190841055450128916">Chromium (mDNS-In)</translation> <translation id="93478295209880648">Chromium можда неће исправно функционисати зато што више није подржан на Windows XP-у или Windows Vista-и</translation> +<translation id="942598560705308788">Сертификати којима управља Chromium</translation> <translation id="945990405696787151">Да бисте добијали будућа Chromium ажурирања, треба вам macOS 10.13 или новија верзија. Овај рачунар користи ОС X 10.11.</translation> <translation id="965162752251293939">Ко користи Chromium?</translation> <translation id="967427899662692980">Набавите најјачу Chromium заштиту</translation>
diff --git a/chrome/app/resources/chromium_strings_te.xtb b/chrome/app/resources/chromium_strings_te.xtb index 63bf846..501e243b 100644 --- a/chrome/app/resources/chromium_strings_te.xtb +++ b/chrome/app/resources/chromium_strings_te.xtb
@@ -41,6 +41,7 @@ <translation id="2018879682492276940">ఇన్స్టాల్ చేయడం విఫలమైంది. దయచేసి మళ్లీ ట్రై చేయండి.</translation> <translation id="2020032459870799438">డేటా ఉల్లంఘనల నుండి, ఇతర భద్రతా సమస్యల నుండి మీ ఇతర పాస్వర్డ్లు సురక్షితంగా ఉన్నాయో లేదో చెక్ చేయడానికి, <ph name="BEGIN_LINK" />Chromiumకు సైన్ ఇన్ చేయండి<ph name="END_LINK" />.</translation> <translation id="2049376729098081731">Google సర్వీస్లలో మరింత వ్యక్తిగతీకరించిన అనుభవం కోసం Chromium హిస్టరీని చేర్చాలో, లేదో ఎంచుకోండి</translation> +<translation id="2088953378266246249">Chromium, దాని రూట్ సర్టిఫికేట్లను ఎలా మేనేజ్ చేస్తుంది అనే దాని గురించిన సమాచారం</translation> <translation id="2174178932569897599">Chromiumను అనుకూలంగా మార్చండి</translation> <translation id="2174917724755363426">ఇన్స్టాలేషన్ పూర్తి కాలేదు. మీరు ఖచ్చితంగా రద్దు చేయాలనుకుంటున్నారా?</translation> <translation id="2185166961232948079">Chromium - నెట్వర్క్ సైన్ ఇన్ - <ph name="PAGE_TITLE" /></translation> @@ -361,6 +362,7 @@ <translation id="9185526690718004400">&Chromiumను అప్డేట్ చేయడానికి రీ-లాంచ్ చేయండి</translation> <translation id="9190841055450128916">Chromium (mDNS-In)</translation> <translation id="93478295209880648">Chromiumకి ఇప్పుడు Windows XP లేదా Windows Vistaలో మద్దతు లేనందున ఇది సరిగ్గా పని చేయకపోవచ్చు</translation> +<translation id="942598560705308788">Chromium ద్వారా మేనేజ్ చేయబడే సర్టిఫికెట్లు</translation> <translation id="945990405696787151">భవిష్యత్తులో Chromium అప్డేట్లను పొందడానికి, మీకు macOS 10.13 లేదా ఆ తర్వాతి వెర్షన్ అవసరం అవుతుంది. ఈ కంప్యూటర్ OS X 10.11ను ఉపయోగిస్తోంది.</translation> <translation id="965162752251293939">Chromiumను ఎవరు ఉపయోగిస్తున్నారు?</translation> <translation id="967427899662692980">Chromium అత్యంత సురక్షితమైన సెక్యూరిటీని పొందండి</translation>
diff --git a/chrome/app/resources/chromium_strings_th.xtb b/chrome/app/resources/chromium_strings_th.xtb index a01512e..371f030 100644 --- a/chrome/app/resources/chromium_strings_th.xtb +++ b/chrome/app/resources/chromium_strings_th.xtb
@@ -41,6 +41,7 @@ <translation id="2018879682492276940">การติดตั้งไม่สำเร็จ โปรดลองอีกครั้ง</translation> <translation id="2020032459870799438"><ph name="BEGIN_LINK" />ลงชื่อเข้าใช้ Chromium<ph name="END_LINK" /> เพื่อตรวจสอบว่ารหัสผ่านรายการอื่นไม่ได้รับผลกระทบจากการละเมิดข้อมูลและปัญหาด้านความปลอดภัยอื่นๆ</translation> <translation id="2049376729098081731">เลือกว่าจะรวมประวัติการเข้าชม Chromium เพื่อรับประสบการณ์ที่ปรับเปลี่ยนในแบบของคุณมากขึ้นในบริการของ Google หรือไม่</translation> +<translation id="2088953378266246249">ข้อมูลเกี่ยวกับวิธีที่ Chromium จัดการใบรับรองรูท</translation> <translation id="2174178932569897599">ปรับแต่ง Chromium</translation> <translation id="2174917724755363426">การติดตั้งไม่สมบูรณ์ คุณแน่ใจไหมว่าต้องการยกเลิก</translation> <translation id="2185166961232948079">Chromium - หน้าลงชื่อเข้าใช้ของเครือข่าย - <ph name="PAGE_TITLE" /></translation> @@ -363,6 +364,7 @@ <translation id="9185526690718004400">เปิดอีกครั้งเพื่ออัปเดต Chromium</translation> <translation id="9190841055450128916">Chromium (mDNS-In)</translation> <translation id="93478295209880648">Chromium อาจทำงานไม่ถูกต้องเพราะไม่รองรับ Windows XP หรือ Windows Vista อีกต่อไป</translation> +<translation id="942598560705308788">ใบรับรองที่จัดการโดย Chromium</translation> <translation id="945990405696787151">คุณจะต้องใช้ macOS 10.13 ขึ้นไปเพื่อรับการอัปเดต Chromium ในอนาคต คอมพิวเตอร์เครื่องนี้ใช้ OS X 10.11</translation> <translation id="965162752251293939">ใครกำลังใช้ Chromium อยู่</translation> <translation id="967427899662692980">รับการรักษาความปลอดภัยที่เข้มงวดที่สุดของ Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_vi.xtb b/chrome/app/resources/chromium_strings_vi.xtb index 4fb864f1..54fed1d 100644 --- a/chrome/app/resources/chromium_strings_vi.xtb +++ b/chrome/app/resources/chromium_strings_vi.xtb
@@ -41,6 +41,7 @@ <translation id="2018879682492276940">Không cài đặt được. Vui lòng thử lại.</translation> <translation id="2020032459870799438">Để kiểm tra xem các mật khẩu khác của bạn có bị ảnh hưởng bởi các vụ rò rỉ dữ liệu và sự cố bảo mật khác hay không, hãy <ph name="BEGIN_LINK" />đăng nhập vào Chromium<ph name="END_LINK" />.</translation> <translation id="2049376729098081731">Chọn xem có bao gồm nhật ký duyệt web trên Chromium hay không để mang lại trải nghiệm phù hợp hơn trong các dịch vụ của Google</translation> +<translation id="2088953378266246249">Thông tin về cách Chromium quản lý các chứng chỉ gốc của Chromium</translation> <translation id="2174178932569897599">Tùy chỉnh Chromium</translation> <translation id="2174917724755363426">Chưa cài đặt xong. Bạn có chắc chắn muốn huỷ không?</translation> <translation id="2185166961232948079">Chromium – Đăng nhập vào mạng – <ph name="PAGE_TITLE" /></translation> @@ -365,6 +366,7 @@ <translation id="9185526690718004400">Chạy lại để cập nhật &Chromium</translation> <translation id="9190841055450128916">Chromium (mDNS-In)</translation> <translation id="93478295209880648">Chromium có thể không hoạt động chính xác do không được hỗ trợ trên Windows XP hoặc Windows Vista nữa</translation> +<translation id="942598560705308788">Chứng chỉ do Chromium quản lý</translation> <translation id="945990405696787151">Để nhận các bản cập nhật Chromium sau này, bạn cần có macOS 10.13 trở lên. Máy tính này đang dùng OS X 10.11.</translation> <translation id="965162752251293939">Ai đang sử dụng Chromium?</translation> <translation id="967427899662692980">Có được chế độ bảo mật mạnh nhất của Chromium</translation>
diff --git a/chrome/app/resources/generated_resources_af.xtb b/chrome/app/resources/generated_resources_af.xtb index 6aa1a92e..90e5948 100644 --- a/chrome/app/resources/generated_resources_af.xtb +++ b/chrome/app/resources/generated_resources_af.xtb
@@ -1296,7 +1296,6 @@ <translation id="2191754378957563929">Aan</translation> <translation id="2192505247865591433">Van:</translation> <translation id="2193365732679659387">Vertrou instellings</translation> -<translation id="2194554416429452547">Chrome verken tydens proeflopies maniere om strooipos, bedrog, en deling tussen werwe te beperk. Chrome kan ook <ph name="ESTIMATE_INTERESTS_LINK" /> wat werwe kan gebruik om vir jou advertensies te wys. Jy kan jou belangstellings in Instellings bestuur.</translation> <translation id="2194856509914051091">Dinge om in ag te neem</translation> <translation id="2195331105963583686">Jy sal hierdie <ph name="DEVICE_TYPE" /> ná daardie tyd steeds kan gebruik, maar dit sal nie meer outomaties sagteware- en sekuriteitopdaterings kry nie</translation> <translation id="2195729137168608510">E-posbeskerming</translation> @@ -5306,6 +5305,7 @@ <translation id="6086846494333236931">Deur jou administrateur geïnstalleer</translation> <translation id="6087746524533454243">Soek jy na die blaaier se Meer Oor Bladsy? Besoek</translation> <translation id="6087960857463881712">Ongelooflike gesig</translation> +<translation id="6088535503330933227">Chrome verken tans maniere om strooipos, bedrog, en deling tussen werwe te beperk. Chrome kan ook <ph name="ESTIMATE_INTERESTS_LINK" /> wat werwe kan gebruik om vir jou advertensies te wys. Jy kan jou belangstellings in Instellings bestuur.</translation> <translation id="608912389580139775">Klik die Boekmerk-ikoon om hierdie bladsy by jou leeslys te voeg</translation> <translation id="6091761513005122595">Deling is suksesvol gemonteer.</translation> <translation id="6093888419484831006">Kanselleer tans opdatering …</translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb index 3ff80757..4eb9a9a 100644 --- a/chrome/app/resources/generated_resources_am.xtb +++ b/chrome/app/resources/generated_resources_am.xtb
@@ -1292,7 +1292,6 @@ <translation id="2191754378957563929">አብራ</translation> <translation id="2192505247865591433">ከ፦</translation> <translation id="2193365732679659387">የእምነት ቅንብሮች</translation> -<translation id="2194554416429452547">በሙከራዎች ጊዜ ላይ Chrome አይፈለጌ መልዕክትን፣ ማጭበርበርን እና በጣቢያዎች መካከል መጋራትን የሚገድብበትን መንገዶች እያሰሰ ነው። Chrome እንዲሁም ጣቢያዎች ማስታወቂያዎችን ለእርስዎ ለማሳየት ሊጠቀሙባቸው የሚችሏቸውን <ph name="ESTIMATE_INTERESTS_LINK" />። የእርስዎን ዝንባሌዎች በቅንብሮች ውስጥ ማቀናበር ይችላሉ።</translation> <translation id="2194856509914051091">ከግምት ውስጥ መግባት ያለባቸው ነገሮች</translation> <translation id="2195331105963583686">ከዚያ ጊዜ በኋላ አሁንም ይህን <ph name="DEVICE_TYPE" /> መጠቀም ይችላሉ፣ ነገር ግን ከእንግዲህ ራስ-ሰር የሶፍትዌር እና የደህንነት ዝማኔዎችን አያገኝም</translation> <translation id="2195729137168608510">የኢሜይል መከላከያ</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb index af207ec..a466c01 100644 --- a/chrome/app/resources/generated_resources_ar.xtb +++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -1287,7 +1287,6 @@ <translation id="2191754378957563929">مفعّل</translation> <translation id="2192505247865591433">من:</translation> <translation id="2193365732679659387">إعدادات الثقة</translation> -<translation id="2194554416429452547">يعمل Chrome خلال الفترات التجريبية على استكشاف طرق للحد من المحتوى غير المرغوب فيها وعمليات الاحتيال وعمليات مشاركة البيانات بين المواقع الإلكترونية. يعمل Chrome أيضًا على <ph name="ESTIMATE_INTERESTS_LINK" />، حيث يمكن أن تستخدم المواقع الإلكترونية تلك التقديرات لعرض إعلانات مخصَّصة لك. ويمكنك إدارة اهتماماتك من خلال الإعدادات.</translation> <translation id="2194856509914051091">ملاحظات مهمّة</translation> <translation id="2195331105963583686">سيظل بإمكانك استخدام هذا الجهاز <ph name="DEVICE_TYPE" /> بعد تلك الفترة، ولكن لن يتلقى الجهاز تحديثات تلقائية للبرامج والأمان بعد ذلك.</translation> <translation id="2195729137168608510">حماية البريد الإلكتروني</translation>
diff --git a/chrome/app/resources/generated_resources_as.xtb b/chrome/app/resources/generated_resources_as.xtb index cd4e11ab6..12d845d 100644 --- a/chrome/app/resources/generated_resources_as.xtb +++ b/chrome/app/resources/generated_resources_as.xtb
@@ -1294,7 +1294,6 @@ <translation id="2191754378957563929">অন আছে</translation> <translation id="2192505247865591433">পৰা:</translation> <translation id="2193365732679659387">বিশ্বাসযোগ্যতাৰ ছেটিং</translation> -<translation id="2194554416429452547">ট্ৰায়েলৰ সময়ত Chromeএ স্পাম, প্ৰৱঞ্চনা আৰু ছাইটৰ মাজত শ্বেয়াৰ কৰাটো সীমিত কৰাৰ উপায় বিচাৰি আছে। Chromeএ লগতে <ph name="ESTIMATE_INTERESTS_LINK" /> যাক ছাইটসমূহে আপোনাক বিজ্ঞাপন দেখুৱাবলৈ ব্যৱহাৰ কৰিব পাৰে। ছেটিঙত আপুনি আপোনাৰ আগ্ৰহ পৰিচালনা কৰিব পাৰে।</translation> <translation id="2194856509914051091">বিবেচনা কৰিব লগা বিষয়</translation> <translation id="2195331105963583686">আপুনি সেই সময়খিনিৰ পাছতো এই <ph name="DEVICE_TYPE" />টো ব্যৱহাৰ কৰি থাকিব পাৰিব কিন্তু এইটোৱে আৰু স্বয়ংক্ৰিয় ছফ্টৱেৰ আৰু সুৰক্ষাৰ আপডে’টসমূহ নাপাব</translation> <translation id="2195729137168608510">ইমেইল সুৰক্ষা</translation> @@ -4120,6 +4119,7 @@ <translation id="4900392736118574277">আপোনাৰ আৰম্ভণিতে খোল খুৱা পৃষ্ঠাটো <ph name="URL" />লৈ সলনি কৰা হৈছে।</translation> <translation id="490051679772058907"><ph name="REFRESH_RATE" /> হাৰ্টজ - একত্ৰিত</translation> <translation id="4900652253009739885">"বাছনি কৰা কাৰ্য"ৰ বাবে আবণ্টন কৰা একমাত্ৰ ছুইচটো আঁতৰাব নোৱাৰি। <ph name="RESPONSE" />ৰ বাবে যিকোনো এটা কী টিপক।</translation> +<translation id="4901154724271753917">শেহতীয়াকৈ বন্ধ কৰা শিতানটো বিস্তাৰ কৰক</translation> <translation id="4901309472892185668"><ph name="EXPERIMENT_NAME" /> পৰীক্ষণৰ বাবে পৰীক্ষণৰ স্থিতি বাছনি কৰক।</translation> <translation id="49027928311173603">ছাৰ্ভাৰৰ পৰা ডাউনল’ড কৰা নীতিটো অমান্য: <ph name="VALIDATION_ERROR" />।</translation> <translation id="4906490889887219338">নেটৱৰ্কৰ ফাইল শ্বেয়াৰ কৰা সুবিধাটো ছেট আপ অথবা পৰিচালনা কৰক। <ph name="LINK_BEGIN" />অধিক জানক<ph name="LINK_END" /></translation> @@ -5300,6 +5300,7 @@ <translation id="6086846494333236931">আপোনাৰ প্ৰশাসকে ইনষ্টল কৰিছে</translation> <translation id="6087746524533454243">ব্ৰাউজাৰৰ বিষয়ে পৃষ্ঠাখন বিচাৰিছে নেকি? ইয়ালৈ যাওক</translation> <translation id="6087960857463881712">অনন্য মুখমণ্ডল</translation> +<translation id="6088535503330933227">Chromeএ বিজ্ঞাপনৰ স্পাম, প্ৰৱঞ্চনা আৰু ছাইটৰ মাজত শ্বেয়াৰ কৰাটো সীমিত কৰাৰ উপায় বিচাৰি আছে। Chromeএ লগতে <ph name="ESTIMATE_INTERESTS_LINK" /> যাক ছাইটসমূহে আপোনাক বিজ্ঞাপন দেখুৱাবলৈ ব্যৱহাৰ কৰিব পাৰে। ছেটিঙত আপুনি আপোনাৰ আগ্ৰহ পৰিচালনা কৰিব পাৰে।</translation> <translation id="608912389580139775">এই পৃষ্ঠাখন আপোনাৰ পঢ়াৰ সূচীখনত যোগ দিবলৈ, বুকমাৰ্ক চিহ্নটোত ক্লিক কৰক</translation> <translation id="6091761513005122595">শ্বেয়াৰ সফলভাৱে মাউণ্ট কৰা হ’ল।</translation> <translation id="6093888419484831006">আপডে'ট বাতিল কৰি থকা হৈছে...</translation> @@ -5928,6 +5929,7 @@ <translation id="6709133671862442373">News</translation> <translation id="6709357832553498500"><ph name="EXTENSIONNAME" /> ব্যৱহাৰ কৰি সংযোগ কৰক</translation> <translation id="6710213216561001401">পূৰ্বৱৰ্তী</translation> +<translation id="6710394144992407503">আপুনি ৱেব পৃষ্ঠাত পাঠ টাইপ কৰোঁতে বানান ভুল হৈছে নেকি চাওক</translation> <translation id="6711146141291425900">ডাউনল’ডৰ বাবে <ph name="WEB_DRIVE" /> একাউণ্ট লিংক কৰক</translation> <translation id="6712943853047024245">আপুনি ইতিমধ্যে <ph name="WEBSITE" />ৰ বাবে এই ব্যৱহাৰকাৰীৰ নামটোৰ সৈতে এটা পাছৱৰ্ড ছেভ কৰিছে</translation> <translation id="6713233729292711163">কৰ্মস্থানৰ প্ৰ’ফাইল যোগ দিয়ক</translation> @@ -6549,6 +6551,7 @@ <translation id="7340757554212515731">Googleলৈ স্বয়ংক্ৰিয়ভাৱে ক্ৰেশ্ব ৰিপ’ৰ্টৰ লগতে ডায়েগন’ষ্টিক আৰু ব্যৱহাৰৰ ডেটা পঠিয়ায়</translation> <translation id="7341834142292923918">এই ছাইটলৈ এক্সেছ বিচাৰে</translation> <translation id="7343372807593926528">মতামত পঠিওৱাৰ আগতে অনুগ্ৰহ কৰি সমস্যাটো বৰ্ণনা কৰক।</translation> +<translation id="7344585835349671209">আপোনাৰ ডিভাইচত HTTPS/SSL প্ৰমাণপত্ৰ পৰিচালনা কৰক</translation> <translation id="7345706641791090287">আপোনাৰ পাছৱৰ্ড নিশ্চিত কৰক</translation> <translation id="7346909386216857016">ঠিক আছে, বুজি পালোঁ</translation> <translation id="7347452120014970266">এই কাৰ্যই <ph name="ORIGIN_NAME" /> আৰু ইয়াৰ ইনষ্টল হৈ থকা এপ্সমূহে ষ্ট’ৰ কৰা সকলো ডেটা আৰু কুকি মচিব</translation> @@ -6678,6 +6681,7 @@ <translation id="7460045493116006516">আপুনি বৰ্তমান ইনষ্টল কৰি ৰখা থীম</translation> <translation id="7461924472993315131">পিন</translation> <translation id="746216226901520237">আগলৈ আপোনাৰ ফ’নটোৱে আপোনাৰ <ph name="DEVICE_TYPE" /> আনলক কৰিব। আপুনি ছেটিংসমূহ-লৈ গৈ স্মাৰ্ট লক অফ কৰিব পাৰে।</translation> +<translation id="7464153996453281700">উপাদান ইতিমধ্যে আপ টু ডে’ট হৈ আছে</translation> <translation id="7464637891177137294">এইটো আপোনাৰ Google একাউণ্টত ছেভ কৰক, <ph name="ACCOUNT" /></translation> <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{#টা খোলা টেব আছে, টেবৰ ষ্ট্রিপটো ট’গল কৰিবলৈ টিপক}one{#টা খোলা টেব আছে, টেবৰ ষ্ট্রিপটো ট’গল কৰিবলৈ টিপক}other{#টা খোলা টেব আছে, টেবৰ ষ্ট্রিপটো ট’গল কৰিবলৈ টিপক}}</translation> <translation id="7465635034594602553">কিবা ভুল হ’ল। অনুগ্ৰহ কৰি কেইমিনিটমান অপেক্ষা কৰক আৰু পুনৰ <ph name="APP_NAME" /> চলাওক।</translation> @@ -7010,6 +7014,7 @@ <translation id="7768526219335215384"><ph name="ORIGIN" />এ <ph name="FOLDERNAME" />ত ফাইল চাব পাৰিব</translation> <translation id="7768770796815395237">সলনি কৰক</translation> <translation id="7768784765476638775">কথা ক’বলৈ বাছনি কৰক</translation> +<translation id="7769748505895274502">শেহতীয়াকৈ বন্ধ কৰা শিতানটো সংকোচন কৰক</translation> <translation id="7770406201819593386">ChromeOS Flex ডায়েগন’ষ্টিক পৰীক্ষা চলাওক।</translation> <translation id="7770450735129978837">মাউছৰ ৰাইট ক্লিক</translation> <translation id="7770612696274572992">অন্য ডিভাইচৰ পৰা প্ৰতিলিপি কৰা প্ৰতিচ্ছবি</translation> @@ -7185,6 +7190,7 @@ <translation id="793531125873261495">ভাৰ্চুৱেল মেচিন ডাউনল’ড কৰাত আসোঁৱাহ হৈছে। অনুগ্ৰহ কৰি আকৌ চেষ্টা কৰক।</translation> <translation id="7935451262452051102"><ph name="PERCENT" />% সম্পূৰ্ণ হ’ল</translation> <translation id="7939062555109487992">উচ্চখাপৰ বিকল্প</translation> +<translation id="7939328347457537652">ডিভাইচৰ প্ৰমাণপত্ৰ পৰিচালনা কৰক</translation> <translation id="7939412583708276221">যিকোনো প্ৰকাৰে ৰাখক</translation> <translation id="7942349550061667556">ৰঙা</translation> <translation id="7943368935008348579">PDF ডাউনল’ড কৰক</translation>
diff --git a/chrome/app/resources/generated_resources_az.xtb b/chrome/app/resources/generated_resources_az.xtb index 93b8aeaec..fbee2ce 100644 --- a/chrome/app/resources/generated_resources_az.xtb +++ b/chrome/app/resources/generated_resources_az.xtb
@@ -983,6 +983,7 @@ <translation id="1916502483199172559">Defolt qırmızı avatar</translation> <translation id="1918141783557917887">&Kiçik</translation> <translation id="1920390473494685033">Kontaktlar</translation> +<translation id="1921544956190977703">Təhlükəli vebsaytlara, endirmələrə və artırmalara qarşı Chrome'un ən güclü təhlükəsizliyinə sahibsiniz</translation> <translation id="1921584744613111023"><ph name="DPI" /> dpi</translation> <translation id="1923468477587371721">Gmail, Disk və YouTube kimi Google saytları fərdi məhsul dilini dəyişdirmədiyiniz təqdirdə Google Hesabınızın dilindən istifadə edir</translation> <translation id="192494336144674234">Bununla açın</translation> @@ -1280,7 +1281,6 @@ <translation id="2191754378957563929">Aktiv</translation> <translation id="2192505247865591433">Kimdən:</translation> <translation id="2193365732679659387">Güvənlik ayarları</translation> -<translation id="2194554416429452547">Sınaqlar zamanı Chrome spam, fırıldaqçılıq və saytlar arasında paylaşımı məhdudlaşdırmaq yollarını araşdırır. Chrome həmçinin saytların sizə reklam göstərmək üçün istifadə edə biləcəyi <ph name="ESTIMATE_INTERESTS_LINK" />. Maraqlarınızı Ayarlarda idarə edə bilərsiniz.</translation> <translation id="2194856509914051091">Nəzərə alınmalı amillər</translation> <translation id="2195331105963583686">Daha sonra bu <ph name="DEVICE_TYPE" /> cıhazını istifadə edə biləcəksiniz lakin, artıq avtomatik proqram təminatı və təhlükəsizlik güncəlləmələri almayacaqsınız.</translation> <translation id="2195729137168608510">E-poçt Müdafiəsi</translation> @@ -2087,6 +2087,7 @@ <ph name="DOMAIN" /> smart kartınızın taxılı qalmasını tələb edir.</translation> <translation id="2923234477033317484">Bu hesabı silin</translation> <translation id="2923644930701689793">Telefonunuzun foto lentinə giriş edin</translation> +<translation id="292371311537977079">Chrome ayarları</translation> <translation id="2925658782192398150">Tamamlandı, heç bir problem tapılmadı</translation> <translation id="2926085873880284723">Defolt qısayolları bərap edin</translation> <translation id="2926620265753325858"><ph name="DEVICE_NAME" /> dəstəklənmir.</translation> @@ -2671,6 +2672,7 @@ <translation id="3511528412952710609">Qısa</translation> <translation id="3514335087372914653">Oyuna Nəzarət</translation> <translation id="3514373592552233661">Birdən çox şəbəkə əlçatan olduqda, məlum olan şəbəkə ilə müqayisədə tərcih edilən şəbəkələr seçiləcək</translation> +<translation id="3514647716686280777">Standart qoruma əldə edirsiniz. Təhlükəli vebsaytlara, endirmələrə və artırmalara qarşı daha çox qoruma əldə etmək üçün Chrome ayarlarında Qabaqcıl Güvənli Baxışı aktiv edin.</translation> <translation id="3515983984924808886">Sıfırlamanı təsdiq etmək üçün təhlükəsizlik açarınıza yenidən toxunun. PIN kod daxil olmaqla təhlükəsizlik açarında saxlanılan bütün məlumatlar silinəcək.</translation> <translation id="3518985090088779359">Qəbul edin və davam edin</translation> <translation id="3519564332031442870">Çap Server Xidməti</translation> @@ -5283,6 +5285,7 @@ <translation id="6086846494333236931">Administratorunuz tərəfindən quraşdırılıb</translation> <translation id="6087746524533454243">Brauzerin haqqında səhifəsini axtarırsınız? Ziyarət edin</translation> <translation id="6087960857463881712">Zəhmli üz</translation> +<translation id="6088535503330933227">Chrome reklam spamı, fırıldaqçılıq və saytlar arasında paylaşımı məhdudlaşdırmaq yollarını araşdırır. Chrome həmçinin saytların sizə reklam göstərmək üçün istifadə edə biləcəyi <ph name="ESTIMATE_INTERESTS_LINK" />. Maraqlarınızı Ayarlarda idarə edə bilərsiniz.</translation> <translation id="608912389580139775">Bu səhifəni oxu siyahınıza əlavə etmək üçün Əlfəcin ikonasına toxunun</translation> <translation id="6091761513005122595">Paylaşım başladı.</translation> <translation id="6093888419484831006">Güncəllənmə ləğv edilir...</translation> @@ -5472,6 +5475,7 @@ <translation id="6278428485366576908">Tema</translation> <translation id="6278776436938569440">Məkanı dəyişin</translation> <translation id="6279183038361895380">Kursorunuzu göstərmək üçün |<ph name="ACCELERATOR" />| basın</translation> +<translation id="6279595948631688299">Seçilmiş sertifikatı e&ksport edin...</translation> <translation id="6280215091796946657">Fərqli hesab ilə daxil olun</translation> <translation id="6280912520669706465">ARC</translation> <translation id="6282180787514676874">{COUNT,plural, =1{1 vərəq limitini keçir}other{{COUNT} vərəq limitini keçir}}</translation> @@ -5586,6 +5590,7 @@ <translation id="6398715114293939307">Google Play Mağazanı Silin</translation> <translation id="6398765197997659313">Tam ekrandan çıxın</translation> <translation id="6399774419735315745">Cəsus</translation> +<translation id="6401458660421980302">Bu tabı başqa cihaza göndərmək üçün orada Chrome'a daxil olun</translation> <translation id="6401597285454423070">Kompüteriniz ChromeOS'da bir çox kritik təhlükəsizlik funksiyalarının tətbiqi üçün istifadə olunan Trusted Platform Module (TPM) təhlükəsizlik cihazından ibarətdir. Ətraflı məlumat üçün Chromebook Yardım Mərkəzinə daxil olun: https://support.google.com/chromebook/?p=tpm</translation> <translation id="6404187344102273690">Chromebook Oyun</translation> <translation id="6404511346730675251">Əlfəcinə düzəliş edin</translation> @@ -5822,6 +5827,7 @@ <translation id="6619801788773578757">Kiosk tətbiqi əlavə edin</translation> <translation id="6619990499523117484">PİN kodunuzu təsdiq edin</translation> <translation id="6620254580880484313">Konteynerin adı</translation> +<translation id="6621391692573306628">Bu tabı başqa cihaza göndərmək üçün hər iki cihazda Chrome'a daxil olun</translation> <translation id="6622980291894852883">Təsvirləri blok etməyə davam edin</translation> <translation id="6624036901798307345">Planşet rejimində hər tabın miniatürlərini göstərən yeni tab zolağını açmaq üçün tab sayğacı alətlər paneli düyməsinə toxunun.</translation> <translation id="6624535038674360844"><ph name="FILE_NAME" /> həssas və ya təhlükəli məzmun ehtiva edir. Sahibindən onu düzəltməsini istəyin.</translation>
diff --git a/chrome/app/resources/generated_resources_be.xtb b/chrome/app/resources/generated_resources_be.xtb index e1a8aa5..34c4ef5e 100644 --- a/chrome/app/resources/generated_resources_be.xtb +++ b/chrome/app/resources/generated_resources_be.xtb
@@ -1287,7 +1287,6 @@ <translation id="2191754378957563929">Уключана</translation> <translation id="2192505247865591433">Адкуль:</translation> <translation id="2193365732679659387">Налады надзейнасці</translation> -<translation id="2194554416429452547">Пры тэсціраванні пробных функцый Chrome шукае спосабы абмежавання спама, махлярства і абмену данымі паміж сайтамі. Chrome таксама <ph name="ESTIMATE_INTERESTS_LINK" />, якія могуць выкарыстоўвацца іншымі сайтамі для паказу рэкламы. Кіраваць данымі пра свае інтарэсы можна ў наладах.</translation> <translation id="2194856509914051091">Інфармацыя для разгляду</translation> <translation id="2195331105963583686">Вы зможаце працягваць карыстацца гэтай прыладай <ph name="DEVICE_TYPE" />, але яна больш не будзе атрымліваць аўтаматычныя абнаўленні праграмнага забеспячэння і сістэмы бяспекі</translation> <translation id="2195729137168608510">Ахова электроннай пошты</translation> @@ -4108,6 +4107,7 @@ <translation id="4900392736118574277">Пачатковая старонка зменена на наступную: <ph name="URL" />.</translation> <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Гц – празрадковая разгортка</translation> <translation id="4900652253009739885">Прызначэнне адзінага пераключальніка, звязанага з дзеяннем "Выбраць", скасаваць нельга. Каб <ph name="RESPONSE" />, націсніце любую клавішу.</translation> +<translation id="4901154724271753917">Разгарнуць нядаўна закрытыя</translation> <translation id="4901309472892185668">Выберыце стан для эксперымента "<ph name="EXPERIMENT_NAME" />".</translation> <translation id="49027928311173603">Палітыка, спампаваная з сервера, памылковая: <ph name="VALIDATION_ERROR" />.</translation> <translation id="4906490889887219338">Наладка сеткавых файлаабменнікаў і кіраванне імі. <ph name="LINK_BEGIN" />Даведацца больш<ph name="LINK_END" /></translation> @@ -7002,6 +7002,7 @@ <translation id="7768526219335215384">Сайт <ph name="ORIGIN" /> зможа праглядаць файлы ў папцы "<ph name="FOLDERNAME" />"</translation> <translation id="7768770796815395237">Змяніць</translation> <translation id="7768784765476638775">Чытаць уголас</translation> +<translation id="7769748505895274502">Згарнуць нядаўна закрытыя</translation> <translation id="7770406201819593386">Запуск дыягнастычных праверак Chrome OS Flex.</translation> <translation id="7770450735129978837">Націсканне правай клавішай мышы</translation> <translation id="7770612696274572992">Відарыс скапіраваны з іншай прылады</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb index 749ed20..c54a6c77 100644 --- a/chrome/app/resources/generated_resources_bg.xtb +++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -1292,7 +1292,6 @@ <translation id="2191754378957563929">Включено</translation> <translation id="2192505247865591433">От:</translation> <translation id="2193365732679659387">Настройки за доверие</translation> -<translation id="2194554416429452547">По време на експериментите Chrome проучва начини да ограничи спама, измамите и споделянето между сайтовете. Също така браузърът <ph name="ESTIMATE_INTERESTS_LINK" />, които сайтовете могат да използват, за да ви показват реклами. Имате възможност да управлявате интересите си от настройките.</translation> <translation id="2194856509914051091">Обмислете следните неща</translation> <translation id="2195331105963583686">След това пак ще можете да използвате устройството <ph name="DEVICE_TYPE" />, но то няма да получава повече автоматични актуализации на софтуера и сигурността</translation> <translation id="2195729137168608510">Защита за имейли</translation> @@ -3278,6 +3277,7 @@ <translation id="4077919383365622693">Всички данни и „бисквитки“, съхранявани от <ph name="SITE" />, ще бъдат изтрити.</translation> <translation id="4078738236287221428">Агресивно</translation> <translation id="4079140982534148664">Използване на подобрената проверка на правописа</translation> +<translation id="4081203444152654304">Търсене в изображението чрез <ph name="VISUAL_SEARCH_PROVIDER" /></translation> <translation id="4081242589061676262">Предаването на файла не е възможно.</translation> <translation id="408223403876103285"><ph name="WEBSITE" /> изпрати известие до телефона ви. За да потвърдите, че това сте вие, изпълнете стъпките в известието.</translation> <translation id="4084682180776658562">Отметка</translation> @@ -3673,6 +3673,7 @@ <translation id="4476590490540813026">Спортист</translation> <translation id="4476659815936224889">За да сканирате този код, можете да използвате приложение за сканиране на QR кодове на телефона си или някои приложения за камера.</translation> <translation id="4477015793815781985">Добавете Ctrl, Alt или ⌘</translation> +<translation id="4477379360383751882">Търсене в изображението чрез <ph name="VISUAL_SEARCH_PROVIDER" /></translation> <translation id="4478664379124702289">Запазване на вр&ъзката като...</translation> <translation id="4479424953165245642">Управление на павилионните приложения</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -5301,6 +5302,7 @@ <translation id="6086846494333236931">Инсталирано от администратора ви</translation> <translation id="6087746524533454243">Търсите страницата с информация за браузъра? Посетете</translation> <translation id="6087960857463881712">Страхотно лице</translation> +<translation id="6088535503330933227">Chrome проучва начини за ограничаване на рекламния спам, измамите и споделянето между сайтовете. Също така браузърът <ph name="ESTIMATE_INTERESTS_LINK" />, които сайтовете могат да използват, за да ви показват реклами. Имате възможност да управлявате интересите си от настройките.</translation> <translation id="608912389580139775">За да добавите тази страница към списъка си за четене, кликнете върху иконата на отметка</translation> <translation id="6091761513005122595">Дялът е свързан успешно.</translation> <translation id="6093888419484831006">Актуализирането се анулира...</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb index e3b367f..a01da3dbb 100644 --- a/chrome/app/resources/generated_resources_bn.xtb +++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -1297,7 +1297,6 @@ <translation id="2191754378957563929">চালু করা আছে</translation> <translation id="2192505247865591433">এর থেকে:</translation> <translation id="2193365732679659387">বিশ্বস্ততার সেটিংস</translation> -<translation id="2194554416429452547">ট্রায়াল চলাকালীন, স্প্যাম, জালিয়াতি ও দুটি সাইটের মধ্যে শেয়ার সীমিত করার বিভিন্ন উপায় Chrome এক্সপ্লোর করছে। এছাড়া, Chrome <ph name="ESTIMATE_INTERESTS_LINK" /> লিঙ্কও দেখায় যা ব্যবহার করে সাইট আপনাকে বিজ্ঞাপন দেখাতে পারে। সেটিংস থেকে আপনার আগ্রহের বিষয় ম্যানেজ করতে পারবেন।</translation> <translation id="2194856509914051091">যা যা দেখে নেওয়া প্রয়োজন</translation> <translation id="2195331105963583686">সেই সময়ের পরে এখনও আপনি এই <ph name="DEVICE_TYPE" /> ব্যবহার করতে পারবেন, কিন্তু এখানে সফ্টওয়্যার এবং নিরাপত্তা সংক্রান্ত অটোমেটিক আপডেট আর পাবেন না</translation> <translation id="2195729137168608510">ইমেল আইডির সুরক্ষা</translation> @@ -3280,6 +3279,7 @@ <translation id="4077919383365622693"><ph name="SITE" /> ওয়েবসাইটের মাধ্যমে স্টোর করা সব ডেটা এবং কুকি মুছে ফেলা হবে।</translation> <translation id="4078738236287221428">আক্রমণাত্মক</translation> <translation id="4079140982534148664">উন্নত বানান পরীক্ষা ব্যবহার করুন</translation> +<translation id="4081203444152654304"><ph name="VISUAL_SEARCH_PROVIDER" />-এর মাধ্যমে ছবির মধ্যে খুঁজুন</translation> <translation id="4081242589061676262">ফাইলটি কাস্ট করতে অক্ষম।</translation> <translation id="408223403876103285"><ph name="WEBSITE" /> আপনার ফোনে বিজ্ঞপ্তি পাঠিয়েছে। আপনার পরিচয় কনফার্ম করতে, ফোনে উল্লিখিত ধাপগুলি অনুসরণ করুন।</translation> <translation id="4084682180776658562">বুকমার্ক</translation> @@ -3676,6 +3676,7 @@ <translation id="4476590490540813026">ক্রীড়াবিদ</translation> <translation id="4476659815936224889">এই কোড স্ক্যান করতে আপনার ফোনে QR স্ক্যানার অ্যাপ অথবা কিছু ক্যামেরা অ্যাপ ব্যবহার করতে পারেন।</translation> <translation id="4477015793815781985">Ctrl, Alt অথবা ⌘ ব্যবহার করতে হবে</translation> +<translation id="4477379360383751882"><ph name="VISUAL_SEARCH_PROVIDER" />-এর মাধ্যমে ছবির মধ্যে খুঁজুন</translation> <translation id="4478664379124702289">লি&ঙ্ক সেভ করুন...</translation> <translation id="4479424953165245642">kiosk অ্যাপ্লিকেশানগুলি পরিচালনা করুন</translation> <translation id="4479639480957787382">ইথারনেট</translation> @@ -5305,6 +5306,7 @@ <translation id="6086846494333236931">আপনার প্রশাসক দ্বারা ইনস্টল করা হয়েছে</translation> <translation id="6087746524533454243">ব্রাউজার সম্পর্কিত পৃষ্ঠা খুঁজছেন? দেখুন</translation> <translation id="6087960857463881712">দুর্দান্ত চেহারা</translation> +<translation id="6088535503330933227">বিজ্ঞাপন স্প্যাম, জালিয়াতি ও দুটি সাইটের মধ্যে শেয়ার সীমিত করার বিভিন্ন উপায় Chrome এক্সপ্লোর করছে। এছাড়া, Chrome <ph name="ESTIMATE_INTERESTS_LINK" /> লিঙ্কও দেখায় যা ব্যবহার করে সাইট আপনাকে বিজ্ঞাপন দেখাতে পারে। সেটিংস থেকে আপনার আগ্রহের বিষয় ম্যানেজ করতে পারবেন।</translation> <translation id="608912389580139775">আপনার পড়ার তালিকায় এই পৃষ্ঠাটি যোগ করতে বুকমার্ক আইকনে ক্লিক করুন</translation> <translation id="6091761513005122595">শেয়ার মাউন্ট করা হয়েছে।</translation> <translation id="6093888419484831006">আপডেট বাতিল হচ্ছে...</translation>
diff --git a/chrome/app/resources/generated_resources_bs.xtb b/chrome/app/resources/generated_resources_bs.xtb index 50d4d17..8f42a8c 100644 --- a/chrome/app/resources/generated_resources_bs.xtb +++ b/chrome/app/resources/generated_resources_bs.xtb
@@ -1295,7 +1295,6 @@ <translation id="2191754378957563929">Uključeno</translation> <translation id="2192505247865591433">Šalje:</translation> <translation id="2193365732679659387">Postavke pouzdanosti</translation> -<translation id="2194554416429452547">Tokom probnih perioda, Chrome istražuje načine da ograniči neželjenu poštu, prevaru i dijeljenje između web lokacija. Chrome također <ph name="ESTIMATE_INTERESTS_LINK" /> koja web lokacije mogu koristiti da vam prikazuju oglase. Interesovanjima možete upravljati u postavkama.</translation> <translation id="2194856509914051091">Stvari za razmatranje</translation> <translation id="2195331105963583686">I dalje ćete moći koristiti uređaj <ph name="DEVICE_TYPE" /> nakon tog datuma, ali on više neće primati automatska sigurnosna ažuriranja i ažuriranja softvera</translation> <translation id="2195729137168608510">Zaštita e-pošte</translation> @@ -5303,6 +5302,7 @@ <translation id="6086846494333236931">Instalirao administrator</translation> <translation id="6087746524533454243">Tražite stranicu s informacijama o pregledniku? Posjetite</translation> <translation id="6087960857463881712">Oduševljeno lice</translation> +<translation id="6088535503330933227">Chrome istražuje načine za ograničavanje neželjenih oglasa, prijevara i dijeljenja između web-lokacija. Chrome također <ph name="ESTIMATE_INTERESTS_LINK" /> koje web-lokacije mogu upotrebljavati da bi vam prikazivale oglase. Svojim interesima možete upravljati u postavkama.</translation> <translation id="608912389580139775">Da dodate ovu stranicu na listu za čitanje, kliknite na ikonu Oznaka</translation> <translation id="6091761513005122595">Dijeljenje je uspješno aktivirano.</translation> <translation id="6093888419484831006">Otkazivanje ažuriranja...</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb index 9b4c04b..78889c4f2 100644 --- a/chrome/app/resources/generated_resources_ca.xtb +++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -1284,7 +1284,6 @@ <translation id="2191754378957563929">Activat</translation> <translation id="2192505247865591433">De:</translation> <translation id="2193365732679659387">Configuració de confiança</translation> -<translation id="2194554416429452547">Durant les proves, Chrome explora maneres de limitar el contingut brossa, el frau i la compartició entre llocs web. Chrome també <ph name="ESTIMATE_INTERESTS_LINK" />, que els llocs web poden utilitzar per mostrar-te anuncis. Pots gestionar els teus interessos a la configuració.</translation> <translation id="2194856509914051091">Aspectes que cal tenir en compte</translation> <translation id="2195331105963583686">Podràs continuar utilitzant aquest <ph name="DEVICE_TYPE" /> després d'aquest període de temps, pero no rebràs cap més actualització automàtica de programari i seguretat.</translation> <translation id="2195729137168608510">Protecció del correu electrònic</translation> @@ -3265,6 +3264,7 @@ <translation id="4077919383365622693">S'esborraran totes les dades i galetes emmagatzemades per <ph name="SITE" />.</translation> <translation id="4078738236287221428">Agressiva</translation> <translation id="4079140982534148664">Fes servir el corrector ortogràfic millorat</translation> +<translation id="4081203444152654304">Cerca a la imatge amb <ph name="VISUAL_SEARCH_PROVIDER" /></translation> <translation id="4081242589061676262">No s'ha pogut emetre el fitxer.</translation> <translation id="408223403876103285"><ph name="WEBSITE" /> ha enviat una notificació al teu telèfon. Per confirmar la teva identitat, segueix els passos que s'hi mostren.</translation> <translation id="4084682180776658562">Adreça d'interès</translation> @@ -3660,6 +3660,7 @@ <translation id="4476590490540813026">Atleta</translation> <translation id="4476659815936224889">Per escanejar aquest codi, pots fer servir una aplicació d'escaneig QR al telèfon o algunes aplicacions de la càmera.</translation> <translation id="4477015793815781985">Inclou la tecla Ctrl, Alt o ⌘</translation> +<translation id="4477379360383751882">Cerca a la imatge amb <ph name="VISUAL_SEARCH_PROVIDER" /></translation> <translation id="4478664379124702289">Anomena i desa &l'enllaç...</translation> <translation id="4479424953165245642">Gestiona les aplicacions de quiosc</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -4105,6 +4106,7 @@ <translation id="4900392736118574277">La pàgina d'arrencada ha canviat a <ph name="URL" />.</translation> <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz, entrellaçat</translation> <translation id="4900652253009739885">No es pot suprimir l'únic interruptor assignat a Selecciona. Prem qualsevol tecla per <ph name="RESPONSE" />.</translation> +<translation id="4901154724271753917">Desplega les que s'han tancat recentment</translation> <translation id="4901309472892185668">Selecciona l'estat de l'experiment <ph name="EXPERIMENT_NAME" />.</translation> <translation id="49027928311173603">La política que s'ha baixat del servidor no és vàlida: <ph name="VALIDATION_ERROR" />.</translation> <translation id="4906490889887219338">Configura o gestiona els fitxers compartits de la xarxa. <ph name="LINK_BEGIN" />Més informació<ph name="LINK_END" /></translation> @@ -6992,6 +6994,7 @@ <translation id="7768526219335215384"><ph name="ORIGIN" /> podrà veure els fitxers de la carpeta <ph name="FOLDERNAME" /></translation> <translation id="7768770796815395237">Canvia</translation> <translation id="7768784765476638775">Escolta la selecció</translation> +<translation id="7769748505895274502">Replega les que s'han tancat recentment</translation> <translation id="7770406201819593386">Executar proves diagnòstiques de ChromeOS Flex.</translation> <translation id="7770450735129978837">Clic del botó dret del ratolí</translation> <translation id="7770612696274572992">Imatge copiada des d'un altre dispositiu</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb index 4fa0cb5..67db3779 100644 --- a/chrome/app/resources/generated_resources_cs.xtb +++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -1286,7 +1286,6 @@ <translation id="2191754378957563929">Zapnuto</translation> <translation id="2192505247865591433">Zdroj:</translation> <translation id="2193365732679659387">Nastavení důvěryhodnosti</translation> -<translation id="2194554416429452547">Během zkušebních období Chrome zkoumá způsoby, jak omezit spam, podvody a sdílení mezi weby. Chrome také <ph name="ESTIMATE_INTERESTS_LINK" />, které mohou weby používat k zobrazování reklam. Své zájmy můžete spravovat v nastavení.</translation> <translation id="2194856509914051091">Co je třeba zvážit</translation> <translation id="2195331105963583686">I poté své zařízení <ph name="DEVICE_TYPE" /> budete moci nadále používat, ale již nebude dostávat automatické aktualizace softwaru a zabezpečení</translation> <translation id="2195729137168608510">Ochrana e-mailu</translation> @@ -5286,6 +5285,7 @@ <translation id="6086846494333236931">Nainstaloval administrátor</translation> <translation id="6087746524533454243">Hledáte stránku s informacemi o prohlížeči? Přejděte na stránku</translation> <translation id="6087960857463881712">Paráda</translation> +<translation id="6088535503330933227">Chrome zkoumá způsoby, jak omezit reklamní spam, podvody a sdílení mezi weby. Chrome také <ph name="ESTIMATE_INTERESTS_LINK" />, které mohou weby používat k zobrazování reklam. Své zájmy můžete spravovat v nastavení.</translation> <translation id="608912389580139775">Pokud tuto stránku chcete přidat do seznamu ke čtení, klikněte na ikonu záložky</translation> <translation id="6091761513005122595">Sdílená složka byla úspěšně připojena.</translation> <translation id="6093888419484831006">Rušení aktualizace...</translation>
diff --git a/chrome/app/resources/generated_resources_cy.xtb b/chrome/app/resources/generated_resources_cy.xtb index abdc8a4..00522ca 100644 --- a/chrome/app/resources/generated_resources_cy.xtb +++ b/chrome/app/resources/generated_resources_cy.xtb
@@ -1020,6 +1020,7 @@ <translation id="1931410639376954712">Wrthi'n gosod <ph name="DEVICE_OS" /></translation> <translation id="1932098463447129402">Nid Cyn</translation> <translation id="1935303383381416800">Caniatâd i weld eich lleoliad</translation> +<translation id="1936157145127842922">Dangos mewn Ffolder</translation> <translation id="1936931585862840749">Defnyddiwch rif i nodi faint o gopïau i'w hargraffu (1 i <ph name="MAX_COPIES" />).</translation> <translation id="1937774647013465102">Methu â mewnforio math pensaernïaeth y cynhwysydd <ph name="ARCHITECTURE_CONTAINER" /> gyda'r ddyfais hon sy'n <ph name="ARCHITECTURE_DEVICE" />. Gallwch roi cynnig ar adfer y cynhwysydd hwn i ddyfais wahanol, neu gallwch gael mynediad at y ffeiliau y tu mewn i'r llun cynhwysydd hwn drwy ei agor yn ap Files.</translation> <translation id="1938240902511979591">Modd cyferbyniad uchel, chwyddwydr, a gosodiadau sgrîn</translation> @@ -1298,7 +1299,6 @@ <translation id="2191754378957563929">Ymlaen</translation> <translation id="2192505247865591433">Gan:</translation> <translation id="2193365732679659387">Gosodiadau ymddiried</translation> -<translation id="2194554416429452547">Yn ystod treialon, mae Chrome yn archwilio ffyrdd i gyfyngu ar sothach, twyll a rhannu rhwng gwefannau. Mae Chrome hefyd <ph name="ESTIMATE_INTERESTS_LINK" /> y gall gwefannau defnyddio i ddangos hysbysebion i chi. Gallwch reoli'ch diddordebau yn y gosodiadau.</translation> <translation id="2194856509914051091">Pethau i'w hystyried</translation> <translation id="2195331105963583686">Byddwch yn dal i allu defnyddio'r <ph name="DEVICE_TYPE" /> hwn ar ôl yr adeg honno, ond ni fydd yn derbyn diweddariadau meddalwedd a diogelwch yn awtomatig mwyach</translation> <translation id="2195729137168608510">Diogelwch E-bost</translation> @@ -3283,6 +3283,7 @@ <translation id="4077919383365622693">Bydd yr holl ddata a chwcis sy'n cael eu storio gan <ph name="SITE" /> yn cael eu clirio.</translation> <translation id="4078738236287221428">Ymosodol</translation> <translation id="4079140982534148664">Defnyddio Gwell Gwirio Sillafu</translation> +<translation id="4081203444152654304">Chwilio y tu mewn i lun gyda <ph name="VISUAL_SEARCH_PROVIDER" /></translation> <translation id="4081242589061676262">Ni ellir castio'r ffeil.</translation> <translation id="408223403876103285">Gwnaeth <ph name="WEBSITE" /> anfon hysbysiad at eich ffôn. I gadarnhau mai chi sydd yno, dilynwch y camau yno.</translation> <translation id="4084682180776658562">Nod tudalen</translation> @@ -3678,6 +3679,7 @@ <translation id="4476590490540813026">Athletwr</translation> <translation id="4476659815936224889">I sganio'r cod hwn, gallwch ddefnyddio ap sganio codau QR ar eich ffôn, neu rai apiau camera.</translation> <translation id="4477015793815781985">Rhaid cynnwys Ctrl, Alt neu ⌘</translation> +<translation id="4477379360383751882">Chwilio y tu mewn i Lun gyda <ph name="VISUAL_SEARCH_PROVIDER" /></translation> <translation id="4478664379124702289">Cadw Dol&en Fel...</translation> <translation id="4479424953165245642">Rheoli apiau Kiosk</translation> <translation id="4479639480957787382">Ether-rwyd</translation> @@ -5305,6 +5307,7 @@ <translation id="6086846494333236931">Wedi'i osod gan eich gweinyddwr</translation> <translation id="6087746524533454243">Chwilio am dudalen ynghylch y porwr? Ewch i</translation> <translation id="6087960857463881712">Wyneb anhygoel</translation> +<translation id="6088535503330933227">Mae Chrome yn archwilio ffyrdd o gyfyngu ar sothach hysbysebion, twyll a rhannu rhwng gwefannau. Mae Chrome hefyd <ph name="ESTIMATE_INTERESTS_LINK" /> y gall gwefannau defnyddio i ddangos hysbysebion i chi. Gallwch reoli'ch diddordebau yn y gosodiadau.</translation> <translation id="608912389580139775">I ychwanegu'r dudalen hon at eich rhestr ddarllen, cliciwch yr eicon Nod Tudalen</translation> <translation id="6091761513005122595">Mae'r gyfran wedi'i gosod yn llwyddiannus.</translation> <translation id="6093888419484831006">Wrthi'n canslo'r diweddariad...</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb index 31740010..c390e9e9 100644 --- a/chrome/app/resources/generated_resources_da.xtb +++ b/chrome/app/resources/generated_resources_da.xtb
@@ -1297,7 +1297,6 @@ <translation id="2191754378957563929">Til</translation> <translation id="2192505247865591433">Fra:</translation> <translation id="2193365732679659387">Tillidsindstillinger</translation> -<translation id="2194554416429452547">Under prøveperioder kigger Chrome nærmere på, hvordan spam, svindel og deling mellem websites kan begrænses. Chrome <ph name="ESTIMATE_INTERESTS_LINK" />, som websites kan bruge til at vise dig annoncer. Du kan administrere dine interesser i indstillingerne.</translation> <translation id="2194856509914051091">Vigtige oplysninger</translation> <translation id="2195331105963583686">Du kan stadig bruge denne <ph name="DEVICE_TYPE" /> efter denne dato, men den vil ikke længere modtage automatiske software- og sikkerhedsopdateringer.</translation> <translation id="2195729137168608510">Mail-beskyttelse</translation> @@ -4123,6 +4122,7 @@ <translation id="4900392736118574277">Din opstartsside blev ændret til <ph name="URL" />.</translation> <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz – sammenflettet</translation> <translation id="4900652253009739885">Dette er den sidste kontakt, der er tildelt handlingen "Vælg", og den kan derfor ikke fjernes. Tryk på en vilkårlig tast for at <ph name="RESPONSE" />.</translation> +<translation id="4901154724271753917">Udvid senest lukkede</translation> <translation id="4901309472892185668">Vælg eksperimenttilstand for eksperimentet <ph name="EXPERIMENT_NAME" />.</translation> <translation id="49027928311173603">Den politik, der er downloadet fra serveren, er ugyldig: <ph name="VALIDATION_ERROR" />.</translation> <translation id="4906490889887219338">Konfigurer eller administrer fildeling via netværk. <ph name="LINK_BEGIN" />Få flere oplysninger<ph name="LINK_END" /></translation> @@ -5931,6 +5931,7 @@ <translation id="6709133671862442373">Nyheder</translation> <translation id="6709357832553498500">Opret forbindelse ved hjælp af <ph name="EXTENSIONNAME" /></translation> <translation id="6710213216561001401">Forrige</translation> +<translation id="6710394144992407503">Tjek, om der er stavefejl, når du skriver tekst på websider</translation> <translation id="6711146141291425900">Tilknyt en <ph name="WEB_DRIVE" />-konto til downloads</translation> <translation id="6712943853047024245">Du har allerede gemt en adgangskode for dette brugernavn til <ph name="WEBSITE" /></translation> <translation id="6713233729292711163">Tilføj arbejdsprofil</translation> @@ -6552,6 +6553,7 @@ <translation id="7340757554212515731">Sender automatisk nedbrudsrapporter samt diagnostik- og brugsdata til Google</translation> <translation id="7341834142292923918">Udvidelsen anmoder om adgang til dette website</translation> <translation id="7343372807593926528">Beskriv problemet, før du sender feedback</translation> +<translation id="7344585835349671209">Administrer HTTPS-/SSL-certifikater på din enhed</translation> <translation id="7345706641791090287">Bekræft din adgangskode</translation> <translation id="7346909386216857016">OK</translation> <translation id="7347452120014970266">Denne handling rydder alle de data og cookies, der er gemt af <ph name="ORIGIN_NAME" /> og de apps, den har installeret</translation> @@ -6681,6 +6683,7 @@ <translation id="7460045493116006516">Det aktuelle tema, du har installeret</translation> <translation id="7461924472993315131">Fastgør</translation> <translation id="746216226901520237">Næste gang låser din telefon din <ph name="DEVICE_TYPE" /> op. Du kan deaktivere Smart Lock i Indstillinger.</translation> +<translation id="7464153996453281700">Komponenten er allerede opdateret</translation> <translation id="7464637891177137294">Gem den på din Google-konto, <ph name="ACCOUNT" /></translation> <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{# åben fane. Tryk for at vise eller skjule fanelinje.}one{# åben fane. Tryk for at vise eller skjule fanelinje.}other{# åbne faner. Tryk for at vise eller skjule fanelinje.}}</translation> <translation id="7465635034594602553">Noget gik galt. Vent et øjeblik, og prøv derefter at køre <ph name="APP_NAME" /> igen.</translation> @@ -7013,6 +7016,7 @@ <translation id="7768526219335215384"><ph name="ORIGIN" /> vil kunne se filer i <ph name="FOLDERNAME" /></translation> <translation id="7768770796815395237">Skift</translation> <translation id="7768784765476638775">Tekstoplæsning</translation> +<translation id="7769748505895274502">Skjul senest lukkede</translation> <translation id="7770406201819593386">Kør ChromeOS Flex-diagnostiktest.</translation> <translation id="7770450735129978837">Højre museknap</translation> <translation id="7770612696274572992">Billede kopieret fra en anden enhed</translation> @@ -7188,6 +7192,7 @@ <translation id="793531125873261495">Der opstod en fejl under forsøget på at downloade den virtuelle maskine. Prøv igen.</translation> <translation id="7935451262452051102"><ph name="PERCENT" /> % gennemført</translation> <translation id="7939062555109487992">Avancerede valgmuligheder</translation> +<translation id="7939328347457537652">Administrer enhedscertifikater</translation> <translation id="7939412583708276221">Behold alligevel</translation> <translation id="7942349550061667556">Rød</translation> <translation id="7943368935008348579">Download PDF-filer</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb index 337f17bd..e2d4e05 100644 --- a/chrome/app/resources/generated_resources_de.xtb +++ b/chrome/app/resources/generated_resources_de.xtb
@@ -1281,7 +1281,6 @@ <translation id="2191754378957563929">An</translation> <translation id="2192505247865591433">von</translation> <translation id="2193365732679659387">Vertrauenseinstellungen</translation> -<translation id="2194554416429452547">Während Tests sucht Chrome nach Möglichkeiten, Spam, Betrug und die Datenweitergabe zwischen Websites einschränken. Chrome <ph name="ESTIMATE_INTERESTS_LINK" />, die von anderen Websites dazu verwendet werden können, dir Werbung zu zeigen. Du kannst deine Interessen in den Einstellungen verwalten.</translation> <translation id="2194856509914051091">Wichtige Punkte</translation> <translation id="2195331105963583686">Du kannst dieses Gerät (<ph name="DEVICE_TYPE" />) auch danach verwenden, erhältst jedoch keine automatischen Software- und Sicherheitsupdates mehr</translation> <translation id="2195729137168608510">E-Mail-Schutz</translation> @@ -3263,6 +3262,7 @@ <translation id="4077919383365622693">Alle von <ph name="SITE" /> gespeicherten Daten und Cookies werden gelöscht.</translation> <translation id="4078738236287221428">Aggressiv</translation> <translation id="4079140982534148664">Erweiterte Rechtschreibprüfung verwenden</translation> +<translation id="4081203444152654304">Mit <ph name="VISUAL_SEARCH_PROVIDER" /> im Bild suchen</translation> <translation id="4081242589061676262">Datei kann nicht gestreamt werden.</translation> <translation id="408223403876103285"><ph name="WEBSITE" /> hat eine Benachrichtigung an dein Smartphone gesendet. Folge den darin beschriebenen Schritten, um deine Identität zu bestätigen.</translation> <translation id="4084682180776658562">Lesezeichen</translation> @@ -3658,6 +3658,7 @@ <translation id="4476590490540813026">Athletin</translation> <translation id="4476659815936224889">Du kannst eine QR-Scanner-App oder bestimmte Kamera-Apps auf deinem Smartphone verwenden, um diesen Code zu scannen.</translation> <translation id="4477015793815781985">Verwende Strg, Alt oder ⌘</translation> +<translation id="4477379360383751882">Mit <ph name="VISUAL_SEARCH_PROVIDER" /> im Bild suchen</translation> <translation id="4478664379124702289">Lin&k speichern unter...</translation> <translation id="4479424953165245642">Kioskanwendungen verwalten</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -5281,6 +5282,7 @@ <translation id="6086846494333236931">Von deinem Administrator installiert</translation> <translation id="6087746524533454243">Suchst du die Seite „Über den Browser“? Gehe zu</translation> <translation id="6087960857463881712">Cooles Gesicht</translation> +<translation id="6088535503330933227">Chrome sucht nach Möglichkeiten, Anzeigenspam, Betrug und die Datenweitergabe zwischen Websites einzuschränken. Chrome <ph name="ESTIMATE_INTERESTS_LINK" />, die von anderen Websites dazu verwendet werden können, dir Werbung zu zeigen. Du kannst deine Interessen in den Einstellungen verwalten.</translation> <translation id="608912389580139775">Wenn du deiner Leseliste diese Seite hinzufügen möchtest, klicke auf das Lesezeichensymbol</translation> <translation id="6091761513005122595">Freigabe wurde erfolgreich bereitgestellt.</translation> <translation id="6093888419484831006">Aktualisierung wird abgebrochen...</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb index d392952..d0964afb 100644 --- a/chrome/app/resources/generated_resources_el.xtb +++ b/chrome/app/resources/generated_resources_el.xtb
@@ -1296,7 +1296,6 @@ <translation id="2191754378957563929">Ενεργοποιημένο</translation> <translation id="2192505247865591433">Από:</translation> <translation id="2193365732679659387">Ρυθμίσεις αξιοπιστίας</translation> -<translation id="2194554416429452547">Κατά τη διάρκεια των δοκιμών, το Chrome ερευνά τρόπους για τον περιορισμό του ανεπιθύμητου περιεχομένου, της απάτης και της κοινοποίησης μεταξύ ιστοτόπων. Επίσης, το Chrome <ph name="ESTIMATE_INTERESTS_LINK" />, τα οποία μπορούν να χρησιμοποιήσουν οι ιστότοποι για να σας προβάλουν διαφημίσεις. Μπορείτε να διαχειριστείτε τα ενδιαφέροντά σας στις ρυθμίσεις.</translation> <translation id="2194856509914051091">Λάβετε υπόψη τα εξής</translation> <translation id="2195331105963583686">Θα μπορείτε ακόμη να χρησιμοποιήσετε τη συσκευή <ph name="DEVICE_TYPE" /> μετά από αυτό το χρονικό διάστημα, αλλά δεν θα λαμβάνει πλέον αυτόματες ενημερώσεις λογισμικού και ασφαλείας.</translation> <translation id="2195729137168608510">Προστασία ηλεκτρονικού ταχυδρομείου</translation> @@ -5932,6 +5931,7 @@ <translation id="6709133671862442373">Ειδήσεις</translation> <translation id="6709357832553498500">Σύνδεση με χρήση <ph name="EXTENSIONNAME" /></translation> <translation id="6710213216561001401">Προηγούμενο</translation> +<translation id="6710394144992407503">Έλεγχος για ορθογραφικά λάθη κατά την πληκτρολόγηση κειμένου σε ιστοσελίδες</translation> <translation id="6711146141291425900">Σύνδεση λογαριασμού <ph name="WEB_DRIVE" /> για τις Λήψεις</translation> <translation id="6712943853047024245">Έχετε αποθηκεύσει ήδη έναν κωδικό πρόσβασης με αυτό το όνομα χρήστη <ph name="WEBSITE" /></translation> <translation id="6713233729292711163">Προσθήκη προφίλ εργασίας</translation> @@ -6553,6 +6553,7 @@ <translation id="7340757554212515731">Στέλνει αυτόματα στην Google αναφορές σφαλμάτων, καθώς και διαγνωστικά στοιχεία και δεδομένα χρήσης</translation> <translation id="7341834142292923918">Ζητάει πρόσβαση σε αυτόν τον ιστότοπο</translation> <translation id="7343372807593926528">Περιγράψτε το πρόβλημα προτού στείλετε τα σχόλιά σας.</translation> +<translation id="7344585835349671209">Διαχειριστείτε τα πιστοποιητικά HTTPS/SSL στη συσκευή σας</translation> <translation id="7345706641791090287">Επιβεβαιώστε τον κωδικό πρόσβασής σας</translation> <translation id="7346909386216857016">OK, το κατάλαβα</translation> <translation id="7347452120014970266">Με αυτήν την ενέργεια θα διαγραφούν όλα τα δεδομένα και τα cookie που έχουν αποθηκευτεί από <ph name="ORIGIN_NAME" /> και τις εγκατεστημένες εφαρμογές του.</translation> @@ -6682,6 +6683,7 @@ <translation id="7460045493116006516">Τρέχον θέμα που έχετε εγκαταστήσει</translation> <translation id="7461924472993315131">Καρφίτσωμα</translation> <translation id="746216226901520237">Την επόμενη φορά, το τηλέφωνό σας θα ξεκλειδώσει τη συσκευή <ph name="DEVICE_TYPE" />. Μπορείτε να απενεργοποιήσετε το Smart Lock στις Ρυθμίσεις.</translation> +<translation id="7464153996453281700">Το στοιχείο είναι ήδη ενημερωμένο</translation> <translation id="7464637891177137294">Αποθήκευση στον Λογαριασμό σας Google <ph name="ACCOUNT" /></translation> <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{# ανοικτή καρτέλα, πατήστε για εναλλαγή της γραμμής καρτελών}other{# ανοικτές καρτέλες, πατήστε για εναλλαγή της γραμμής καρτελών}}</translation> <translation id="7465635034594602553">Παρουσιάστηκε κάποιο πρόβλημα. Περιμένετε μερικά λεπτά και εκτελέστε ξανά την εφαρμογή <ph name="APP_NAME" />.</translation> @@ -7191,6 +7193,7 @@ <translation id="793531125873261495">Σφάλμα λήψης του εικονικού μηχανήματος. Δοκιμάστε ξανά.</translation> <translation id="7935451262452051102">Ολοκλήρωση κατά <ph name="PERCENT" />%</translation> <translation id="7939062555109487992">Επιλογές για προχωρημένους</translation> +<translation id="7939328347457537652">Διαχείριση πιστοποιητικών συσκευής</translation> <translation id="7939412583708276221">Να συνεχιστεί</translation> <translation id="7942349550061667556">Κόκκινο</translation> <translation id="7943368935008348579">Λήψη PDF</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb index 748b89d..47c814d 100644 --- a/chrome/app/resources/generated_resources_en-GB.xtb +++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -999,6 +999,7 @@ <translation id="1916502483199172559">Default red avatar</translation> <translation id="1918141783557917887">&Smaller</translation> <translation id="1920390473494685033">Contacts</translation> +<translation id="1921544956190977703">You have Chrome's strongest security against dangerous websites, downloads and extensions</translation> <translation id="1921584744613111023"><ph name="DPI" /> dpi</translation> <translation id="1923468477587371721">Google sites like Gmail, Drive and YouTube use your Google Account language unless you’ve changed the individual product language</translation> <translation id="192494336144674234">Open with</translation> @@ -1296,7 +1297,6 @@ <translation id="2191754378957563929">On</translation> <translation id="2192505247865591433">From:</translation> <translation id="2193365732679659387">Trust settings</translation> -<translation id="2194554416429452547">During trials, Chrome is exploring ways to limit spam, fraud and sharing between sites. Chrome also <ph name="ESTIMATE_INTERESTS_LINK" /> that sites can use to show you ads. You can manage your interests in settings.</translation> <translation id="2194856509914051091">Things to consider</translation> <translation id="2195331105963583686">You'll still be able to use this <ph name="DEVICE_TYPE" /> after that time, but it will no longer get automatic software and security updates</translation> <translation id="2195729137168608510">Email Protection</translation> @@ -2104,6 +2104,7 @@ <ph name="DOMAIN" /> requires you to keep your smart card inserted.</translation> <translation id="2923234477033317484">Remove this account</translation> <translation id="2923644930701689793">Access your phone's camera roll</translation> +<translation id="292371311537977079">Chrome settings</translation> <translation id="2925658782192398150">Done, no issues found</translation> <translation id="2926085873880284723">Restore default shortcuts</translation> <translation id="2926620265753325858"><ph name="DEVICE_NAME" /> is not supported.</translation> @@ -2688,6 +2689,7 @@ <translation id="3511528412952710609">Short</translation> <translation id="3514335087372914653">Game control</translation> <translation id="3514373592552233661">Preferred networks will be preferred over other known networks if more than one is available</translation> +<translation id="3514647716686280777">You're getting standard security protection. To get more protection against dangerous websites, downloads and extensions, turn on Enhanced Safe Browsing in Chrome settings.</translation> <translation id="3515983984924808886">Touch your security key again to confirm reset. All information stored on the security key, including its PIN, will be deleted.</translation> <translation id="3518985090088779359">Accept & continue</translation> <translation id="3519564332031442870">Print backend service</translation> @@ -3912,6 +3914,7 @@ <translation id="4689421377817139245">Sync this bookmark to your iPhone</translation> <translation id="4690091457710545971"><Four files generated by Intel Wi-Fi firmware: csr.lst, fh_regs.lst, radio_reg.lst, monitor.lst.sysmon. The first three are binary files containing register dumps, and are asserted by Intel to contain no personal or device-identifying information. The last file is an execution trace from the Intel firmware; it has been scrubbed of any personal or device-identifying information, but is too large to display here. These files were generated in response to recent Wi-Fi problems with your device, and will be shared with Intel to help troubleshoot these problems.></translation> <translation id="4691791363716065510"><ph name="ORIGIN" /> will be able to view <ph name="FILENAME" /> until you close all tabs for this site</translation> +<translation id="4692342362587775867">Notifications from this site may be disruptive</translation> <translation id="4692623383562244444">Search engines</translation> <translation id="4692736633446859167">You previously chose not to allow any extensions on <ph name="SITE" />. If you add this site here, other extensions can also request to read and change your site data on <ph name="SITE" />.</translation> <translation id="4693155481716051732">Sushi</translation> @@ -5305,6 +5308,7 @@ <translation id="6086846494333236931">Installed by your administrator</translation> <translation id="6087746524533454243">Looking for the browser about page? Visit</translation> <translation id="6087960857463881712">Awesome face</translation> +<translation id="6088535503330933227">Chrome is exploring ways to limit ad spam, fraud and sharing between sites. Chrome also <ph name="ESTIMATE_INTERESTS_LINK" /> that sites can use to show you ads. You can manage your interests in settings.</translation> <translation id="608912389580139775">To add this page to your reading list, click the Bookmark icon</translation> <translation id="6091761513005122595">Share mounted successfully.</translation> <translation id="6093888419484831006">Cancelling update...</translation> @@ -5494,6 +5498,7 @@ <translation id="6278428485366576908">Theme</translation> <translation id="6278776436938569440">Change location</translation> <translation id="6279183038361895380">Press |<ph name="ACCELERATOR" />| to show your cursor</translation> +<translation id="6279595948631688299">Export selected certificate…</translation> <translation id="6280215091796946657">Sign in with a different account</translation> <translation id="6280912520669706465">ARC</translation> <translation id="6282180787514676874">{COUNT,plural, =1{Exceeds limit of 1 sheet of paper}other{Exceeds limit of {COUNT} sheets of paper}}</translation> @@ -5608,6 +5613,7 @@ <translation id="6398715114293939307">Remove Google Play Store</translation> <translation id="6398765197997659313">Exit full screen</translation> <translation id="6399774419735315745">Spy</translation> +<translation id="6401458660421980302">To send this tab to another device, sign in to Chrome there</translation> <translation id="6401597285454423070">Your computer contains a Trusted Platform Module (TPM) security device, which is used to implement many critical security features in Chrome OS. Visit the Chromebook Help Centre to learn more: https://support.google.com/chromebook/?p=tpm</translation> <translation id="6404187344102273690">Chromebook gaming</translation> <translation id="6404511346730675251">Edit bookmark</translation> @@ -5844,6 +5850,7 @@ <translation id="6619801788773578757">Add kiosk application</translation> <translation id="6619990499523117484">Confirm your PIN</translation> <translation id="6620254580880484313">Container name</translation> +<translation id="6621391692573306628">To send this tab to another device, sign in to Chrome on both devices</translation> <translation id="6622980291894852883">Continue blocking images</translation> <translation id="6624036901798307345">In tablet mode, tap on the tab counter toolbar button to open the new tab strip that shows thumbnails of each tab.</translation> <translation id="6624535038674360844"><ph name="FILE_NAME" /> has sensitive or dangerous content. Ask its owner to fix it.</translation> @@ -5931,6 +5938,7 @@ <translation id="6709133671862442373">News</translation> <translation id="6709357832553498500">Connect using <ph name="EXTENSIONNAME" /></translation> <translation id="6710213216561001401">Previous</translation> +<translation id="6710394144992407503">Check for spelling errors when you type text on web pages</translation> <translation id="6711146141291425900">Link <ph name="WEB_DRIVE" /> account for downloads</translation> <translation id="6712943853047024245">You already saved a password with this username for <ph name="WEBSITE" /></translation> <translation id="6713233729292711163">Add work profile</translation> @@ -6552,6 +6560,7 @@ <translation id="7340757554212515731">Automatically sends crash reports as well as diagnostic and usage data to Google</translation> <translation id="7341834142292923918">Wants access to this site</translation> <translation id="7343372807593926528">Please describe the problem before sending feedback.</translation> +<translation id="7344585835349671209">Manage HTTPS/SSL certificates on your device</translation> <translation id="7345706641791090287">Confirm your password</translation> <translation id="7346909386216857016">OK, got it</translation> <translation id="7347452120014970266">This will clear all data and cookies stored by <ph name="ORIGIN_NAME" /> and its installed apps</translation> @@ -6681,6 +6690,7 @@ <translation id="7460045493116006516">Current theme that you have installed</translation> <translation id="7461924472993315131">Pin</translation> <translation id="746216226901520237">Next time, your phone will unlock your <ph name="DEVICE_TYPE" />. You can turn off Smart Lock in Settings.</translation> +<translation id="7464153996453281700">Component already up to date</translation> <translation id="7464637891177137294">Save it in your Google Account, <ph name="ACCOUNT" /></translation> <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{# open tab; press to toggle tab strip}other{# open tabs; press to toggle tab strip}}</translation> <translation id="7465635034594602553">Something went wrong. Please wait a few minutes and run <ph name="APP_NAME" /> again.</translation> @@ -7190,6 +7200,7 @@ <translation id="793531125873261495">Error downloading the virtual machine. Please try again.</translation> <translation id="7935451262452051102"><ph name="PERCENT" />% completed</translation> <translation id="7939062555109487992">Advanced options</translation> +<translation id="7939328347457537652">Manage device certificates</translation> <translation id="7939412583708276221">Keep anyway</translation> <translation id="7942349550061667556">Red</translation> <translation id="7943368935008348579">Download PDFs</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb index 6616ab38..70e3fb9 100644 --- a/chrome/app/resources/generated_resources_es-419.xtb +++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -1281,7 +1281,6 @@ <translation id="2191754378957563929">Sí</translation> <translation id="2192505247865591433">De:</translation> <translation id="2193365732679659387">Configuración de confianza</translation> -<translation id="2194554416429452547">Durante las pruebas, Chrome explora maneras de limitar el spam, el fraude y el uso compartido entre sitios. Chrome también <ph name="ESTIMATE_INTERESTS_LINK" /> que pueden usar los sitios para mostrarte anuncios. Puedes administrar tus intereses en la Configuración.</translation> <translation id="2194856509914051091">Aspectos para tener en cuenta</translation> <translation id="2195331105963583686">De todos modos, podrás usar tu <ph name="DEVICE_TYPE" /> después de ese momento, pero ya no recibirá actualizaciones automáticas de software y seguridad</translation> <translation id="2195729137168608510">Protección de correo electrónico</translation> @@ -4103,6 +4102,7 @@ <translation id="4900392736118574277">Tu página de inicio se cambió a <ph name="URL" />.</translation> <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz (entrelazado)</translation> <translation id="4900652253009739885">No se puede quitar el único interruptor asignado a "Seleccionar". Presiona cualquier tecla para <ph name="RESPONSE" />.</translation> +<translation id="4901154724271753917">Expandir las pestañas cerradas recientemente</translation> <translation id="4901309472892185668">Selecciona el estado del experimento <ph name="EXPERIMENT_NAME" />.</translation> <translation id="49027928311173603">La política descargada del servidor no es válida: <ph name="VALIDATION_ERROR" />.</translation> <translation id="4906490889887219338">Configura o administra archivos compartidos de red. <ph name="LINK_BEGIN" />Más información<ph name="LINK_END" /></translation> @@ -6991,6 +6991,7 @@ <translation id="7768526219335215384"><ph name="ORIGIN" /> podrá ver los archivos de la carpeta <ph name="FOLDERNAME" /></translation> <translation id="7768770796815395237">Cambiar</translation> <translation id="7768784765476638775">Seleccionar para pronunciar</translation> +<translation id="7769748505895274502">Contraer las pestañas cerradas recientemente</translation> <translation id="7770406201819593386">Ejecuta pruebas diagnóstico de Chrome OS Flex.</translation> <translation id="7770450735129978837">Hacer clic con el botón derecho del mouse</translation> <translation id="7770612696274572992">Imagen copiada de otro dispositivo</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb index f212c182..c70cd08 100644 --- a/chrome/app/resources/generated_resources_es.xtb +++ b/chrome/app/resources/generated_resources_es.xtb
@@ -1284,7 +1284,6 @@ <translation id="2191754378957563929">Activado</translation> <translation id="2192505247865591433">De:</translation> <translation id="2193365732679659387">Configuración de confianza</translation> -<translation id="2194554416429452547">Durante las pruebas, Chrome explora formas de limitar el spam, el fraude y lo que se comparte entre sitios. Chrome también <ph name="ESTIMATE_INTERESTS_LINK" />, que después usan los sitios para mostrarte anuncios. Puedes gestionar tus intereses en la configuración.</translation> <translation id="2194856509914051091">Notas importantes</translation> <translation id="2195331105963583686">Podrás seguir utilizando este <ph name="DEVICE_TYPE" /> después de esa fecha, pero ya no recibirás actualizaciones de software y seguridad automáticas.</translation> <translation id="2195729137168608510">Protección de correo electrónico</translation> @@ -5286,6 +5285,7 @@ <translation id="6086846494333236931">Instalada por tu administrador</translation> <translation id="6087746524533454243">¿Buscas la página de información del navegador? Visita</translation> <translation id="6087960857463881712">Cara de emoción</translation> +<translation id="6088535503330933227">Chrome explora formas de limitar el spam publicitario, el fraude y lo que se comparte entre sitios. Chrome también <ph name="ESTIMATE_INTERESTS_LINK" />, que después usan los sitios para mostrarte anuncios. Puedes gestionar tus intereses en la configuración.</translation> <translation id="608912389580139775">Para añadir esta página a tu lista de lectura, haz clic en el icono de marcadores</translation> <translation id="6091761513005122595">El recurso compartido se ha activado correctamente.</translation> <translation id="6093888419484831006">Cancelando la actualización...</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb index 75076ca..33755d4e 100644 --- a/chrome/app/resources/generated_resources_et.xtb +++ b/chrome/app/resources/generated_resources_et.xtb
@@ -1287,7 +1287,6 @@ <translation id="2191754378957563929">Sees</translation> <translation id="2192505247865591433">Allikas:</translation> <translation id="2193365732679659387">Usaldusväärsuse seaded</translation> -<translation id="2194554416429452547">Prooviperioodil otsib Chrome võimalusi, kuidas rämpsposti, pettusi ja saitide vahelist jagamist piirata. Samuti prognoosib Chrome <ph name="ESTIMATE_INTERESTS_LINK" />, mida saidid saavad kasutada teile reklaamide kuvamiseks. Saate oma huvisid seadetes hallata.</translation> <translation id="2194856509914051091">Olulised aspektid</translation> <translation id="2195331105963583686">Saate seadet <ph name="DEVICE_TYPE" /> pärast seda siiski kasutada, kuid see ei saa enam automaatseid tarkvara- ja turvavärskendusi</translation> <translation id="2195729137168608510">Meilikaitse</translation> @@ -3272,6 +3271,7 @@ <translation id="4077919383365622693">Kõik saidi <ph name="SITE" /> salvestatud andmed ja küpsisefailid kustutatakse.</translation> <translation id="4078738236287221428">Agressiivne</translation> <translation id="4079140982534148664">Kasuta täiustatud õigekirjakontrolli</translation> +<translation id="4081203444152654304">Otsi pildilt teenusega <ph name="VISUAL_SEARCH_PROVIDER" /></translation> <translation id="4081242589061676262">Faili ei saa üle kanda.</translation> <translation id="408223403876103285"><ph name="WEBSITE" /> saatis teie telefoni märguande. Oma isiku kinnitamiseks järgige telefonis esitatud juhiseid.</translation> <translation id="4084682180776658562">Järjehoidja</translation> @@ -3667,6 +3667,7 @@ <translation id="4476590490540813026">Sportlane</translation> <translation id="4476659815936224889">Selle koodi skannimiseks võite oma telefonis kasutada QR-skannerit või mõnda kaamerarakendust.</translation> <translation id="4477015793815781985">Kaasake Ctrl, Alt või ⌘</translation> +<translation id="4477379360383751882">Otsi pildilt teenusega <ph name="VISUAL_SEARCH_PROVIDER" /></translation> <translation id="4478664379124702289">&Salvesta link nimega...</translation> <translation id="4479424953165245642">Halda kioski rakendusi</translation> <translation id="4479639480957787382">Ethernet</translation>
diff --git a/chrome/app/resources/generated_resources_eu.xtb b/chrome/app/resources/generated_resources_eu.xtb index 5acac3ed..ff3d2ee1 100644 --- a/chrome/app/resources/generated_resources_eu.xtb +++ b/chrome/app/resources/generated_resources_eu.xtb
@@ -1284,7 +1284,6 @@ <translation id="2191754378957563929">Aktibatuta</translation> <translation id="2192505247865591433">Igorlea:</translation> <translation id="2193365732679659387">Fidagarritasun-ezarpenak</translation> -<translation id="2194554416429452547">Probak abian diren bitartean, spama, iruzurrak eta webguneen artean partekatzeko aukera mugatzeko moduak arakatzen ari da Chrome. Halaber, webguneek iragarkiak erakusteko erabil ditzaketen <ph name="ESTIMATE_INTERESTS_LINK" /> Chrome-k. Zure interesak kudeatzeko, joan ezarpenetara.</translation> <translation id="2194856509914051091">Kontuan hartu beharrekoak</translation> <translation id="2195331105963583686">Handik aurrera, <ph name="DEVICE_TYPE" /> erabiltzen jarraitu ahal izango duzu, baina ez duzu jasoko software- eta segurtasun-eguneratze automatikorik</translation> <translation id="2195729137168608510">Posta elektronikoaren babesa</translation> @@ -3265,6 +3264,7 @@ <translation id="4077919383365622693">Garbitu egingo dira <ph name="SITE" /> webguneak gordetako datu eta cookie guztiak.</translation> <translation id="4078738236287221428">Neurriz gainekoa</translation> <translation id="4079140982534148664">Erabili ortografia-zuzentzaile hobetua</translation> +<translation id="4081203444152654304">Bilatu irudiaren barruan <ph name="VISUAL_SEARCH_PROVIDER" /> erabilita</translation> <translation id="4081242589061676262">Ezin da igorri fitxategia.</translation> <translation id="408223403876103285"><ph name="WEBSITE" /> webguneak jakinarazpen bat bidali dizu telefonora. Zeu zarela berresteko, jarraitu bertan adierazitako argibideei.</translation> <translation id="4084682180776658562">Laster-marka</translation> @@ -3660,6 +3660,7 @@ <translation id="4476590490540813026">Atleta</translation> <translation id="4476659815936224889">Kode hau eskaneatzeko, QR kodeak eskaneatzeko berariazko aplikazio bat edo kamera-aplikazio batzuk erabil ditzakezu.</translation> <translation id="4477015793815781985">Erabili Ktrl, Alt edo ⌘</translation> +<translation id="4477379360383751882">Bilatu irudiaren barruan <ph name="VISUAL_SEARCH_PROVIDER" /> erabilita</translation> <translation id="4478664379124702289">Gorde &esteka honela…</translation> <translation id="4479424953165245642">Kudeatu aplikazio espezializatuak</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -5283,6 +5284,7 @@ <translation id="6086846494333236931">Administratzaileak instalatu du</translation> <translation id="6087746524533454243">Arakatzailearen "Honi buruz" orriaren bila zabiltza? Joan helbide honetara:</translation> <translation id="6087960857463881712">Aurpegi zoragarria</translation> +<translation id="6088535503330933227">Iragarkien spama, iruzurrak eta webguneen artean partekatzeko aukera mugatzeko moduak arakatzen ari da Chrome. Halaber, webguneek iragarkiak erakusteko erabil ditzaketen <ph name="ESTIMATE_INTERESTS_LINK" /> Chrome-k. Zure interesak kudeatzeko, joan ezarpenetara.</translation> <translation id="608912389580139775">Orria irakurketa-zerrendan gehitzeko, sakatu laster-markaren ikonoa</translation> <translation id="6091761513005122595">Muntatu da fitxategiak partekatzeko biltegia.</translation> <translation id="6093888419484831006">Eguneratzea bertan behera uzten…</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb index 005196f..24a882b 100644 --- a/chrome/app/resources/generated_resources_fa.xtb +++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -1293,7 +1293,6 @@ <translation id="2191754378957563929">روشن</translation> <translation id="2192505247865591433">از:</translation> <translation id="2193365732679659387">تنظیمات اطمینان</translation> -<translation id="2194554416429452547">در طول دوره آزمایشی، Chrome درحال کاوش راههایی برای محدود کردن هرزنامه، کلاهبرداری، و همرسانی بین سایتها است. علاوهبراین، Chrome <ph name="ESTIMATE_INTERESTS_LINK" /> و سایتها میتوانند از این علایق برای نشان دادن آگهی به شما استفاده کنند. میتوانید علایقتان را در تنظیمات مدیریت کنید.</translation> <translation id="2194856509914051091">مواردی که باید درنظر داشت</translation> <translation id="2195331105963583686">همچنان میتوانید بعد از اتمام زمان مشخصشده، از این <ph name="DEVICE_TYPE" /> استفاده کنید، اما دیگر بهروزرسانیهای نرمافزار و امنیتی خودکار را دریافت نخواهید کرد</translation> <translation id="2195729137168608510">محافظت از ایمیل</translation> @@ -3278,6 +3277,7 @@ <translation id="4077919383365622693">همه دادهها و کوکیهایی را که <ph name="SITE" /> ذخیره کرده است حذف خواهد شد.</translation> <translation id="4078738236287221428">قوی</translation> <translation id="4079140982534148664">استفاده از غلطگیر املای بهبودیافته</translation> +<translation id="4081203444152654304">جستجو درون تصویر با <ph name="VISUAL_SEARCH_PROVIDER" /></translation> <translation id="4081242589061676262">نمیتوان محتوای فایل را ارسال کرد.</translation> <translation id="408223403876103285"><ph name="WEBSITE" /> اعلانی به تلفنتان ارسال کرد. برای اینکه هویتتان تأیید شود، مراحل را در تلفنتان دنبال کنید.</translation> <translation id="4084682180776658562">نشانک</translation> @@ -3673,6 +3673,7 @@ <translation id="4476590490540813026">ورزشکار</translation> <translation id="4476659815936224889">برای اسکن کردن این کد، میتوانید از برنامه اسکنر QR در تلفن یا دیگر برنامههای دوربین استفاده کنید.</translation> <translation id="4477015793815781985">باید شامل Ctrl، Alt یا ⌘ باشد</translation> +<translation id="4477379360383751882">جستجو درون «تصویر» با <ph name="VISUAL_SEARCH_PROVIDER" /></translation> <translation id="4478664379124702289">ذخیره پی&وند بهعنوان...</translation> <translation id="4479424953165245642">مدیریت برنامههای کاربردی کیوسک</translation> <translation id="4479639480957787382">اترنت</translation> @@ -5300,6 +5301,7 @@ <translation id="6086846494333236931">سرپرست سیستم شما نصب کرده است.</translation> <translation id="6087746524533454243">بهدنبال صفحه درباره مرورگر هستید؟ از این پیوند استفاده کنید:</translation> <translation id="6087960857463881712">چهره تأثیرگذار</translation> +<translation id="6088535503330933227">Chrome بهدنبال راههایی برای محدود کردن هرزآگهی، کلاهبرداری، و همرسانی بین سایتها است. علاوهبراین، Chrome <ph name="ESTIMATE_INTERESTS_LINK" /> و سایتها میتوانند از این علایق برای نشان دادن آگهی به شما استفاده کنند. میتوانید علایقتان را در تنظیمات مدیریت کنید.</translation> <translation id="608912389580139775">برای افزودن این صفحه به فهرست خواندن، روی نماد «نشانک» کلیک کنید</translation> <translation id="6091761513005122595">دستگاه ذخیرهسازی متصل به شبکه با موفقیت نشانده شد.</translation> <translation id="6093888419484831006">در حال لغو بهروزرسانی...</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb index 7bb7e3c..ee5387e 100644 --- a/chrome/app/resources/generated_resources_fi.xtb +++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -1295,7 +1295,6 @@ <translation id="2191754378957563929">Päällä</translation> <translation id="2192505247865591433">Lähettäjä:</translation> <translation id="2193365732679659387">Luottamusasetukset</translation> -<translation id="2194554416429452547">Kokeilujen aikana Chrome tutkii tapoja rajoittaa roskasisältöä, huijauksia ja sivustojen välistä jakamista. Chrome myös <ph name="ESTIMATE_INTERESTS_LINK" />, joita sivustot voivat käyttää näyttääksesi sinulle mainoksia. Voit muuttaa kiinnostuksen kohteitasi asetuksista.</translation> <translation id="2194856509914051091">Huomioitavaa</translation> <translation id="2195331105963583686"><ph name="DEVICE_TYPE" /> on käytettävissä jatkossakin, mutta se ei enää saa automaattisia ohjelmisto- ja tietoturvapäivityksiä</translation> <translation id="2195729137168608510">Sähköpostin suojaus</translation> @@ -3277,6 +3276,7 @@ <translation id="4077919383365622693">Kaikki data ja evästeet, jotka <ph name="SITE" /> on tallentanut, poistetaan.</translation> <translation id="4078738236287221428">Aggressiivinen</translation> <translation id="4079140982534148664">Käytä parannettua oikeinkirjoituksen tarkistusta</translation> +<translation id="4081203444152654304">Hae kuvasta (<ph name="VISUAL_SEARCH_PROVIDER" />)</translation> <translation id="4081242589061676262">Tiedoston suoratoisto epäonnistui</translation> <translation id="408223403876103285"><ph name="WEBSITE" /> lähetti ilmoituksen puhelimeesi. Todista henkilöllisyytesi seuraamalla puhelimessa näkyviä ohjeita.</translation> <translation id="4084682180776658562">Kirjanmerkki</translation> @@ -3672,6 +3672,7 @@ <translation id="4476590490540813026">Urheilija</translation> <translation id="4476659815936224889">Voit skannata koodin puhelimen QR-skannaussovelluksella tai joillakin kamerasovelluksilla.</translation> <translation id="4477015793815781985">Sisällytä Ctrl, Alt tai ⌘</translation> +<translation id="4477379360383751882">Hae kuvasta (<ph name="VISUAL_SEARCH_PROVIDER" />)</translation> <translation id="4478664379124702289">Tallenna lin&kki nimellä...</translation> <translation id="4479424953165245642">Hallinnoi kioskisovelluksia</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -5299,6 +5300,7 @@ <translation id="6086846494333236931">Järjestelmänvalvojasi asentama</translation> <translation id="6087746524533454243">Etsitkö selaimen tietosivua? Avaa</translation> <translation id="6087960857463881712">Eeppinen hymiö</translation> +<translation id="6088535503330933227">Chrome tutkii tapoja rajoittaa mainosspämmäystä, petoksia ja sivustojen välistä jakamista. Chrome myös <ph name="ESTIMATE_INTERESTS_LINK" />, joita sivustot voivat käyttää näyttääksesi sinulle mainoksia. Voit muuttaa kiinnostuksen kohteitasi asetuksista.</translation> <translation id="608912389580139775">Jos haluat lisätä sivun lukulistallesi, klikkaa Kirjanmerkki-kuvaketta</translation> <translation id="6091761513005122595">Jako otettiin käyttöön.</translation> <translation id="6093888419484831006">Peruutetaan päivitystä...</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb index 6151aaf..4fa4416 100644 --- a/chrome/app/resources/generated_resources_fil.xtb +++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -1297,7 +1297,6 @@ <translation id="2191754378957563929">Naka-on</translation> <translation id="2192505247865591433">Mula:</translation> <translation id="2193365732679659387">Mga setting ng pagtitiwala</translation> -<translation id="2194554416429452547">Sa panahon ng mga trial, ine-explore ng Chrome ang mga paraan para limitahan ang spam, panloloko, at pagbabahagi sa pagitan ng mga site. Ginagawa rin ng Chrome na <ph name="ESTIMATE_INTERESTS_LINK" /> na magagamit ng mga site para magpakita sa iyo ng mga ad. Puwede mong pamahalaan ang iyong mga interes sa mga setting.</translation> <translation id="2194856509914051091">Mga bagay na dapat isaalang-alang</translation> <translation id="2195331105963583686">Magagamit mo pa rin ang <ph name="DEVICE_TYPE" /> na ito pagkatapos noon, pero hindi na ito makakakuha ng mga awtomatikong update sa software at seguridad</translation> <translation id="2195729137168608510">Proteksyon sa Email</translation> @@ -5306,6 +5305,7 @@ <translation id="6086846494333236931">Na-install ng iyong administrator</translation> <translation id="6087746524533454243">Hinahanap ang page na tungkol sa browser? Bisitahin ang</translation> <translation id="6087960857463881712">Astig na mukha</translation> +<translation id="6088535503330933227">Nag-e-explore ang Chrome kung paano limitahan ang mga spam na ad, panloloko, at pagbabahagi sa pagitan ng mga site. Ginagawa rin ng Chrome na <ph name="ESTIMATE_INTERESTS_LINK" /> na magagamit ng mga site para magpakita sa iyo ng mga ad. Puwede mong pamahalaan ang iyong mga interes sa mga setting.</translation> <translation id="608912389580139775">Para idagdag ang page na ito sa iyong listahan ng babasahin, i-click ang icon ng Bookmark</translation> <translation id="6091761513005122595">Matagumpay na na-mount ang share</translation> <translation id="6093888419484831006">Kinakansela ang pag-update...</translation> @@ -5934,6 +5934,7 @@ <translation id="6709133671862442373">Balita</translation> <translation id="6709357832553498500">Kumonekta sa pamamagitan ng <ph name="EXTENSIONNAME" /></translation> <translation id="6710213216561001401">Nauna</translation> +<translation id="6710394144992407503">Suriin kung may mga error sa pagbabaybay kapag nag-type ka ng text sa mga web page</translation> <translation id="6711146141291425900">I-link ang <ph name="WEB_DRIVE" /> account para sa Mga pag-download</translation> <translation id="6712943853047024245">Nag-save ka na ng password na may ganitong username para sa <ph name="WEBSITE" /></translation> <translation id="6713233729292711163">Magdagdag ng Profile sa Trabaho</translation> @@ -6555,6 +6556,7 @@ <translation id="7340757554212515731">Awtomatikong nagpapadala sa Google ng mga ulat ng pag-crash pati na rin ng diagnostic na data at data ng paggamit</translation> <translation id="7341834142292923918">Gusto ng access sa site na ito</translation> <translation id="7343372807593926528">Pakilarawan ang problema bago ipadala ang feedback.</translation> +<translation id="7344585835349671209">Pamahalaan ang mga HTTPS/SSL certificate sa iyong device</translation> <translation id="7345706641791090287">Kumpirmahin ang iyong password</translation> <translation id="7346909386216857016">Ok, nakuha ko</translation> <translation id="7347452120014970266">Iki-clear nito ang lahat ng data at cookies na na-store ng <ph name="ORIGIN_NAME" /> at ang mga na-install na app nito</translation> @@ -6684,6 +6686,7 @@ <translation id="7460045493116006516">Kasalukuyang temang na-install mo</translation> <translation id="7461924472993315131">I-pin</translation> <translation id="746216226901520237">Sa susunod, ia-unlock ng iyong telepono ang <ph name="DEVICE_TYPE" /> mo. Puwede mong i-off ang Smart Lock sa Mga Setting.</translation> +<translation id="7464153996453281700">Up to date na ang bahagi</translation> <translation id="7464637891177137294">I-save ito sa iyong Google Account, <ph name="ACCOUNT" /></translation> <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{# bukas na tab, pindutin para i-toggle ang tab strip}one{# bukas na tab, pindutin para i-toggle ang tab strip}other{# na bukas na tab, pindutin para i-toggle ang tab strip}}</translation> <translation id="7465635034594602553">Nagkaproblema. Maghintay ng ilang minuto at patakbuhin ulit ang <ph name="APP_NAME" />.</translation> @@ -7193,6 +7196,7 @@ <translation id="793531125873261495">Nagkaroon ng error sa pag-download ng virtual machine. Pakisubukang muli.</translation> <translation id="7935451262452051102"><ph name="PERCENT" />% na ang natapos</translation> <translation id="7939062555109487992">Mga advanced na pagpipilian</translation> +<translation id="7939328347457537652">Pamahalaan ang mga certificate ng device</translation> <translation id="7939412583708276221">Panatilihin pa rin</translation> <translation id="7942349550061667556">Pula</translation> <translation id="7943368935008348579">Mag-download ng mga PDF</translation>
diff --git a/chrome/app/resources/generated_resources_fr-CA.xtb b/chrome/app/resources/generated_resources_fr-CA.xtb index 5fba1ac8..5d54c24 100644 --- a/chrome/app/resources/generated_resources_fr-CA.xtb +++ b/chrome/app/resources/generated_resources_fr-CA.xtb
@@ -1285,7 +1285,6 @@ <translation id="2191754378957563929">Activé</translation> <translation id="2192505247865591433">De :</translation> <translation id="2193365732679659387">Paramètres de confiance</translation> -<translation id="2194554416429452547">Lors des essais, Chrome explore différents moyens de limiter les pourriels, la fraude et le partage entre les sites. En outre, Chrome <ph name="ESTIMATE_INTERESTS_LINK" /> que d'autres sites peuvent utiliser pour vous montrer des annonces. Vous pouvez gérer vos centres d'intérêt dans les paramètres.</translation> <translation id="2194856509914051091">Points à prendre en compte</translation> <translation id="2195331105963583686">Vous pourrez toujours utiliser cet appareil (<ph name="DEVICE_TYPE" />) après cela, mais il ne recevra plus les mises à jour logicielles et de sécurité automatiques</translation> <translation id="2195729137168608510">Protection du courrier électronique</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb index 98adfe0..293db6de 100644 --- a/chrome/app/resources/generated_resources_fr.xtb +++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -1285,7 +1285,6 @@ <translation id="2191754378957563929">Activé</translation> <translation id="2192505247865591433">De :</translation> <translation id="2193365732679659387">Paramètres de confiance</translation> -<translation id="2194554416429452547">Lors des essais, Chrome étudie différents moyens de limiter le spam, la fraude et le partage entre les sites. En outre, Chrome <ph name="ESTIMATE_INTERESTS_LINK" /> que les sites peuvent utiliser pour vous proposer des annonces. Vous pouvez gérer vos centres d'intérêt dans les paramètres.</translation> <translation id="2194856509914051091">Éléments à prendre en compte</translation> <translation id="2195331105963583686">Vous pourrez toujours utiliser cet appareil <ph name="DEVICE_TYPE" /> par la suite, mais il ne recevra plus de mises à jour logicielles et de sécurité automatiques</translation> <translation id="2195729137168608510">Protection du courrier électronique</translation> @@ -4107,6 +4106,7 @@ <translation id="4900392736118574277">Votre page de démarrage a été remplacée par <ph name="URL" />.</translation> <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz (entrelacé)</translation> <translation id="4900652253009739885">Impossible de supprimer l'unique contacteur associé à "Sélectionner". Appuyez sur une touche pour <ph name="RESPONSE" />.</translation> +<translation id="4901154724271753917">Développer "Récemment fermés"</translation> <translation id="4901309472892185668">Sélectionnez l'état du test pour <ph name="EXPERIMENT_NAME" />.</translation> <translation id="49027928311173603">La règle téléchargée depuis le serveur n'est pas valide : <ph name="VALIDATION_ERROR" />.</translation> <translation id="4906490889887219338">Configurer ou gérer des partages de fichiers en réseau. <ph name="LINK_BEGIN" />En savoir plus<ph name="LINK_END" /></translation> @@ -5288,6 +5288,7 @@ <translation id="6086846494333236931">Installée par votre administrateur</translation> <translation id="6087746524533454243">Vous recherchez des informations à propos du navigateur ? Accédez à la page</translation> <translation id="6087960857463881712">Visage "Génial"</translation> +<translation id="6088535503330933227">Chrome étudie différents moyens de limiter le spam publicitaire, la fraude et le partage entre les sites. En outre, Chrome <ph name="ESTIMATE_INTERESTS_LINK" /> que les sites peuvent utiliser pour vous proposer des annonces. Vous pouvez gérer vos centres d'intérêt dans les paramètres.</translation> <translation id="608912389580139775">Pour ajouter cette page à votre liste de lecture, cliquez sur l'icône Ajouter aux favoris</translation> <translation id="6091761513005122595">Le partage a bien été installé.</translation> <translation id="6093888419484831006">Annulation de la mise à jour...</translation> @@ -6998,6 +6999,7 @@ <translation id="7768526219335215384"><ph name="ORIGIN" /> pourra consulter les fichiers du dossier <ph name="FOLDERNAME" /></translation> <translation id="7768770796815395237">Modifier</translation> <translation id="7768784765476638775">Sélectionner pour prononcer</translation> +<translation id="7769748505895274502">Réduire "Récemment fermés"</translation> <translation id="7770406201819593386">Exécuter des tests de diagnostic Chrome OS Flex.</translation> <translation id="7770450735129978837">Clic droit de la souris</translation> <translation id="7770612696274572992">Image copiée depuis un autre appareil</translation>
diff --git a/chrome/app/resources/generated_resources_gl.xtb b/chrome/app/resources/generated_resources_gl.xtb index c5e98c5..f37b4f67 100644 --- a/chrome/app/resources/generated_resources_gl.xtb +++ b/chrome/app/resources/generated_resources_gl.xtb
@@ -1283,7 +1283,6 @@ <translation id="2191754378957563929">Activado</translation> <translation id="2192505247865591433">De:</translation> <translation id="2193365732679659387">Configuración de confianza</translation> -<translation id="2194554416429452547">Durante as probas, Chrome tenta explorar formas de limitar o spam, a fraude e o uso compartido entre sitios. Chrome tamén <ph name="ESTIMATE_INTERESTS_LINK" /> que os sitios poden usar para mostrarche anuncios. Podes xestionar os teus intereses na configuración.</translation> <translation id="2194856509914051091">Cuestións que se deben ter en conta</translation> <translation id="2195331105963583686">Seguirás podendo utilizar este <ph name="DEVICE_TYPE" /> despois desta data, pero deixará de recibir actualizacións de software e seguranza automáticas</translation> <translation id="2195729137168608510">Protección de correo electrónico</translation> @@ -3264,6 +3263,7 @@ <translation id="4077919383365622693">Borraranse todos os datos e as cookies almacenados por <ph name="SITE" />.</translation> <translation id="4078738236287221428">Agresiva</translation> <translation id="4079140982534148664">Utilizar corrector ortográfico mellorado</translation> +<translation id="4081203444152654304">Buscar na imaxe con <ph name="VISUAL_SEARCH_PROVIDER" /></translation> <translation id="4081242589061676262">Non se pode emitir o ficheiro.</translation> <translation id="408223403876103285"><ph name="WEBSITE" /> enviouche unha notificación ao teléfono. Sigue os pasos que se indican nela para confirmar a túa identidade.</translation> <translation id="4084682180776658562">Marcador</translation> @@ -3659,6 +3659,7 @@ <translation id="4476590490540813026">Atleta</translation> <translation id="4476659815936224889">Para escanear este código, podes utilizar unha aplicación de escáner de QR do teu teléfono ou algunhas aplicacións de cámara.</translation> <translation id="4477015793815781985">Inclúea Ctrl, Alt ou ⌘</translation> +<translation id="4477379360383751882">Buscar na imaxe con <ph name="VISUAL_SEARCH_PROVIDER" /></translation> <translation id="4478664379124702289">Gardar liga&zón como...</translation> <translation id="4479424953165245642">Xestionar as aplicacións de quiosco</translation> <translation id="4479639480957787382">Ethernet</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb index 5d2f321..eb4f569 100644 --- a/chrome/app/resources/generated_resources_gu.xtb +++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -1281,7 +1281,6 @@ <translation id="2191754378957563929">ચાલુ</translation> <translation id="2192505247865591433">તરફથી:</translation> <translation id="2193365732679659387">ટ્રસ્ટ સેટિંગ</translation> -<translation id="2194554416429452547">અજમાયશની અવધિ દરમિયાન, Chrome સ્પામ, કપટ અને સાઇટ વચ્ચેના શેરિંગને મર્યાદિત કરવાની રીતોની શોધખોળ કરી રહ્યું છે. તમને જાહેરાતો બતાવવા માટે સાઇટ જેનો ઉપયોગ કરી શકે, એવી <ph name="ESTIMATE_INTERESTS_LINK" /> પણ Chrome લગાવી શકે છે. સેટિંગમાં જઈને તમે તમારી રુચિઓ મેનેજ કરી શકો છો.</translation> <translation id="2194856509914051091">ધ્યાનમાં લેવા જેવી બાબતો</translation> <translation id="2195331105963583686">તેમ તે સમય પછી પણ આ <ph name="DEVICE_TYPE" />નો ઉપયોગ કરી શકશો પણ હવેથી ઑટોમૅટિક સૉફ્ટવેર અને સુરક્ષા અપડેટ મળશે નહીં</translation> <translation id="2195729137168608510">ઇમેઇલ સુરક્ષા</translation> @@ -3264,6 +3263,7 @@ <translation id="4077919383365622693"><ph name="SITE" /> દ્વારા સ્ટોર થયેલો બધો ડેટા અને કુકી સાફ કરવામાં આવશે.</translation> <translation id="4078738236287221428">એગ્રેસિવ</translation> <translation id="4079140982534148664">વધુ સારી બનાવાયેલી જોડણીની તપાસનો ઉપયોગ કરો</translation> +<translation id="4081203444152654304"><ph name="VISUAL_SEARCH_PROVIDER" /> વડે છબીમાં શોધો</translation> <translation id="4081242589061676262">ફાઇલ કાસ્ટ કરવામાં અસમર્થ.</translation> <translation id="408223403876103285"><ph name="WEBSITE" /> દ્વારા તમારા ફોન પર નોટિફિકેશન મોકલવામાં આવ્યું. આ તમે જ છો તે કન્ફર્મ કરવા માટે, તેમાં આપેલા પગલાં અનુસરો.</translation> <translation id="4084682180776658562">બુકમાર્ક</translation> @@ -3659,6 +3659,7 @@ <translation id="4476590490540813026">ઍથ્લીટ</translation> <translation id="4476659815936224889">આ કોડ સ્કૅન કરવા માટે, તમે તમારા ફોન પર QR સ્કૅનર ઍપ અથવા અમુક કૅમેરા ઍપનો ઉપયોગ કરી શકો છો.</translation> <translation id="4477015793815781985">Ctrl, Alt અથવા ⌘ શામેલ કરો</translation> +<translation id="4477379360383751882"><ph name="VISUAL_SEARCH_PROVIDER" /> વડે છબીમાં શોધો</translation> <translation id="4478664379124702289">લિં&કને આ રીતે સાચવો...</translation> <translation id="4479424953165245642">કિઓસ્ક એપ્લિકેશન્સનું સંચાલન કરો</translation> <translation id="4479639480957787382">ઇથરનેટ</translation> @@ -5287,6 +5288,7 @@ <translation id="6086846494333236931">તમારા વ્યવસ્થાપક દ્વારા ઇન્સ્ટોલ કરાયું</translation> <translation id="6087746524533454243">શું બ્રાઉઝરની માહિતી ધરાવતું પેજ શોધી રહ્યાં છો? મુલાકાત લો</translation> <translation id="6087960857463881712">અદ્ભુત ચહેરો</translation> +<translation id="6088535503330933227">Chrome સ્પામ જાહેરાત, કપટ અને સાઇટ વચ્ચે શેરિંગને મર્યાદિત કરવાની રીતો શોધી રહ્યું છે. તમને જાહેરાતો બતાવવા માટે સાઇટ તમારી જે રુચિઓનો ઉપયોગ કરી શકે છે, Chrome તેનો પણ <ph name="ESTIMATE_INTERESTS_LINK" />. સેટિંગમાં જઈને તમે તમારી રુચિઓ મેનેજ કરી શકો છો.</translation> <translation id="608912389580139775">આ પેજને તમારી વાંચન સૂચિમાં ઉમેરવા માટે, બુકમાર્ક આઇકન પર ક્લિક કરો</translation> <translation id="6091761513005122595">શેર સફળતાપૂર્વક માઉન્ટ થયું.</translation> <translation id="6093888419484831006">અપડેટને રદ કરી રહ્યું છે...</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb index ca3e817..62b2bef 100644 --- a/chrome/app/resources/generated_resources_hi.xtb +++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -1297,7 +1297,6 @@ <translation id="2191754378957563929">चालू है</translation> <translation id="2192505247865591433">द्वारा:</translation> <translation id="2193365732679659387">विश्वास सेटिंग</translation> -<translation id="2194554416429452547">ट्रायल के दौरान, Chrome ऐसे तरीके खोज रहा है जिनसे स्पैम, धोखाधड़ी, और साइटों के बीच शेयर किए जाने वाले डेटा को सीमित किया जा सके. Chrome <ph name="ESTIMATE_INTERESTS_LINK" />. इस जानकारी का इस्तेमाल साइटें आपको विज्ञापन दिखाने के लिए कर सकती हैं. सेटिंग में जाकर, अपनी पसंद के विषयों को मैनेज किया जा सकता है.</translation> <translation id="2194856509914051091">इन बातों का ध्यान रखें</translation> <translation id="2195331105963583686">आप उस समय के बाद भी, इस <ph name="DEVICE_TYPE" /> का इस्तेमाल कर पाएंगे. हालांकि, इसमें अपने आप होने वाले सॉफ़्टवेयर और सुरक्षा अपडेट नहीं मिलेंगे</translation> <translation id="2195729137168608510">ईमेल सुरक्षा</translation> @@ -3280,6 +3279,7 @@ <translation id="4077919383365622693"><ph name="SITE" /> ने जो भी डेटा और कुकी सेव की है उसे मिटा दिया जाएगा.</translation> <translation id="4078738236287221428">आक्रामक</translation> <translation id="4079140982534148664">'बेहतर वर्तनी जाँच' का इस्तेमाल करें</translation> +<translation id="4081203444152654304"><ph name="VISUAL_SEARCH_PROVIDER" /> की मदद से इमेज में खोजें</translation> <translation id="4081242589061676262">फ़ाइल को कास्ट नहीं किया जा सका.</translation> <translation id="408223403876103285"><ph name="WEBSITE" /> ने आपके फ़ोन पर कोई सूचना भेजी है. फ़ोन पर अपनी पहचान की पुष्टि करने के लिए यह तरीका अपनाएं.</translation> <translation id="4084682180776658562">बुकमार्क</translation> @@ -3675,6 +3675,7 @@ <translation id="4476590490540813026">एथलीट</translation> <translation id="4476659815936224889">इस कोड को स्कैन करने के लिए, आप अपने फ़ोन पर क्यूआर स्कैनर या कुछ कैमरा ऐप्लिकेशन का इस्तेमाल कर सकते हैं.</translation> <translation id="4477015793815781985">Ctrl, Alt या ⌘ को शामिल करें</translation> +<translation id="4477379360383751882"><ph name="VISUAL_SEARCH_PROVIDER" /> की मदद से इमेज में खोजें</translation> <translation id="4478664379124702289">लिंक को इस रूप में सेव करें...</translation> <translation id="4479424953165245642">कियोस्क ऐप्स प्रबंधित करें</translation> <translation id="4479639480957787382">ईथरनेट</translation> @@ -5302,6 +5303,7 @@ <translation id="6086846494333236931">आपके नियंत्रक द्वारा इंस्टॉल किया गया</translation> <translation id="6087746524533454243">ब्राउज़र की जानकारी वाला पेज चाहिए? यहां जाएं</translation> <translation id="6087960857463881712">बढ़िया चेहरा</translation> +<translation id="6088535503330933227">Chrome ऐसे तरीके खोज रहा है जिनसे स्पैम वाले विज्ञापन, धोखाधड़ी, और साइटों के बीच शेयर किए जाने वाले डेटा को सीमित किया जा सके. Chrome <ph name="ESTIMATE_INTERESTS_LINK" /> का भी अनुमान लगाता है. इस जानकारी का इस्तेमाल साइटें, आपको विज्ञापन दिखाने के लिए कर सकती हैं. सेटिंग में जाकर, अपनी पसंद के विषयों को मैनेज किया जा सकता है.</translation> <translation id="608912389580139775">इस पेज को अपनी रीडिंग लिस्ट में जोड़ने के लिए, बुकमार्क आइकॉन पर क्लिक करें</translation> <translation id="6091761513005122595">शेयर माउंट करना सफल रहा.</translation> <translation id="6093888419484831006">अपडेट रद्द किया जा रहा है...</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb index 8282bf4..6bbaea9b 100644 --- a/chrome/app/resources/generated_resources_hr.xtb +++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -1286,7 +1286,6 @@ <translation id="2191754378957563929">Uključeno</translation> <translation id="2192505247865591433">Šalje:</translation> <translation id="2193365732679659387">Postavke pouzdanosti</translation> -<translation id="2194554416429452547">Tijekom proba Chrome istražuje načine za ograničavanje neželjenog sadržaja, prijevara i dijeljenja između web-lokacija. Chrome također <ph name="ESTIMATE_INTERESTS_LINK" /> koje web-lokacije mogu upotrebljavati da bi vam prikazivale oglase. Svojim interesima možete upravljati u postavkama.</translation> <translation id="2194856509914051091">Važne napomene</translation> <translation id="2195331105963583686">Nakon tog razdoblja i dalje ćete moći upotrebljavati uređaj <ph name="DEVICE_TYPE" />, no on više neće primati automatska ažuriranja softvera i sigurnosna ažuriranja</translation> <translation id="2195729137168608510">Zaštita e-pošte</translation> @@ -5289,6 +5288,7 @@ <translation id="6086846494333236931">Instalirao vaš administrator</translation> <translation id="6087746524533454243">Tražite li stranicu s informacijama o pregledniku? Otvorite</translation> <translation id="6087960857463881712">Oduševljeno lice</translation> +<translation id="6088535503330933227">Chrome istražuje načine za ograničavanje neželjenih oglasa, prijevara i dijeljenja između web-lokacija. Chrome također <ph name="ESTIMATE_INTERESTS_LINK" /> koje web-lokacije mogu upotrebljavati da bi vam prikazivale oglase. Svojim interesima možete upravljati u postavkama.</translation> <translation id="608912389580139775">Da biste dodali ovu stranicu na popis za čitanje, kliknite ikonu Oznaka</translation> <translation id="6091761513005122595">Dijeljenje je učitano.</translation> <translation id="6093888419484831006">Otkazivanje ažuriranja...</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb index cf12bb3..745e4d6 100644 --- a/chrome/app/resources/generated_resources_hu.xtb +++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -998,6 +998,7 @@ <translation id="1916502483199172559">Alapértelmezett piros avatar</translation> <translation id="1918141783557917887">&Kisebb</translation> <translation id="1920390473494685033">Névjegyek</translation> +<translation id="1921544956190977703">A Chrome legerősebb szintű védelmével rendelkezik a veszélyes webhelyek, letöltések és bővítmények ellen</translation> <translation id="1921584744613111023"><ph name="DPI" /> dpi</translation> <translation id="1923468477587371721">Az olyan Google-webhelyek, mint a Gmail, a Drive és a YouTube az Ön Google-fiókjának nyelvét használják, kivéve, ha módosította az adott termék nyelvét.</translation> <translation id="192494336144674234">Megnyitás ezzel:</translation> @@ -1295,7 +1296,6 @@ <translation id="2191754378957563929">Be</translation> <translation id="2192505247865591433">Innen:</translation> <translation id="2193365732679659387">Bizalmi beállítások</translation> -<translation id="2194554416429452547">A próbaidőszakok során a Chrome a spam, a csalás és a webhelyek közötti megosztás korlátozására szolgáló módszereket próbál ki. A Chrome emellett olyan <ph name="ESTIMATE_INTERESTS_LINK" />, amelyeket más webhelyek arra használhatnak fel, hogy hirdetéseket jelenítsenek meg Önnek. Érdeklődési köreit a beállításokban kezelheti.</translation> <translation id="2194856509914051091">Megfontolandó szempontok</translation> <translation id="2195331105963583686"><ph name="DEVICE_TYPE" /> eszközét ezt követően is tudja majd használni, de többé nem kap automatikus biztonsági és szoftverfrissítéseket</translation> <translation id="2195729137168608510">E-mail védelem</translation> @@ -2102,6 +2102,7 @@ A(z) <ph name="DOMAIN" /> megköveteli, hogy ne távolítsa el az intelligens kártyát.</translation> <translation id="2923234477033317484">A fiók eltávolítása</translation> <translation id="2923644930701689793">Hozzáférés a telefon galériájához</translation> +<translation id="292371311537977079">Chrome-beállítások</translation> <translation id="2925658782192398150">Kész, nem találtunk problémát</translation> <translation id="2926085873880284723">Alapértelmezett billentyűparancsok visszaállítása</translation> <translation id="2926620265753325858">A(z) <ph name="DEVICE_NAME" /> eszköz nem támogatott</translation> @@ -2686,6 +2687,7 @@ <translation id="3511528412952710609">Rövid</translation> <translation id="3514335087372914653">Játékbeállítások</translation> <translation id="3514373592552233661">Ha egynél több hálózat áll rendelkezésre, a rendszer a preferált hálózatokat részesíti előnyben más ismert hálózatokkal szemben</translation> +<translation id="3514647716686280777">Normál biztonsági védelemben részesül. Ha hatékonyabb védelmet szeretne kapni a veszélyes webhelyekkel, letöltésekkel és bővítményekkel szemben, kapcsolja be a Biztonságos Böngészés fokozott védelemmel funkciót a Chrome beállításainál.</translation> <translation id="3515983984924808886">A visszaállítás megerősítéséhez érintse meg újra a biztonsági hardverkulcsot. Ezzel törli a biztonsági hardverkulcson tárolt összes adatot, köztük a PIN-kódot is.</translation> <translation id="3518985090088779359">Elfogadás és tovább</translation> <translation id="3519564332031442870">Nyomtatási háttérszolgáltatás</translation> @@ -3278,6 +3280,7 @@ <translation id="4077919383365622693">A(z) <ph name="SITE" /> által tárolt összes adat és cookie törlődik.</translation> <translation id="4078738236287221428">Agresszív</translation> <translation id="4079140982534148664">Továbbfejlesztett helyesírás-ellenőrzés használata</translation> +<translation id="4081203444152654304">Keresés a képen belül a következővel: <ph name="VISUAL_SEARCH_PROVIDER" /></translation> <translation id="4081242589061676262">Nem sikerült a fájl átküldése.</translation> <translation id="408223403876103285">A(z) <ph name="WEBSITE" /> értesítést küldött a telefonjára. Személyazonossága igazolásához kövesse az ott látható lépéseket.</translation> <translation id="4084682180776658562">Könyvjelző</translation> @@ -3673,6 +3676,7 @@ <translation id="4476590490540813026">Atléta</translation> <translation id="4476659815936224889">A kód beolvasásához használhat a telefonján QR-kódok olvasására szolgáló alkalmazást, illetve bizonyos kameraalkalmazásokat.</translation> <translation id="4477015793815781985">Használja a Ctrl, az Alt vagy a ⌘ billentyűk egyikét</translation> +<translation id="4477379360383751882">Keresés a képen belül a következővel: <ph name="VISUAL_SEARCH_PROVIDER" /></translation> <translation id="4478664379124702289">Link mentése &másként...</translation> <translation id="4479424953165245642">Kiosk-alkalmazások kezelése</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -5302,6 +5306,7 @@ <translation id="6086846494333236931">A rendszergazda telepítette</translation> <translation id="6087746524533454243">A böngésző névjegyoldalát keresi? Nyissa meg ezt az oldalt:</translation> <translation id="6087960857463881712">Menő arc</translation> +<translation id="6088535503330933227">A Chrome a hirdetési spam, a csalás és a webhelyek közötti megosztás korlátozására szolgáló módszereket próbál ki. A Chrome emellett olyan <ph name="ESTIMATE_INTERESTS_LINK" />, amelyeket más webhelyek arra használhatnak fel, hogy hirdetéseket jelenítsenek meg Önnek. Érdeklődési köreit a beállításokban kezelheti.</translation> <translation id="608912389580139775">Ha szeretne oldalakat felvenni az olvasási listájára, kattintson a Könyvjelző ikonra</translation> <translation id="6091761513005122595">A megosztott tároló csatlakoztatása sikeres volt.</translation> <translation id="6093888419484831006">Frissítés leállítása...</translation> @@ -5491,6 +5496,7 @@ <translation id="6278428485366576908">Téma</translation> <translation id="6278776436938569440">Hely módosítása</translation> <translation id="6279183038361895380">Az egérmutató megjelenítéséhez nyomja meg a következő billentyűt: |<ph name="ACCELERATOR" />|</translation> +<translation id="6279595948631688299">Kiválasztott tanúsítvány e&xportálása…</translation> <translation id="6280215091796946657">Bejelentkezés másik fiókkal</translation> <translation id="6280912520669706465">ARC</translation> <translation id="6282180787514676874">{COUNT,plural, =1{Meghaladja az 1 papírlapos korlátot}other{Meghaladja a(z) {COUNT} papírlapos korlátot}}</translation> @@ -5605,6 +5611,7 @@ <translation id="6398715114293939307">A Google Play Áruház eltávolítása</translation> <translation id="6398765197997659313">Kilépés a teljes képernyős módból</translation> <translation id="6399774419735315745">Kém</translation> +<translation id="6401458660421980302">Ha szeretné elküldeni ezt a lapot másik eszközre, jelentkezzen be a Chrome-ba az adott eszközön</translation> <translation id="6401597285454423070">Számítógépe tartalmaz egy platformmegbízhatósági modul (Trusted Platform Module, TPM) nevű biztonsági eszközt, amely számos kritikus biztonsági funkció megvalósítására szolgál ChromeOS-en. További információért keresse fel a Chromebook Súgót: https://support.google.com/chromebook/?p=tpm</translation> <translation id="6404187344102273690">Játékélmény a Chromebookokon</translation> <translation id="6404511346730675251">Könyvjelző szerkesztése</translation> @@ -5841,6 +5848,7 @@ <translation id="6619801788773578757">Kioszkalkalmazás hozzáadása</translation> <translation id="6619990499523117484">PIN-kód megerősítése</translation> <translation id="6620254580880484313">Tároló neve</translation> +<translation id="6621391692573306628">A lap másik eszközre való elküldéséhez jelentkezzen be a Chrome-ba mindkét eszközön</translation> <translation id="6622980291894852883">Képek letiltásának fenntartása</translation> <translation id="6624036901798307345">Táblagép módban kattintson az eszköztár lapszámláló gombjára: ekkor az egyes lapok indexképeit megjelenítő új lapsor nyílik meg.</translation> <translation id="6624535038674360844">A(z) <ph name="FILE_NAME" /> fájlban bizalmas vagy veszélyes tartalom található. Kérje meg a tulajdonost, hogy küszöbölje ki ezt a problémát.</translation>
diff --git a/chrome/app/resources/generated_resources_hy.xtb b/chrome/app/resources/generated_resources_hy.xtb index f938b3d7..67062b8 100644 --- a/chrome/app/resources/generated_resources_hy.xtb +++ b/chrome/app/resources/generated_resources_hy.xtb
@@ -1286,7 +1286,6 @@ <translation id="2191754378957563929">Միաց</translation> <translation id="2192505247865591433">Ուղարկող`</translation> <translation id="2193365732679659387">Վստահության կարգավորումներ</translation> -<translation id="2194554416429452547">Փորձարկումների ընթացքում Chrome-ն ուսումասիրում է եղանակները, որոնք թույլ են տալիս սահմանափակել սպամը, խարդախությունները և կայքերի միջև տեղեկությունների փոխանակումը։ Chrome-ը նաև <ph name="ESTIMATE_INTERESTS_LINK" />, որոնք կայքերը կարող են օգտագործել՝ ձեզ գովազդ ցուցադրելու համար։ Ձեր հետաքրքրությունները կարող եք կառավարել կարգավորումներում։</translation> <translation id="2194856509914051091">Կարևոր տեղեկություններ</translation> <translation id="2195331105963583686">Դուք նախկինի պես կկարողանաք օգտագործել <ph name="DEVICE_TYPE" /> սարքը, սակայն այն այլևս չի ստանա ծրագրային և անվտանգության կարգավորումների ավտոմատ թարմացումներ:</translation> <translation id="2195729137168608510">Էլփոստի պաշտպանություն</translation> @@ -3266,6 +3265,7 @@ <translation id="4077919383365622693"><ph name="SITE" /> կայքի պահած բոլոր տվյալներն ու քուքիները կջնջվեն։</translation> <translation id="4078738236287221428">Ագրեսիվ</translation> <translation id="4079140982534148664">Օգտագործել ուղղագրության ընդլայնված ստուգումը</translation> +<translation id="4081203444152654304">Որոնել պատկերում <ph name="VISUAL_SEARCH_PROVIDER" />ով</translation> <translation id="4081242589061676262">Չհաջողվեց հեռարձակել ֆայլը։</translation> <translation id="408223403876103285"><ph name="WEBSITE" /> կայքը ծանուցում է ուղարկել ձեր հեռախոսին։ Ձեր ինքնությունը հաստատելու համար կատարեք այնտեղ նշված քայլերը։</translation> <translation id="4084682180776658562">Էջանիշ</translation> @@ -3661,6 +3661,7 @@ <translation id="4476590490540813026">Մարզիկ</translation> <translation id="4476659815936224889">Դուք կարող եք սկանավորել այս կոդը հեռախոսի QR սկաների կամ տեսախցիկի որոշ հավելվածների միջոցով:</translation> <translation id="4477015793815781985">Սկզբում սեղմեք Ctrl, Alt կամ ⌘</translation> +<translation id="4477379360383751882">Որոնել պատկերում <ph name="VISUAL_SEARCH_PROVIDER" />ով</translation> <translation id="4478664379124702289">Պահել հղում&ը որպես…</translation> <translation id="4479424953165245642">Կարգավորել կրպակ-հավելվածները</translation> <translation id="4479639480957787382">Ethernet</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb index 404dc287..3f7fd17f 100644 --- a/chrome/app/resources/generated_resources_id.xtb +++ b/chrome/app/resources/generated_resources_id.xtb
@@ -1296,7 +1296,6 @@ <translation id="2191754378957563929">Aktif</translation> <translation id="2192505247865591433">Dari:</translation> <translation id="2193365732679659387">Setelan kepercayaan</translation> -<translation id="2194554416429452547">Selama uji coba, Chrome mengembangkan cara untuk membatasi spam, penipuan, dan berbagi antar-situs. Chrome juga <ph name="ESTIMATE_INTERESTS_LINK" /> yang dapat digunakan situs untuk menampilkan iklan kepada Anda. Anda dapat mengubah minat di setelan.</translation> <translation id="2194856509914051091">Hal-hal yang perlu dipertimbangkan</translation> <translation id="2195331105963583686">Anda tetap dapat menggunakan <ph name="DEVICE_TYPE" /> ini setelah waktu tersebut, tetapi perangkat ini tidak akan lagi mendapatkan update software dan keamanan secara otomatis</translation> <translation id="2195729137168608510">Perlindungan Email</translation> @@ -3281,6 +3280,7 @@ <translation id="4077919383365622693">Semua data dan cookie yang disimpan oleh <ph name="SITE" /> akan dihapus.</translation> <translation id="4078738236287221428">Agresif</translation> <translation id="4079140982534148664">Gunakan fitur Periksa Ejaan yang Disempurnakan</translation> +<translation id="4081203444152654304">Telusuri di dalam gambar dengan <ph name="VISUAL_SEARCH_PROVIDER" /></translation> <translation id="4081242589061676262">Tidak dapat mentransmisikan file.</translation> <translation id="408223403876103285"><ph name="WEBSITE" /> mengirim notifikasi ke ponsel Anda. Untuk mengonfirmasi diri Anda, ikuti langkah-langkahnya.</translation> <translation id="4084682180776658562">Bookmark</translation> @@ -3676,6 +3676,7 @@ <translation id="4476590490540813026">Atlet</translation> <translation id="4476659815936224889">Untuk memindai kode ini, Anda dapat menggunakan aplikasi pemindai QR di ponsel, atau beberapa aplikasi kamera.</translation> <translation id="4477015793815781985">Sertakan Ctrl, Alt, atau ⌘</translation> +<translation id="4477379360383751882">Telusuri di dalam Gambar dengan <ph name="VISUAL_SEARCH_PROVIDER" /></translation> <translation id="4478664379124702289">Simpan Tauta&n Sebagai...</translation> <translation id="4479424953165245642">Kelola aplikasi kios</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -5303,6 +5304,7 @@ <translation id="6086846494333236931">Dipasang oleh administrator Anda</translation> <translation id="6087746524533454243">Mencari halaman tentang browser? Buka</translation> <translation id="6087960857463881712">Wajah keren</translation> +<translation id="6088535503330933227">Chrome sedang mengembangkan cara untuk membatasi spam iklan, penipuan, dan berbagi antar-situs. Chrome juga <ph name="ESTIMATE_INTERESTS_LINK" /> yang dapat digunakan situs untuk menampilkan iklan kepada Anda. Anda dapat mengelola minat di setelan.</translation> <translation id="608912389580139775">Untuk menambahkan halaman ini ke daftar bacaan, klik ikon Bookmark</translation> <translation id="6091761513005122595">URL berbagi berhasil dipasang.</translation> <translation id="6093888419484831006">Membatalkan pembaruan...</translation>
diff --git a/chrome/app/resources/generated_resources_is.xtb b/chrome/app/resources/generated_resources_is.xtb index ff6a328..d41d277c 100644 --- a/chrome/app/resources/generated_resources_is.xtb +++ b/chrome/app/resources/generated_resources_is.xtb
@@ -1297,7 +1297,6 @@ <translation id="2191754378957563929">Kveikt</translation> <translation id="2192505247865591433">Frá:</translation> <translation id="2193365732679659387">Trauststillingar</translation> -<translation id="2194554416429452547">Chrome nýtir prufuáskriftir til að kanna leiðir til að takmarka ruslefni, svik og deilingu á milli vefsvæða. Chrome <ph name="ESTIMATE_INTERESTS_LINK" />, sem vefsvæði geta notað til að birta þér auglýsingar. Þú getur stjórnað áhugasviðunum þínum í stillingunum.</translation> <translation id="2194856509914051091">Atriði til að hafa í huga</translation> <translation id="2195331105963583686">Þú getur notað þetta <ph name="DEVICE_TYPE" /> áfram eftir þann tíma en færð ekki lengur sjálfvirkar hugbúnaðar- og öryggisuppfærslur</translation> <translation id="2195729137168608510">Tölvupóstvörn</translation> @@ -4122,6 +4121,7 @@ <translation id="4900392736118574277">Upphafssíðu var breytt í <ph name="URL" />.</translation> <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz – samfléttað</translation> <translation id="4900652253009739885">Ekki er hægt að fjarlægja eina rofann sem er úthlutaður til „Velja“. Ýttu á hvaða hnapp sem er til að <ph name="RESPONSE" />.</translation> +<translation id="4901154724271753917">Stækka „Nýlega lokað“</translation> <translation id="4901309472892185668">Veldu ástand tilraunar fyrir <ph name="EXPERIMENT_NAME" /> tilraunina.</translation> <translation id="49027928311173603">Reglan sem sótt var frá þjóninum er ógild: <ph name="VALIDATION_ERROR" />.</translation> <translation id="4906490889887219338">Setja upp eða hafa umsjón með samnýttum skráageymslum. <ph name="LINK_BEGIN" />Frekari upplýsingar<ph name="LINK_END" /></translation> @@ -7012,6 +7012,7 @@ <translation id="7768526219335215384"><ph name="ORIGIN" /> mun geta skoðað skrár í <ph name="FOLDERNAME" /></translation> <translation id="7768770796815395237">Breyta</translation> <translation id="7768784765476638775">Textaupplestur</translation> +<translation id="7769748505895274502">Minnka „Nýlega lokað“</translation> <translation id="7770406201819593386">Keyra greiningarprófanir ChromeOS Flex.</translation> <translation id="7770450735129978837">Hægri músarsmellur</translation> <translation id="7770612696274572992">Mynd afrituð úr öðru tæki</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb index 77635bc..9a75bf67 100644 --- a/chrome/app/resources/generated_resources_it.xtb +++ b/chrome/app/resources/generated_resources_it.xtb
@@ -1284,7 +1284,6 @@ <translation id="2191754378957563929">On</translation> <translation id="2192505247865591433">Da:</translation> <translation id="2193365732679659387">Impostazioni di attendibilità</translation> -<translation id="2194554416429452547">Durante le prove, Chrome esamina dei metodi per limitare spam, attività fraudolente e la condivisione tra siti. Inoltre, Chrome <ph name="ESTIMATE_INTERESTS_LINK" />, che possono essere usati dai siti per mostrarti annunci. Puoi gestire i tuoi interessi nelle impostazioni.</translation> <translation id="2194856509914051091">Aspetti da considerare</translation> <translation id="2195331105963583686">Dopo tale periodo, potrai continuare a usare questo dispositivo <ph name="DEVICE_TYPE" />, che però non riceverà più automaticamente aggiornamenti software e di sicurezza.</translation> <translation id="2195729137168608510">Protezione email</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb index ebe102c4..6916199 100644 --- a/chrome/app/resources/generated_resources_iw.xtb +++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -1019,6 +1019,7 @@ <translation id="1936157145127842922">הצג בתיקייה</translation> <translation id="1936931585862840749">יש להזין מספר שמציין כמה עותקים יש להדפיס (1 עד <ph name="MAX_COPIES" />).</translation> <translation id="1937774647013465102">לא ניתן לייבא ארכיטקטורת מאגר מסוג <ph name="ARCHITECTURE_CONTAINER" /> באמצעות המכשיר הזה, כי הוא מסוג <ph name="ARCHITECTURE_DEVICE" />. אפשר לנסות לשחזר את המאגר במכשיר אחר או לפתוח את האפליקציה 'קבצים' כדי לגשת לקבצים בתוך תמונת המאגר.</translation> +<translation id="1938240902511979591">מצב ניגודיות גבוהה, זכוכית מגדלת והגדרות תצוגה</translation> <translation id="1938320257168860255">משהו השתבש. יש לוודא שהטלפון נמצא בקרבת מקום, שהוא לא נעול ושה-Bluetooth וה-Wi-Fi פועלים.</translation> <translation id="1938351510777341717">מקש Command חיצוני</translation> <translation id="1940546824932169984">מכשירים מחוברים</translation> @@ -1294,7 +1295,6 @@ <translation id="2191754378957563929">מופעלת</translation> <translation id="2192505247865591433">מ:</translation> <translation id="2193365732679659387">הגדרות אמון</translation> -<translation id="2194554416429452547">במהלך תקופת הניסיון, מערכת Chrome מחפשת דרכים שמאפשרות להגביל ספאם, הונאות ושיתוף בין אתרים. מערכת Chrome מבצעת גם <ph name="ESTIMATE_INTERESTS_LINK" />, ואתרים יוכלו להשתמש במידע הזה כדי להציג לך מודעות. אפשר לנהל את תחומי העניין בהגדרות.</translation> <translation id="2194856509914051091">מה כדאי לקחת בחשבון</translation> <translation id="2195331105963583686">אפשר יהיה להמשיך להשתמש במכשיר ה-<ph name="DEVICE_TYPE" /> הזה גם אחר כך, אבל הוא לא יקבל יותר עדכוני תוכנה ואבטחה אוטומטיים</translation> <translation id="2195729137168608510">הגנת אימייל </translation> @@ -1441,6 +1441,7 @@ <ph name="FOOTER_MESSAGE" /></translation> <translation id="2308798336967462263">אין תמיכה במקשים הבאים: Tab, Shift, Control, Escape, Caps lock, עוצמת קול</translation> <translation id="2309620859903500144">נחסמה הגישה של האתר הזה אל חיישני התנועה או התאורה.</translation> +<translation id="2310923358723722542">תצוגה והגדלה</translation> <translation id="2312219318583366810">כתובת ה-URL של הדף</translation> <translation id="2314165183524574721">הגדרת הרשאות הגישה הנוכחית מוסתרת</translation> <translation id="2314774579020744484">השפה שאליה דפים יתורגמו</translation> @@ -4181,6 +4182,7 @@ <translation id="496446150016900060">סנכרון של רשתות Wi-Fi עם הטלפון שלך</translation> <translation id="4965808351167763748">בחרת להגדיר שהמכשיר הזה יפעיל את Hangouts Meet. להמשיך?</translation> <translation id="4966972803217407697">עברת למצב אנונימי</translation> +<translation id="4967227914555989138">הוספת הערה</translation> <translation id="496742804571665842">השבתת פרופילים של eSIM</translation> <translation id="4971412780836297815">פתיחה בסיום ההורדה</translation> <translation id="4971735654804503942">הגנה מהירה יותר ואקטיבית מפני אתרים, הורדות ותוספים מסוכנים. המערכת מזהירה אותך בנוגע לחשיפה של סיסמאות. כשמצב ההגנה הזה בשימוש, נתוני גלישה נשלחים אל Google.</translation> @@ -4428,6 +4430,7 @@ <translation id="5233231016133573565">זיהוי תהליך</translation> <translation id="5233638681132016545">כרטיסייה חדשה</translation> <translation id="5233736638227740678">&הדבקה</translation> +<translation id="5233794855520048159">אודיו במונו, צלילים בזמן ההפעלה וכתוביות</translation> <translation id="5234764350956374838">סגירה</translation> <translation id="5235050375939235066">להסיר את התקנת האפליקציה?</translation> <translation id="523505283826916779">הגדרות נגישות</translation> @@ -4532,6 +4535,7 @@ <translation id="5333896723098573627">כדי להסיר אפליקציות, צריך לעבור אל 'הגדרות' > 'חנות Google Play' > 'ניהול העדפות Android' >'אפליקציות' או 'מנהל האפליקציות'. לאחר מכן מקישים על האפליקציה שרוצים להסיר את ההתקנה שלה (יכול להיות שצריך יהיה להחליק ימינה או שמאלה כדי למצוא את האפליקציה). לבסוף, מקישים על 'הסרת התקנה' או 'השבתה'.</translation> <translation id="5334142896108694079">מטמון של סקריפט</translation> <translation id="5336688142483283574">הדף הזה יוסר גם מההיסטוריה שלך ומהפעילות של <ph name="SEARCH_ENGINE" />.</translation> +<translation id="5336689872433667741">סמן ולוח מגע</translation> <translation id="5337771866151525739">הותקן על ידי צד שלישי.</translation> <translation id="5337926771328966926">השם הנוכחי של המכשיר הוא <ph name="DEVICE_NAME" /></translation> <translation id="5338338064218053691">אפשר לגלוש בפרטיות באמצעות חלון אנונימי</translation> @@ -4542,6 +4546,7 @@ <translation id="5342091991439452114">קוד האימות חייב להיות באורך <ph name="MINIMUM" /> ספרות לפחות</translation> <translation id="5344036115151554031">שחזור Linux</translation> <translation id="5344128444027639014">%<ph name="BATTERY_PERCENTAGE" /> (ימין)</translation> +<translation id="534449933710420173">תיקייה ללא שם</translation> <translation id="5345916423802287046">הפעלת האפליקציה בזמן הכניסה</translation> <translation id="5350293332385664455">כיבוי של Google Assistant</translation> <translation id="535123479159372765">הטקסט הועתק ממכשיר אחר</translation> @@ -5166,6 +5171,7 @@ <translation id="5959471481388474538">הרשת לא זמינה</translation> <translation id="595959584676692139">צריך לטעון מחדש את הדף כדי להשתמש בתוסף הזה</translation> <translation id="5963453369025043595"><ph name="NUM_HANDLES" /> (שיא של <ph name="NUM_KILOBYTES_LIVE" />)</translation> +<translation id="5963620791620013026">מקשים "דביקים", מקלדת שמופיעה במסך, הכתבה, גישה באמצעות מתג והדגשה משופרת</translation> <translation id="5964113968897211042">{COUNT,plural, =0{פתיחת כל הכתובות בחלון &חדש}=1{פתיחה בחלון &חדש}two{פתיחת כל הכתובות ({COUNT}) בחלון &חדש}many{פתיחת כל הכתובות ({COUNT}) בחלון &חדש}other{פתיחת כל הכתובות ({COUNT}) בחלון &חדש}}</translation> <translation id="5965661248935608907">הגדרה זו גם קובעת איזה דף מוצג כשלוחצים על הלחצן 'דף הבית' או מבצעים חיפוש מסרגל הכתובות.</translation> <translation id="5968022600320704045">אין תוצאות חיפוש</translation> @@ -5979,6 +5985,7 @@ <translation id="6770602306803890733">רמת אבטחה משופרת עבורך ועבור כל מי שמתחבר לאינטרנט</translation> <translation id="6771503742377376720">הוא רשות אישורים</translation> <translation id="6775163072363532304">כאן יופיעו מכשירים זמינים.</translation> +<translation id="677646486571529447">הוספת הערה</translation> <translation id="6776729248872343918">הפעלת ההתאמה המהירה</translation> <translation id="6777817260680419853">הפניה לכתובת אתר אחרת נחסמה</translation> <translation id="6778737459546443941">ההורה ששאלת עדיין לא אישר זאת</translation> @@ -6127,6 +6134,7 @@ <translation id="6900654715912436255">בחרת למחוק את מנוע החיפוש הזה. להמשיך?</translation> <translation id="6901024547292737736"><ph name="MAX_CHAR_COUNT" />/<ph name="ACTUAL_CHAR_COUNT" /></translation> <translation id="6902066522699286937">קול להשמעה מקדימה</translation> +<translation id="6902219595840841518">קליק אוטומטי, גודל סמן, צבע סמן והדגשת סמן</translation> <translation id="6902336033320348843">הקטע לא נתמך: <ph name="ERROR_LINE" /></translation> <translation id="6902837902700739466">צירוף המכשיר לדומיין</translation> <translation id="6903022061658753260">הנתונים שלך יסונכרנו בכל דפדפני Chrome שבהם הפעלת את הסנכרון עם החשבון הזה. <ph name="LINK_BEGIN" />בהגדרות של ChromeOS<ph name="LINK_END" /> ניתן לראות את אפשרויות הסנכרון של ChromeOS.</translation> @@ -6906,6 +6914,7 @@ <translation id="7681095912841365527">האתר רשאי להשתמש ב-Bluetooth</translation> <translation id="7681597159868843240">בדרך כלל, אתרים משתמשים בחיישני התנועה של המכשיר כדי לתמוך בתכונות כמו מציאות מדומה או מעקב אחר כושר</translation> <translation id="7683373461016844951">כדי להמשיך יש ללחוץ על 'אישור' ולאחר מכן ללחוץ על 'הוספת משתמש' כדי ליצור פרופיל חדש בשביל כתובת האימייל שלך ב-<ph name="DOMAIN" />.</translation> +<translation id="7683834360226457448">כלי תצוגה ללקויי ראייה</translation> <translation id="7684212569183643648">הותקן על ידי מנהל המערכת שלך</translation> <translation id="7684559058815332124">מעבר אל דף ההתחברות לפורטל החובה</translation> <translation id="7684718995427157417">כדי ליצור ולבדוק אפליקציות, יש להפעיל את ממשק הגישור של Android (ADB). הערה: לאחר ביצוע הפעולה הזו יתאפשר להתקין אפליקציות ל-Android שלא אומתו על-ידי Google. כמו כן, כדי להשבית את התכונה, יש לאפס את המכשיר להגדרות היצרן.</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb index d653157..bc3bcbe 100644 --- a/chrome/app/resources/generated_resources_ja.xtb +++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -1281,7 +1281,6 @@ <translation id="2191754378957563929">オン</translation> <translation id="2192505247865591433">取得先:</translation> <translation id="2193365732679659387">信頼の設定</translation> -<translation id="2194554416429452547">トライアル期間中、Chrome はスパムや不正行為、サイト間の共有を制限する方法を検証します。また、<ph name="ESTIMATE_INTERESTS_LINK" />して、サイトでの広告表示に使用できるようにします。興味 / 関心は設定で管理できます。</translation> <translation id="2194856509914051091">留意事項</translation> <translation id="2195331105963583686">この期限を過ぎても <ph name="DEVICE_TYPE" /> は使用できますが、ソフトウェアとセキュリティは自動更新されなくなります。</translation> <translation id="2195729137168608510">電子メールの保護</translation> @@ -3257,6 +3256,7 @@ <translation id="4077919383365622693"><ph name="SITE" /> により保存されたすべてのデータと Cookie が削除されます。</translation> <translation id="4078738236287221428">強め</translation> <translation id="4079140982534148664">拡張スペルチェックを使用</translation> +<translation id="4081203444152654304"><ph name="VISUAL_SEARCH_PROVIDER" /> で画像内を検索</translation> <translation id="4081242589061676262">ファイルをキャストできません。</translation> <translation id="408223403876103285"><ph name="WEBSITE" /> からスマートフォンに通知が送信されました。表示されている手順に沿って本人確認を行ってください。</translation> <translation id="4084682180776658562">ブックマーク</translation> @@ -3650,6 +3650,7 @@ <translation id="4476590490540813026">競技選手</translation> <translation id="4476659815936224889">このコードをスキャンするには、スマートフォンの QR スキャンアプリまたはカメラアプリを使用してください。</translation> <translation id="4477015793815781985">Ctrl キー、Alt キー、⌘ キーのいずれかが必要です</translation> +<translation id="4477379360383751882"><ph name="VISUAL_SEARCH_PROVIDER" /> で画像内を検索</translation> <translation id="4478664379124702289">リンク先を別名で保存(&K)...</translation> <translation id="4479424953165245642">キオスク アプリケーションを管理</translation> <translation id="4479639480957787382">イーサネット</translation>
diff --git a/chrome/app/resources/generated_resources_ka.xtb b/chrome/app/resources/generated_resources_ka.xtb index c8ba31f9..faff6f11 100644 --- a/chrome/app/resources/generated_resources_ka.xtb +++ b/chrome/app/resources/generated_resources_ka.xtb
@@ -1284,7 +1284,6 @@ <translation id="2191754378957563929">ჩართული</translation> <translation id="2192505247865591433">საიდან:</translation> <translation id="2193365732679659387">ნდობის პარამეტრები</translation> -<translation id="2194554416429452547">საცდელი პერიოდის განმავლობაში, Chrome ცდილობს გაარკვიოს, თუ როგორ შეიძლება სპამის, თაღლითობისა და საიტებს შორის კონტენტის გაზიარების შეზღუდვა. Chrome-ში, ასევე, არის <ph name="ESTIMATE_INTERESTS_LINK" />, რომლის გამოყენებაც საიტებს შეუძლიათ რეკლამების საჩვენებლად. თქვენი ინტერესების მართვა შეგიძლიათ პარამეტრებიდან.</translation> <translation id="2194856509914051091">გასათვალისწინებელი საკითხები</translation> <translation id="2195331105963583686"><ph name="DEVICE_TYPE" /> ჩვეულებრივად შეგიძლიათ გამოიყენოთ აღნიშნული დროის შემდეგ, თუმცა ის აღარ მიიღებს პროგრამული უზრუნველყოფისა და უსაფრთხოების ავტომატურ განახლებებს</translation> <translation id="2195729137168608510">ელფოსტის დაცვა</translation>
diff --git a/chrome/app/resources/generated_resources_kk.xtb b/chrome/app/resources/generated_resources_kk.xtb index f656a7c..c5e2f49 100644 --- a/chrome/app/resources/generated_resources_kk.xtb +++ b/chrome/app/resources/generated_resources_kk.xtb
@@ -1281,7 +1281,6 @@ <translation id="2191754378957563929">Қосулы</translation> <translation id="2192505247865591433">Қайдан:</translation> <translation id="2193365732679659387">Сенім параметрлері</translation> -<translation id="2194554416429452547">Сынақ мерзімі кезінде Chrome спамды, алаяқтықты және сайттар арасында бөлісуді шектеу жолдарын зерттейді. Сондай-ақ Chrome <ph name="ESTIMATE_INTERESTS_LINK" />, оларды сайттар сізге жарнамалар көрсету үшін пайдалана алады. Қызығушылықтарыңызды параметрлерден басқара аласыз.</translation> <translation id="2194856509914051091">Ескеретін жайттар</translation> <translation id="2195331105963583686">Одан кейін <ph name="DEVICE_TYPE" /> құрылғысын бұрынғыдай пайдалана бересіз, бірақ оған бағдарламалық құрал мен қауіпсіздік жүйесінің соңғы нұсқалары орнатылмайды.</translation> <translation id="2195729137168608510">Электрондық поштаны қорғау</translation> @@ -5280,6 +5279,7 @@ <translation id="6086846494333236931">Әкімші орнатқан</translation> <translation id="6087746524533454243">Браузер туралы бетті іздеп жатырсыз ба? Келесіге бетке өтіңіз:</translation> <translation id="6087960857463881712">Сүйкімді бет</translation> +<translation id="6088535503330933227">Chrome спамды, алаяқтықты және сайттар арасында бөлісуді шектеу жолдарын зерттеуде. Сондай-ақ Chrome <ph name="ESTIMATE_INTERESTS_LINK" />, оларды сайттар сізге жарнамалар көрсету үшін пайдалана алады. Қызығушылықтарыңызды параметрлерден басқара аласыз.</translation> <translation id="608912389580139775">Бұл бетті оқу тізіміне қосу үшін "Бетбелгі" белгішесін басыңыз.</translation> <translation id="6091761513005122595">Ортақ файл орнатылды.</translation> <translation id="6093888419484831006">Жаңартудан бас тартылуда…</translation>
diff --git a/chrome/app/resources/generated_resources_km.xtb b/chrome/app/resources/generated_resources_km.xtb index 12efbf4..149ec3c 100644 --- a/chrome/app/resources/generated_resources_km.xtb +++ b/chrome/app/resources/generated_resources_km.xtb
@@ -1296,7 +1296,6 @@ <translation id="2191754378957563929">បើក</translation> <translation id="2192505247865591433">ពី៖</translation> <translation id="2193365732679659387">ការកំណត់ការជឿទុកចិត្ត</translation> -<translation id="2194554416429452547">អំឡុងពេលការសាកល្បង Chrome កំពុងស្វែងរកវិធីដើម្បីដាក់កំហិតលើសារឥតបានការ ការក្លែងបន្លំ និងការចែករំលែករវាងគេហទំព័រ Chrome ក៏ <ph name="ESTIMATE_INTERESTS_LINK" /> ដែលគេហទំព័រអាចប្រើប្រាស់ដើម្បីបង្ហាញការផ្សាយពាណិជ្ជកម្មដល់អ្នកផងដែរ។ អ្នកអាចគ្រប់គ្រងចំណាប់អារម្មណ៍របស់អ្នកនៅក្នុងការកំណត់។</translation> <translation id="2194856509914051091">ចំណុចដែលត្រូវពិចារណា</translation> <translation id="2195331105963583686">អ្នកនឹងនៅតែអាចប្រើ <ph name="DEVICE_TYPE" /> នេះបានដដែល បន្ទាប់ពីពេលនោះ ប៉ុន្តែវានឹងលែងទទួលបានកំណែកម្មវិធី និងសុវត្ថិភាពថ្មីដោយស្វ័យប្រវត្តិហើយ</translation> <translation id="2195729137168608510">ការការពារអ៊ីម៉ែល</translation> @@ -3281,6 +3280,7 @@ <translation id="4077919383365622693">ទិន្នន័យ និងខូគីទាំងអស់ដែល <ph name="SITE" /> បានរក្សាទុកនឹងត្រូវសម្អាត។</translation> <translation id="4078738236287221428">ដោយបង្ខំ</translation> <translation id="4079140982534148664">ប្រើការពិនិត្យអក្ខរាវិរុទ្ធដែលបានកែលម្អ</translation> +<translation id="4081203444152654304">ស្វែងរកខាងក្នុងរូបភាពដោយប្រើ <ph name="VISUAL_SEARCH_PROVIDER" /></translation> <translation id="4081242589061676262">មិនអាចភ្ជាប់ឯកសារបានទេ។</translation> <translation id="408223403876103285"><ph name="WEBSITE" /> បានផ្ញើការជូនដំណឹងទៅទូរសព្ទរបស់អ្នក។ ដើម្បីបញ្ជាក់ថាជាអ្នក សូមអនុវត្តតាមជំហាននៅទីនោះ។</translation> <translation id="4084682180776658562">ចំណាំ</translation> @@ -3676,6 +3676,7 @@ <translation id="4476590490540813026">អត្តពលិក</translation> <translation id="4476659815936224889">ដើម្បីស្កេនកូដនេះ អ្នកអាចប្រើកម្មវិធីស្កេនកូដ QR នៅលើទូរសព្ទរបស់អ្នក ឬនៅលើកម្មវិធីកាមេរ៉ាមួយចំនួន។</translation> <translation id="4477015793815781985">រួមបញ្ចូល Ctrl, Alt ឬ ⌘</translation> +<translation id="4477379360383751882">ស្វែងរកខាងក្នុងរូបភាពដោយប្រើ <ph name="VISUAL_SEARCH_PROVIDER" /></translation> <translation id="4478664379124702289">រក្សាតំណជា...</translation> <translation id="4479424953165245642">គ្រប់គ្រងកម្មវិធីបញ្ជរ</translation> <translation id="4479639480957787382">ខ្សែអ៊ីនធឺណិត</translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb index 2fc97486..4a03323 100644 --- a/chrome/app/resources/generated_resources_kn.xtb +++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -1289,7 +1289,6 @@ <translation id="2191754378957563929">ಆನ್</translation> <translation id="2192505247865591433">ಇವರಿಂದ:</translation> <translation id="2193365732679659387">ವಿಶ್ವಾಸಾರ್ಹ ಸೆಟ್ಟಿಂಗ್ಗಳು</translation> -<translation id="2194554416429452547">ಟ್ರಯಲ್ಗಳ ಅವಧಿಯಲ್ಲಿ, ಸ್ಪ್ಯಾಮ್, ವಂಚನೆ ಮತ್ತು ಸೈಟ್ಗಳ ನಡುವೆ ಹಂಚಿಕೊಳ್ಳುವಿಕೆಯನ್ನು ಮಿತಿಗೊಳಿಸುವ ವಿದಾನಗಳನ್ನು Chrome ಅನ್ವೇಷಿಸುತ್ತಿದೆ. ನಿಮಗೆ ಜಾಹೀರಾತುಗಳನ್ನು ತೋರಿಸಲು ಸೈಟ್ಗಳು ಬಳಸಬಹುದಾದ Chrome ಸಹ <ph name="ESTIMATE_INTERESTS_LINK" />. ಸೆಟ್ಟಿಂಗ್ಗಳಲ್ಲಿ ನಿಮ್ಮ ಆಸಕ್ತಿಗಳನ್ನು ನೀವು ನಿರ್ವಹಿಸಬಹುದು.</translation> <translation id="2194856509914051091">ಪರಿಗಣಿಸಬೇಕಾದ ಸಂಗತಿಗಳು</translation> <translation id="2195331105963583686">ಆ ಸಮಯದ ಬಳಿಕ ನೀವು ಈಗಲೂ ಈ <ph name="DEVICE_TYPE" /> ಬಳಸಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ, ಆದರೆ ಅದು ಸ್ವಯಂಚಾಲಿತ ಸಾಫ್ಟ್ವೇರ್ ಮತ್ತು ಭದ್ರತೆ ಅಪ್ಡೇಟ್ಗಳನ್ನು ಇನ್ನು ಮುಂದೆ ಸ್ವೀಕರಿಸುವುದಿಲ್ಲ</translation> <translation id="2195729137168608510">ಇಮೇಲ್ ಭದ್ರತೆ</translation> @@ -4115,6 +4114,7 @@ <translation id="4900392736118574277">ನಿಮ್ಮ ಆರಂಭಿಕ ಪುಟವನ್ನು <ph name="URL" /> ಗೆ ಬದಲಾಯಿಸಲಾಗಿದೆ.</translation> <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz - ಇಂಟರ್ಲೇಸ್ ಆಗಿದೆ</translation> <translation id="4900652253009739885">“ಆಯ್ಕೆಮಾಡಿ” ಎಂಬುದಕ್ಕೆ ನಿಯೋಜಿಸಿದ ಏಕೈಕ ಸ್ವಿಚ್ ಅನ್ನು ತೆಗೆದುಹಾಕಲು ಸಾಧ್ಯವಿಲ್ಲ. <ph name="RESPONSE" /> ಗೆ ಯಾವುದಾದರೂ ಕೀಯನ್ನು ಒತ್ತಿ.</translation> +<translation id="4901154724271753917">ವಿಸ್ತರಿಸುವುದನ್ನು ಇತ್ತೀಚೆಗೆ ಮುಚ್ಚಲಾಗಿದೆ</translation> <translation id="4901309472892185668"><ph name="EXPERIMENT_NAME" /> ಪ್ರಯೋಗಕ್ಕಾಗಿ, ಪ್ರಯೋಗದ ಸ್ಥಿತಿಯನ್ನು ಆಯ್ಕೆಮಾಡಿ.</translation> <translation id="49027928311173603">ಸರ್ವರ್ನಿಂದ ಡೌನ್ಲೋಡ್ ಮಾಡಲಾದ ನೀತಿಯು ಅಮಾನ್ಯವಾಗಿದೆ: <ph name="VALIDATION_ERROR" />.</translation> <translation id="4906490889887219338">ನೆಟ್ವರ್ಕ್ ಫೈಲ್ ಹಂಚಿಕೆಗಳನ್ನು ಸೆಟಪ್ ಮಾಡಿ ಅಥವಾ ನಿರ್ವಹಿಸಿ. <ph name="LINK_BEGIN" />ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="LINK_END" /></translation> @@ -5296,6 +5296,7 @@ <translation id="6086846494333236931">ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಸ್ಥಾಪಿಸಿದ್ದಾರೆ</translation> <translation id="6087746524533454243">ಬ್ರೌಸರ್ ಕುರಿತ ಪುಟವನ್ನು ಹುಡುಕುತ್ತಿರುವಿರಾ? ಭೇಟಿ ನೀಡಿ</translation> <translation id="6087960857463881712">ಅದ್ಭುತ ಮುಖ</translation> +<translation id="6088535503330933227">ಜಾಹೀರಾತು ಸ್ಪ್ಯಾಮ್, ವಂಚನೆ ಹಾಗೂ ಸೈಟ್ಗಳ ನಡುವೆ ಹಂಚಿಕೊಳ್ಳುವಿಕೆಯನ್ನು ಮಿತಿಗೊಳಿಸುವ ಮಾರ್ಗಗಳನ್ನು Chrome ಎಕ್ಸ್ಪ್ಲೋರ್ ಮಾಡುತ್ತಿದೆ. ನಿಮಗೆ ಜಾಹೀರಾತುಗಳನ್ನು ತೋರಿಸಲು ಸೈಟ್ಗಳು ಬಳಸಬಹುದಾದ <ph name="ESTIMATE_INTERESTS_LINK" /> ಸಹ Chrome ಅಂದಾಜು ಮಾಡುತ್ತದೆ. ಸೆಟ್ಟಿಂಗ್ಗಳಲ್ಲಿ ನಿಮ್ಮ ಆಸಕ್ತಿಗಳನ್ನು ನೀವು ನಿರ್ವಹಿಸಬಹುದು.</translation> <translation id="608912389580139775">ನಿಮ್ಮ ಓದುವ ಪಟ್ಟಿಗೆ ಈ ಪುಟವನ್ನು ಸೇರಿಸಲು, ಬುಕ್ಮಾರ್ಕ್ ಐಕಾನ್ ಕ್ಲಿಕ್ ಮಾಡಿ</translation> <translation id="6091761513005122595">ಹಂಚಿಕೆ ಯಶಸ್ವಿಯಾಗಿ ಅಳವಡಿಸಲಾಗಿದೆ.</translation> <translation id="6093888419484831006">ಅಪ್ಡೇಟ್ ಅನ್ನು ರದ್ದುಗೊಳಿಸಲಾಗುತ್ತಿದೆ...</translation> @@ -7007,6 +7008,7 @@ <translation id="7768526219335215384"><ph name="FOLDERNAME" /> ನಲ್ಲಿ ಫೈಲ್ಗಳನ್ನು ವೀಕ್ಷಿಸಲು <ph name="ORIGIN" /> ಗೆ ಸಾಧ್ಯವಾಗುತ್ತದೆ</translation> <translation id="7768770796815395237">ಬದಲಿಸಿ</translation> <translation id="7768784765476638775">ಆಯ್ಕೆಮಾಡಿ ಮತ್ತು ಆಲಿಸಿ</translation> +<translation id="7769748505895274502">ಸಂಕೋಚನೆಯನ್ನು ಇತ್ತೀಚೆಗೆ ಮುಚ್ಚಲಾಗಿದೆ</translation> <translation id="7770406201819593386">ChromeOS Flex ಡಯಾಗ್ನಾಸ್ಟಿಕ್ಸ್ ಪರೀಕ್ಷೆಗಳನ್ನು ರನ್ ಮಾಡಿ.</translation> <translation id="7770450735129978837">ಬಲ ಮೌಸ್ ಕ್ಲಿಕ್</translation> <translation id="7770612696274572992">ಇತರ ಸಾಧನದಿಂದ ಚಿತ್ರವನ್ನು ನಕಲಿಸಲಾಗಿದೆ</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb index c127da9..ec9c51d 100644 --- a/chrome/app/resources/generated_resources_ko.xtb +++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -1296,7 +1296,6 @@ <translation id="2191754378957563929">사용</translation> <translation id="2192505247865591433">웹 브라우저</translation> <translation id="2193365732679659387">신뢰 설정</translation> -<translation id="2194554416429452547">무료 체험 기간 동안 Chrome에서는 스팸, 사기 및 사이트 간 공유를 제한하는 방법을 탐색합니다. 또한 Chrome의 <ph name="ESTIMATE_INTERESTS_LINK" />을 기반으로 사이트가 광고를 표시할 수 있습니다. 설정에서 관심분야를 관리할 수 있습니다.</translation> <translation id="2194856509914051091">고려사항</translation> <translation id="2195331105963583686">이후로도 이 <ph name="DEVICE_TYPE" /> 기기를 계속 사용할 수는 있지만, 소프트웨어 및 보안 업데이트를 자동으로 받을 수 없게 됩니다.</translation> <translation id="2195729137168608510">이메일 보호</translation> @@ -3282,6 +3281,7 @@ <translation id="4077919383365622693"><ph name="SITE" />에서 저장한 모든 데이터와 쿠키가 삭제됩니다.</translation> <translation id="4078738236287221428">강한 규칙</translation> <translation id="4079140982534148664">향상된 맞춤법 검사 기능 사용</translation> +<translation id="4081203444152654304"><ph name="VISUAL_SEARCH_PROVIDER" />로 이미지 내 검색</translation> <translation id="4081242589061676262">파일을 전송할 수 없음</translation> <translation id="408223403876103285"><ph name="WEBSITE" />에서 휴대전화로 알림을 보냈습니다. 본인 인증을 하려면 알림의 단계를 따라주세요.</translation> <translation id="4084682180776658562">북마크</translation> @@ -3675,6 +3675,7 @@ <translation id="4476590490540813026">운동선수</translation> <translation id="4476659815936224889">스마트폰의 QR 스캐너 앱 또는 일부 카메라 앱을 사용하여 이 코드를 스캔할 수 있습니다.</translation> <translation id="4477015793815781985">Ctrl, Alt 또는 ⌘ 키를 포함하세요</translation> +<translation id="4477379360383751882"><ph name="VISUAL_SEARCH_PROVIDER" />로 이미지 내 검색</translation> <translation id="4478664379124702289">다른 이름으로 링크 저장(&K)...</translation> <translation id="4479424953165245642">키오스크 애플리케이션 관리</translation> <translation id="4479639480957787382">이더넷</translation>
diff --git a/chrome/app/resources/generated_resources_ky.xtb b/chrome/app/resources/generated_resources_ky.xtb index 1455c09f..8c2de21 100644 --- a/chrome/app/resources/generated_resources_ky.xtb +++ b/chrome/app/resources/generated_resources_ky.xtb
@@ -1296,7 +1296,6 @@ <translation id="2191754378957563929">Күйүк</translation> <translation id="2192505247865591433">Кимден:</translation> <translation id="2193365732679659387">Ишеним жөндөөлөрү</translation> -<translation id="2194554416429452547">Сыноо версияларында Chrome cпам, шылуундук жана сайттардын арасында маалымат бөлүшүү аракеттерин чектөө жолдорун изилдейт. Ошондой эле, Chrome сайттар жарнамаларды көрсөтүү үчүн колдоно турган <ph name="ESTIMATE_INTERESTS_LINK" />. Кызыккан нерселериңизди параметрлерден башкара аласыз.</translation> <translation id="2194856509914051091">Эске ала турган нерселер</translation> <translation id="2195331105963583686">Андан кийин деле <ph name="DEVICE_TYPE" /> түзмөгүн колдоно бересиз, бирок андагы программа менен коопсуздук жаңыртуулары автоматтык түрдө алынбайт</translation> <translation id="2195729137168608510">Электрондук почтаны коргоо</translation> @@ -3281,6 +3280,7 @@ <translation id="4077919383365622693"><ph name="SITE" /> сайты сактаган бардык маалымат менен cookie файлдары өчүрүлөт.</translation> <translation id="4078738236287221428">Агрессивдүү</translation> <translation id="4079140982534148664">Жакшыртылган орфографиялык текшерүү функциясын колдонуу</translation> +<translation id="4081203444152654304"><ph name="VISUAL_SEARCH_PROVIDER" /> аркылуу сүрөттүн ичинен издөө</translation> <translation id="4081242589061676262">Файлды тышкы экранга чыгаруу мүмкүн эмес.</translation> <translation id="408223403876103285"><ph name="WEBSITE" /> телефонуңузга билдирме жөнөттү. Сиз экениңизди ырастоо үчүн ал жердеги кадамдарды аткарыңыз.</translation> <translation id="4084682180776658562">Кыстарма</translation> @@ -3676,6 +3676,7 @@ <translation id="4476590490540813026">Спортчу айым</translation> <translation id="4476659815936224889">Бул кодду телефонуңуздагы QR сканери же камера колдонмолорунун бирөө менен скандаңыз.</translation> <translation id="4477015793815781985">Ctrl, Alt же ⌘ камтылсын</translation> +<translation id="4477379360383751882"><ph name="VISUAL_SEARCH_PROVIDER" /> аркылуу сүрөттүн ичинен издөө</translation> <translation id="4478664379124702289">Шил&темени төмөнкүдөй сактоо…</translation> <translation id="4479424953165245642">Киоск колдонмолорун башкаруу</translation> <translation id="4479639480957787382">Ethernet</translation>
diff --git a/chrome/app/resources/generated_resources_lo.xtb b/chrome/app/resources/generated_resources_lo.xtb index 6bbcb14..ad7eb44 100644 --- a/chrome/app/resources/generated_resources_lo.xtb +++ b/chrome/app/resources/generated_resources_lo.xtb
@@ -1294,7 +1294,6 @@ <translation id="2191754378957563929">ເປີດ</translation> <translation id="2192505247865591433">ຈາກ:</translation> <translation id="2193365732679659387">ການຕັ້ງຄ່າການເຊື່ອຖື</translation> -<translation id="2194554416429452547">ໃນລະຫວ່າງການທົດລອງໃຊ້, Chrome ກຳລັງສຳຫຼວດວິທີຈຳກັດສະແປມ, ການສໍ້ໂກງ ແລະ ການແບ່ງປັນລະຫວ່າງເວັບໄຊ. ນອກຈາກນັ້ນ, Chrome ຍັງ <ph name="ESTIMATE_INTERESTS_LINK" /> ນຳ ເຊິ່ງເວັບໄຊສາມາດໃຊ້ເພື່ອສະແດງໂຄສະນາໃຫ້ທ່ານເຫັນໄດ້. ທ່ານສາມາດຈັດການຄວາມສົນໃຈຂອງທ່ານໄດ້ໃນການຕັ້ງຄ່າ.</translation> <translation id="2194856509914051091">ສິ່ງທີ່ຕ້ອງພິຈາລະນາ</translation> <translation id="2195331105963583686">ທ່ານຈະຍັງສາມາດໃຊ້ <ph name="DEVICE_TYPE" /> ນີ້ໄດ້ຄືເກົ່າຫຼັງຈາກເວລານັ້ນ, ແຕ່ມັນຈະບໍ່ໄດ້ຮັບການອັບເດດຊອບແວ ແລະ ຄວາມປອດໄພໂດຍອັດຕະໂນມັດ</translation> <translation id="2195729137168608510">ການປົກປ້ອງອີເມວ</translation> @@ -4121,6 +4120,7 @@ <translation id="4900392736118574277">ໜ້າເລີ່ມຕົ້ນຂອງທ່ານໄດ້ຖືກປ່ຽນເປັນ <ph name="URL" /> ແລ້ວ.</translation> <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz - ອິນເຕີເລດ</translation> <translation id="4900652253009739885">ບໍ່ສາມາດລຶບສະວິດທີ່ມອບໝາຍໃຫ້ “ເລືອກ” ຢ່າງດຽວອອກໄດ້. ກະລຸນາກົດປຸ່ມໃດກໍໄດ້ເພື່ອ <ph name="RESPONSE" />.</translation> +<translation id="4901154724271753917">ຂະຫຍາຍແຖບທີ່ປິດໄປຫຼ້າສຸດ</translation> <translation id="4901309472892185668">ເລືອກສະຖານະການທົດລອງສຳລັບການທົດລອງ <ph name="EXPERIMENT_NAME" />.</translation> <translation id="49027928311173603">ນະໂຍບາຍທີ່ດາວໂຫຼດຈາກເຊີບເວີໃຊ້ບໍ່ໄດ້: <ph name="VALIDATION_ERROR" />.</translation> <translation id="4906490889887219338">ຕັ້ງຄ່າ ຫຼື ຈັດການການແບ່ງປັນໄຟລ໌ຜ່ານເຄືອຂ່າຍ. <ph name="LINK_BEGIN" />ສຶກສາເພີ່ມເຕີມ<ph name="LINK_END" /></translation> @@ -7008,6 +7008,7 @@ <translation id="7768526219335215384"><ph name="ORIGIN" /> ຈະສາມາດເບິ່ງໄຟລ໌ໃນ <ph name="FOLDERNAME" /> ໄດ້</translation> <translation id="7768770796815395237">ປ່ຽນ</translation> <translation id="7768784765476638775">ເລືອກເພື່ອເວົ້າ</translation> +<translation id="7769748505895274502">ຫຍໍ້ແຖບທີ່ປິດໄປຫຼ້າສຸດລົງ</translation> <translation id="7770406201819593386">ເອີ້ນໃຊ້ການທົດສອບການວິນິໄສ ChromeOS Flex.</translation> <translation id="7770450735129978837">ຄລິກເມົ້າຂວາ</translation> <translation id="7770612696274572992">ສຳເນົາຮູບຈາກອຸປະກອນອື່ນແລ້ວ</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb index cdec1de..5a1b4ee 100644 --- a/chrome/app/resources/generated_resources_lt.xtb +++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -1299,7 +1299,6 @@ <translation id="2191754378957563929">Įjungta</translation> <translation id="2192505247865591433">Iš:</translation> <translation id="2193365732679659387">Patikimumo nustatymai</translation> -<translation id="2194554416429452547">Per bandomuosius laikotarpius „Chrome“ ieško būdų, kaip apriboti šlamštą, apgaules ir bendrinimą tarp svetainių. „Chrome“ taip pat <ph name="ESTIMATE_INTERESTS_LINK" />, kuriuos svetainės gali naudoti skelbimams rodyti. Galite tvarkyti savo pomėgius nustatymuose.</translation> <translation id="2194856509914051091">Į ką reikėtų atsižvelgti</translation> <translation id="2195331105963583686">Po to vis tiek galėsite naudoti „<ph name="DEVICE_TYPE" />“, bet nebebus teikiami automatiniai programinės įrangos ir saugos naujiniai</translation> <translation id="2195729137168608510">El. pašto apsauga</translation> @@ -3284,6 +3283,7 @@ <translation id="4077919383365622693">Visi <ph name="SITE" /> saugomi duomenys ir slapukai bus išvalyti.</translation> <translation id="4078738236287221428">Griežtas</translation> <translation id="4079140982534148664">Naudokite patobulintą rašybos tikrinimą</translation> +<translation id="4081203444152654304">Ieškoti vaizde naudojant „<ph name="VISUAL_SEARCH_PROVIDER" />“</translation> <translation id="4081242589061676262">Nepavyko perduoti failo.</translation> <translation id="408223403876103285"><ph name="WEBSITE" /> išsiuntė pranešimą į jūsų telefoną. Atlikite toliau nurodytus veiksmus savo tapatybei patvirtinti.</translation> <translation id="4084682180776658562">Žymė</translation> @@ -3679,6 +3679,7 @@ <translation id="4476590490540813026">Sportininkas</translation> <translation id="4476659815936224889">Jei norite nuskaityti šį kodą, galite naudoti QR skaitytuvo programą telefone arba tam tikras fotoaparato programas.</translation> <translation id="4477015793815781985">Naudokite „Ctrl“, „Alt“ arba ⌘</translation> +<translation id="4477379360383751882">Ieškoti vaizde naudojant „<ph name="VISUAL_SEARCH_PROVIDER" />“</translation> <translation id="4478664379124702289">Išsaugoti nuoro&dą kaip...</translation> <translation id="4479424953165245642">Tvarkyti viešojo terminalo programas</translation> <translation id="4479639480957787382">Eternetas</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb index f37db63..7b80592 100644 --- a/chrome/app/resources/generated_resources_lv.xtb +++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -1286,7 +1286,6 @@ <translation id="2191754378957563929">Iesl.</translation> <translation id="2192505247865591433">No:</translation> <translation id="2193365732679659387">Uzticamības iestatījumi</translation> -<translation id="2194554416429452547">Izmēģinājumu laikā Chrome pēta veidus, kā ierobežot nevēlamu saturu, krāpšanu un kopīgošanu starp vietnēm. Chrome arī <ph name="ESTIMATE_INTERESTS_LINK" />, ko vietnes var izmantot, lai rādītu jums reklāmas. Intereses varat pārvaldīt iestatījumos.</translation> <translation id="2194856509914051091">Svarīgi apsvērumi</translation> <translation id="2195331105963583686">Jūs joprojām varēsiet izmantot šo ierīci <ph name="DEVICE_TYPE" /> pēc noteiktā laika, taču vairs nesaņemsiet automātiskus programmatūras un drošības atjauninājumus.</translation> <translation id="2195729137168608510">E-pasta aizsardzība</translation> @@ -3268,6 +3267,7 @@ <translation id="4077919383365622693">Tiks notīrīti visi vietnes <ph name="SITE" /> saglabātie dati un sīkfaili.</translation> <translation id="4078738236287221428">Agresīvi</translation> <translation id="4079140982534148664">Izmantot uzlaboto pareizrakstības pārbaudi</translation> +<translation id="4081203444152654304">Meklēt attēlā, izmantojot <ph name="VISUAL_SEARCH_PROVIDER" /></translation> <translation id="4081242589061676262">Faila apraides kļūme</translation> <translation id="408223403876103285"><ph name="WEBSITE" /> nosūtīja paziņojumu uz jūsu tālruni. Veiciet paziņojumā norādītās darbības, lai apstiprinātu savu identitāti.</translation> <translation id="4084682180776658562">Grāmatzīme</translation> @@ -3663,6 +3663,7 @@ <translation id="4476590490540813026">Sportiste</translation> <translation id="4476659815936224889">Lai skenētu šo kodu, varat izmantot kvadrātkodu skenēšanas lietotni tālrunī vai noteiktas kameras lietotnes.</translation> <translation id="4477015793815781985">Iekļaujiet taustiņu Ctrl, Alt vai ⌘</translation> +<translation id="4477379360383751882">Meklēt attēlā, izmantojot <ph name="VISUAL_SEARCH_PROVIDER" /></translation> <translation id="4478664379124702289">Saglabāt saiti &kā...</translation> <translation id="4479424953165245642">Pārvaldīt kioska lietojumprogrammas</translation> <translation id="4479639480957787382">tīkls Ethernet</translation>
diff --git a/chrome/app/resources/generated_resources_mk.xtb b/chrome/app/resources/generated_resources_mk.xtb index b1923b1..a312b7b5 100644 --- a/chrome/app/resources/generated_resources_mk.xtb +++ b/chrome/app/resources/generated_resources_mk.xtb
@@ -1297,7 +1297,6 @@ <translation id="2191754378957563929">Вклучен</translation> <translation id="2192505247865591433">Од:</translation> <translation id="2193365732679659387">Поставки на довербата</translation> -<translation id="2194554416429452547">За време на пробните периоди, Chrome истражува начини за ограничување на спамот, измамите и разменувањето податоци помеѓу сајтовите. Chrome исто така <ph name="ESTIMATE_INTERESTS_LINK" /> што сајтовите може да ги користат за да ви прикажуваат реклами. Може да управувате со интересите во поставките.</translation> <translation id="2194856509914051091">Нешта што треба да се земат предвид</translation> <translation id="2195331105963583686">Сѐ уште ќе може да го користите овој <ph name="DEVICE_TYPE" /> после тој период, но веќе нема да добива автоматски софтверски и безбедносни ажурирања</translation> <translation id="2195729137168608510">Заштита на е-пошта</translation> @@ -5934,6 +5933,7 @@ <translation id="6709133671862442373">Вести</translation> <translation id="6709357832553498500">Поврзете се повторно користејќи <ph name="EXTENSIONNAME" /></translation> <translation id="6710213216561001401">Претходно</translation> +<translation id="6710394144992407503">Проверувај за правописни грешки кога пишувам текст на веб-страниците</translation> <translation id="6711146141291425900">Поврзете сметка на <ph name="WEB_DRIVE" /> за преземања</translation> <translation id="6712943853047024245">Веќе зачувавте лозинка со ова корисничко име за <ph name="WEBSITE" /></translation> <translation id="6713233729292711163">Додајте работен профил</translation> @@ -6555,6 +6555,7 @@ <translation id="7340757554212515731">Автоматски испраќа извештаи за падовите, како и дијагностички податоци и податоци за користењето во Google</translation> <translation id="7341834142292923918">Сака пристап до сајтов</translation> <translation id="7343372807593926528">Опишете го проблемот пред да испратите повратни информации.</translation> +<translation id="7344585835349671209">Управувајте со сертификатите за HTTPS/SSL на уредот</translation> <translation id="7345706641791090287">Потврдете ја лозинката</translation> <translation id="7346909386216857016">Добро, сфатив</translation> <translation id="7347452120014970266">Ова ќе ги избрише сите податоци и колачиња складирани од сајтот <ph name="ORIGIN_NAME" /> и од неговите инсталирани апликации</translation> @@ -6684,6 +6685,7 @@ <translation id="7460045493116006516">Темата што ви е инсталирана</translation> <translation id="7461924472993315131">Закачи</translation> <translation id="746216226901520237">Следниот пат, телефонот ќе го отклучи вашиот <ph name="DEVICE_TYPE" />. Smart Lock може да се исклучи во „Поставки“.</translation> +<translation id="7464153996453281700">Компонентата веќе е ажурирана</translation> <translation id="7464637891177137294">Зачувајте ја во вашата сметка на Google, <ph name="ACCOUNT" /></translation> <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{# отворена картичка, притиснете за да префрлите на лента за картички}one{# отворена картичка, притиснете за да префрлите на лента за картички}other{# отворени картички, притиснете за да префрлите на лента за картички}}</translation> <translation id="7465635034594602553">Нешто не е во ред. Почекајте неколку минути и повторно извршете го <ph name="APP_NAME" />.</translation> @@ -7193,6 +7195,7 @@ <translation id="793531125873261495">Грешка при преземањето на виртуелната машина. Обидете се повторно.</translation> <translation id="7935451262452051102"><ph name="PERCENT" />% завршено</translation> <translation id="7939062555109487992">Напредни опции</translation> +<translation id="7939328347457537652">Управувајте со сертификатите на уредот</translation> <translation id="7939412583708276221">Сепак задржи</translation> <translation id="7942349550061667556">Црвена</translation> <translation id="7943368935008348579">Преземи во PDF-формат</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb index 91e3cec..29d92240 100644 --- a/chrome/app/resources/generated_resources_ml.xtb +++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -1283,7 +1283,6 @@ <translation id="2191754378957563929">ഓണാണ്</translation> <translation id="2192505247865591433">പ്രേഷിതാവ്:</translation> <translation id="2193365732679659387">വിശ്വസ്ഥത ക്രമീകരണം</translation> -<translation id="2194554416429452547">ട്രയലുകൾ നടക്കുമ്പോൾ, സ്പാം, വഞ്ചന, സൈറ്റുകൾക്കിടയിൽ പങ്കിടൽ എന്നിവ പരിമിതപ്പെടുത്താനുള്ള വഴികൾ കണ്ടെത്താൻ Chrome ശ്രമിക്കുന്നു. Chrome, നിങ്ങൾക്ക് പരസ്യങ്ങൾ കാണിക്കാൻ സൈറ്റുകൾക്ക് ഉപയോഗിക്കാനാകുന്ന <ph name="ESTIMATE_INTERESTS_LINK" />. ക്രമീകരണത്തിൽ നിങ്ങളുടെ താൽപ്പര്യങ്ങൾ മാനേജ് ചെയ്യാം.</translation> <translation id="2194856509914051091">പരിഗണിക്കേണ്ട കാര്യങ്ങൾ</translation> <translation id="2195331105963583686">ആ സമയത്തിന് ശേഷവും നിങ്ങൾക്ക് <ph name="DEVICE_TYPE" /> ഉപയോഗിക്കാനാവും, എന്നാൽ തുടർന്നങ്ങോട്ട് സ്വയമേവയുള്ള സോഫ്റ്റ്വെയർ, സുരക്ഷാ അപ്ഡേറ്റുകൾ ലഭിക്കില്ല</translation> <translation id="2195729137168608510">ഇമെയില് പരിരക്ഷണം</translation> @@ -4104,6 +4103,7 @@ <translation id="4900392736118574277">നിങ്ങളുടെ ആരംഭ പേജിനെ <ph name="URL" /> എന്നതിലേക്ക് മാറ്റിയിരിക്കുന്നു.</translation> <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz - മിശ്രമാക്കിയത്</translation> <translation id="4900652253009739885">“തിരഞ്ഞെടുക്കുക” പ്രവർത്തനത്തിന് അസൈൻ ചെയ്തിട്ടുള്ള ഏക സ്വിച്ച് നീക്കം ചെയ്യാനാകില്ല. <ph name="RESPONSE" /> എന്നത് ചെയ്യാൻ ഏതെങ്കിലും കീ അമർത്തുക.</translation> +<translation id="4901154724271753917">അടുത്തിടെ അടച്ചവ വികസിപ്പിക്കുക</translation> <translation id="4901309472892185668"><ph name="EXPERIMENT_NAME" /> പരീക്ഷണത്തിന്റെ പരീക്ഷണ നില തിരഞ്ഞെടുക്കുക.</translation> <translation id="49027928311173603">സെർവറിൽ നിന്നും ഡൗൺലോഡ് ചെയ്ത നയം അസാധുവാണ്: <ph name="VALIDATION_ERROR" />.</translation> <translation id="4906490889887219338">നെറ്റ്വർക്ക് ഫയൽ പങ്കിടലുകൾ സജ്ജീകരിക്കുക അല്ലെങ്കിൽ മാനേജ് ചെയ്യുക. <ph name="LINK_BEGIN" />കൂടുതലറിയുക<ph name="LINK_END" /></translation> @@ -6994,6 +6994,7 @@ <translation id="7768526219335215384"><ph name="ORIGIN" /> എന്നതിന് <ph name="FOLDERNAME" /> എന്ന ഫോൾഡറിലെ ഫയലുകൾ കാണാനാകും</translation> <translation id="7768770796815395237">മാറ്റുക</translation> <translation id="7768784765476638775">വായിച്ചുകേൾക്കാൻ തിരഞ്ഞെടുക്കുക</translation> +<translation id="7769748505895274502">അടുത്തിടെ അടച്ചവ ചുരുക്കുക</translation> <translation id="7770406201819593386">ChromeOS Flex പ്രശ്നനിർണ്ണയ ടെസ്റ്റുകൾ റൺ ചെയ്യുക.</translation> <translation id="7770450735129978837">വലത് മൗസ് ക്ലിക്ക്</translation> <translation id="7770612696274572992">മറ്റൊരു ഉപകരണത്തിൽ നിന്ന് പകർത്തിയ ചിത്രം</translation>
diff --git a/chrome/app/resources/generated_resources_mn.xtb b/chrome/app/resources/generated_resources_mn.xtb index a81eeae7..0706c2fb 100644 --- a/chrome/app/resources/generated_resources_mn.xtb +++ b/chrome/app/resources/generated_resources_mn.xtb
@@ -1292,7 +1292,6 @@ <translation id="2191754378957563929">Асаалттай</translation> <translation id="2192505247865591433">Хэнээс:</translation> <translation id="2193365732679659387">Итгэмжлэх тохиргоо</translation> -<translation id="2194554416429452547">Туршилтын хугацааны үеэр Chrome спам, залилан болон сайтууд хооронд хуваалцахыг хязгаарлах аргуудыг судалж байна. Chrome мөн сайтуудын танд зар харуулахын тулд ашиглаж болох <ph name="ESTIMATE_INTERESTS_LINK" />. Та сонирхлуудаа тохиргоо хэсэгт удирдах боломжтой.</translation> <translation id="2194856509914051091">Анхаарч үзэх зүйлс</translation> <translation id="2195331105963583686">Та энэ <ph name="DEVICE_TYPE" />-г ийм хугацааны дараа ашиглах боломжтой хэвээр байх боловч энэ нь программ хангамж болон аюулгүй байдлын автомат шинэчлэлтийг авах боломжгүй байна.</translation> <translation id="2195729137168608510">И-мэйл хамгаалалт</translation> @@ -5926,6 +5925,7 @@ <translation id="6709133671862442373">Мэдээ</translation> <translation id="6709357832553498500"><ph name="EXTENSIONNAME" />-ыг ашиглан холбогдоно уу</translation> <translation id="6710213216561001401">Өмнөх</translation> +<translation id="6710394144992407503">Вэб хуудсан дээр текст бичихдээ зөв бичгийн алдаа байгаа эсэхийг шалгана уу</translation> <translation id="6711146141291425900">Таталтуудад <ph name="WEB_DRIVE" /> бүртгэл холбоно уу</translation> <translation id="6712943853047024245">Та аль хэдийн <ph name="WEBSITE" />-д энэ хэрэглэгчийн нэрээр нууц үг хадгалсан байна</translation> <translation id="6713233729292711163">Ажлын профайл нэмэх</translation> @@ -6547,6 +6547,7 @@ <translation id="7340757554212515731">Гэмтлийн тайлан болон оношилгоо, ашиглалтын өгөгдлийг Google-д автоматаар илгээнэ</translation> <translation id="7341834142292923918">Энэ сайтад хандахыг хүсэж байна</translation> <translation id="7343372807593926528">Санал хүсэлтийг илгээхийн өмнө асуудлыг тайлбарлана уу.</translation> +<translation id="7344585835349671209">Өөрийн төхөөрөмж дээрх HTTPS/SSL сертификатуудыг удирдаарай</translation> <translation id="7345706641791090287">Нууц үгээ баталгаажуулна уу</translation> <translation id="7346909386216857016">OK, ойлголоо</translation> <translation id="7347452120014970266">Энэ нь <ph name="ORIGIN_NAME" /> болон үүний суулгасан аппуудын хадгалсан бүх өгөгдөл, күүкийг арилгана</translation> @@ -6676,6 +6677,7 @@ <translation id="7460045493116006516">Таны суулгасан одоогийн загвар</translation> <translation id="7461924472993315131">Pin</translation> <translation id="746216226901520237">Дараагийн удаа таны утас таны <ph name="DEVICE_TYPE" />-н түгжээг тайлна. Та Smart Lock-г Тохиргоонд унтрааж болно.</translation> +<translation id="7464153996453281700">Бүрэлдэхүүн хэсэг нь аль хэдийн шинэчлэгдсэн</translation> <translation id="7464637891177137294">Үүнийг <ph name="ACCOUNT" /> Google Бүртгэлдээ хадгална уу</translation> <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{нээлттэй # таб, tab мессежийг асаах/унтраахын тулд дарна уу}other{нээлттэй # таб, tab мессежийг асаах/унтраахын тулд дарна уу}}</translation> <translation id="7465635034594602553">Алдаа гарлаа. Хэдэн минут хүлээгээд <ph name="APP_NAME" />-г дахин ажиллуулна уу.</translation> @@ -7184,6 +7186,7 @@ <translation id="793531125873261495">Виртуал машиныг татаж авахад алдаа гарлаа. Дахин оролдоно уу.</translation> <translation id="7935451262452051102"><ph name="PERCENT" />%-ийг гүйцэтгэсэн</translation> <translation id="7939062555109487992">Дэвшилтэт сонголт</translation> +<translation id="7939328347457537652">Төхөөрөмжийн гэрчилгээг удирдах</translation> <translation id="7939412583708276221">Ямар ч байсан үргэлжлүүлнэ үү</translation> <translation id="7942349550061667556">Улаан</translation> <translation id="7943368935008348579">PDF татах</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb index 5e95e1e..e286f88 100644 --- a/chrome/app/resources/generated_resources_mr.xtb +++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -1295,7 +1295,6 @@ <translation id="2191754378957563929">सुरू करा</translation> <translation id="2192505247865591433">द्वारा:</translation> <translation id="2193365732679659387">विश्वासू सेटिंग्ज</translation> -<translation id="2194554416429452547">चाचण्यांदरम्यान, Chrome हे स्पॅम, फसवणूक आणि साइटदरम्यान शेअरिंग मर्यादित करण्याचे मार्ग शोधत आहे. Chrome हे साइट तुम्हाला जाहिराती दाखवण्यासाठी वापरू शकतात अशादेखील <ph name="ESTIMATE_INTERESTS_LINK" />. तुम्ही सेटिंग्जमध्ये तुमची स्वारस्ये व्यवस्थापित करू शकता.</translation> <translation id="2194856509914051091">विचार करण्याच्या गोष्टी</translation> <translation id="2195331105963583686">तुम्ही त्यानंतर तरीही हे <ph name="DEVICE_TYPE" /> वापरू शकाल पण ते यापुढे ऑटोमॅटिक सॉफ्टवेअर आणि सुरक्षा अपडेट मिळवू शकणार नाही</translation> <translation id="2195729137168608510">ईमेल संरक्षण</translation> @@ -3280,6 +3279,7 @@ <translation id="4077919383365622693"><ph name="SITE" /> ने स्टोअर केलेला सर्व डेटा आणि कुकी साफ केल्या जातील.</translation> <translation id="4078738236287221428">आक्रमक</translation> <translation id="4079140982534148664">वर्धित केलेले स्पेल चेक वापरा</translation> +<translation id="4081203444152654304"><ph name="VISUAL_SEARCH_PROVIDER" /> वापरून आतील इमेज शोधा</translation> <translation id="4081242589061676262">फाइल कास्ट करू शकत नाही.</translation> <translation id="408223403876103285"><ph name="WEBSITE" /> ने तुमच्या फोनवर सूचना पाठवली आहे. हे तुम्हीच आहात याची खात्री करण्यासाठी, तेथे दिलेल्या पायऱ्या फॉलो करा.</translation> <translation id="4084682180776658562">बुकमार्क</translation> @@ -3673,6 +3673,7 @@ <translation id="4476590490540813026">व्यायामपटू</translation> <translation id="4476659815936224889">हा कोड स्कॅन करण्यासाठी, तुम्ही तुमच्या फोनवरील QR स्कॅनर अॅप किंवा काही कॅमेरा अॅप्स वापरू शकता.</translation> <translation id="4477015793815781985">Ctrl, Alt किंवा ⌘ चा समावेश करा</translation> +<translation id="4477379360383751882"><ph name="VISUAL_SEARCH_PROVIDER" /> वापरून आतील इमेज शोधा</translation> <translation id="4478664379124702289">या फॉरमॅटमध्ये लिंक सेव्ह करा...</translation> <translation id="4479424953165245642">कियोस्क ॲप्लिकेशन व्यवस्थापित करा</translation> <translation id="4479639480957787382">इथरनेट</translation> @@ -5301,6 +5302,7 @@ <translation id="6086846494333236931">तुमच्या ॲडमिनिस्ट्रेटरद्वारे इंस्टॉल केले</translation> <translation id="6087746524533454243">ब्राउझरच्या पेजविषयी माहिती शोधत आहात का? भेट द्या</translation> <translation id="6087960857463881712">छान चेहरा</translation> +<translation id="6088535503330933227">Chrome हे स्पॅम असलेली जाहिरात, फसवणूक आणि साइटदरम्यान शेअरिंग मर्यादित करण्याचे मार्ग एक्सप्लोर करत आहे. तुम्हाला जाहिराती दाखवण्यासाठी साइट वापरू शकतील याकरिता Chrome <ph name="ESTIMATE_INTERESTS_LINK" /> हेदेखील करते. तुम्ही सेटिंग्जमध्ये तुमची स्वारस्ये व्यवस्थापित करू शकता.</translation> <translation id="608912389580139775">हे पेज तुमच्या वाचन सूचीमध्ये जोडण्यासाठी, बुकमार्क आयकनवर क्लिक करा</translation> <translation id="6091761513005122595">शेअर यशस्वीरीत्या माउंट केले आहे.</translation> <translation id="6093888419484831006">अपडेट रद्द करत आहे...</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb index a1eda1b..486fbff7 100644 --- a/chrome/app/resources/generated_resources_ms.xtb +++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -1296,7 +1296,6 @@ <translation id="2191754378957563929">Hidup</translation> <translation id="2192505247865591433">Daripada:</translation> <translation id="2193365732679659387">Tetapan percaya</translation> -<translation id="2194554416429452547">Semasa percubaan, Chrome sedang meneroka cara untuk mengehadkan spam, penipuan dan perkongsian antara laman. Chrome juga <ph name="ESTIMATE_INTERESTS_LINK" /> laman tersebut boleh digunakan untuk memaparkan iklan kepada anda. Anda boleh mengurus minat anda dalam tetapan.</translation> <translation id="2194856509914051091">Perkara yang perlu dipertimbangkan</translation> <translation id="2195331105963583686">Anda masih boleh menggunakan <ph name="DEVICE_TYPE" /> ini selepas waktu itu tetapi tidak akan mendapat perisian automatik dan kemas kini keselamatan lagi</translation> <translation id="2195729137168608510">Perlindungan E-mel</translation> @@ -5305,6 +5304,7 @@ <translation id="6086846494333236931">Dipasang oleh pentadbir anda</translation> <translation id="6087746524533454243">Mencari halaman perihalan penyemak imbas? Lawati</translation> <translation id="6087960857463881712">Wajah hebat</translation> +<translation id="6088535503330933227">Chrome sedang meneroka cara untuk mengehadkan spam iklan, penipuan dan perkongsian antara laman. Chrome juga <ph name="ESTIMATE_INTERESTS_LINK" /> laman tersebut boleh digunakan untuk memaparkan iklan kepada anda. Anda boleh mengurus minat anda dalam tetapan.</translation> <translation id="608912389580139775">Untuk menambahkan halaman ini pada senarai bacaan anda, klik ikon Penanda Halaman</translation> <translation id="6091761513005122595">Perkongsian berjaya dilekapkan.</translation> <translation id="6093888419484831006">Membatalkan kemas kini...</translation> @@ -5931,6 +5931,7 @@ <translation id="6709133671862442373">Berita</translation> <translation id="6709357832553498500">Sambung menggunakan <ph name="EXTENSIONNAME" /></translation> <translation id="6710213216561001401">Sebelumnya</translation> +<translation id="6710394144992407503">Semak ralat ejaan apabila anda menaip teks pada halaman web</translation> <translation id="6711146141291425900">Pautkan akaun <ph name="WEB_DRIVE" /> untuk Muat Turun</translation> <translation id="6712943853047024245">Anda telah menyimpan kata laluan dengan nama pengguna ini untuk <ph name="WEBSITE" /></translation> <translation id="6713233729292711163">Tambah Profil Kerja</translation> @@ -6552,6 +6553,7 @@ <translation id="7340757554212515731">Menghantar laporan ranap sistem serta data diagnostik dan penggunaan kepada Google secara automatik.</translation> <translation id="7341834142292923918">Mahukan akses ke tapak ini</translation> <translation id="7343372807593926528">Sila terangkan masalah tersebut sebelum menghantar maklum balas.</translation> +<translation id="7344585835349671209">Urus sijil HTTPS/SSL pada peranti anda</translation> <translation id="7345706641791090287">Sahkan kata laluan anda</translation> <translation id="7346909386216857016">Ok, faham</translation> <translation id="7347452120014970266">Tindakan ini akan mengosongkan semua data dan kuki yang disimpan oleh <ph name="ORIGIN_NAME" /> dan apl yang dipasang</translation> @@ -6681,6 +6683,7 @@ <translation id="7460045493116006516">Tema semasa yang telah dipasang</translation> <translation id="7461924472993315131">Pin</translation> <translation id="746216226901520237">Selepas ini, telefon anda akan membuka kunci <ph name="DEVICE_TYPE" /> anda. Anda boleh mematikan Smart Lock dalam Tetapan.</translation> +<translation id="7464153996453281700">Komponen sudah dikemas kini</translation> <translation id="7464637891177137294">Simpan pada Google Account anda, <ph name="ACCOUNT" /></translation> <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{# buka tab, tekan untuk menogol jalur tab}other{# buka tab, tekan untuk menogol jalur tab}}</translation> <translation id="7465635034594602553">Kesilapan telah berlaku. Sila tunggu beberapa minit dan jalankan <ph name="APP_NAME" /> sekali lagi.</translation> @@ -7190,6 +7193,7 @@ <translation id="793531125873261495">Ralat memuat turun mesin maya. Sila cuba lagi.</translation> <translation id="7935451262452051102"><ph name="PERCENT" />% selesai</translation> <translation id="7939062555109487992">Pilihan lanjutan</translation> +<translation id="7939328347457537652">Urus sijil peranti</translation> <translation id="7939412583708276221">Simpan juga</translation> <translation id="7942349550061667556">Merah</translation> <translation id="7943368935008348579">Muat turun PDF</translation>
diff --git a/chrome/app/resources/generated_resources_my.xtb b/chrome/app/resources/generated_resources_my.xtb index d3972b60..386b423 100644 --- a/chrome/app/resources/generated_resources_my.xtb +++ b/chrome/app/resources/generated_resources_my.xtb
@@ -997,6 +997,7 @@ <translation id="1916502483199172559">မူရင်းအနီရောင်ချန်နယ်ပုံ</translation> <translation id="1918141783557917887">&ပိုသေး</translation> <translation id="1920390473494685033">အဆက်အသွယ်များ</translation> +<translation id="1921544956190977703">သင့်တွင် အန္တရာယ်ရှိသည့် ဝဘ်ဆိုက်၊ ဒေါင်းလုဒ်နှင့် နောက်ဆက်တွဲများကို ကာကွယ်ပေးမည့် Chrome ၏ အားအကောင်းဆုံး လုံခြုံရေးရှိသည်</translation> <translation id="1921584744613111023"><ph name="DPI" /> dpi</translation> <translation id="1923468477587371721">ထုတ်ကုန်ဘာသာစကား တစ်ခုစီကို သင်ပြောင်းမထားလျှင် Gmail၊ Drive နှင့် YouTube ကဲ့သို့ Google ဝဘ်ဆိုက်များသည် သင့် Google Account ဘာသာစကားကို အသုံးပြုသည်</translation> <translation id="192494336144674234">ဖြင့်ဖွင့်ပါ</translation> @@ -1294,7 +1295,6 @@ <translation id="2191754378957563929">ဖွင့်ထားသည်</translation> <translation id="2192505247865591433">မှ:</translation> <translation id="2193365732679659387">ယုံကြည်မှု ဆက်တင်များ</translation> -<translation id="2194554416429452547">အစမ်းသုံးနေစဉ် Chrome သည် စပမ်း၊ လိမ်လည်မှုနှင့် ဝဘ်ဆိုက်များအကြား မျှဝေခြင်းတို့ကို ကန့်သတ်ရန်နည်းလမ်းများ ရှာဖွေနေသည်။ Chrome ကလည်း <ph name="ESTIMATE_INTERESTS_LINK" />၊ သင့်အားကြော်ငြာပြရန် ဝဘ်ဆိုက်များက ၎င်းတို့ကို အသုံးပြုနိုင်သည်။ သင့်စိတ်ဝင်စားမှုများကို ဆက်တင်များတွင် စီမံနိုင်သည်။</translation> <translation id="2194856509914051091">စဉ်းစားရန် အချက်များ</translation> <translation id="2195331105963583686">ထိုအချိန်ပြီးနောက် ဤ <ph name="DEVICE_TYPE" /> ကို ဆက်လက်၍ အသုံးပြုနိုင်ဦးမည် ဖြစ်သော်လည်း ဆော့ဖ်ဝဲနှင့် လုံခြုံရေးအပ်ဒိတ်များကို အလိုအလျောက် ရရှိတော့မည်မဟုတ်ပါ</translation> <translation id="2195729137168608510">အီးမေးလ် ကာကွယ်မှု</translation> @@ -2102,6 +2102,7 @@ သင့်စမတ်ကတ်ကို ထည့်သွင်းထားရန် <ph name="DOMAIN" /> က သတ်မှတ်ထားသည်။</translation> <translation id="2923234477033317484">ဤအကောင့်ကို ဖယ်ရှားရန်</translation> <translation id="2923644930701689793">သင့်ဖုန်း၏ ကင်မရာရိုးလ်ကို သုံးခွင့်ရယူနိုင်သည်</translation> +<translation id="292371311537977079">Chrome ဆက်တင်များ</translation> <translation id="2925658782192398150">ပြီးပြီ၊ ပြဿနာမတွေ့ပါ</translation> <translation id="2926085873880284723">မူရင်းဖြတ်လမ်းလင့်ခ်များ ပြန်ယူရန်</translation> <translation id="2926620265753325858"><ph name="DEVICE_NAME" /> ကို ပံ့ပိုးမထားပါ။</translation> @@ -2686,6 +2687,7 @@ <translation id="3511528412952710609">တို</translation> <translation id="3514335087372914653">ဂိမ်းထိန်းချုပ်မှု</translation> <translation id="3514373592552233661">ကွန်ရက်တစ်ခုထက်ပို၍ ရှိနေပါက အသုံးပြုလိုသည့် ကွန်ရက်များကို အခြားကွန်ရက်များထက် ဦးစားပေး၍ ချိတ်ဆက်သွားပါမည်</translation> +<translation id="3514647716686280777">ပုံမှန်လုံခြုံရေး အကာအကွယ်ကို သင်ရရှိနေသည်။ အန္တရာယ်ရှိသည့် ဝဘ်ဆိုက်၊ ဒေါင်းလုဒ်နှင့် နောက်ဆက်တွဲများကို ပိုမိုကာကွယ်နိုင်ရန် Chrome ဆက်တင်များတွင် ‘အရည်အသွေးမြှင့် ဘေးကင်းလုံခြုံသည့် အသုံးပြုမှု’ ကို ဖွင့်ပါ။</translation> <translation id="3515983984924808886">ပြင်ဆင်သတ်မှတ်ခြင်းကို အတည်ပြုရန် သင့်လုံခြုံရေးကီးကို ထပ်ထိပါ။ ပင်နံပါတ်အပါအဝင် လုံခြုံရေးကီးတွင် သိမ်းထားသော အချက်အလက်အားလုံးကို ဖျက်လိုက်ပါမည်။</translation> <translation id="3518985090088779359">လက်ခံရန် & ဆက်ရန်</translation> <translation id="3519564332031442870">ဆာဗာပိုင်းဆိုင်ရာ ဝန်ဆောင်မှုကို ပုံနှိပ်ထုတ်ယူရန်</translation> @@ -5299,6 +5301,7 @@ <translation id="6086846494333236931">သင့်ကြီးကြပ်သူမှ ထည့်သွင်းခဲ့သည်</translation> <translation id="6087746524533454243">စာမျက်နှာအကြောင်း ဘရောင်ဇာကို ရှာနေပါသလား။ ဝင်ကြည့်ရန်</translation> <translation id="6087960857463881712">ပြုံးရွှင်သည့် မျက်နှာ</translation> +<translation id="6088535503330933227">Chrome သည် စပမ်း၊ လိမ်လည်မှုနှင့် ဝဘ်ဆိုက်များအကြား မျှဝေခြင်းတို့ကို ကန့်သတ်ရန်နည်းလမ်းများ ရှာဖွေနေသည်။ Chrome ကလည်း <ph name="ESTIMATE_INTERESTS_LINK" />၊ သင့်အားကြော်ငြာပြရန် ဝဘ်ဆိုက်များက ၎င်းတို့ကို အသုံးပြုနိုင်သည်။ သင့်စိတ်ဝင်စားမှုများကို ဆက်တင်များတွင် စီမံနိုင်သည်။</translation> <translation id="608912389580139775">သင်၏ဖတ်ရန် စာရင်းတွင် ဤစာမျက်နှာကို ထည့်ရန် ‘လိပ်စာ’ သင်္ကေတကို နှိပ်ပါ</translation> <translation id="6091761513005122595">မျှဝေပြီးပါပြီ။</translation> <translation id="6093888419484831006">မွှမ်းမံခြင်းကို ပယ်ဖျက်နေပါသည်၊</translation> @@ -5489,6 +5492,7 @@ <translation id="6278428485366576908">အပြင်အဆင်</translation> <translation id="6278776436938569440">တည်နေရာပြောင်းရန်</translation> <translation id="6279183038361895380">သင်၏ ညွှန်းမြားကို ပြပေးရန် |<ph name="ACCELERATOR" />ကို နှိပ်ပါ</translation> +<translation id="6279595948631688299">ရွေးထားသောအသိအမှတ်ပြုလက်မှတ်ကို E&xport လုပ်ရန်...</translation> <translation id="6280215091796946657">မတူညီသည့်အကောင့်တစ်ခုဖြင့် လက်မှတ်ထိုးဝင်ပါ</translation> <translation id="6280912520669706465">ARC</translation> <translation id="6282180787514676874">{COUNT,plural, =1{စာရွက် 1 ရွက်ကန့်သတ်ချက်ထက် ပိုသွားသည်}other{စာရွက် {COUNT} ရွက်ကန့်သတ်ချက်ထက် ပိုသွားသည်}}</translation> @@ -5603,6 +5607,7 @@ <translation id="6398715114293939307">Google Play Store ကို ဖယ်ရှားရန်</translation> <translation id="6398765197997659313">မျက်နှာပြင် အပြည့်မှ ထွက်ရန်</translation> <translation id="6399774419735315745">သူလျှို</translation> +<translation id="6401458660421980302">အခြားစက်သို့ ဤတဘ်ကို ပို့ရန် ထိုနေရာတွင် Chrome သို့ လက်မှတ်ထိုးဝင်ပါ</translation> <translation id="6401597285454423070">သင့်ကွန်ပျူတာတွင် ChromeOS ရှိ အရေးပါသော လုံခြုံရေးဝန်ဆောင်မှုများစွာ ဆောင်ရွက်ရာတွင် အသုံးပြုသည့် ‘ယုံကြည်ရသော စနစ်မော်ဂျူး’ (TPM) လုံခြုံရေးစက်ပစ္စည်း ပါဝင်သည်။ ပိုမိုလေ့လာရန် ‘Chromebook ကူညီရေးဌာန’ ကို ဝင်ကြည့်ပါ- https://support.google.com/chromebook/?p=tpm</translation> <translation id="6404187344102273690">Chromebook ဖြင့် ဂိမ်းကစားခြင်း</translation> <translation id="6404511346730675251">စာညှပ် တည်းဖြတ်ရန်</translation> @@ -5837,6 +5842,7 @@ <translation id="6619801788773578757">kiosk အပလီကေးရှင်းကို ထည့်ရန်−</translation> <translation id="6619990499523117484">သင့်ပင်နံပါတ်ကို အတည်ပြုပါ</translation> <translation id="6620254580880484313">ကွန်တိန်နာအမည်</translation> +<translation id="6621391692573306628">အခြားစက်သို့ ဤတဘ်ကို ပို့ရန် နှစ်စက်လုံးတွင် Chrome သို့ လက်မှတ်ထိုးဝင်ပါ</translation> <translation id="6622980291894852883">ပုံများကို ပိတ်ဆို့မှု ဆက်လုပ်ရန်</translation> <translation id="6624036901798307345">တက်ဘလက်မုဒ်တွင် တဘ်တစ်ခုစီ၏ ပုံသေးများကို ပြသပေးသည့် တဘ်ဘားတန်းအသစ်ကို ဖွင့်ရန် တဘ်ရေတွက်မှုပြ ကိရိယာဘား ခလုတ်ကို တို့ပါ။</translation> <translation id="6624535038674360844"><ph name="FILE_NAME" /> တွင် သတိထားရသော သို့မဟုတ် အန္တရာယ်ရှိသော အကြောင်းအရာ ပါဝင်သည်။ ၎င်း၏ပိုင်ရှင်ကို ပြင်ခိုင်းပါ။</translation>
diff --git a/chrome/app/resources/generated_resources_ne.xtb b/chrome/app/resources/generated_resources_ne.xtb index 187fc6c..82dbc0b 100644 --- a/chrome/app/resources/generated_resources_ne.xtb +++ b/chrome/app/resources/generated_resources_ne.xtb
@@ -1281,7 +1281,6 @@ <translation id="2191754378957563929">सक्रिय छ</translation> <translation id="2192505247865591433">बाट:</translation> <translation id="2193365732679659387">विश्वास सम्बन्धी सेटिङहरू</translation> -<translation id="2194554416429452547">Chrome ले परीक्षण अवधिमा स्प्याम तथा ठगी रोकथाम गर्ने र साइटहरूका बिचमा सेयर गर्ने सुविधा सीमित पार्ने विभिन्न उपायहरूको परीक्षण गरिरहेको छ। साथै, Chrome ले साइटहरूले तपाईंलाई विज्ञापनहरू देखाउनका निम्ति प्रयोग गर्न सक्ने <ph name="ESTIMATE_INTERESTS_LINK" />। तपाईं सेटिङमा गई आफ्ना रुचिहरू व्यवस्थापन गर्न सक्नुहुन्छ।</translation> <translation id="2194856509914051091">विचार गर्नु पर्ने कुराहरू</translation> <translation id="2195331105963583686">तपाईं उक्त समयपछि पनि यो <ph name="DEVICE_TYPE" /> प्रयोग गरिरहन सक्नु हुने छ तर यसले सफ्टवेयर तथा सुरक्षासम्बन्धी स्वचालित अद्यावधिकहरू भने प्राप्त गर्ने छैन</translation> <translation id="2195729137168608510">इमेल संरक्षण</translation> @@ -3263,6 +3262,7 @@ <translation id="4077919383365622693"><ph name="SITE" /> मा भण्डारण गरिएका सबै डेटा र कुकीहरू मेटाइने छन्।</translation> <translation id="4078738236287221428">आक्रामक</translation> <translation id="4079140982534148664">हिज्जे जाँचसम्बन्धी परिष्कृत सुविधा प्रयोग गर्नुहोस्</translation> +<translation id="4081203444152654304"><ph name="VISUAL_SEARCH_PROVIDER" /> प्रयोग गरी फोटोमा खोजियोस्</translation> <translation id="4081242589061676262">फाइललाई cast गर्न सकिएन।</translation> <translation id="408223403876103285"><ph name="WEBSITE" /> ले तपाईंको फोनमा एउटा सूचना पठाएको छ। साइन इन गर्ने व्यक्ति तपाईं नै हो भन्ने कुरा पुष्टि गर्न त्यहाँ दिइएका निर्देशनहरू पालना गर्नुहोस्।</translation> <translation id="4084682180776658562">बुकमार्क</translation> @@ -3658,6 +3658,7 @@ <translation id="4476590490540813026">खेलाडी</translation> <translation id="4476659815936224889">यो कोड स्क्यान गर्न तपाईं आफ्नो फोनमा रहेको QR स्क्यानर एप वा केही क्यामेरा एप उपयोग गर्न सक्नुहुन्छ।</translation> <translation id="4477015793815781985">Ctrl, Alt वा ⌘ समावेश गर्नुहोस्</translation> +<translation id="4477379360383751882"><ph name="VISUAL_SEARCH_PROVIDER" /> प्रयोग गरी फोटोमा खोजियोस्</translation> <translation id="4478664379124702289">यसको रूपमा लिङ्&कलाई बचत गर्नुहोस्...</translation> <translation id="4479424953165245642">kiosk अनुप्रयोगहरूको व्यवस्थापन गर्नुहोस्</translation> <translation id="4479639480957787382">इथरनेट</translation> @@ -5282,6 +5283,7 @@ <translation id="6086846494333236931">तपाईँको प्रशासकद्वारा स्थापना गरियो</translation> <translation id="6087746524533454243">ब्राउजरसम्बन्धी जानकारी भएको पेज खोज्दै हुनुहुन्छ? यहाँ जानुहोस्</translation> <translation id="6087960857463881712">उत्कृष्ट अनुहार</translation> +<translation id="6088535503330933227">Chrome ले स्प्याम तथा ठगी रोकथाम गर्ने र साइटहरूका बिचमा सेयर गर्ने सुविधा सीमित पार्ने विभिन्न उपायहरूको परीक्षण गरिरहेको छ। साथै, Chrome ले साइटहरूले तपाईंलाई विज्ञापनहरू देखाउनका निम्ति प्रयोग गर्न सक्ने <ph name="ESTIMATE_INTERESTS_LINK" />। तपाईं सेटिङमा गई आफ्ना रुचिहरू व्यवस्थापन गर्न सक्नुहुन्छ।</translation> <translation id="608912389580139775">यो पेज आफ्नो पछि पढ्न सेभ गरिएका वेबपेजको सूचीमा हाल्न बुकमार्क आइकनमा क्लिक गर्नुहोस्</translation> <translation id="6091761513005122595">आदान प्रदान माउन्ट गर्ने कार्य सफलतापूर्वक सम्पन्न भयो।</translation> <translation id="6093888419484831006">अद्यावधिक रद्द गर्दै...</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb index a8d31d1..bd0cf3d 100644 --- a/chrome/app/resources/generated_resources_nl.xtb +++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -1284,7 +1284,6 @@ <translation id="2191754378957563929">Aan</translation> <translation id="2192505247865591433">Van:</translation> <translation id="2193365732679659387">Vertrouwensinstellingen</translation> -<translation id="2194554416429452547">Tijdens proefperioden verkent Chrome manieren om spam, fraude en het delen tussen sites te beperken. Chrome <ph name="ESTIMATE_INTERESTS_LINK" /> die sites kunnen gebruiken om advertenties te laten zien. Je kunt je interesses beheren in de instellingen.</translation> <translation id="2194856509914051091">Overwegingen</translation> <translation id="2195331105963583686">Je kunt deze <ph name="DEVICE_TYPE" /> daarna nog steeds gebruiken, maar je apparaat ontvangt geen automatische software- en beveiligingsupdates meer.</translation> <translation id="2195729137168608510">E-mail beveiligen</translation> @@ -5283,6 +5282,7 @@ <translation id="6086846494333236931">Geïnstalleerd door je beheerder</translation> <translation id="6087746524533454243">Zoek je de informatiepagina van de browser? Ga naar</translation> <translation id="6087960857463881712">Geweldig gezicht</translation> +<translation id="6088535503330933227">Chrome verkent manieren om advertentiespam, fraude en het delen tussen sites te beperken. Chrome <ph name="ESTIMATE_INTERESTS_LINK" /> die sites kunnen gebruiken om advertenties te laten zien. Je kunt je interesses beheren in de instellingen.</translation> <translation id="608912389580139775">Klik op het icoon Bookmark om deze pagina aan je leeslijst toe te voegen</translation> <translation id="6091761513005122595">Fileshare geactiveerd.</translation> <translation id="6093888419484831006">Update annuleren...</translation> @@ -5908,6 +5908,7 @@ <translation id="6709133671862442373">Nieuws</translation> <translation id="6709357832553498500">Verbinding maken via <ph name="EXTENSIONNAME" /></translation> <translation id="6710213216561001401">Vorige</translation> +<translation id="6710394144992407503">Checken op spelfouten als je tekst op webpagina's typt</translation> <translation id="6711146141291425900"><ph name="WEB_DRIVE" />-account koppelen voor downloads</translation> <translation id="6712943853047024245">Je hebt al een wachtwoord met deze gebruikersnaam opgeslagen voor <ph name="WEBSITE" /></translation> <translation id="6713233729292711163">Werkprofiel toevoegen</translation> @@ -6529,6 +6530,7 @@ <translation id="7340757554212515731">Hiermee stuur je automatisch crashrapporten, diagnostische gegevens en gebruiksgegevens naar Google</translation> <translation id="7341834142292923918">Wil toegang tot deze site</translation> <translation id="7343372807593926528">Beschrijf het probleem zo goed mogelijk voordat je feedback stuurt.</translation> +<translation id="7344585835349671209">HTTPS-/SSL-certificaten op je apparaat beheren</translation> <translation id="7345706641791090287">Je wachtwoord bevestigen</translation> <translation id="7346909386216857016">OK, begrepen</translation> <translation id="7347452120014970266">Hiermee wis je alle gegevens en cookies die zijn opgeslagen door <ph name="ORIGIN_NAME" /> en de bijbehorende geïnstalleerde apps</translation> @@ -6658,6 +6660,7 @@ <translation id="7460045493116006516">Huidig thema dat je hebt geïnstalleerd</translation> <translation id="7461924472993315131">Vastzetten</translation> <translation id="746216226901520237">De volgende keer wordt <ph name="DEVICE_TYPE" /> ontgrendeld met je telefoon. Je kunt Smart Lock uitzetten in Instellingen.</translation> +<translation id="7464153996453281700">Component is al up-to-date</translation> <translation id="7464637891177137294">Sla het op in je Google-account, <ph name="ACCOUNT" /></translation> <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{# geopend tabblad, druk om de tabbladstrook aan of uit te zetten}other{# geopende tabbladen, druk om de tabbladstrook aan of uit te zetten}}</translation> <translation id="7465635034594602553">Er is iets misgegaan. Wacht enkele minuten en voer <ph name="APP_NAME" /> opnieuw uit.</translation> @@ -7164,6 +7167,7 @@ <translation id="793531125873261495">Fout bij downloaden van virtuele machine. Probeer het opnieuw.</translation> <translation id="7935451262452051102"><ph name="PERCENT" />% klaar</translation> <translation id="7939062555109487992">Geavanceerde opties</translation> +<translation id="7939328347457537652">Apparaatcertificaten beheren</translation> <translation id="7939412583708276221">Toch bewaren</translation> <translation id="7942349550061667556">Rood</translation> <translation id="7943368935008348579">Pdf's downloaden</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb index f5b29bb3..42ecdfe 100644 --- a/chrome/app/resources/generated_resources_no.xtb +++ b/chrome/app/resources/generated_resources_no.xtb
@@ -1290,7 +1290,6 @@ <translation id="2191754378957563929">På</translation> <translation id="2192505247865591433">Fra:</translation> <translation id="2193365732679659387">Klareringsinnstillinger</translation> -<translation id="2194554416429452547">Mens prøveprosjekter pågår, utforsker Chrome måter å begrense nettsøppel, svindel og deling mellom nettsteder på. Chrome <ph name="ESTIMATE_INTERESTS_LINK" />, som nettsteder kan bruke til å vise deg annonser. Du kan administrere interessene dine i innstillingene.</translation> <translation id="2194856509914051091">Ting å tenke på</translation> <translation id="2195331105963583686">Du kan fortsette å bruke <ph name="DEVICE_TYPE" />-enheten etter dette tidspunktet, men den kommer ikke til å få automatiske programvare- og sikkerhetsoppdateringer lenger</translation> <translation id="2195729137168608510">Beskyttelse av e-post </translation> @@ -5295,6 +5294,7 @@ <translation id="6086846494333236931">Installert av administratoren din</translation> <translation id="6087746524533454243">Ser du etter nettleserens Om-side? Gå til</translation> <translation id="6087960857463881712">Fantastisk-fjes</translation> +<translation id="6088535503330933227">Chrome utforsker måter å begrense søppelannonser, svindel og deling mellom nettsteder på. Chrome <ph name="ESTIMATE_INTERESTS_LINK" />, som nettsteder kan bruke til å vise deg annonser. Du kan administrere interessene dine i innstillingene.</translation> <translation id="608912389580139775">For å legge til denne siden på leselisten din, klikk på Bokmerke-ikonet</translation> <translation id="6091761513005122595">Delingen er aktivert.</translation> <translation id="6093888419484831006">Avbryter oppdatering …</translation> @@ -5921,6 +5921,7 @@ <translation id="6709133671862442373">Nyheter</translation> <translation id="6709357832553498500">Koble til med <ph name="EXTENSIONNAME" /></translation> <translation id="6710213216561001401">Forrige</translation> +<translation id="6710394144992407503">Se etter stavefeil når du skriver inn tekst på nettsider</translation> <translation id="6711146141291425900">Tilknytt <ph name="WEB_DRIVE" />-konto for Nedlastinger</translation> <translation id="6712943853047024245">Du har allerede lagret et passord med dette brukernavnet for <ph name="WEBSITE" /></translation> <translation id="6713233729292711163">Legg til en jobbprofil</translation> @@ -6542,6 +6543,7 @@ <translation id="7340757554212515731">Sender programstopprapporter, diagnostikk og bruksdata automatisk til Google</translation> <translation id="7341834142292923918">Vil ha tilgang til dette nettstedet</translation> <translation id="7343372807593926528">Beskriv problemet før du sender tilbakemeldingen.</translation> +<translation id="7344585835349671209">Administrer sertifikater for HTTPS/SSL på enheten din</translation> <translation id="7345706641791090287">Bekreft passordet</translation> <translation id="7346909386216857016">Greit</translation> <translation id="7347452120014970266">Dette sletter alle dataene og informasjonskapslene som er lagret av <ph name="ORIGIN_NAME" /> og de tilhørende appene som er installert</translation> @@ -6671,6 +6673,7 @@ <translation id="7460045493116006516">Tema som er installert akkurat nå</translation> <translation id="7461924472993315131">Fest</translation> <translation id="746216226901520237">Neste gang låser telefonen opp <ph name="DEVICE_TYPE" />-enheten din. Du kan slå av Smart Lock i innstillingene.</translation> +<translation id="7464153996453281700">Komponenten er allerede oppdatert</translation> <translation id="7464637891177137294">Lagre det i Google-kontoen din, <ph name="ACCOUNT" /></translation> <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{# åpen fane – trykk for å slå av/på faneraden}other{# åpne faner – trykk for å slå av/på faneraden}}</translation> <translation id="7465635034594602553">Noe gikk galt. Vent noen minutter, og kjør <ph name="APP_NAME" /> på nytt.</translation> @@ -7179,6 +7182,7 @@ <translation id="793531125873261495">Feil ved nedlasting av den virtuelle maskinen. Prøv på nytt.</translation> <translation id="7935451262452051102"><ph name="PERCENT" /> % fullført</translation> <translation id="7939062555109487992">Avanserte alternativer</translation> +<translation id="7939328347457537652">Administrer enhetssertifikater</translation> <translation id="7939412583708276221">Behold uansett</translation> <translation id="7942349550061667556">Rød</translation> <translation id="7943368935008348579">Last ned PDF-filer</translation>
diff --git a/chrome/app/resources/generated_resources_or.xtb b/chrome/app/resources/generated_resources_or.xtb index d943656..2039694 100644 --- a/chrome/app/resources/generated_resources_or.xtb +++ b/chrome/app/resources/generated_resources_or.xtb
@@ -1281,7 +1281,6 @@ <translation id="2191754378957563929">ଚାଲୁ ଅଛି</translation> <translation id="2192505247865591433">ଠାରୁ:</translation> <translation id="2193365732679659387">ବିଶ୍ୱସ୍ତ ସେଟିଂସ୍</translation> -<translation id="2194554416429452547">ଟ୍ରାଏଲ ସମୟରେ, Chrome ସ୍ପାମ, ଠକାମୀ ଏବଂ ସାଇଟଗୁଡ଼ିକ ମଧ୍ୟରେ ସେୟାରିଂକୁ ସୀମିତ କରିବାର ଉପାୟଗୁଡ଼ିକୁ ଏକ୍ସପ୍ଲୋର କରୁଛି। Chrome <ph name="ESTIMATE_INTERESTS_LINK" /> ମଧ୍ୟ କରେ ଯାହାକୁ ସାଇଟଗୁଡ଼ିକ ଆପଣଙ୍କୁ ବିଜ୍ଞାପନ ଦେଖାଇବା ପାଇଁ ବ୍ୟବହାର କରିପାରିବ। ଆପଣ ସେଟିଂସରେ ଆପଣଙ୍କ ରୁଚିଗୁଡ଼ିକୁ ପରିଚାଳନା କରିପାରିବେ।</translation> <translation id="2194856509914051091">ବିଚାରଯୋଗ୍ୟ ବିଷୟଗୁଡ଼ିକ</translation> <translation id="2195331105963583686">ଆପଣ ସେହି ସମୟ ପରେ ମଧ୍ୟ <ph name="DEVICE_TYPE" /> ବ୍ୟବହାର କରିପାରିବେ, କିନ୍ତୁ ଏହା ଆଉ ସ୍ୱଚାଳିତ ସଫ୍ଟୱେୟାର ଏବଂ ସୁରକ୍ଷା ଅପ୍ଡେଟ୍ଗୁଡ଼ିକ ପାଇବ ନାହିଁ।</translation> <translation id="2195729137168608510">ଇମେଲ୍ ସୁରକ୍ଷା</translation> @@ -5282,6 +5281,7 @@ <translation id="6086846494333236931">ଆପଣଙ୍କ ବ୍ୟବସ୍ଥାପକଙ୍କ ଦ୍ୱାରା ଇନ୍ଷ୍ଟଲ୍ କରାଯାଇଛି</translation> <translation id="6087746524533454243">ବ୍ରାଉଜର ବିଷୟରେ ପୃଷ୍ଠାକୁ ଖୋଜୁଛନ୍ତି କି? ଭିଜିଟ କରନ୍ତୁ</translation> <translation id="6087960857463881712">ବଢ଼ିଆ ମୁହଁ</translation> +<translation id="6088535503330933227">ବିଜ୍ଞାପନ ସ୍ପାମ, ଠକାମୀ ଏବଂ ସାଇଟଗୁଡ଼ିକ ମଧ୍ୟରେ ସେୟାରିଂକୁ ସୀମିତ କରିବାର ଉପାୟଗୁଡ଼ିକୁ Chrome ଏକ୍ସପ୍ଲୋର କରୁଛି। Chrome ମଧ୍ୟ <ph name="ESTIMATE_INTERESTS_LINK" /> କରେ ଯାହାକୁ ସାଇଟଗୁଡ଼ିକ ଆପଣଙ୍କୁ ବିଜ୍ଞାପନ ଦେଖାଇବା ପାଇଁ ବ୍ୟବହାର କରିପାରିବ। ଆପଣ ସେଟିଂସରେ ଆପଣଙ୍କ ରୁଚିଗୁଡ଼ିକୁ ପରିଚାଳନା କରିପାରିବେ।</translation> <translation id="608912389580139775">ଆପଣଙ୍କ ପଢ଼ିବା ତାଲିକାରେ ଏହି ପୃଷ୍ଠାକୁ ଯୋଗ କରିବା ପାଇଁ, ବୁକମାର୍କ ଆଇକନରେ କ୍ଲିକ୍ କରନ୍ତୁ</translation> <translation id="6091761513005122595">ସଫଳତାର ସହ ସେୟାର୍ ଖଞ୍ଜାଯାଇଛି।</translation> <translation id="6093888419484831006">ଅପ୍ଡେଟ୍ ବାତିଲ ହେଉଛି...</translation>
diff --git a/chrome/app/resources/generated_resources_pa.xtb b/chrome/app/resources/generated_resources_pa.xtb index 1f0f08b..cf94618d 100644 --- a/chrome/app/resources/generated_resources_pa.xtb +++ b/chrome/app/resources/generated_resources_pa.xtb
@@ -1297,7 +1297,6 @@ <translation id="2191754378957563929">ਚਾਲੂ</translation> <translation id="2192505247865591433">ਤੋਂ:</translation> <translation id="2193365732679659387">ਭਰੋਸਾ ਸੈਟਿੰਗਾਂ</translation> -<translation id="2194554416429452547">ਪਰਖ ਦੌਰਾਨ, Chrome ਸਪੈਮ, ਧੋਖਾਧੜੀ, ਅਤੇ ਸਾਈਟਾਂ ਵਿਚਕਾਰ ਸਾਂਝਾਕਰਨ ਨੂੰ ਸੀਮਤ ਕਰਨ ਦੇ ਤਰੀਕਿਆਂ ਦੀ ਪੜਚੋਲ ਕਰ ਰਿਹਾ ਹੈ। Chrome <ph name="ESTIMATE_INTERESTS_LINK" /> ਵੀ ਦਿਖਾਉਂਦਾ ਹੈ, ਜਿਸ ਨੂੰ ਸਾਈਟਾਂ ਤੁਹਾਨੂੰ ਵਿਗਿਆਪਨ ਦਿਖਾਉਣ ਲਈ ਵਰਤ ਸਕਦੀਆਂ ਹਨ। ਤੁਸੀਂ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਜਾ ਕੇ ਆਪਣੀਆਂ ਦਿਲਚਸਪੀਆਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰ ਸਕਦੇ ਹੋ।</translation> <translation id="2194856509914051091">ਵਿਚਾਰੇ ਜਾਣ ਵਾਲੀਆਂ ਚੀਜ਼ਾਂ</translation> <translation id="2195331105963583686">ਤੁਸੀਂ ਹਾਲੇ ਵੀ ਉਸ ਸਮੇਂ ਤੋਂ ਬਾਅਦ ਇਸ <ph name="DEVICE_TYPE" /> ਨੂੰ ਵਰਤ ਸਕੋਗੇ, ਪਰ ਇਸਨੂੰ ਸਵੈਚਲਿਤ ਸਾਫ਼ਟਵੇਅਰ ਅਤੇ ਸੁਰੱਖਿਆ ਅੱਪਡੇਟ ਨਹੀਂ ਮਿਲਣਗੇ</translation> <translation id="2195729137168608510">ਈਮੇਲ ਸੁਰੱਖਿਆ</translation> @@ -4122,6 +4121,7 @@ <translation id="4900392736118574277">ਤੁਹਾਡਾ ਸ਼ੁਰੂਆਤੀ ਪੰਨਾ <ph name="URL" /> 'ਤੇ ਬਦਲ ਦਿੱਤਾ ਗਿਆ ਸੀ।</translation> <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz - ਇੰਟਰਲੇਸਡ</translation> <translation id="4900652253009739885">"'ਚੁਣੋ" ਲਈ ਜ਼ਿੰਮੇ ਲਗਾਏ ਗਏ ਇੱਕੋ-ਇੱਕ ਸਵਿੱਚ ਨੂੰ ਹਟਾਇਆ ਨਹੀਂ ਜਾ ਸਕਦਾ। <ph name="RESPONSE" /> ਲਈ ਕੋਈ ਵੀ ਕੁੰਜੀ ਦਬਾਓ।</translation> +<translation id="4901154724271753917">ਹਾਲੀਆਂ ਬੰਦ ਕੀਤੀਆਂ ਦਾ ਵਿਸਤਾਰ ਕਰੋ</translation> <translation id="4901309472892185668">ਪ੍ਰਯੋਗ <ph name="EXPERIMENT_NAME" /> ਲਈ, ਪ੍ਰਯੋਗ ਦੀ ਸਥਿਤੀ ਚੁਣੋ।</translation> <translation id="49027928311173603">ਸਰਵਰ ਤੋਂ ਡਾਊਨਲੋਡ ਕੀਤੀ ਨੀਤੀ ਅਵੈਧ ਹੈ: <ph name="VALIDATION_ERROR" />।</translation> <translation id="4906490889887219338">'ਨੈੱਟਵਰਕ ਫ਼ਾਈਲ ਸਾਂਝਾਕਰਨ' ਦਾ ਸੈੱਟਅੱਪ ਕਰੋ ਜਾਂ ਪ੍ਰਬੰਧਨ ਕਰੋ। <ph name="LINK_BEGIN" />ਹੋਰ ਜਾਣੋ<ph name="LINK_END" /></translation> @@ -5302,6 +5302,7 @@ <translation id="6086846494333236931">ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਵੱਲੋਂ ਸਥਾਪਿਤ ਕੀਤਾ ਗਿਆ</translation> <translation id="6087746524533454243">ਕੀ ਪੰਨੇ ਸੰਬੰਧੀ ਬ੍ਰਾਊਜ਼ਰ ਨੂੰ ਲੱਭ ਰਹੇ ਹੋ? ਇੱਥੇ ਜਾਓ</translation> <translation id="6087960857463881712">ਸੁੰਦਰ ਚਿਹਰਾ</translation> +<translation id="6088535503330933227">Chrome ਸਪੈਮ, ਧੋਖਾਧੜੀ ਅਤੇ ਸਾਈਟਾਂ ਵਿਚਕਾਰ ਸਾਂਝਾਕਰਨ ਨੂੰ ਸੀਮਤ ਕਰਨ ਦੇ ਤਰੀਕਿਆਂ ਦੀ ਪੜਚੋਲ ਕਰ ਰਿਹਾ ਹੈ। Chrome <ph name="ESTIMATE_INTERESTS_LINK" /> ਵੀ ਦਿਖਾਉਂਦਾ ਹੈ, ਜਿਸਨੂੰ ਸਾਈਟਾਂ ਤੁਹਾਨੂੰ ਵਿਗਿਆਪਨ ਦਿਖਾਉਣ ਲਈ ਵਰਤ ਸਕਦੀਆਂ ਹਨ। ਤੁਸੀਂ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਜਾ ਕੇ ਆਪਣੀਆਂ ਦਿਲਚਸਪੀਆਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰ ਸਕਦੇ ਹੋ।</translation> <translation id="608912389580139775">ਆਪਣੀ ਪੜ੍ਹਨ-ਸੂਚੀ ਵਿੱਚ ਇਹ ਪੰਨਾ ਸ਼ਾਮਲ ਕਰਨ ਲਈ, 'ਬੁੱਕਮਾਰਕ' ਪ੍ਰਤੀਕ 'ਤੇ ਕਲਿੱਕ ਕਰੋ</translation> <translation id="6091761513005122595">ਸਾਂਝਾਕਰਨ ਨੂੰ ਮਾਊਂਟ ਕਰਨਾ ਸਫਲ ਰਿਹਾ।</translation> <translation id="6093888419484831006">ਅੱਪਡੇਟ ਰੱਦ ਕਰ ਰਿਹਾ ਹੈ...</translation> @@ -5931,6 +5932,7 @@ <translation id="6709133671862442373">ਖਬਰਾਂ</translation> <translation id="6709357832553498500"><ph name="EXTENSIONNAME" /> ਵਰਤਦੇ ਹੋਏ ਕਨੈਕਟ ਕਰੋ</translation> <translation id="6710213216561001401">ਪਿਛਲਾ</translation> +<translation id="6710394144992407503">ਤੁਹਾਡੇ ਵੱਲੋਂ ਵੈੱਬ ਪੰਨਿਆਂ 'ਤੇ ਲਿਖਤ ਨੂੰ ਟਾਈਪ ਕਰਨ ਦੌਰਾਨ ਸ਼ਬਦ-ਜੋੜ ਗੜਬੜੀਆਂ ਦੀ ਜਾਂਚ ਕਰੋ</translation> <translation id="6711146141291425900">ਡਾਊਨਲੋਡਾਂ ਲਈ <ph name="WEB_DRIVE" /> ਖਾਤਾ ਲਿੰਕ ਕਰੋ</translation> <translation id="6712943853047024245">ਤੁਸੀਂ ਪਹਿਲਾਂ ਹੀ <ph name="WEBSITE" /> ਲਈ ਇਸ ਵਰਤੋਂਕਾਰ ਨਾਮ ਨਾਲ ਪਾਸਵਰਡ ਰੱਖਿਅਤ ਕਰ ਲਿਆ ਹੈ</translation> <translation id="6713233729292711163">ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਸ਼ਾਮਲ ਕਰੋ</translation> @@ -6552,6 +6554,7 @@ <translation id="7340757554212515731">Google ਨੂੰ ਸਵੈਚਲਿਤ ਤੌਰ 'ਤੇ ਕ੍ਰੈਸ਼ ਰਿਪੋਰਟਾਂ ਦੇ ਨਾਲ-ਨਾਲ ਤਸ਼ਖੀਸੀ ਅਤੇ ਵਰਤੋਂ ਡਾਟਾ ਭੇਜਦਾ ਹੈ</translation> <translation id="7341834142292923918">ਇਸ ਸਾਈਟ ਤੱਕ ਪਹੁੰਚ ਕਰਨਾ ਚਾਹੁੰਦੀ ਹੈ</translation> <translation id="7343372807593926528">ਵਿਚਾਰ ਭੇਜਣ ਤੋਂ ਪਹਿਲਾਂ ਕਿਰਪਾ ਕਰਕੇ ਸਮੱਸਿਆ ਦਾ ਵਰਣਨ ਕਰੋ।</translation> +<translation id="7344585835349671209">ਆਪਣੇ ਡੀਵਾਈਸ 'ਤੇ HTTPS/SSL ਸਰਟੀਫਿਕੇਟਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ</translation> <translation id="7345706641791090287">ਆਪਣੇ ਪਾਸਵਰਡ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ</translation> <translation id="7346909386216857016">ਠੀਕ, ਸਮਝ ਲਿਆ</translation> <translation id="7347452120014970266">ਇੰਝ ਕਰਨ ਨਾਲ <ph name="ORIGIN_NAME" /> ਵੱਲੋਂ ਸਟੋਰ ਕੀਤੇ ਸਾਰੇ ਡਾਟੇ ਅਤੇ ਕੁਕੀਜ਼ ਅਤੇ ਇਸਦੀਆਂ ਸਥਾਪਤ ਕੀਤੀਆਂ ਐਪਾਂ ਨੂੰ ਕਲੀਅਰ ਕਰ ਦਿੱਤਾ ਜਾਵੇਗਾ</translation> @@ -6681,6 +6684,7 @@ <translation id="7460045493116006516">ਮੌਜੂਦਾ ਥੀਮ ਜੋ ਤੁਸੀਂ ਸਥਾਪਤ ਕੀਤਾ ਹੈ</translation> <translation id="7461924472993315131">Pin</translation> <translation id="746216226901520237">ਅਗਲੀ ਵਾਰ ਤੁਹਾਡਾ ਫ਼ੋਨ ਤੁਹਾਡੀ <ph name="DEVICE_TYPE" /> ਨੂੰ ਅਣਲਾਕ ਕਰੇਗਾ। ਤੁਸੀਂ ਸੈਟਿੰਗਾਂ ਵਿੱਚ 'ਸਮਾਰਟ ਲਾਕ' ਨੂੰ ਬੰਦ ਕਰ ਸਕਦੇ ਹੋ।</translation> +<translation id="7464153996453281700">ਤੱਤ ਪਹਿਲਾਂ ਹੀ ਅੱਪ-ਟੂ-ਡੇਟ ਹੈ</translation> <translation id="7464637891177137294">ਇਸ ਨੂੰ ਆਪਣੇ Google ਖਾਤੇ, <ph name="ACCOUNT" />, ਵਿੱਚ ਰੱਖਿਅਤ ਕਰੋ</translation> <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{# ਖੁੱਲ੍ਹੀ ਟੈਬ, ਟੈਬ ਪੱਟੀ ਨੂੰ ਟੌਗਲ ਕਰਨ ਲਈ ਦਬਾਓ}one{# ਖੁੱਲ੍ਹੀ ਟੈਬ, ਟੈਬ ਪੱਟੀ ਨੂੰ ਟੌਗਲ ਕਰਨ ਲਈ ਦਬਾਓ}other{# ਖੁੱਲ੍ਹੀਆਂ ਟੈਬਾਂ, ਟੈਬ ਪੱਟੀ ਨੂੰ ਟੌਗਲ ਕਰਨ ਲਈ ਦਬਾਓ}}</translation> <translation id="7465635034594602553">ਕੋਈ ਗੜਬੜ ਹੋਈ। ਕਿਰਪਾ ਕਰਕੇ ਥੋੜ੍ਹੀ ਦੇਰ ਉਡੀਕ ਕਰੋ ਅਤੇ <ph name="APP_NAME" /> ਨੂੰ ਦੁਬਾਰਾ ਚਲਾਓ।</translation> @@ -7013,6 +7017,7 @@ <translation id="7768526219335215384"><ph name="ORIGIN" />, <ph name="FOLDERNAME" /> ਵਿਚਲੀਆਂ ਫ਼ਾਈਲਾਂ ਨੂੰ ਦੇਖ ਸਕੇਗੀ</translation> <translation id="7768770796815395237">ਬਦਲੋ</translation> <translation id="7768784765476638775">ਚੁਣੋ ਅਤੇ ਸੁਣੋ</translation> +<translation id="7769748505895274502">ਹਾਲੀਆਂ ਬੰਦ ਕੀਤੀਆਂ ਨੂੰ ਸਮੇਟੋ</translation> <translation id="7770406201819593386">ChromeOS Flex ਤਸ਼ਖੀਸ ਜਾਂਚਾਂ ਚਲਾਓ।</translation> <translation id="7770450735129978837">ਸੱਜਾ ਮਾਊਸ ਕਲਿੱਕ</translation> <translation id="7770612696274572992">ਕਿਸੇ ਹੋਰ ਡੀਵਾਈਸ ਤੋਂ ਚਿੱਤਰ ਕਾਪੀ ਕੀਤਾ ਗਿਆ</translation> @@ -7188,6 +7193,7 @@ <translation id="793531125873261495">ਆਭਾਸੀ ਮਸ਼ੀਨ ਨੂੰ ਡਾਊਨਲੋਡ ਕਰਨ ਵਿੱਚ ਗੜਬੜ ਹੋ ਗਈ। ਕਿਰਪਾ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ ਕਰੋ।</translation> <translation id="7935451262452051102"><ph name="PERCENT" />% ਮੁਕੰਮਲ</translation> <translation id="7939062555109487992">ਉੱਨਤ ਵਿਕਲਪ</translation> +<translation id="7939328347457537652">ਡੀਵਾਈਸ ਦੇ ਸਰਟੀਫਿਕੇਟਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ</translation> <translation id="7939412583708276221">ਫੇਰ ਵੀ ਰੱਖੋ</translation> <translation id="7942349550061667556">ਲਾਲ</translation> <translation id="7943368935008348579">PDF ਡਾਊਨਲੋਡ ਕਰੋ</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb index 66f0816d..31b975c7 100644 --- a/chrome/app/resources/generated_resources_pl.xtb +++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -985,6 +985,7 @@ <translation id="1916502483199172559">Domyślny czerwony awatar</translation> <translation id="1918141783557917887">&Mniejszy</translation> <translation id="1920390473494685033">Kontakty</translation> +<translation id="1921544956190977703">Korzystasz z najlepszych zabezpieczeń Chrome przed niebezpiecznymi stronami, pobieranymi plikami i rozszerzeniami</translation> <translation id="1921584744613111023"><ph name="DPI" /> dpi</translation> <translation id="1923468477587371721">Strony Google takie jak Gmail, Dysk i YouTube korzystają z języka Twojego konta Google, chyba że ustawienia języka tych usług zostały wcześniej zmienione</translation> <translation id="192494336144674234">Otwórz za pomocą</translation> @@ -1282,7 +1283,6 @@ <translation id="2191754378957563929">Włączono</translation> <translation id="2192505247865591433">Z:</translation> <translation id="2193365732679659387">Ustawienia zaufania</translation> -<translation id="2194554416429452547">Podczas testów Chrome sprawdza, w jaki sposób można ograniczyć spam, oszustwa i udostępnianie treści między witrynami. Chrome również <ph name="ESTIMATE_INTERESTS_LINK" />, do których witryny mogą dostosowywać pokazywane Ci reklamy. Swoimi zainteresowaniami możesz zarządzać w ustawieniach.</translation> <translation id="2194856509914051091">Istotne kwestie</translation> <translation id="2195331105963583686">Po tej dacie nadal będzie można używać urządzenia <ph name="DEVICE_TYPE" />, ale nie będziesz już otrzymywać automatycznych aktualizacji zabezpieczeń i oprogramowania</translation> <translation id="2195729137168608510">Ochrona poczty e-mail</translation> @@ -2075,6 +2075,7 @@ Domena <ph name="DOMAIN" /> wymaga, by karta inteligentna pozostała w gnieździe.</translation> <translation id="2923234477033317484">Usuń to konto</translation> <translation id="2923644930701689793">Uzyskaj dostęp do rolki z aparatu telefonu</translation> +<translation id="292371311537977079">Ustawienia Chrome</translation> <translation id="2925658782192398150">Gotowe, nie znaleziono problemów</translation> <translation id="2926085873880284723">Przywróć domyślne skróty</translation> <translation id="2926620265753325858">Urządzenie <ph name="DEVICE_NAME" /> nie jest obsługiwane</translation> @@ -2659,6 +2660,7 @@ <translation id="3511528412952710609">Krótkie</translation> <translation id="3514335087372914653">Sterowanie grą</translation> <translation id="3514373592552233661">Jeśli będzie dostępnych więcej sieci, sieci preferowane będą wybierane przed innymi znanymi sieciami</translation> +<translation id="3514647716686280777">Korzystasz ze standardowej ochrony. Aby lepiej chronić się przed niebezpiecznymi stronami, pobieranymi plikami i rozszerzeniami, włącz Ulepszone Bezpieczne przeglądanie w ustawieniach Chrome.</translation> <translation id="3515983984924808886">Jeszcze raz dotknij klucza bezpieczeństwa, by potwierdzić resetowanie. Wszystkie informacje zapisane w kluczu, w tym jego kod PIN, zostaną usunięte.</translation> <translation id="3518985090088779359">Akceptuj i kontynuuj</translation> <translation id="3519564332031442870">Usługa backendu drukowania</translation> @@ -5274,6 +5276,7 @@ <translation id="6086846494333236931">Zainstalowane przez administratora</translation> <translation id="6087746524533454243">Szukasz strony z informacjami o przeglądarce? Wejdź na</translation> <translation id="6087960857463881712">Niesamowita twarz</translation> +<translation id="6088535503330933227">Chrome sprawdza, w jaki sposób można ograniczyć spam, oszustwa i udostępnianie treści między witrynami. Chrome również <ph name="ESTIMATE_INTERESTS_LINK" />, do których witryny mogą dostosowywać pokazywane Ci reklamy. Swoimi zainteresowaniami możesz zarządzać w ustawieniach.</translation> <translation id="608912389580139775">Aby dodać tę stronę do listy Do przeczytania, kliknij ikonę Zakładka</translation> <translation id="6091761513005122595">Udział został podłączony.</translation> <translation id="6093888419484831006">Anulowanie aktualizacji...</translation> @@ -5463,6 +5466,7 @@ <translation id="6278428485366576908">Motyw</translation> <translation id="6278776436938569440">Zmień lokalizację</translation> <translation id="6279183038361895380">Naciśnij |<ph name="ACCELERATOR" />|, by wyświetlić kursor</translation> +<translation id="6279595948631688299">E&ksportuj wybrany certyfikat…</translation> <translation id="6280215091796946657">Zaloguj się na inne konto</translation> <translation id="6280912520669706465">ARC</translation> <translation id="6282180787514676874">{COUNT,plural, =1{Przekroczono limit 1 kartki}few{Przekroczono limit {COUNT} kartek}many{Przekroczono limit {COUNT} kartek}other{Przekroczono limit {COUNT} kartki}}</translation> @@ -5577,6 +5581,7 @@ <translation id="6398715114293939307">Usuń Sklep Google Play</translation> <translation id="6398765197997659313">Zamknij pełny ekran</translation> <translation id="6399774419735315745">Szpieg</translation> +<translation id="6401458660421980302">Aby wysłać tę kartę na inne urządzenie, zaloguj się na nim w Chrome</translation> <translation id="6401597285454423070">Twój komputer ma układ TPM (Trusted Platform Module), który umożliwia zastosowanie wielu krytycznych funkcji zabezpieczeń w Chrome OS. Więcej informacji znajdziesz w Centrum pomocy Chromebooka na https://support.google.com/chromebook/?p=tpm</translation> <translation id="6404187344102273690">Granie w gry na Chromebooku</translation> <translation id="6404511346730675251">Edytuj zakładkę</translation> @@ -5817,6 +5822,7 @@ <translation id="6619801788773578757">Dodaj aplikację kiosku</translation> <translation id="6619990499523117484">Potwierdź kod PIN</translation> <translation id="6620254580880484313">Nazwa kontenera</translation> +<translation id="6621391692573306628">Aby wysłać tę kartę na inne urządzenie, na obu urządzeniach zaloguj się w Chrome</translation> <translation id="6622980291894852883">Nadal blokuj pokazywanie grafik</translation> <translation id="6624036901798307345">W trybie tabletu kliknij przycisk licznika kart na pasku narzędzi, aby otworzyć nowy pasek kart z miniaturą każdej karty.</translation> <translation id="6624535038674360844">Plik <ph name="FILE_NAME" /> zawiera treści niebezpieczne lub treści o charakterze kontrowersyjnym. Poproś właściciela, by rozwiązał problem.</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb index 79a189fa..ec0d9486 100644 --- a/chrome/app/resources/generated_resources_pt-BR.xtb +++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -1297,7 +1297,6 @@ <translation id="2191754378957563929">Ativado</translation> <translation id="2192505247865591433">De:</translation> <translation id="2193365732679659387">Configurações de confiança</translation> -<translation id="2194554416429452547">Durante os testes, o Chrome explora maneiras de limitar spam, fraude e compartilhamento entre sites. O Chrome também <ph name="ESTIMATE_INTERESTS_LINK" /> para que os sites possam os usar para mostrar anúncios. Você pode gerenciar seus interesses nas configurações.</translation> <translation id="2194856509914051091">Considerações</translation> <translation id="2195331105963583686">Você ainda poderá usar este <ph name="DEVICE_TYPE" /> após esse período, mas ele não receberá mais atualizações automáticas de software e segurança</translation> <translation id="2195729137168608510">Proteção de e-mail</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb index d426322f..0a3b610a 100644 --- a/chrome/app/resources/generated_resources_pt-PT.xtb +++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -1284,7 +1284,6 @@ <translation id="2191754378957563929">Ativado</translation> <translation id="2192505247865591433">De:</translation> <translation id="2193365732679659387">Definições fidedignas</translation> -<translation id="2194554416429452547">Durante as avaliações, o Chrome explora formas de limitar o spam, as fraudes e a partilha entre sites. O Chrome também <ph name="ESTIMATE_INTERESTS_LINK" /> que os sites podem usar para lhe apresentar anúncios. Pode gerir os seus interesses nas definições.</translation> <translation id="2194856509914051091">Aspetos a considerar</translation> <translation id="2195331105963583686">Vai continuar a poder utilizar este <ph name="DEVICE_TYPE" /> após essa data, mas deixará de receber atualizações de software e de segurança automáticas.</translation> <translation id="2195729137168608510">Protecção de email</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb index 3640702..f35915f 100644 --- a/chrome/app/resources/generated_resources_ro.xtb +++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -1285,7 +1285,6 @@ <translation id="2191754378957563929">Activat</translation> <translation id="2192505247865591433">De la:</translation> <translation id="2193365732679659387">Setări privind încrederea</translation> -<translation id="2194554416429452547">În perioadele de încercare, Chrome explorează moduri de a limita spamul, frauda și transferul între site-uri. În plus, Chrome <ph name="ESTIMATE_INTERESTS_LINK" />, pe care site-urile le pot folosi pentru a-ți afișa anunțuri. Îți poți gestiona interesele din setări.</translation> <translation id="2194856509914051091">De reținut</translation> <translation id="2195331105963583686">Vei putea folosi în continuare <ph name="DEVICE_TYPE" />, dar nu vei mai primi actualizări automate de software și de securitate</translation> <translation id="2195729137168608510">Protecție e-mail</translation> @@ -5918,6 +5917,7 @@ <translation id="6709133671862442373">Știri</translation> <translation id="6709357832553498500">Conectează-te folosind <ph name="EXTENSIONNAME" /></translation> <translation id="6710213216561001401">Înapoi</translation> +<translation id="6710394144992407503">Verifică dacă există greșeli de ortografie când introduci text în pagini web</translation> <translation id="6711146141291425900">Conectează contul <ph name="WEB_DRIVE" /> pentru Descărcări</translation> <translation id="6712943853047024245">Ai salvat deja o parolă folosind acest nume de utilizator pentru <ph name="WEBSITE" /></translation> <translation id="6713233729292711163">Adaugă un profil de serviciu</translation> @@ -6539,6 +6539,7 @@ <translation id="7340757554212515731">Trimite automat la Google rapoarte de blocare, precum și date de diagnosticare și de utilizare</translation> <translation id="7341834142292923918">Vrea acces la acest site</translation> <translation id="7343372807593926528">Descrie problema înainte de a trimite feedback.</translation> +<translation id="7344585835349671209">Gestionează certificatele HTTPS/SSL pe dispozitiv</translation> <translation id="7345706641791090287">Confirmă parola</translation> <translation id="7346909386216857016">OK, am înțeles</translation> <translation id="7347452120014970266">Astfel, se vor șterge toate datele și cookie-urile stocate de <ph name="ORIGIN_NAME" /> și aplicațiile instalate asociate</translation> @@ -6668,6 +6669,7 @@ <translation id="7460045493116006516">Tema actuală pe care ai instalat-o</translation> <translation id="7461924472993315131">Fixează</translation> <translation id="746216226901520237">Data viitoare, telefonul va debloca dispozitivul <ph name="DEVICE_TYPE" />. Poți debloca Smart Lock în Setări.</translation> +<translation id="7464153996453281700">Componenta este deja actualizată</translation> <translation id="7464637891177137294">Salveaz-o în Contul Google <ph name="ACCOUNT" /></translation> <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{# filă deschisă; atinge pentru a comuta bara de file}few{# file deschise; atinge pentru a comuta bara de file}other{# de file deschise; atinge pentru a comuta bara de file}}</translation> <translation id="7465635034594602553">A apărut o eroare. Așteaptă câteva minute și rulează din nou <ph name="APP_NAME" />.</translation> @@ -7176,6 +7178,7 @@ <translation id="793531125873261495">A apărut o eroare la descărcarea mașinii virtuale. Încearcă din nou.</translation> <translation id="7935451262452051102">S-a finalizat <ph name="PERCENT" />%</translation> <translation id="7939062555109487992">Opțiuni avansate</translation> +<translation id="7939328347457537652">Gestionează certificatele dispozitivelor</translation> <translation id="7939412583708276221">Păstrați oricum</translation> <translation id="7942349550061667556">Roșu</translation> <translation id="7943368935008348579">Descarcă fișiere PDF</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb index efbd9a1..bb03294 100644 --- a/chrome/app/resources/generated_resources_ru.xtb +++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -1286,7 +1286,6 @@ <translation id="2191754378957563929">ВКЛ</translation> <translation id="2192505247865591433">Из:</translation> <translation id="2193365732679659387">Настройки доверия</translation> -<translation id="2194554416429452547">Во время эксперимента Chrome изучает способы ограничения спама, мошенничества и обмена информацией между сайтами. Браузер также <ph name="ESTIMATE_INTERESTS_LINK" />, чтобы на их основе сайты показывали вам рекламу. Параметры этой функции можно задать в настройках.</translation> <translation id="2194856509914051091">Важная информация</translation> <translation id="2195331105963583686">После этого срока вы по-прежнему сможете пользоваться устройством <ph name="DEVICE_TYPE" />, но оно больше не будет получать обновления ПО и безопасности.</translation> <translation id="2195729137168608510">Защита электронной почты</translation>
diff --git a/chrome/app/resources/generated_resources_si.xtb b/chrome/app/resources/generated_resources_si.xtb index cfbca7a..6f1a2f5 100644 --- a/chrome/app/resources/generated_resources_si.xtb +++ b/chrome/app/resources/generated_resources_si.xtb
@@ -1285,7 +1285,6 @@ <translation id="2191754378957563929">ක්රියාත්මකයි</translation> <translation id="2192505247865591433">වෙතින්:</translation> <translation id="2193365732679659387">විශ්වාස සැකසීම්</translation> -<translation id="2194554416429452547">අත්හදා බැලීම් අතරතුර, Chrome අයාචිත තැපැල්, වංචා සහ අඩවි අතර බෙදා ගැනීම සීමා කිරීමට ක්රම ගවේෂණය කරයි. Chrome ඔබට වෙළඳ දැන්වීම් පෙන්වීමට අඩවි භාවිත කළ හැකි <ph name="ESTIMATE_INTERESTS_LINK" />. ඔබට සැකසීම් තුළ ඔබේ ලැදිකම් කළමනාකරණය කළ හැකිය.</translation> <translation id="2194856509914051091">සලකා බැලිය යුතු කරුණු</translation> <translation id="2195331105963583686">ඔබට ඒ කාලයට පසුව තවමත් මෙම <ph name="DEVICE_TYPE" /> භාවිත කිරීමට හැකි වෙයි, නමුත් එය තවදුරටත් ස්වයංක්රීය මෘදුකාංග සහ ආරක්ෂක යාවත්කාලීන නොලබයි</translation> <translation id="2195729137168608510">ඊමේල් ආරක්ෂාව</translation> @@ -4110,6 +4109,7 @@ <translation id="4900392736118574277">ඔබේ ආරම්භක පිටුව <ph name="URL" /> වෙත වෙනස් කරන ලදී.</translation> <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz - එකිනෙකට ගොතන ලද</translation> <translation id="4900652253009739885">“තෝරන්න” සඳහා පවරා ඇති එකම ස්විචය ඉවත් කිරීමට නොහැකිය. <ph name="RESPONSE" />ට ඕනෑම යතුරක් ඔබන්න.</translation> +<translation id="4901154724271753917">මෑතක දී වසා දැමූ ඒවා පුළුල් කරන්න</translation> <translation id="4901309472892185668"><ph name="EXPERIMENT_NAME" /> අත්හදා බැලීම සඳහා අත්හදා බැලීමේ තත්ත්වය තෝරන්න.</translation> <translation id="49027928311173603">සේවාදායකයෙන් බාගත් ප්රතිපත්තිය අවලංගුයි: <ph name="VALIDATION_ERROR" />.</translation> <translation id="4906490889887219338">ජාල ගොනු බෙදා ගැනීම් සකසන්න කළමනා කරන්න. <ph name="LINK_BEGIN" />තවත් දැන ගන්න<ph name="LINK_END" /></translation> @@ -5291,6 +5291,7 @@ <translation id="6086846494333236931">ඔබේ පරිපාලක විසින් ස්ථාපනය කරන ලදී</translation> <translation id="6087746524533454243">පිටුව ගැන බ්රවුසරය සඳහා සොයන්නේද? පිවිසෙන්න</translation> <translation id="6087960857463881712">නියම මුහුණ</translation> +<translation id="6088535503330933227">Chrome වෙළඳ දැන්වීම් අයාචිත, වංචා, සහ අඩවි අතර බෙදා ගැනීම සීමා කිරීමට ක්රම ගවේෂණය කරයි. Chrome ඔබට වෙළඳ දැන්වීම් පෙන්වීමට අඩවි භාවිතා කළ හැකි <ph name="ESTIMATE_INTERESTS_LINK" />. ඔබට සැකසීම් තුළ ඔබේ ලැදිකම් කළමනාකරණය කළ හැක.</translation> <translation id="608912389580139775">මෙම පිටුව ඔබගේ කියවීම් ලැයිස්තුවට එක් කිරීමට, පිටුසන් නිරූපකය ක්ලික් කරන්න</translation> <translation id="6091761513005122595">කොටස සාර්ථකව නැංවිණි.</translation> <translation id="6093888419484831006">යාවත්කාලීන අවලංගු කරමින්...</translation> @@ -6999,6 +7000,7 @@ <translation id="7768526219335215384"><ph name="ORIGIN" /> හට <ph name="FOLDERNAME" /> තුළ ඇති සියලු ගොනු බැලීමට හැකි වනු ඇත.</translation> <translation id="7768770796815395237">වෙනස</translation> <translation id="7768784765476638775">කීමට-තේරීම</translation> +<translation id="7769748505895274502">මෑතක දී වසා දැමූ ඒවා හකුළන්න</translation> <translation id="7770406201819593386">ChromeOS Flex දෝෂ නිර්ණ පරීක්ෂණ ධාවනය කරන්න.</translation> <translation id="7770450735129978837">දකුණු මූසික ක්ලික් කිරීම</translation> <translation id="7770612696274572992">අනෙකුත් උපාංගයෙන් පිටපත් කළ රූපය</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb index b1c8092..4d78eca 100644 --- a/chrome/app/resources/generated_resources_sk.xtb +++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -1286,7 +1286,6 @@ <translation id="2191754378957563929">zapnuté</translation> <translation id="2192505247865591433">Zdroj:</translation> <translation id="2193365732679659387">Nastavenie dôveryhodnosti</translation> -<translation id="2194554416429452547">Počas skúšobných období hľadá Chrome spôsoby, ako obmedziť spam, podvody a zdieľanie obsahu medzi webmi. Chrome okrem toho <ph name="ESTIMATE_INTERESTS_LINK" />, na základe ktorých vám budú môcť weby zobrazovať reklamy. Svoje záujmy môžete spravovať v nastaveniach.</translation> <translation id="2194856509914051091">Čo je potrebné zohľadniť</translation> <translation id="2195331105963583686">Po tomto dátume budete môcť <ph name="DEVICE_TYPE" /> naďalej používať, ale už nebude dostávať automatické aktualizácie softvéru a zabezpečenia</translation> <translation id="2195729137168608510">Ochrana e-mailu</translation> @@ -4108,6 +4107,7 @@ <translation id="4900392736118574277">Vaša stránka pri spustení bola zmenená na <ph name="URL" />.</translation> <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz –prekladané</translation> <translation id="4900652253009739885">Jediný prepínač pridelený k akcii Vybrať sa nedá odstrániť. Ak chcete <ph name="RESPONSE" />, stlačte ľubovoľný kláves.</translation> +<translation id="4901154724271753917">Rozbaliť nedávno zatvorené</translation> <translation id="4901309472892185668">Vyberte stav experimentu <ph name="EXPERIMENT_NAME" />.</translation> <translation id="49027928311173603">Pravidlo stiahnuté zo servera je neplatné: <ph name="VALIDATION_ERROR" />.</translation> <translation id="4906490889887219338">Nastaviť alebo spravovať sieťové zdieľané úložiská. <ph name="LINK_BEGIN" />Ďalšie informácie<ph name="LINK_END" /></translation> @@ -5918,6 +5918,7 @@ <translation id="6709133671862442373">News</translation> <translation id="6709357832553498500">Pripojiť sa pomocou rozšírenia <ph name="EXTENSIONNAME" /></translation> <translation id="6710213216561001401">Späť</translation> +<translation id="6710394144992407503">Kontrolovať pravopis pri zadávaní textu na webových stránkach</translation> <translation id="6711146141291425900">Prepojte účet <ph name="WEB_DRIVE" /> pre stiahnuté súbory</translation> <translation id="6712943853047024245">Už ste si uložili heslo pomocou tohto používateľského mena pre web alebo aplikáciu <ph name="WEBSITE" /></translation> <translation id="6713233729292711163">Pridať pracovný profil</translation> @@ -6539,6 +6540,7 @@ <translation id="7340757554212515731">Prehľady pádov, diagnostiky a údaje o využití sa budú automaticky odosielať Googlu</translation> <translation id="7341834142292923918">Požaduje prístup k tomuto webu</translation> <translation id="7343372807593926528">Opíšte problém a až potom odošlite spätnú väzbu.</translation> +<translation id="7344585835349671209">Spravujte certifikáty HTTPS a SSL v zariadení</translation> <translation id="7345706641791090287">Potvrdenie hesla</translation> <translation id="7346909386216857016">Dobre</translation> <translation id="7347452120014970266">Týmto vymažete všetky dáta a súbory cookie uložené webom <ph name="ORIGIN_NAME" /> a jeho nainštalovanými aplikáciami</translation> @@ -6668,6 +6670,7 @@ <translation id="7460045493116006516">Aktuálny nainštalovaný motív</translation> <translation id="7461924472993315131">Pripnúť</translation> <translation id="746216226901520237">Zariadenie <ph name="DEVICE_TYPE" /> nabudúce odomknete telefónom. Smart Lock vypnete v Nastaveniach.</translation> +<translation id="7464153996453281700">Komponent je už aktuálny</translation> <translation id="7464637891177137294">Uložte si ho do účtu Google <ph name="ACCOUNT" /></translation> <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{# otvorená karta, panel kariet prepínajte stláčaním}few{# otvorené karty, panel kariet prepínajte stláčaním}many{# open tabs, press to toggle tab strip}other{# otvorených kariet, panel kariet prepínajte stláčaním}}</translation> <translation id="7465635034594602553">Vyskytol sa problém. Počkajte niekoľko minút a aplikáciu <ph name="APP_NAME" /> znova spustite.</translation> @@ -7000,6 +7003,7 @@ <translation id="7768526219335215384"><ph name="ORIGIN" /> bude môcť čítať súbory v priečinku <ph name="FOLDERNAME" />.</translation> <translation id="7768770796815395237">Zmeniť</translation> <translation id="7768784765476638775">Vyslovenie položky po vybratí</translation> +<translation id="7769748505895274502">Zbaliť nedávno zatvorené</translation> <translation id="7770406201819593386">Spúšťať diagnostické testy systému Chrome OS Flex</translation> <translation id="7770450735129978837">Kliknutie pravým tlačidlom myši</translation> <translation id="7770612696274572992">Obrázok bol skopírovaný z iného zariadenia</translation> @@ -7175,6 +7179,7 @@ <translation id="793531125873261495">Pri sťahovaní virtuálneho počítača sa vyskytla chyba. Skúste to znova.</translation> <translation id="7935451262452051102">Dokončené: <ph name="PERCENT" /> %</translation> <translation id="7939062555109487992">Rozšírené možnosti</translation> +<translation id="7939328347457537652">Správa certifikátov zariadení</translation> <translation id="7939412583708276221">Aj tak ponechať</translation> <translation id="7942349550061667556">Červená</translation> <translation id="7943368935008348579">Stiahnuť súbory PDF</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb index 4ebdd8c4..6fd992f8 100644 --- a/chrome/app/resources/generated_resources_sl.xtb +++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -1299,7 +1299,6 @@ <translation id="2191754378957563929">Vklopljeno</translation> <translation id="2192505247865591433">Iz:</translation> <translation id="2193365732679659387">Nastavitve zaupanja</translation> -<translation id="2194554416429452547">Med preizkusi Chrome raziskuje načine, kako omejiti neželeno vsebino, prevare in deljenja med spletnimi mesti. Chrome prav tako <ph name="ESTIMATE_INTERESTS_LINK" />, ki jih spletna mesta lahko uporabijo pri prikazovanju oglasov. Zanimanja lahko upravljate v nastavitvah.</translation> <translation id="2194856509914051091">Kaj morate upoštevati</translation> <translation id="2195331105963583686">Po tem datumu boste še vedno lahko uporabljali to napravo <ph name="DEVICE_TYPE" />, vendar ne bo več prejemala samodejnih posodobitev programske opreme in varnostnih posodobitev.</translation> <translation id="2195729137168608510">E-poštna zaščita</translation>
diff --git a/chrome/app/resources/generated_resources_sq.xtb b/chrome/app/resources/generated_resources_sq.xtb index c3bd0c2..7a6611d 100644 --- a/chrome/app/resources/generated_resources_sq.xtb +++ b/chrome/app/resources/generated_resources_sq.xtb
@@ -1281,7 +1281,6 @@ <translation id="2191754378957563929">Aktiv</translation> <translation id="2192505247865591433">Nga:</translation> <translation id="2193365732679659387">Cilësimet e besimit</translation> -<translation id="2194554416429452547">Gjatë provave, Chrome eksploron mënyra për të kufizuar përmbajtjet e bezdisshme, mashtrimet dhe ndarjen mes sajteve. Chrome <ph name="ESTIMATE_INTERESTS_LINK" /> që sajtet mund t'i përdorin për të të shfaqur reklama. Mund t'i menaxhosh interesat e tu te cilësimet.</translation> <translation id="2194856509914051091">Gjëra për të pasur parasysh</translation> <translation id="2195331105963583686">Do të jesh sërish në gjendje ta përdorësh këtë <ph name="DEVICE_TYPE" /> pas kësaj kohe, por pajisja nuk do të marrë më përditësime automatike të softuerëve dhe të sigurisë</translation> <translation id="2195729137168608510">Mbrojtja e mail-it</translation> @@ -4103,6 +4102,7 @@ <translation id="4900392736118574277">Faqja e nisjes u ndryshua në <ph name="URL" />.</translation> <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz - të gërshetuara</translation> <translation id="4900652253009739885">Nuk mund të hiqet çelësi i vetëm i caktuar për veprimin "Zgjidh". Shtyp një tast çfarëdo për veprimin "<ph name="RESPONSE" />".</translation> +<translation id="4901154724271753917">Zgjero të mbyllurat së fundi</translation> <translation id="4901309472892185668">Zgjidh gjendjen e eksperimentit për eksperimentin <ph name="EXPERIMENT_NAME" />.</translation> <translation id="49027928311173603">Politika e shkarkuar nga serveri është e pavlefshme: <ph name="VALIDATION_ERROR" />.</translation> <translation id="4906490889887219338">Konfiguro ose menaxho ndarjet e skedarëve në rrjet. <ph name="LINK_BEGIN" />Mëso më shumë<ph name="LINK_END" /></translation> @@ -6991,6 +6991,7 @@ <translation id="7768526219335215384"><ph name="ORIGIN" /> do të mund t'i shikojë skedarët në <ph name="FOLDERNAME" /></translation> <translation id="7768770796815395237">Ndrysho</translation> <translation id="7768784765476638775">Zgjidh që të thuhet</translation> +<translation id="7769748505895274502">Palos të mbyllurat së fundi</translation> <translation id="7770406201819593386">Ekzekuto testet diagnostikuese të Chrome OS Flex.</translation> <translation id="7770450735129978837">Klikimi me butonin e djathtë të mausit</translation> <translation id="7770612696274572992">Imazhi u kopjua nga pajisja tjetër</translation>
diff --git a/chrome/app/resources/generated_resources_sr-Latn.xtb b/chrome/app/resources/generated_resources_sr-Latn.xtb index 96f8d368..bcc6f8d 100644 --- a/chrome/app/resources/generated_resources_sr-Latn.xtb +++ b/chrome/app/resources/generated_resources_sr-Latn.xtb
@@ -1283,7 +1283,6 @@ <translation id="2191754378957563929">Uključeno</translation> <translation id="2192505247865591433">Od:</translation> <translation id="2193365732679659387">Podešavanja pouzdanosti</translation> -<translation id="2194554416429452547">Tokom probnih perioda, Chrome istražuje načine da ograniči nepoželjan sadržaj, prevaru i deljenje između sajtova. Chrome takođe <ph name="ESTIMATE_INTERESTS_LINK" /> koja sajtovi mogu da koriste da bi vam prikazivali oglase. Možete da upravljate interesovanjima u podešavanjima.</translation> <translation id="2194856509914051091">Šta treba imati u vidu</translation> <translation id="2195331105963583686">Posle tog perioda i dalje ćete moći da koristite <ph name="DEVICE_TYPE" />, ali uređaj neće više dobijati automatska ažuriranja softvera i bezbednosna ažuriranja</translation> <translation id="2195729137168608510">Zaštita e-pošte</translation> @@ -5288,6 +5287,7 @@ <translation id="6086846494333236931">Instalirao je administrator</translation> <translation id="6087746524533454243">Tražite stranicu sa osnovnim podacima o pregledaču? Posetite</translation> <translation id="6087960857463881712">Zadovoljno lice</translation> +<translation id="6088535503330933227">Chrome istražuje načine da ograniči nepoželjne oglase, prevaru i deljenje između sajtova. Chrome takođe <ph name="ESTIMATE_INTERESTS_LINK" /> koja sajtovi mogu da koriste da bi vam prikazivali oglase. Možete da upravljate interesovanjima u podešavanjima.</translation> <translation id="608912389580139775">Da biste dodali ovu stranicu na listu za čitanje, kliknite na ikonu obeleživača</translation> <translation id="6091761513005122595">Deljena datoteka je učitana.</translation> <translation id="6093888419484831006">Otkazivanje ažuriranja...</translation> @@ -5918,6 +5918,7 @@ <translation id="6709133671862442373">Vesti</translation> <translation id="6709357832553498500">Poveži se pomoću <ph name="EXTENSIONNAME" /></translation> <translation id="6710213216561001401">Prethodno</translation> +<translation id="6710394144992407503">Proverite da li ima pravopisnih grešaka kada unosite tekst na veb-stranicama</translation> <translation id="6711146141291425900">Povežite nalog za uslugu <ph name="WEB_DRIVE" /> radi preuzimanja</translation> <translation id="6712943853047024245">Već ste sačuvali lozinku sa ovim korisničkim imenom za <ph name="WEBSITE" /></translation> <translation id="6713233729292711163">Dodaj poslovni profil</translation> @@ -6539,6 +6540,7 @@ <translation id="7340757554212515731">Automatski šaljite izveštaje o otkazivanju, kao i dijagnostiku i podatke o korišćenju Google-u</translation> <translation id="7341834142292923918">Želi da pristupa ovom sajtu</translation> <translation id="7343372807593926528">Opišite problem da biste poslali povratne informacije.</translation> +<translation id="7344585835349671209">Upravljajte HTTPS/SSL sertifikatima na uređaju</translation> <translation id="7345706641791090287">Potvrdite lozinku</translation> <translation id="7346909386216857016">Važi</translation> <translation id="7347452120014970266">Ovim brišete sve podatke i kolačiće koje čuvaju sajt <ph name="ORIGIN_NAME" /> i njegove instalirane aplikacije</translation> @@ -6668,6 +6670,7 @@ <translation id="7460045493116006516">Aktuelna tema koju ste instalirali</translation> <translation id="7461924472993315131">Zakači</translation> <translation id="746216226901520237">Sledeći put će telefon otključati <ph name="DEVICE_TYPE" />. Možete da isključite Smart Lock u podešavanjima.</translation> +<translation id="7464153996453281700">Komponenta je već ažurirana</translation> <translation id="7464637891177137294">Sačuvajte je na Google nalogu, <ph name="ACCOUNT" /></translation> <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{# otvorena kartica, pritisnite da biste uključili/isključili traku sa karticama}one{# otvorena kartica, pritisnite da biste uključili/isključili traku sa karticama}few{# otvorene kartice, pritisnite da biste uključili/isključili traku sa karticama}other{# otvorenih kartica, pritisnite da biste uključili/isključili traku sa karticama}}</translation> <translation id="7465635034594602553">Došlo je do greške. Sačekajte par minuta, pa ponovo pokrenite aplikaciju <ph name="APP_NAME" />.</translation> @@ -7176,6 +7179,7 @@ <translation id="793531125873261495">Greška pri preuzimanju virtuelne mašine. Probajte ponovo.</translation> <translation id="7935451262452051102"><ph name="PERCENT" />% je završeno</translation> <translation id="7939062555109487992">Napredne opcije</translation> +<translation id="7939328347457537652">Upravljajte sertifikatima uređaja</translation> <translation id="7939412583708276221">Ipak zadrži</translation> <translation id="7942349550061667556">Crvena</translation> <translation id="7943368935008348579">Preuzimajte PDF-ove</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb index 241b514c..d5aaffe 100644 --- a/chrome/app/resources/generated_resources_sr.xtb +++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -1283,7 +1283,6 @@ <translation id="2191754378957563929">Укључено</translation> <translation id="2192505247865591433">Од:</translation> <translation id="2193365732679659387">Подешавања поузданости</translation> -<translation id="2194554416429452547">Током пробних периода, Chrome истражује начине да ограничи непожељан садржај, превару и дељење између сајтова. Chrome такође <ph name="ESTIMATE_INTERESTS_LINK" /> која сајтови могу да користе да би вам приказивали огласе. Можете да управљате интересовањима у подешавањима.</translation> <translation id="2194856509914051091">Шта треба имати у виду</translation> <translation id="2195331105963583686">После тог периода и даље ћете моћи да користите <ph name="DEVICE_TYPE" />, али уређај неће више добијати аутоматска ажурирања софтвера и безбедносна ажурирања</translation> <translation id="2195729137168608510">Заштита е-поште</translation> @@ -5288,6 +5287,7 @@ <translation id="6086846494333236931">Инсталирао је администратор</translation> <translation id="6087746524533454243">Тражите страницу са основним подацима о прегледачу? Посетите</translation> <translation id="6087960857463881712">Задовољно лице</translation> +<translation id="6088535503330933227">Chrome истражује начине да ограничи непожељне огласе, превару и дељење између сајтова. Chrome такође <ph name="ESTIMATE_INTERESTS_LINK" /> која сајтови могу да користе да би вам приказивали огласе. Можете да управљате интересовањима у подешавањима.</translation> <translation id="608912389580139775">Да бисте додали ову страницу на листу за читање, кликните на икону обележивача</translation> <translation id="6091761513005122595">Дељена датотека је учитана.</translation> <translation id="6093888419484831006">Отказивање ажурирања...</translation> @@ -5918,6 +5918,7 @@ <translation id="6709133671862442373">Вести</translation> <translation id="6709357832553498500">Повежи се помоћу <ph name="EXTENSIONNAME" /></translation> <translation id="6710213216561001401">Претходно</translation> +<translation id="6710394144992407503">Проверите да ли има правописних грешака када уносите текст на веб-страницама</translation> <translation id="6711146141291425900">Повежите налог за услугу <ph name="WEB_DRIVE" /> ради преузимања</translation> <translation id="6712943853047024245">Већ сте сачували лозинку са овим корисничким именом за <ph name="WEBSITE" /></translation> <translation id="6713233729292711163">Додај пословни профил</translation> @@ -6539,6 +6540,7 @@ <translation id="7340757554212515731">Аутоматски шаљите извештаје о отказивању, као и дијагностику и податке о коришћењу Google-у</translation> <translation id="7341834142292923918">Жели да приступа овом сајту</translation> <translation id="7343372807593926528">Опишите проблем да бисте послали повратне информације.</translation> +<translation id="7344585835349671209">Управљајте HTTPS/SSL сертификатима на уређају</translation> <translation id="7345706641791090287">Потврдите лозинку</translation> <translation id="7346909386216857016">Важи</translation> <translation id="7347452120014970266">Овим бришете све податке и колачиће које чувају сајт <ph name="ORIGIN_NAME" /> и његове инсталиране апликације</translation> @@ -6668,6 +6670,7 @@ <translation id="7460045493116006516">Актуелна тема коју сте инсталирали</translation> <translation id="7461924472993315131">Закачи</translation> <translation id="746216226901520237">Следећи пут ће телефон откључати <ph name="DEVICE_TYPE" />. Можете да искључите Smart Lock у подешавањима.</translation> +<translation id="7464153996453281700">Компонента је већ ажурирана</translation> <translation id="7464637891177137294">Сачувајте је на Google налогу, <ph name="ACCOUNT" /></translation> <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{# отворена картица, притисните да бисте укључили/искључили траку са картицама}one{# отворена картица, притисните да бисте укључили/искључили траку са картицама}few{# отворене картице, притисните да бисте укључили/искључили траку са картицама}other{# отворених картица, притисните да бисте укључили/искључили траку са картицама}}</translation> <translation id="7465635034594602553">Дошло је до грешке. Сачекајте пар минута, па поново покрените апликацију <ph name="APP_NAME" />.</translation> @@ -7176,6 +7179,7 @@ <translation id="793531125873261495">Грешка при преузимању виртуелне машине. Пробајте поново.</translation> <translation id="7935451262452051102"><ph name="PERCENT" />% је завршено</translation> <translation id="7939062555109487992">Напредне опције</translation> +<translation id="7939328347457537652">Управљајте сертификатима уређаја</translation> <translation id="7939412583708276221">Ипак задржи</translation> <translation id="7942349550061667556">Црвена</translation> <translation id="7943368935008348579">Преузимајте PDF-ове</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb index e3e7748..04aa3c44 100644 --- a/chrome/app/resources/generated_resources_sv.xtb +++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -1296,7 +1296,6 @@ <translation id="2191754378957563929">På</translation> <translation id="2192505247865591433">Från:</translation> <translation id="2193365732679659387">Inställningar för tillförlitlighet</translation> -<translation id="2194554416429452547">Under provperioder utforskar Chrome olika sätt att begränsa skräppost, bedrägerier och delning mellan webbplatser. Chrome <ph name="ESTIMATE_INTERESTS_LINK" /> också. Dessa kan användas på webbplatser för att visa annonser. Du kan hantera dina intressen i inställningarna.</translation> <translation id="2194856509914051091">Tänk på detta</translation> <translation id="2195331105963583686">Du kan fortfarande använda <ph name="DEVICE_TYPE" /> efter det, men den får inte längre några automatiska program- eller säkerhetsuppdateringar</translation> <translation id="2195729137168608510">E-postskydd</translation> @@ -3281,6 +3280,7 @@ <translation id="4077919383365622693">All data och alla cookies som sparats av <ph name="SITE" /> raderas.</translation> <translation id="4078738236287221428">Alltid</translation> <translation id="4079140982534148664">Använd förbättrad stavningskontroll</translation> +<translation id="4081203444152654304">Sök i bilden med <ph name="VISUAL_SEARCH_PROVIDER" /></translation> <translation id="4081242589061676262">Det går inte att casta filen.</translation> <translation id="408223403876103285"><ph name="WEBSITE" /> har skickat en avisering till din telefon. Bekräfta din identitet genom att följa anvisningarna på telefonen.</translation> <translation id="4084682180776658562">Infoga bokmärke</translation> @@ -3676,6 +3676,7 @@ <translation id="4476590490540813026">Idrottare</translation> <translation id="4476659815936224889">Du kan skanna koden på telefonen med en app för att skanna QR-koder eller med vissa kameraappar.</translation> <translation id="4477015793815781985">Använd Ctrl, Alt eller ⌘</translation> +<translation id="4477379360383751882">Sök i bilden med <ph name="VISUAL_SEARCH_PROVIDER" /></translation> <translation id="4478664379124702289">Spara l&änk som...</translation> <translation id="4479424953165245642">Hantera kioskappar</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -4122,6 +4123,7 @@ <translation id="4900392736118574277">Startfliken har ändrats till <ph name="URL" />.</translation> <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz – med flätning</translation> <translation id="4900652253009739885">Det går inte att ta bort den enda brytaren som tilldelats Välj. Tryck på valfri tangent för att <ph name="RESPONSE" />.</translation> +<translation id="4901154724271753917">Utöka nyligen stängda</translation> <translation id="4901309472892185668">Välj experimentstatus för experimentet <ph name="EXPERIMENT_NAME" />.</translation> <translation id="49027928311173603">Policyn som laddades ned från servern är ogiltig: <ph name="VALIDATION_ERROR" />.</translation> <translation id="4906490889887219338">Konfigurera eller hantera filresurser i nätverk. <ph name="LINK_BEGIN" />Läs mer<ph name="LINK_END" /></translation> @@ -5302,6 +5304,7 @@ <translation id="6086846494333236931">Har installerats av administratören</translation> <translation id="6087746524533454243">Letar du webbläsarens about-sida? Besök</translation> <translation id="6087960857463881712">Entusiastiskt ansikte</translation> +<translation id="6088535503330933227">Chrome utforskar olika sätt att begränsa skräppost, bedrägerier och delning mellan webbplatser. Chrome <ph name="ESTIMATE_INTERESTS_LINK" /> också. Dessa kan användas på webbplatser för att visa annonser. Du kan hantera dina intressen i inställningarna.</translation> <translation id="608912389580139775">Om du vill lägga till den här sidan i läslistan klickar du på bokmärkesikonen</translation> <translation id="6091761513005122595">Den delade resursen har monterats.</translation> <translation id="6093888419484831006">Avbryter uppdatering ...</translation> @@ -7010,6 +7013,7 @@ <translation id="7768526219335215384"><ph name="ORIGIN" /> får läsbehörighet till filer i <ph name="FOLDERNAME" /></translation> <translation id="7768770796815395237">Ändra</translation> <translation id="7768784765476638775">Textuppläsning</translation> +<translation id="7769748505895274502">Komprimera nyligen stängda</translation> <translation id="7770406201819593386">Kör diagnostiska test av ChromeOS Flex.</translation> <translation id="7770450735129978837">Högerklick på musen</translation> <translation id="7770612696274572992">Bild kopierad från en annan enhet</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb index a4e279a..a1533d9 100644 --- a/chrome/app/resources/generated_resources_sw.xtb +++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -1292,7 +1292,6 @@ <translation id="2191754378957563929">Imewashwa</translation> <translation id="2192505247865591433">Kutoka:</translation> <translation id="2193365732679659387">Mipangilio ya kuamini</translation> -<translation id="2194554416429452547">Wakati wa vipindi vya kujaribu, Chrome inagundua njia za kuzuia taka, ulaghai na ushiriki miongoni mwa tovuti. Chrome pia <ph name="ESTIMATE_INTERESTS_LINK" /> ambayo tovuti zinaweza kutumia ili kukuonyesha matangazo. Unaweza kudhibiti mambo yanayokuvutia kwa kwenda kwenye mipangilio.</translation> <translation id="2194856509914051091">Mambo ya kuzingatia</translation> <translation id="2195331105963583686">Bado utaweza kutumia <ph name="DEVICE_TYPE" /> hii baada ya wakati huo, lakini haitapata tena masasisho ya kiotomatiki ya programu na usalama.</translation> <translation id="2195729137168608510">Ulinzi wa Barua Pepe</translation> @@ -3278,6 +3277,7 @@ <translation id="4077919383365622693">Vidakuzi na data yote inayohifadhiwa na <ph name="SITE" /> itafutwa.</translation> <translation id="4078738236287221428">Wenye kipaumbele</translation> <translation id="4079140982534148664">Tumia Kikagua Maendelezo Kilichoboreshwa</translation> +<translation id="4081203444152654304">Tafuta katika picha ukitumia <ph name="VISUAL_SEARCH_PROVIDER" /></translation> <translation id="4081242589061676262">Imeshindwa kutuma faili.</translation> <translation id="408223403876103285"><ph name="WEBSITE" /> imetuma arifa kwenye simu yako. Ili uthibitishe kwamba ni wewe, fuata hatua zilizo hapo.</translation> <translation id="4084682180776658562">Alamisho</translation> @@ -3671,6 +3671,7 @@ <translation id="4476590490540813026">Mwanariadha</translation> <translation id="4476659815936224889">Ili uchanganue msimbo huu, unaweza kutumia programu ya kichanganuzi cha QR kwenye simu yako au baadhi ya programu za kamera.</translation> <translation id="4477015793815781985">Jumuisha Ctrl, Alt, au ⌘</translation> +<translation id="4477379360383751882">Tafuta katika Picha ukitumia <ph name="VISUAL_SEARCH_PROVIDER" /></translation> <translation id="4478664379124702289">Hifadhi &Kiungo Kama...</translation> <translation id="4479424953165245642">Programu za kioski zinazodhibitiwa</translation> <translation id="4479639480957787382">Ethaneti</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb index 7b4d4b2..0baead6 100644 --- a/chrome/app/resources/generated_resources_ta.xtb +++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -1296,7 +1296,6 @@ <translation id="2191754378957563929">இயக்கப்பட்டுள்ளது</translation> <translation id="2192505247865591433">அனுப்புநர்:</translation> <translation id="2193365732679659387">நம்பிக்கை தொடர்பான அமைப்புகள்</translation> -<translation id="2194554416429452547">கட்டணமற்ற உபயோகக் காலத்தின்போது, ஸ்பேம், மோசடி, தளங்களுக்கு இடையே பகிர்தல் போன்றவற்றைக் குறைப்பதற்கான வழிகளை Chrome ஆராய்கிறது. Chrome <ph name="ESTIMATE_INTERESTS_LINK" />, இவற்றின் அடிப்படையில் விளம்பரங்களை உங்களுக்குக் காட்டுவதற்காகத் தளங்கள் பயன்படுத்தலாம். அமைப்புகளுக்குச் சென்று உங்கள் ஆர்வங்களை நிர்வகிக்கலாம்.</translation> <translation id="2194856509914051091">கருத்தில்கொள்ள வேண்டியவை</translation> <translation id="2195331105963583686">இருப்பினும் அதற்குப் பிறகும் இந்த <ph name="DEVICE_TYPE" /> சாதனத்தை நீங்கள் பயன்படுத்த முடியும். ஆனால் மென்பொருளும் பாதுகாப்பும் இனி தானாகவே புதுப்பிக்கப்படாது</translation> <translation id="2195729137168608510">மின்னஞ்சல் பாதுகாப்பு</translation> @@ -4122,6 +4121,7 @@ <translation id="4900392736118574277">துவக்கப் பக்கம் <ph name="URL" />க்கு மாற்றப்பட்டது.</translation> <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz - பிணைக்கப்பட்டுள்ளது</translation> <translation id="4900652253009739885">“தேர்ந்தெடு” என்பதற்கு ஒதுக்கப்பட்ட ஒற்றை ஸ்விட்ச்சை அகற்ற முடியாது. <ph name="RESPONSE" />, ஏதேனும் ஒரு பட்டனை அழுத்தவும்.</translation> +<translation id="4901154724271753917">சமீபத்தில் மூடியவற்றைக் காட்டும்</translation> <translation id="4901309472892185668"><ph name="EXPERIMENT_NAME" /> பரிசோதனைக்கான பரிசோதனை நிலையைத் தேர்ந்தெடுக்கவும்.</translation> <translation id="49027928311173603">சேவையகத்திலிருந்து பதிவிறக்கிய கொள்கை தவறானது: <ph name="VALIDATION_ERROR" />.</translation> <translation id="4906490889887219338">நெட்வொர்க் ஃபைல் பகிர்வுகளை அமைத்தல் அல்லது நிர்வகித்தல். <ph name="LINK_BEGIN" />மேலும் அறிக<ph name="LINK_END" /></translation> @@ -7011,6 +7011,7 @@ <translation id="7768526219335215384"><ph name="ORIGIN" /> டொமைனால் <ph name="FOLDERNAME" /> ஃபோல்டரில் உள்ள ஃபைல்களைப் படிக்க முடியும்</translation> <translation id="7768770796815395237">மாற்று</translation> <translation id="7768784765476638775">பேசும் திரை</translation> +<translation id="7769748505895274502">சமீபத்தில் மூடியவற்றை மறைக்கும்</translation> <translation id="7770406201819593386">ChromeOS Flex பிழை கண்டறிதல் சோதனைகளைச் செய்தல்.</translation> <translation id="7770450735129978837">மவுஸின் வலது கிளிக்</translation> <translation id="7770612696274572992">மற்றொரு சாதனத்திலிருந்து நகலெடுக்கப்பட்ட படம்</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb index e611251..1709784 100644 --- a/chrome/app/resources/generated_resources_te.xtb +++ b/chrome/app/resources/generated_resources_te.xtb
@@ -1295,7 +1295,6 @@ <translation id="2191754378957563929">ఆన్ చేయబడ్డాయి</translation> <translation id="2192505247865591433">నుండి:</translation> <translation id="2193365732679659387">విశ్వసనీయత సెట్టింగ్లు</translation> -<translation id="2194554416429452547">ట్రయల్స్ సమయంలో, స్పామ్, మోసంతో పాటు సైట్ల మధ్య షేరింగ్ను పరిమితం చేసే మార్గాలను Chrome అన్వేషిస్తోంది. Chrome <ph name="ESTIMATE_INTERESTS_LINK" />, ఆ అంచనాలను సైట్లు మీకు యాడ్లు చూపడానికి వినియోగించుకుంటాయి. మీరు మీ ఆసక్తులను సెట్టింగ్లలో మేనేజ్ చేయవచ్చు.</translation> <translation id="2194856509914051091">పరిగణించాల్సిన విషయాలు</translation> <translation id="2195331105963583686">మీరు ఆ సమయం తర్వాత కూడా ఈ <ph name="DEVICE_TYPE" />ను ఉపయోగించగలరు, కానీ ఆపై ఆటోమేటిక్ సాఫ్ట్వేర్, భద్రతాపరమైన అప్డేట్లు దీనికి అందించబడవు</translation> <translation id="2195729137168608510">ఈమెయిల్ రక్షణ</translation> @@ -3280,6 +3279,7 @@ <translation id="4077919383365622693"><ph name="SITE" /> ద్వారా నిల్వ చేయబడిన డేటాతో పాటు కుక్కీలన్నీ తొలగించబడతాయి.</translation> <translation id="4078738236287221428">తీవ్రం</translation> <translation id="4079140982534148664">మెరుగైన స్పెల్ చెక్ను ఉపయోగించు</translation> +<translation id="4081203444152654304">ఇమేజ్ లోపల <ph name="VISUAL_SEARCH_PROVIDER" />తో సెర్చ్ చేయండి</translation> <translation id="4081242589061676262">ఫైల్ని ప్రసారం చేయడం సాధ్యపడలేదు.</translation> <translation id="408223403876103285"><ph name="WEBSITE" /> మీ ఫోన్కు నోటిఫికేషన్ను పంపింది. అది మీరేనని నిర్ధారించడానికి, అక్కడ ఉన్న దశలను ఫాలో అవ్వండి.</translation> <translation id="4084682180776658562">బుక్మార్క్ చేయండి</translation> @@ -3675,6 +3675,7 @@ <translation id="4476590490540813026">అథ్లెట్</translation> <translation id="4476659815936224889">ఈ కోడ్ను స్కాన్ చేయడానికి, మీ ఫోన్ లేదా కొన్ని కెమెరా యాప్లలో QR స్కానర్ యాప్ను ఉపయోగించవచ్చు.</translation> <translation id="4477015793815781985">Ctrl, Alt లేదా ⌘ని చేర్చండి</translation> +<translation id="4477379360383751882">ఇమేజ్ లోపల <ph name="VISUAL_SEARCH_PROVIDER" />తో సెర్చ్ చేయండి</translation> <translation id="4478664379124702289">లిం&క్ను ఇలా సేవ్ చేయి...</translation> <translation id="4479424953165245642">కియోస్క్ యాప్లను నిర్వహించండి</translation> <translation id="4479639480957787382">ఈథర్నెట్</translation> @@ -5302,6 +5303,7 @@ <translation id="6086846494333236931">మీ నిర్వాహకుడు ఇన్స్టాల్ చేశారు</translation> <translation id="6087746524533454243">బ్రౌజర్కు సంబంధించిన వివరాల పేజీ కోసం వెతుకుతున్నారా? సందర్శించండి</translation> <translation id="6087960857463881712">అద్భుతమైన ముఖం</translation> +<translation id="6088535503330933227">యాడ్ స్పామ్, మోసంతో పాటు సైట్ల మధ్య షేరింగ్ను పరిమితం చేసే మార్గాలను Chrome అన్వేషిస్తోంది. Chrome <ph name="ESTIMATE_INTERESTS_LINK" />, ఆ అంచనాలను సైట్లు మీకు యాడ్లు చూపడానికి వినియోగించుకుంటాయి. మీరు మీ ఆసక్తులను సెట్టింగ్లలో మేనేజ్ చేయవచ్చు.</translation> <translation id="608912389580139775">ఈ పేజీని మీ చదవాల్సిన లిస్ట్కు జోడించడానికి, బుక్మార్క్ చిహ్నాన్ని క్లిక్ చేయండి</translation> <translation id="6091761513005122595">షేర్ విజయవంతంగా మౌంట్ చేయబడింది.</translation> <translation id="6093888419484831006">అప్డేట్ రద్దు చేయడం...</translation> @@ -5928,6 +5930,7 @@ <translation id="6709133671862442373">News</translation> <translation id="6709357832553498500"><ph name="EXTENSIONNAME" />ని ఉపయోగించి కనెక్ట్ చేయి</translation> <translation id="6710213216561001401">మునుపటి</translation> +<translation id="6710394144992407503">మీరు వెబ్ పేజీలలో టెక్స్ట్ను టైప్ చేసేటప్పుడు స్పెల్లింగ్ ఎర్రర్లను చెక్ చేయండి</translation> <translation id="6711146141291425900">డౌన్లోడ్ల కోసం <ph name="WEB_DRIVE" /> ఖాతాను లింక్ చేయండి</translation> <translation id="6712943853047024245"><ph name="WEBSITE" /> కోసం మీరు ఇప్పటికే ఈ యూజర్నేమ్తో పాస్వర్డ్ను సేవ్ చేశారు</translation> <translation id="6713233729292711163">వర్క్ ప్రొఫైల్ను జోడించండి</translation> @@ -6549,6 +6552,7 @@ <translation id="7340757554212515731">క్రాష్ రిపోర్ట్లు, అలాగే సమస్య విశ్లేషణలు, వినియోగ డేటాను ఆటోమేటిక్గా Googleకు పంపుతుంది</translation> <translation id="7341834142292923918">ఈ సైట్కు యాక్సెస్ కోరుతోంది</translation> <translation id="7343372807593926528">ఫీడ్బ్యాక్ను పంపేముందు దయచేసి సమస్యను వివరించండి.</translation> +<translation id="7344585835349671209">మీ పరికరంలో HTTPS/SSL సర్టిఫికెట్లను మేనేజ్ చేయండి</translation> <translation id="7345706641791090287">మీ పాస్వర్డ్ను నిర్ధారించండి</translation> <translation id="7346909386216857016">సరే, అర్థమైంది</translation> <translation id="7347452120014970266">దీనివలన <ph name="ORIGIN_NAME" />, అది ఇన్స్టాల్ చేసిన యాప్ల ద్వారా స్టోర్ అయిన మొత్తం డేటా, కుక్కీలు తొలగిపోతాయి</translation> @@ -6678,6 +6682,7 @@ <translation id="7460045493116006516">మీరు ప్రస్తుతం ఇన్స్టాల్ చేసుకున్న థీమ్</translation> <translation id="7461924472993315131">పిన్ చేయి</translation> <translation id="746216226901520237">తదుపరిసారి మీ ఫోన్ మీ <ph name="DEVICE_TYPE" />ను అన్లాక్ చేస్తుంది. మీరు సెట్టింగ్లలో Smart Lockను ఆఫ్ చేయవచ్చు.</translation> +<translation id="7464153996453281700">కాంపోనెంట్ ఇప్పటికే అప్డేట్ అయ్యి ఉంది</translation> <translation id="7464637891177137294">దీనిని మీ Google ఖాతా, <ph name="ACCOUNT" />లో సేవ్ చేయండి</translation> <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{# ట్యాబ్ తెరిచి, ట్యాబ్ స్ట్రిప్ను టోగుల్ చేయడానికి నొక్కండి}other{# ట్యాబ్లు తెరిచి, ట్యాబ్ స్ట్రిప్ను టోగుల్ చేయడానికి నొక్కండి}}</translation> <translation id="7465635034594602553">ఏదో తప్పు జరిగింది. దయచేసి కొద్ది నిమిషాలు వేచి ఉండి, <ph name="APP_NAME" />ను మళ్లీ రన్ చేయండి.</translation> @@ -7186,6 +7191,7 @@ <translation id="793531125873261495">వర్చువల్ మెషిన్ను డౌన్లోడ్ చేయడంలో ఎర్రర్ ఏర్పడింది. దయచేసి మళ్లీ ప్రయత్నించండి.</translation> <translation id="7935451262452051102"><ph name="PERCENT" />% పూర్తయింది</translation> <translation id="7939062555109487992">అధునాతన ఎంపికలు</translation> +<translation id="7939328347457537652">పరికర సర్టిఫికెట్లను మేనేజ్ చేయండి</translation> <translation id="7939412583708276221">ఏదేమైనా ఉంచు</translation> <translation id="7942349550061667556">ఎరుపు</translation> <translation id="7943368935008348579">PDFలను డౌన్లోడ్ చేయండి</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb index dca6b37c..294670f 100644 --- a/chrome/app/resources/generated_resources_th.xtb +++ b/chrome/app/resources/generated_resources_th.xtb
@@ -1284,7 +1284,6 @@ <translation id="2191754378957563929">เปิด</translation> <translation id="2192505247865591433">จาก:</translation> <translation id="2193365732679659387">การตั้งค่าความเชื่อถือ</translation> -<translation id="2194554416429452547">ระหว่างช่วงทดลองใช้ Chrome จะสำรวจวิธีจำกัดสแปม การประพฤติมิชอบ และการแชร์ระหว่างเว็บไซต์ Chrome จะ<ph name="ESTIMATE_INTERESTS_LINK" />ด้วย ซึ่งเว็บไซต์สามารถใช้ข้อมูลเพื่อแสดงโฆษณาแก่คุณ คุณจัดการความสนใจได้ในการตั้งค่า</translation> <translation id="2194856509914051091">สิ่งที่ควรพิจารณา</translation> <translation id="2195331105963583686">คุณยังคงใช้ <ph name="DEVICE_TYPE" /> นี้ได้หลังจากเวลานั้น แต่จะไม่ได้รับการอัปเดตซอฟต์แวร์และการอัปเดตการรักษาความปลอดภัยอัตโนมัติอีกต่อไป</translation> <translation id="2195729137168608510">การป้องกันอีเมล </translation> @@ -5286,6 +5285,7 @@ <translation id="6086846494333236931">ติดตั้งโดยผู้ดูแลระบบ</translation> <translation id="6087746524533454243">หากต้องการดูหน้าข้อมูลเกี่ยวกับเบราว์เซอร์ โปรดไปที่</translation> <translation id="6087960857463881712">ใบหน้าเจ๋ง</translation> +<translation id="6088535503330933227">Chrome จะสำรวจวิธีจำกัดสแปมโฆษณา การประพฤติมิชอบ และการแชร์ระหว่างเว็บไซต์ Chrome จะ<ph name="ESTIMATE_INTERESTS_LINK" />ด้วย ซึ่งเว็บไซต์สามารถใช้ข้อมูลเพื่อแสดงโฆษณาแก่คุณ คุณจัดการความสนใจได้ในการตั้งค่า</translation> <translation id="608912389580139775">คลิกไอคอนบุ๊กมาร์กเพื่อเพิ่มหน้านี้ลงในเรื่องรออ่าน</translation> <translation id="6091761513005122595">ต่อเชื่อมพื้นที่แชร์สำเร็จแล้ว</translation> <translation id="6093888419484831006">กำลังยกเลิกการอัปเดต…</translation> @@ -5912,6 +5912,7 @@ <translation id="6709133671862442373">ข่าวสาร</translation> <translation id="6709357832553498500">เชื่อมต่อโดยใช้ <ph name="EXTENSIONNAME" /></translation> <translation id="6710213216561001401">ก่อนหน้า</translation> +<translation id="6710394144992407503">ตรวจสอบข้อผิดพลาดของการสะกดคำเมื่อพิมพ์ข้อความในหน้าเว็บ</translation> <translation id="6711146141291425900">ลิงก์บัญชี <ph name="WEB_DRIVE" /> สำหรับไฟล์ดาวน์โหลด</translation> <translation id="6712943853047024245">คุณได้บันทึกรหัสผ่านไว้กับชื่อผู้ใช้นี้แล้วสำหรับ <ph name="WEBSITE" /></translation> <translation id="6713233729292711163">เพิ่มโปรไฟล์งาน</translation> @@ -6533,6 +6534,7 @@ <translation id="7340757554212515731">ส่งรายงานข้อขัดข้อง รวมถึงข้อมูลการวินิจฉัยและการใช้งานให้ Google โดยอัตโนมัติ</translation> <translation id="7341834142292923918">ต้องการเข้าถึงเว็บไซต์นี้</translation> <translation id="7343372807593926528">โปรดอธิบายปัญหาก่อนส่งความคิดเห็น</translation> +<translation id="7344585835349671209">จัดการใบรับรอง HTTPS/SSL ในอุปกรณ์</translation> <translation id="7345706641791090287">ยืนยันรหัสผ่าน</translation> <translation id="7346909386216857016">รับทราบ</translation> <translation id="7347452120014970266">การดำเนินการนี้จะล้างข้อมูลและคุกกี้ทั้งหมดที่ <ph name="ORIGIN_NAME" /> และแอปที่ติดตั้งโดยกลุ่มนี้จัดเก็บไว้</translation> @@ -6662,6 +6664,7 @@ <translation id="7460045493116006516">ธีมที่คุณติดตั้งอยู่ตอนนี้</translation> <translation id="7461924472993315131">ปักหมุด</translation> <translation id="746216226901520237">โทรศัพท์จะปลดล็อก <ph name="DEVICE_TYPE" /> ของคุณในครั้งถัดไป คุณปิด Smart Lock ได้ในการตั้งค่า</translation> +<translation id="7464153996453281700">คอมโพเนนต์เป็นเวอร์ชันล่าสุดแล้ว</translation> <translation id="7464637891177137294">บันทึกไว้ในบัญชี Google ของคุณ <ph name="ACCOUNT" /></translation> <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{มีแท็บที่เปิดอยู่ # แท็บ กดเพื่อสลับแนวแท็บ}other{มีแท็บที่เปิดอยู่ # แท็บ กดเพื่อสลับแนวแท็บ}}</translation> <translation id="7465635034594602553">เกิดข้อผิดพลาด โปรดรอสักครู่แล้วเรียกใช้ <ph name="APP_NAME" /> อีกครั้ง</translation> @@ -7170,6 +7173,7 @@ <translation id="793531125873261495">เกิดข้อผิดพลาดขณะดาวน์โหลดเครื่องเสมือน โปรดลองอีกครั้ง</translation> <translation id="7935451262452051102">เสร็จสมบูรณ์ <ph name="PERCENT" />%</translation> <translation id="7939062555109487992">ตัวเลือกขั้นสูง</translation> +<translation id="7939328347457537652">จัดการใบรับรองอุปกรณ์</translation> <translation id="7939412583708276221">เก็บเอาไว้ ไม่ว่าอย่างไรก็ตาม</translation> <translation id="7942349550061667556">สีแดง</translation> <translation id="7943368935008348579">ดาวน์โหลด PDF</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb index 54bd69c6..3bbe7046 100644 --- a/chrome/app/resources/generated_resources_tr.xtb +++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -1283,7 +1283,6 @@ <translation id="2191754378957563929">Açık</translation> <translation id="2192505247865591433">Nereden:</translation> <translation id="2193365732679659387">Güven ayarları</translation> -<translation id="2194554416429452547">Chrome, denemeler sırasında spam, sahtekarlık ve siteler arası paylaşımı kısıtlamanın yollarını arar. Chrome ayrıca sitelerin size reklam göstermek için kullanabileceği <ph name="ESTIMATE_INTERESTS_LINK" />. İlgi alanlarınızı ayarlardan yönetebilirsiniz.</translation> <translation id="2194856509914051091">Dikkate alınması gereken noktalar</translation> <translation id="2195331105963583686">Bundan sonra <ph name="DEVICE_TYPE" /> cihazını hâlâ kullanabileceksiniz ancak cihaz artık otomatik yazılım ve güvenlik güncellemelerini almayacak</translation> <translation id="2195729137168608510">E-posta Koruması</translation> @@ -3263,6 +3262,7 @@ <translation id="4077919383365622693"><ph name="SITE" /> web sitesinin depoladığı tüm veriler ve çerezler temizlenecek.</translation> <translation id="4078738236287221428">Yoğun</translation> <translation id="4079140982534148664">Gelişmiş Yazım Denetimini Kullan</translation> +<translation id="4081203444152654304"><ph name="VISUAL_SEARCH_PROVIDER" /> ile görselin içinde arama yap</translation> <translation id="4081242589061676262">Dosya yayınlanamıyor.</translation> <translation id="408223403876103285"><ph name="WEBSITE" />, telefonunuza bildirim gönderdi. Kimliğinizi doğrulamak için bildirimdeki adımları uygulayın.</translation> <translation id="4084682180776658562">Yer İşareti</translation> @@ -3658,6 +3658,7 @@ <translation id="4476590490540813026">Sporcu</translation> <translation id="4476659815936224889">Bu kodu taramak için telefonunuzda bir QR tarayıcı uygulamasını veya bazı kamera uygulamalarını kullanabilirsiniz.</translation> <translation id="4477015793815781985">Ctrl, Alt veya ⌘ tuşuna da basın</translation> +<translation id="4477379360383751882"><ph name="VISUAL_SEARCH_PROVIDER" /> ile Görselin İçinde Arama Yap</translation> <translation id="4478664379124702289">Bağl&antıyı Farklı Kaydet...</translation> <translation id="4479424953165245642">Kiosk uygulamalarını yönet</translation> <translation id="4479639480957787382">Ethernet</translation> @@ -5285,6 +5286,7 @@ <translation id="6086846494333236931">Yöneticiniz tarafından yüklendi</translation> <translation id="6087746524533454243">Tarayıcı bilgisi sayfasını mı arıyorsunuz? Şu adresi ziyaret edin:</translation> <translation id="6087960857463881712">Çok beğenen</translation> +<translation id="6088535503330933227">Chrome; reklam spam'i, sahtekarlık ve siteler arası paylaşımı kısıtlamanın yollarını arar. Chrome ayrıca sitelerin size reklam göstermek için kullanabileceği <ph name="ESTIMATE_INTERESTS_LINK" />. İlgi alanlarınızı ayarlardan yönetebilirsiniz.</translation> <translation id="608912389580139775">Bu sayfayı okuma listenize eklemek için Yer İşareti simgesini tıklayın</translation> <translation id="6091761513005122595">Paylaşım başarıyla eklendi.</translation> <translation id="6093888419484831006">Güncelleme iptal ediliyor...</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb index ac38e418..058f63a 100644 --- a/chrome/app/resources/generated_resources_uk.xtb +++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -1299,7 +1299,6 @@ <translation id="2191754378957563929">Увімкнено</translation> <translation id="2192505247865591433">Від:</translation> <translation id="2193365732679659387">Налаштування довіри</translation> -<translation id="2194554416429452547">Під час пробних періодів Chrome досліджує способи протидіяти спаму й шахрайству, а також обмежити обмін даними між сайтами. Chrome також <ph name="ESTIMATE_INTERESTS_LINK" />, які можуть використовувати інші сайти для показу оголошень. Ви можете керувати своїми інтересами в налаштуваннях.</translation> <translation id="2194856509914051091">Що варто врахувати</translation> <translation id="2195331105963583686">Після цього ви й надалі зможете користуватися пристроєм <ph name="DEVICE_TYPE" />, але він не буде отримувати автоматичні оновлення програмного забезпечення й системи безпеки</translation> <translation id="2195729137168608510">Захист електронної пошти</translation> @@ -3284,6 +3283,7 @@ <translation id="4077919383365622693">Усі дані й файли cookie, збережені сайтом <ph name="SITE" />, буде видалено.</translation> <translation id="4078738236287221428">Примусово</translation> <translation id="4079140982534148664">Використовувати покращену перевірку орфографії</translation> +<translation id="4081203444152654304">Пошук на зображенні через <ph name="VISUAL_SEARCH_PROVIDER" /></translation> <translation id="4081242589061676262">Не вдається транслювати файл.</translation> <translation id="408223403876103285"><ph name="WEBSITE" /> надсилає сповіщення на ваш телефон. Щоб підтвердити свою особу, виконайте вказівки в ньому.</translation> <translation id="4084682180776658562">Закладка</translation> @@ -3679,6 +3679,7 @@ <translation id="4476590490540813026">Спортсменка</translation> <translation id="4476659815936224889">Ви можете зісканувати цей код за допомогою QR-сканера на телефоні або в деяких додатках для камери.</translation> <translation id="4477015793815781985">Натискайте Ctrl, Alt або ⌘</translation> +<translation id="4477379360383751882">Пошук на зображенні через <ph name="VISUAL_SEARCH_PROVIDER" /></translation> <translation id="4478664379124702289">Зберегти посиланн&я як...</translation> <translation id="4479424953165245642">Керувати додатками-терміналами</translation> <translation id="4479639480957787382">Ethernet</translation>
diff --git a/chrome/app/resources/generated_resources_ur.xtb b/chrome/app/resources/generated_resources_ur.xtb index fab8cbd..47dea76 100644 --- a/chrome/app/resources/generated_resources_ur.xtb +++ b/chrome/app/resources/generated_resources_ur.xtb
@@ -1285,7 +1285,6 @@ <translation id="2191754378957563929">آن</translation> <translation id="2192505247865591433">منجانب:</translation> <translation id="2193365732679659387">ٹرسٹ کی ترتیبات</translation> -<translation id="2194554416429452547">ٹرائلز کے دوران، Chrome سپام، دھوکہ اور سائٹس کے درمیان اشتراک کو محدود کرنے کے طریقے دریافت کر رہا ہے۔ Chrome <ph name="ESTIMATE_INTERESTS_LINK" /> کرتا ہے جو سائٹس آپ کو اشتہارات دکھانے کے لیے استعمال کر سکتی ہیں۔ آپ ترتیبات میں اپنی دلچسپیوں کا نظم کر سکتے ہیں۔</translation> <translation id="2194856509914051091">قابل غور چیزیں</translation> <translation id="2195331105963583686">اس وقت کے بعد، آپ اب بھی اس <ph name="DEVICE_TYPE" /> کا استعمال کر سکیں گے، لیکن اب اسے خودکار سافٹ ویئر اور سیکیورٹی اپ ڈیٹس حاصل نہیں ہوں گی</translation> <translation id="2195729137168608510">ای میل کا تحفظ</translation> @@ -3267,6 +3266,7 @@ <translation id="4077919383365622693"><ph name="SITE" /> کا اسٹور کردہ تمام ڈیٹا اور کوکیز کو صاف کر دیا جائے گا۔</translation> <translation id="4078738236287221428">پرجوش</translation> <translation id="4079140982534148664">املا کی بہتر جانچ استعمال کریں</translation> +<translation id="4081203444152654304"><ph name="VISUAL_SEARCH_PROVIDER" /> کے ساتھ تصویر کے اندر تلاش کریں</translation> <translation id="4081242589061676262">فائل کاسٹ کرنے سے قاصر۔</translation> <translation id="408223403876103285"><ph name="WEBSITE" /> نے آپ کے فون پر ایک اطلاع بھیجی ہے۔ اس بات کی تصدیق کرنے کیلئے کہ یہ آپ ہی ہیں، وہاں پر دئیے گئے مراحل کی پیروی کریں۔</translation> <translation id="4084682180776658562">بُک مارک</translation> @@ -3662,6 +3662,7 @@ <translation id="4476590490540813026">کھلاڑی</translation> <translation id="4476659815936224889">یہ کوڈ اسکین کرنے کیلئے، آپ اپنے فون یا کچھ کیمرا ایپس پر ایک QR اسکینر ایپ کا استعمال کر سکتے ہیں۔</translation> <translation id="4477015793815781985">Ctrl، Alt یا ⌘ شامل کریں</translation> +<translation id="4477379360383751882"><ph name="VISUAL_SEARCH_PROVIDER" /> کے ساتھ تصویر کے اندر تلاش کریں</translation> <translation id="4478664379124702289">&لنک محفوظ کریں بطور…</translation> <translation id="4479424953165245642">کیوسک ایپلیکیشنز کا نظم کریں</translation> <translation id="4479639480957787382">ایتھرنیٹ</translation> @@ -4107,6 +4108,7 @@ <translation id="4900392736118574277">آپ کا ابتدائی صفحہ <ph name="URL" /> پر تبدیل کر دیا گیا۔</translation> <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz - انٹرلیسڈ</translation> <translation id="4900652253009739885">"منتخب کرنے" کے لئے تفویض کردہ سوئچ ہی ہٹایا نہیں جا سکتا۔ <ph name="RESPONSE" /> دینے کیلئے کوئی کلید دبائیں۔</translation> +<translation id="4901154724271753917">حال ہی میں بند کو پھیلائیں</translation> <translation id="4901309472892185668"><ph name="EXPERIMENT_NAME" /> تجربے کے لیے تجربے کی حالت منتخب کریں۔</translation> <translation id="49027928311173603">سرور سے ڈاؤن لوڈ کردہ پالیسی غلط ہے: <ph name="VALIDATION_ERROR" />۔</translation> <translation id="4906490889887219338">نیٹ ورک فائل کے اشتراکات کو سیٹ اپ کریں یا ان کا نظم کریں۔ <ph name="LINK_BEGIN" />مزید جانیں<ph name="LINK_END" /></translation> @@ -5286,6 +5288,7 @@ <translation id="6086846494333236931">آپ کے منتظم نے انسٹال کیا ہے</translation> <translation id="6087746524533454243">براؤزر کے تعارف کا صفحہ تلاش کر رہے ہیں؟ ملاحظہ کریں</translation> <translation id="6087960857463881712">زبردست چہرہ</translation> +<translation id="6088535503330933227">Chrome اشتہار سے متعلق اسپام، دھوکہ اور سائٹس کے درمیان اشتراک کو محدود کرنے کے طریقے دریافت کر رہا ہے۔ Chrome <ph name="ESTIMATE_INTERESTS_LINK" /> بھی کرتا ہے جو سائٹس آپ کو اشتہارات دکھانے کے لیے استعمال کر سکتی ہیں۔ آپ ترتیبات میں اپنی دلچسپیوں کا نظم کر سکتے ہیں۔</translation> <translation id="608912389580139775">اس صفحے کو اپنی پڑھنے کی فہرست میں شامل کرنے کیلئے بُک مارک آئیکن پر کلک کریں</translation> <translation id="6091761513005122595">اشتراک کو کامیابی کے ساتھ ماؤنٹ کر دیا گیا۔</translation> <translation id="6093888419484831006">اپ ڈیٹ منسوخ کیا جا رہا ہے…</translation> @@ -6994,6 +6997,7 @@ <translation id="7768526219335215384"><ph name="ORIGIN" /> <ph name="FOLDERNAME" /> میں سبھی فائلز کو دیکھ سکے گا</translation> <translation id="7768770796815395237">تبدیل کریں</translation> <translation id="7768784765476638775">سننے کیلئے منتخب کریں</translation> +<translation id="7769748505895274502">حال ہی میں بند کو سکیڑیں</translation> <translation id="7770406201819593386">ChromeOS Flex تشخیصی ٹیسٹس چلائیں۔</translation> <translation id="7770450735129978837">ماؤس کی دائیں کلک</translation> <translation id="7770612696274572992">دوسرے آلے سے تصویر کاپی کی گئی</translation>
diff --git a/chrome/app/resources/generated_resources_uz.xtb b/chrome/app/resources/generated_resources_uz.xtb index 4c7131d..f07a962 100644 --- a/chrome/app/resources/generated_resources_uz.xtb +++ b/chrome/app/resources/generated_resources_uz.xtb
@@ -1283,7 +1283,6 @@ <translation id="2191754378957563929">Yoniq</translation> <translation id="2192505247865591433">Qayerdan:</translation> <translation id="2193365732679659387">Ishonch sozlamalari</translation> -<translation id="2194554416429452547">Sinov davrida Chrome spam, firibgarlik va saytlararo fayl almashinuviga qarshi kurash usullarini oʻrganadi. Shuningdek, Chrome sizga reklama chiqaradigan saytlarda <ph name="ESTIMATE_INTERESTS_LINK" />. Qiziqishlarni sozlamalr orqali boshqarish mumkin.</translation> <translation id="2194856509914051091">Bularni hisobga olish kerak</translation> <translation id="2195331105963583686">Bundan keyin ham <ph name="DEVICE_TYPE" /> qurilmasidan foydalanish mumkin, faqatgina uning dasturlari va xavfsizlik sozlamalari avtomatik yangilanmaydi</translation> <translation id="2195729137168608510">Elektron pochta himoyasi</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb index 54b7a8b81..b2791d7e 100644 --- a/chrome/app/resources/generated_resources_vi.xtb +++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -1296,7 +1296,6 @@ <translation id="2191754378957563929">Đang bật</translation> <translation id="2192505247865591433">Từ:</translation> <translation id="2193365732679659387">Cài đặt tin cậy</translation> -<translation id="2194554416429452547">Trong khi thử nghiệm, Chrome vẫn tiếp tục cải tiến các phương pháp để hạn chế thư rác, hành vi gian lận và hoạt động chia sẻ giữa các trang. Chrome cũng <ph name="ESTIMATE_INTERESTS_LINK" /> mà các trang web có thể sử dụng để hiện quảng cáo cho bạn. Bạn có thể quản lý những gì bạn quan tâm trong phần cài đặt.</translation> <translation id="2194856509914051091">Những yếu tố cần xem xét</translation> <translation id="2195331105963583686">Bạn vẫn có thể sử dụng <ph name="DEVICE_TYPE" /> này sau thời gian đó, nhưng thiết bị sẽ không nhận được các bản cập nhật bảo mật và phần mềm tự động nữa</translation> <translation id="2195729137168608510">Bảo vệ Email</translation> @@ -5305,6 +5304,7 @@ <translation id="6086846494333236931">Do quản trị viên của bạn cài đặt</translation> <translation id="6087746524533454243">Bạn đang tìm trình duyệt giới thiệu trang? Hãy truy cập</translation> <translation id="6087960857463881712">Khuôn mặt vui nhộn</translation> +<translation id="6088535503330933227">Chrome đang nghiên cứu các phương pháp hạn chế quảng cáo không liên quan, hành vi gian lận và hoạt động chia sẻ giữa các trang web. Chrome cũng <ph name="ESTIMATE_INTERESTS_LINK" /> mà các trang web có thể sử dụng để hiện quảng cáo cho bạn. Bạn có thể vào phần cài đặt để quản lý các mối quan tâm của mình.</translation> <translation id="608912389580139775">Để thêm trang này vào danh sách đọc, hãy nhấp vào biểu tượng Dấu trang</translation> <translation id="6091761513005122595">Đã kết nối thành công với thư mục chia sẻ.</translation> <translation id="6093888419484831006">Đang hủy cập nhật...</translation> @@ -5931,6 +5931,7 @@ <translation id="6709133671862442373">Tin tức</translation> <translation id="6709357832553498500">Kết nối bằng <ph name="EXTENSIONNAME" /></translation> <translation id="6710213216561001401">Trước</translation> +<translation id="6710394144992407503">Kiểm tra lỗi chính tả khi bạn nhập văn bản trên các trang web</translation> <translation id="6711146141291425900">Liên kết với tài khoản <ph name="WEB_DRIVE" /> cho mục Tải xuống</translation> <translation id="6712943853047024245">Bạn đã lưu mật khẩu cho tên người dùng này trên <ph name="WEBSITE" /></translation> <translation id="6713233729292711163">Thêm hồ sơ công việc</translation> @@ -6552,6 +6553,7 @@ <translation id="7340757554212515731">Tự động gửi báo cáo sự cố cũng như thông tin chẩn đoán và dữ liệu sử dụng cho Google</translation> <translation id="7341834142292923918">Muốn truy cập vào trang web này</translation> <translation id="7343372807593926528">Vui lòng mô tả sự cố trước khi gửi ý kiến phản hồi.</translation> +<translation id="7344585835349671209">Quản lý chứng chỉ HTTPS/SSL trên thiết bị của bạn</translation> <translation id="7345706641791090287">Xác nhận mật khẩu của bạn</translation> <translation id="7346909386216857016">Ok</translation> <translation id="7347452120014970266">Thao tác này sẽ xóa toàn bộ dữ liệu và cookie lưu trữ trong <ph name="ORIGIN_NAME" /> cũng như các ứng dụng đã cài đặt thuộc nguồn này</translation> @@ -6681,6 +6683,7 @@ <translation id="7460045493116006516">Giao diện hiện tại mà bạn đã cài đặt</translation> <translation id="7461924472993315131">Ghim</translation> <translation id="746216226901520237">Vào lần tới, điện thoại của bạn sẽ mở khóa <ph name="DEVICE_TYPE" />. Bạn có thể tắt tính năng Smart Lock trong phần Cài đặt.</translation> +<translation id="7464153996453281700">Thành phần đã được cập nhật</translation> <translation id="7464637891177137294">Lưu mật khẩu vào Tài khoản Google của bạn, <ph name="ACCOUNT" /></translation> <translation id="7465522323587461835">{NUM_OPEN_TABS,plural, =1{# thẻ đang mở, nhấn để ẩn/hiện thanh thẻ}other{# thẻ đang mở, nhấn để ẩn/hiện thanh thẻ}}</translation> <translation id="7465635034594602553">Đã xảy ra lỗi. Vui lòng đợi vài phút rồi chạy lại <ph name="APP_NAME" />.</translation> @@ -7190,6 +7193,7 @@ <translation id="793531125873261495">Lỗi khi tải máy ảo xuống. Vui lòng thử lại.</translation> <translation id="7935451262452051102">Đã hoàn thành <ph name="PERCENT" />%</translation> <translation id="7939062555109487992">Tùy chọn nâng cao</translation> +<translation id="7939328347457537652">Quản lý chứng chỉ thiết bị</translation> <translation id="7939412583708276221">Vẫn tiếp tục</translation> <translation id="7942349550061667556">Đỏ</translation> <translation id="7943368935008348579">Tải tệp PDF xuống</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb index a4874096..eb9cabcc 100644 --- a/chrome/app/resources/generated_resources_zh-CN.xtb +++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -1277,7 +1277,6 @@ <translation id="2191754378957563929">已开启</translation> <translation id="2192505247865591433">来源:</translation> <translation id="2193365732679659387">信任设置</translation> -<translation id="2194554416429452547">在试用版阶段,Chrome 会探索各种方式来限制网络垃圾、欺诈行为以及网站间共享。Chrome 还会<ph name="ESTIMATE_INTERESTS_LINK" />以供网站用于向您展示广告。您可在设置中管理自己的兴趣。</translation> <translation id="2194856509914051091">注意事项</translation> <translation id="2195331105963583686">在此之后,您仍能使用此 <ph name="DEVICE_TYPE" />,但它将无法继续自动完成软件更新和安全更新</translation> <translation id="2195729137168608510">电子邮件保护</translation> @@ -4094,6 +4093,7 @@ <translation id="4900392736118574277">您的启动页已改为 <ph name="URL" />。</translation> <translation id="490051679772058907"><ph name="REFRESH_RATE" /> 赫兹 - 隔行扫描</translation> <translation id="4900652253009739885">这是为“选择”操作分配的唯一开关键,因此无法移除。按任意键即可<ph name="RESPONSE" />。</translation> +<translation id="4901154724271753917">展开“最近关闭的标签页”部分</translation> <translation id="4901309472892185668">请为实验“<ph name="EXPERIMENT_NAME" />”选择实验状态。</translation> <translation id="49027928311173603">从服务器下载的策略无效:<ph name="VALIDATION_ERROR" />。</translation> <translation id="4906490889887219338">设置或管理网络文件共享。<ph name="LINK_BEGIN" />了解详情<ph name="LINK_END" /></translation> @@ -5271,6 +5271,7 @@ <translation id="6086846494333236931">这是您的管理员安装的</translation> <translation id="6087746524533454243">想要查看浏览器简介页面?请访问</translation> <translation id="6087960857463881712">酷炫表情</translation> +<translation id="6088535503330933227">Chrome 会探索各种方式来限制垃圾广告、欺诈行为以及网站间共享。Chrome 还会<ph name="ESTIMATE_INTERESTS_LINK" />以供网站用于向您展示广告。您可在设置中管理自己的兴趣。</translation> <translation id="608912389580139775">若要将此网页添加到您的阅读清单中,请点击“书签”图标</translation> <translation id="6091761513005122595">已成功装载共享资源。</translation> <translation id="6093888419484831006">正在取消更新...</translation> @@ -6979,6 +6980,7 @@ <translation id="7768526219335215384"><ph name="ORIGIN" /> 将能够查看“<ph name="FOLDERNAME" />”中的文件</translation> <translation id="7768770796815395237">更改</translation> <translation id="7768784765476638775">随选朗读</translation> +<translation id="7769748505895274502">收起“最近关闭的标签页”部分</translation> <translation id="7770406201819593386">运行 ChromeOS Flex 诊断测试。</translation> <translation id="7770450735129978837">用鼠标右键点击</translation> <translation id="7770612696274572992">从其他设备复制的图片</translation>
diff --git a/chrome/app/resources/generated_resources_zh-HK.xtb b/chrome/app/resources/generated_resources_zh-HK.xtb index 1078e358..cd1839f 100644 --- a/chrome/app/resources/generated_resources_zh-HK.xtb +++ b/chrome/app/resources/generated_resources_zh-HK.xtb
@@ -999,6 +999,7 @@ <translation id="1916502483199172559">預設紅色圖示</translation> <translation id="1918141783557917887">縮小(&S)</translation> <translation id="1920390473494685033">聯絡人</translation> +<translation id="1921544956190977703">Chrome 最強大的安全防護機制可協助防範不安全的網站、下載內容和擴充功能</translation> <translation id="1921584744613111023"><ph name="DPI" /> dpi</translation> <translation id="1923468477587371721">除非您已變更個別產品的語言設定,否則 Gmail、雲端硬碟和 YouTube 等 Google 網站會使用您在 Google 帳戶中設定的語言</translation> <translation id="192494336144674234">選擇開啟程式</translation> @@ -1296,7 +1297,6 @@ <translation id="2191754378957563929">開啟</translation> <translation id="2192505247865591433">來自:</translation> <translation id="2193365732679659387">信任設定</translation> -<translation id="2194554416429452547">在試用期間,Chrome 會研究如何防範垃圾郵件和欺詐行為,以及限制網站之間分享資訊的方法。Chrome 亦會<ph name="ESTIMATE_INTERESTS_LINK" />,並讓網站使用這些興趣來向您展示廣告。您可在設定中管理興趣。</translation> <translation id="2194856509914051091">考慮因素</translation> <translation id="2195331105963583686">您仍可在該時間點後使用此 <ph name="DEVICE_TYPE" />,但屆時此裝置將無法自動取得軟件和安全性更新</translation> <translation id="2195729137168608510">電郵保護</translation> @@ -2104,6 +2104,7 @@ <ph name="DOMAIN" /> 需要您繼續插入智能卡。</translation> <translation id="2923234477033317484">移除此帳戶</translation> <translation id="2923644930701689793">存取手機的相機膠卷</translation> +<translation id="292371311537977079">Chrome 設定</translation> <translation id="2925658782192398150">已完成,未發現任何問題</translation> <translation id="2926085873880284723">還原預設捷徑</translation> <translation id="2926620265753325858">不支援 <ph name="DEVICE_NAME" /></translation> @@ -2688,6 +2689,7 @@ <translation id="3511528412952710609">短</translation> <translation id="3514335087372914653">遊戲控制項</translation> <translation id="3514373592552233661">如有多個已知網絡可供使用,系統會優先使用慣用網絡</translation> +<translation id="3514647716686280777">你即將使用標準安全防護機制。如要進一步防範不安全的網站、下載內容和擴充功能,請在 Chrome 設定中啟用「安全瀏覽強化防護功能」。</translation> <translation id="3515983984924808886">再次輕觸安全密鑰即可確認重設。此安全密鑰上儲存的所有資料 (包括 PIN) 將被刪除。</translation> <translation id="3518985090088779359">接受並繼續</translation> <translation id="3519564332031442870">列印後端服務</translation> @@ -3281,7 +3283,7 @@ <translation id="4077919383365622693">系統將會清除所有 <ph name="SITE" /> 儲存的資料和 Cookie。</translation> <translation id="4078738236287221428">積極</translation> <translation id="4079140982534148664">使用進階拼字檢查功能</translation> -<translation id="4081203444152654304">使用 <ph name="VISUAL_SEARCH_PROVIDER" /> 在圖片內搜尋</translation> +<translation id="4081203444152654304">透過「<ph name="VISUAL_SEARCH_PROVIDER" />」在圖片中搜尋</translation> <translation id="4081242589061676262">無法投放檔案。</translation> <translation id="408223403876103285"><ph name="WEBSITE" /> 已傳送通知到您的手機。如要確認您的身份,請按照該網站的步驟操作。</translation> <translation id="4084682180776658562">書籤</translation> @@ -3677,7 +3679,7 @@ <translation id="4476590490540813026">運動員</translation> <translation id="4476659815936224889">如要掃瞄此條碼,您可使用手機上的二維條碼掃瞄器或部分相機應用程式。</translation> <translation id="4477015793815781985">必須以 Ctrl、Alt 或 ⌘ 鍵開頭</translation> -<translation id="4477379360383751882">使用 <ph name="VISUAL_SEARCH_PROVIDER" /> 在圖片內搜尋</translation> +<translation id="4477379360383751882">透過「<ph name="VISUAL_SEARCH_PROVIDER" />」在圖片中搜尋</translation> <translation id="4478664379124702289">另存連結(&K)…</translation> <translation id="4479424953165245642">管理 Kiosk 應用程式</translation> <translation id="4479639480957787382">以太網絡</translation> @@ -5302,6 +5304,7 @@ <translation id="6086846494333236931">已由管理員安裝</translation> <translation id="6087746524533454243">要查看瀏覽器的「關於」頁面嗎?請前往</translation> <translation id="6087960857463881712">開懷大笑</translation> +<translation id="6088535503330933227">Chrome 正在研究如何防範垃圾廣告和欺詐行為,以及限制網站之間分享資訊的方法。Chrome 亦會<ph name="ESTIMATE_INTERESTS_LINK" />,並讓網站使用這些興趣來向您展示廣告。您可在設定中管理興趣。</translation> <translation id="608912389580139775">如要將網頁加入您的閱讀清單,請按一下「書籤」圖示</translation> <translation id="6091761513005122595">已成功連接共用裝置。</translation> <translation id="6093888419484831006">正在取消更新…</translation> @@ -5492,6 +5495,7 @@ <translation id="6278428485366576908">主題背景</translation> <translation id="6278776436938569440">變更位置</translation> <translation id="6279183038361895380">按下 |<ph name="ACCELERATOR" />| 即可顯示游標</translation> +<translation id="6279595948631688299">匯出選取的憑證(&X)...</translation> <translation id="6280215091796946657">使用其他帳戶登入</translation> <translation id="6280912520669706465">ARC</translation> <translation id="6282180787514676874">{COUNT,plural, =1{超出 1 張紙的限制}other{超出 {COUNT} 張紙的限制}}</translation> @@ -5606,6 +5610,7 @@ <translation id="6398715114293939307">移除 Google Play 商店</translation> <translation id="6398765197997659313">退出全螢幕模式</translation> <translation id="6399774419735315745">間諜</translation> +<translation id="6401458660421980302">如要將這個分頁傳送到其他裝置,請在該裝置上登入 Chrome</translation> <translation id="6401597285454423070">您的電腦具有可信任平台模組 (TPM) 安全性裝置,Chrome OS 需要透過該裝置來執行許多重要的安全防護功能。如要進一步瞭解,請瀏覽 Chromebook 說明中心:https://support.google.com/chromebook/?p=tpm</translation> <translation id="6404187344102273690">Chromebook 遊戲</translation> <translation id="6404511346730675251">編輯書籤</translation> @@ -5842,6 +5847,7 @@ <translation id="6619801788773578757">新增 Kiosk 應用程式</translation> <translation id="6619990499523117484">確認您的 PIN</translation> <translation id="6620254580880484313">容器名稱</translation> +<translation id="6621391692573306628">如要將這個分頁傳送到其他裝置,請在這兩部裝置上登入 Chrome</translation> <translation id="6622980291894852883">繼續封鎖圖片</translation> <translation id="6624036901798307345">在平板電腦模式中,輕按分頁計數器工具列按鈕便可開啟新的分頁列,並顯示每個分頁的縮圖。</translation> <translation id="6624535038674360844"><ph name="FILE_NAME" /> 含有敏感或危險的內容。請要求擁有者修正。</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb index 604fd58..3ebce19 100644 --- a/chrome/app/resources/generated_resources_zh-TW.xtb +++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -987,6 +987,7 @@ <translation id="1916502483199172559">預設的紅色顯示圖片</translation> <translation id="1918141783557917887">縮小(&S)</translation> <translation id="1920390473494685033">聯絡人</translation> +<translation id="1921544956190977703">Chrome 最強大的安全防護機制可協助防範不安全的網站、下載內容和擴充功能</translation> <translation id="1921584744613111023"><ph name="DPI" /> dpi</translation> <translation id="1923468477587371721">除非你已變更個別產品的語言設定,否則 Gmail、雲端硬碟和 YouTube 等 Google 網站會使用你在 Google 帳戶中設定的語言</translation> <translation id="192494336144674234">選擇開啟工具</translation> @@ -1284,7 +1285,6 @@ <translation id="2191754378957563929">開啟</translation> <translation id="2192505247865591433">來源:</translation> <translation id="2193365732679659387">信任設定</translation> -<translation id="2194554416429452547">在試用期間,Chrome 會探索如何防範垃圾內容和詐欺行為,以及限制網站之間分享資訊的方法。Chrome 還會<ph name="ESTIMATE_INTERESTS_LINK" />,讓網站可以使用這項資訊向你顯示廣告。你可以前往設定管理自己的興趣喜好。</translation> <translation id="2194856509914051091">注意事項</translation> <translation id="2195331105963583686">你仍然可以在該時間點之後使用這部 <ph name="DEVICE_TYPE" />,但屆時這部裝置將無法自動取得軟體和安全性更新</translation> <translation id="2195729137168608510">電子郵件保護</translation> @@ -2089,6 +2089,7 @@ <ph name="DOMAIN" /> 需要你插入智慧型卡片,不得拔出。</translation> <translation id="2923234477033317484">移除這個帳戶</translation> <translation id="2923644930701689793">存取手機的相機膠卷</translation> +<translation id="292371311537977079">Chrome 設定</translation> <translation id="2925658782192398150">已完成,未發現任何問題</translation> <translation id="2926085873880284723">還原預設捷徑</translation> <translation id="2926620265753325858">不支援「<ph name="DEVICE_NAME" />」。</translation> @@ -2673,6 +2674,7 @@ <translation id="3511528412952710609">短</translation> <translation id="3514335087372914653">遊戲控制項</translation> <translation id="3514373592552233661">如有多個可用網路,慣用網路的優先使用順序高於其他已知網路</translation> +<translation id="3514647716686280777">你即將使用標準安全防護機制。如要進一步防範不安全的網站、下載內容和擴充功能,請在 Chrome 設定中啟用「安全瀏覽強化防護功能」。</translation> <translation id="3515983984924808886">請再次輕觸安全金鑰以確認重設。這個安全金鑰上儲存的所有資訊 (包括 PIN 碼) 都將遭到刪除。</translation> <translation id="3518985090088779359">接受並繼續</translation> <translation id="3519564332031442870">列印後端服務</translation> @@ -5285,6 +5287,7 @@ <translation id="6086846494333236931">由您的管理員安裝</translation> <translation id="6087746524533454243">要查看瀏覽器的「關於」頁面嗎?請前往</translation> <translation id="6087960857463881712">好看的臉蛋</translation> +<translation id="6088535503330933227">Chrome 會探索如何防範垃圾內容和詐欺行為,以及限制網站之間分享資訊的方法。Chrome 還會<ph name="ESTIMATE_INTERESTS_LINK" />,讓網站可以使用這項資訊向你顯示廣告。你可以前往設定管理自己的興趣喜好。</translation> <translation id="608912389580139775">如要將這個網頁加入閱讀清單,請按一下「書籤」圖示</translation> <translation id="6091761513005122595">已成功共用掛接的裝置。</translation> <translation id="6093888419484831006">正在取消更新...</translation> @@ -5474,6 +5477,7 @@ <translation id="6278428485366576908">主題</translation> <translation id="6278776436938569440">變更位置</translation> <translation id="6279183038361895380">按下 |<ph name="ACCELERATOR" />| 即可顯示游標</translation> +<translation id="6279595948631688299">匯出選取的憑證(&X)...</translation> <translation id="6280215091796946657">以其他帳戶登入</translation> <translation id="6280912520669706465">ARC</translation> <translation id="6282180787514676874">{COUNT,plural, =1{超出 1 張紙的限制}other{超出 {COUNT} 張紙的限制}}</translation> @@ -5588,6 +5592,7 @@ <translation id="6398715114293939307">移除 Google Play 商店</translation> <translation id="6398765197997659313">退出全螢幕模式</translation> <translation id="6399774419735315745">女間諜</translation> +<translation id="6401458660421980302">如要將這個分頁傳送到其他裝置,請在該裝置上登入 Chrome</translation> <translation id="6401597285454423070">你的電腦含有信任平台模組 (TPM) 安全性裝置,可用於實作 Chrome OS 中許多重要的安全性功能。如需瞭解詳情,請造訪 Chromebook 說明中心:https://support.google.com/chromebook/?p=tpm</translation> <translation id="6404187344102273690">Chromebook Gaming</translation> <translation id="6404511346730675251">編輯書籤</translation> @@ -5824,6 +5829,7 @@ <translation id="6619801788773578757">新增 Kiosk 應用程式</translation> <translation id="6619990499523117484">確認你的 PIN 碼</translation> <translation id="6620254580880484313">容器名稱</translation> +<translation id="6621391692573306628">如要將這個分頁傳送到其他裝置,請在這兩部裝置上登入 Chrome</translation> <translation id="6622980291894852883">繼續封鎖圖片</translation> <translation id="6624036901798307345">在平板電腦模式中,輕觸分頁計數器的工具列按鈕即可開啟新的分頁列,當中會顯示各分頁的縮圖。</translation> <translation id="6624535038674360844"><ph name="FILE_NAME" /> 含有敏感內容或危險內容。請要求檔案擁有者修正。</translation>
diff --git a/chrome/app/resources/generated_resources_zu.xtb b/chrome/app/resources/generated_resources_zu.xtb index c1eec55..599f7eb 100644 --- a/chrome/app/resources/generated_resources_zu.xtb +++ b/chrome/app/resources/generated_resources_zu.xtb
@@ -1296,7 +1296,6 @@ <translation id="2191754378957563929">Vuliwe</translation> <translation id="2192505247865591433">Kusuka ku-:</translation> <translation id="2193365732679659387">Themba izilungiselelo</translation> -<translation id="2194554416429452547">Ngesikhathi sokuzama, i-Chrome ihlola izindlela zokukhawulela ugaxekile, ukukhwabanisa, nokwabelana phakathi kwamasayithi. I-Chrome nayo <ph name="ESTIMATE_INTERESTS_LINK" /> ukuthi amasayithi angasebenza ukukubonisa izikhangiso. Ungaphatha ongaba nentshisekelo kukho kumasethingi.</translation> <translation id="2194856509914051091">Izinto okufanele uzicabangele</translation> <translation id="2195331105963583686">Usazokwazi ukusebenzisa le <ph name="DEVICE_TYPE" /> ngemuva kwaleso sikhathi, kodwa ngeke isathola isofthiwe ezenzakalelayo nezibuyekezo zokuvikelwa</translation> <translation id="2195729137168608510">Ukuvikelwa kwe-imeyili</translation> @@ -3281,6 +3280,7 @@ <translation id="4077919383365622693">Yonke idatha namakhukhi alondolozwe nge-<ph name="SITE" /> azosuswa.</translation> <translation id="4078738236287221428">Udlame</translation> <translation id="4079140982534148664">Sebenzisa Ukuhlola Kwesipele Okuthuthukisiwe</translation> +<translation id="4081203444152654304">Sesha umfanekiso wangaphakathi nge-<ph name="VISUAL_SEARCH_PROVIDER" /></translation> <translation id="4081242589061676262">Ayikwazi ukusakaza ifayela.</translation> <translation id="408223403876103285">I-<ph name="WEBSITE" /> ithumele isaziso efonini yakho. Ukuze uqinisekise ukuthi uwena, landela izinyathelo ezilapho.</translation> <translation id="4084682180776658562">Ibhukhimakhi</translation> @@ -3676,6 +3676,7 @@ <translation id="4476590490540813026">Umsubathi</translation> <translation id="4476659815936224889">Ukuze uskene le khodi, ungasebenzisa uhlelo lokusebenza lweskena lwe-QR kufoni yakho, noma ezinye izinhlelo zokusebenza zekhamera.</translation> <translation id="4477015793815781985">Faka phakathi U-Ctrl, Alt, noma u-⌘</translation> +<translation id="4477379360383751882">Sesha Umfanekiso wangaphakathi nge-<ph name="VISUAL_SEARCH_PROVIDER" /></translation> <translation id="4478664379124702289">Londoloza isixhumanisi njenge...</translation> <translation id="4479424953165245642">Phatha izinhlelo zokusebenza zekhiyoski</translation> <translation id="4479639480957787382">I-Ethernet</translation> @@ -5306,6 +5307,7 @@ <translation id="6086846494333236931">Kufakwe umqondisi wakho</translation> <translation id="6087746524533454243">Ufuna ikhasi elimayelana ne-browser? Vakashela</translation> <translation id="6087960857463881712">Ubuso obuhle</translation> +<translation id="6088535503330933227">I-Chrome ihlola izindlela zokukhawulela ogaxekile besikhangiso, ukukhwabanisa, nokwabelana phakathi kwamasayithi. I-Chrome iphinde yenze i-<ph name="ESTIMATE_INTERESTS_LINK" /> engasetshenziswa amasayithi ukukubonisa izikhangiso. Ungaphatha ongaba nentshisekelo kukho kumasethingi.</translation> <translation id="608912389580139775">Ukwengeza leli khasi kuhlu lwakho lokufunda, chofoza isithonjana sebhukhimakhi</translation> <translation id="6091761513005122595">Yabelana ngokukhweziwe ngempumelelo.</translation> <translation id="6093888419484831006">Ikhansela isibuyekezo...</translation>
diff --git a/chrome/app/resources/google_chrome_strings_as.xtb b/chrome/app/resources/google_chrome_strings_as.xtb index f29c665..89dff056 100644 --- a/chrome/app/resources/google_chrome_strings_as.xtb +++ b/chrome/app/resources/google_chrome_strings_as.xtb
@@ -70,6 +70,7 @@ <translation id="2139300032719313227">ChromeOS ৰিষ্টাৰ্ট কৰক</translation> <translation id="2151406531797534936">অনুগ্ৰহ কৰি Chrome এতিয়া ৰিষ্টাৰ্ট কৰক</translation> <translation id="2174917724755363426">ইনষ্টল কৰাটো সম্পূৰ্ণ হোৱা নাই। আপুনি বাতিল কৰিব বিচাৰে বুলি নিশ্চিতনে?</translation> +<translation id="223889379102603431">Chromeএ ইয়াৰ মূল প্ৰমাণপত্ৰ কেনেকৈ পৰিচালনা কৰে সেই বিষয়ক তথ্য</translation> <translation id="2258103955319320201">আপোনাৰ আটাইবোৰ ডিভাইচত আপোনাৰ Chrome ব্ৰাউজাৰৰ বস্তু এক্সেছ কৰিবলৈ, ছাইন ইন কৰি তাৰ পাছত ছিংক অন কৰক</translation> <translation id="2290014774651636340">Google API কীসমূহ নাই। Google Chromeৰ কিছুমান কার্যক্ৰম অক্ষম কৰা হ’ব।</translation> <translation id="2290095356545025170">আপুনি Google Chrome আনইনষ্টল কৰিবলৈ বিচাৰে বুলি নিশ্চিতনে?</translation> @@ -356,6 +357,7 @@ <translation id="8129812357326543296">&Google Chromeৰ বিষয়ে</translation> <translation id="813913629614996137">আৰম্ভ কৰা হৈছে…</translation> <translation id="8255190535488645436">Google Chromeএ আপোনাৰ কেমেৰা আৰু মাইক্ৰ’ফ’ন ব্যৱহাৰ কৰি আছে।</translation> +<translation id="8270775718612349140">Chromeএ পৰিচালনা কৰা প্ৰমাণপত্ৰ</translation> <translation id="8286862437124483331">Google Chromeএ পাছৱৰ্ড দেখুৱাবলৈ চেষ্টা কৰি আছে। ইয়াৰ অনুমতি আপোনাৰ দিবলৈ Windows পাছৱৰ্ড টাইপ কৰক।</translation> <translation id="828798499196665338">আপোনাৰ অভিভাৱকে Chromeৰ বাবে "ছাইট, এপ্ আৰু এক্সটেনশ্বনসমূহৰ বাবে অনুমতি" অফ কৰিছে। এই <ph name="EXTENSION_TYPE_PARAMETER" />টো সক্ষম কৰাৰ অনুমতি নাই।</translation> <translation id="8290100596633877290">আমি দুঃখিত! Google Chrome ক্ৰেশ্ব হৈছে! এতিয়া পুনৰ লঞ্চ কৰিবনে?</translation>
diff --git a/chrome/app/resources/google_chrome_strings_da.xtb b/chrome/app/resources/google_chrome_strings_da.xtb index 09b261fe..8885b27 100644 --- a/chrome/app/resources/google_chrome_strings_da.xtb +++ b/chrome/app/resources/google_chrome_strings_da.xtb
@@ -66,6 +66,7 @@ <translation id="2139300032719313227">Genstart Chrome OS</translation> <translation id="2151406531797534936">Genstart Chrome nu</translation> <translation id="2174917724755363426">Installationen er ikke fuldført. Er du sikker på, at du vil annullere?</translation> +<translation id="223889379102603431">Oplysninger om, hvordan Chrome administrerer sine rodcertifikater</translation> <translation id="2258103955319320201">Log ind, og aktivér derefter synkronisering for at få adgang til dine Chrome-ting på alle dine enheder.</translation> <translation id="2290014774651636340">Google API-nøgler mangler. Nogle funktioner i Google Chrome deaktiveres.</translation> <translation id="2290095356545025170">Er du sikker på, at du vil afinstallere Google Chrome?</translation> @@ -348,6 +349,7 @@ <translation id="8129812357326543296">Om &Google Chrome</translation> <translation id="813913629614996137">Initialiserer...</translation> <translation id="8255190535488645436">Google Chrome bruger dit kamera og din mikrofon.</translation> +<translation id="8270775718612349140">Certifikater, der administreres af Chrome</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> <translation id="8290100596633877290">Hovsa! Google Chrome er gået ned. Vil du genstarte nu?</translation>
diff --git a/chrome/app/resources/google_chrome_strings_el.xtb b/chrome/app/resources/google_chrome_strings_el.xtb index fe333831..a05e406 100644 --- a/chrome/app/resources/google_chrome_strings_el.xtb +++ b/chrome/app/resources/google_chrome_strings_el.xtb
@@ -68,6 +68,7 @@ <translation id="2139300032719313227">Επανεκκίνηση Chrome OS</translation> <translation id="2151406531797534936">Επανεκκινήστε το Chrome τώρα</translation> <translation id="2174917724755363426">Η εγκατάσταση δεν έχει ολοκληρωθεί. Είστε βέβαιοι ότι θέλετε να την ακυρώσετε;</translation> +<translation id="223889379102603431">Πληροφορίες σχετικά με το πώς το Chrome διαχειρίζεται τα πιστοποιητικά ρίζας του</translation> <translation id="2258103955319320201">Για να έχετε πρόσβαση από όλες τις συσκευές σας στο περιεχόμενο που διαθέτετε στο πρόγραμμα περιήγησης Chrome, συνδεθείτε και, στη συνέχεια, ενεργοποιήστε τον συγχρονισμό.</translation> <translation id="2290014774651636340">Λείπουν κλειδιά του Google API. Ορισμένες λειτουργίες του Google Chrome θα απενεργοποιηθούν.</translation> <translation id="2290095356545025170">Είστε βέβαιοι ότι θέλετε να απεγκαταστήσετε του Google Chrome;</translation> @@ -352,6 +353,7 @@ <translation id="8129812357326543296">Σχετικά με &το Google Chrome</translation> <translation id="813913629614996137">Εκκίνηση…</translation> <translation id="8255190535488645436">Το Google Chrome χρησιμοποιεί την κάμερα και το μικρόφωνό σας.</translation> +<translation id="8270775718612349140">Πιστοποιητικά που διαχειρίζεται το Chrome</translation> <translation id="8286862437124483331">Το Google Chrome προσπαθεί να εμφανίσει τους κωδικούς πρόσβασης. Πληκτρολογήστε τον κωδικό πρόσβασής σας Windows για να το επιτρέψετε αυτό.</translation> <translation id="828798499196665338">Ο γονέας σου απενεργοποίησε την επιλογή "Άδειες για ιστοτόπους, εφαρμογές και επεκτάσεις" για το Chrome. Η ενεργοποίηση του στοιχείου <ph name="EXTENSION_TYPE_PARAMETER" /> δεν επιτρέπεται.</translation> <translation id="8290100596633877290">Πω πω! Το Google Chrome παρουσίασε σφάλμα. Επανεκκίνηση τώρα;</translation>
diff --git a/chrome/app/resources/google_chrome_strings_en-GB.xtb b/chrome/app/resources/google_chrome_strings_en-GB.xtb index d1bcc01..ddbce32 100644 --- a/chrome/app/resources/google_chrome_strings_en-GB.xtb +++ b/chrome/app/resources/google_chrome_strings_en-GB.xtb
@@ -69,6 +69,7 @@ <translation id="2139300032719313227">Restart Chrome OS</translation> <translation id="2151406531797534936">Please restart Chrome now</translation> <translation id="2174917724755363426">Installation is not complete. Are you sure that you want to cancel?</translation> +<translation id="223889379102603431">Information about how Chrome manages its root certificates</translation> <translation id="2258103955319320201">To access your Chrome browser across all your devices, sign in, then turn on sync</translation> <translation id="2290014774651636340">Google API keys are missing. Some functionality of Google Chrome will be disabled.</translation> <translation id="2290095356545025170">Are you sure you want to uninstall Google Chrome?</translation> @@ -355,6 +356,7 @@ <translation id="8129812357326543296">About &Google Chrome</translation> <translation id="813913629614996137">Initialising...</translation> <translation id="8255190535488645436">Google Chrome is using your camera and microphone.</translation> +<translation id="8270775718612349140">Certificates managed by Chrome</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> <translation id="8290100596633877290">Whoa! Google Chrome has crashed. Relaunch now?</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fil.xtb b/chrome/app/resources/google_chrome_strings_fil.xtb index d4362a7..f01307c 100644 --- a/chrome/app/resources/google_chrome_strings_fil.xtb +++ b/chrome/app/resources/google_chrome_strings_fil.xtb
@@ -70,6 +70,7 @@ <translation id="2139300032719313227">I-restart ang ChromeOS</translation> <translation id="2151406531797534936">Paki-restart ang Chrome ngayon</translation> <translation id="2174917724755363426">Hindi nakumpleto ang pag-install. Sigurado ka bang gusto mong kanselahin?</translation> +<translation id="223889379102603431">Impormasyon tungkol sa kung paano pinapamahalaan ng Chrome ang mga root certificate nito</translation> <translation id="2258103955319320201">Para ma-access ang iyong mga bagay sa Chrome browser sa lahat ng device mo, mag-sign in, pagkatapos ay i-on ang pag-sync</translation> <translation id="2290014774651636340">Nawawala ang mga Google API key. Madi-disable ang ilang pagpapagana ng Google Chrome.</translation> <translation id="2290095356545025170">Sigurado ka bang nais mong i-uninstall ang Google Chrome?</translation> @@ -356,6 +357,7 @@ <translation id="8129812357326543296">Tungkol sa &Google Chrome</translation> <translation id="813913629614996137">Sinisimulan...</translation> <translation id="8255190535488645436">Ginagamit ng Google Chrome ang iyong camera at mikropono.</translation> +<translation id="8270775718612349140">Mga certificate na pinapamahalaan ng Chrome</translation> <translation id="8286862437124483331">Sinusubukan ng Google Chrome na ipakita ang mga password. I-type ang iyong password sa Windows upang payagan ito.</translation> <translation id="828798499196665338">Na-off ng iyong magulang ang "Mga pahintulot para sa mga site, app, at extension" para sa Chrome. Hindi pinapayagan ang pag-enable sa <ph name="EXTENSION_TYPE_PARAMETER" /> na ito.</translation> <translation id="8290100596633877290">Whoa! Nag-crash ang Google Chrome. Ilunsad muli ngayon?</translation>
diff --git a/chrome/app/resources/google_chrome_strings_mk.xtb b/chrome/app/resources/google_chrome_strings_mk.xtb index 9901988..95f1190 100644 --- a/chrome/app/resources/google_chrome_strings_mk.xtb +++ b/chrome/app/resources/google_chrome_strings_mk.xtb
@@ -70,6 +70,7 @@ <translation id="2139300032719313227">Рестартирајте го Chrome OS</translation> <translation id="2151406531797534936">Рестартирајте го Chrome сега</translation> <translation id="2174917724755363426">Инсталирањето не е завршено. Дали сигурно сакате да го откажете?</translation> +<translation id="223889379102603431">Информации за тоа како Chrome управува со своите сертификати за администраторски права</translation> <translation id="2258103955319320201">За да пристапувате до вашите работи на прелистувачот Chrome на сите уреди, најавете се и вклучете ја синхронизацијата</translation> <translation id="2290014774651636340">Клучевите Google API недостасуваат. Некои функции на Google Chrome ќе бидат оневозможени.</translation> <translation id="2290095356545025170">Дали сте сигурни дека сакате да го деинсталирате Google Chrome?</translation> @@ -356,6 +357,7 @@ <translation id="8129812357326543296">За &Google Chrome</translation> <translation id="813913629614996137">Се иницијализира…</translation> <translation id="8255190535488645436">Google Chrome ги користи камерата и микрофонот.</translation> +<translation id="8270775718612349140">Сертификати управувани од Chrome</translation> <translation id="8286862437124483331">Google Chrome се обидува да покаже лозинки. Впишете ја лозинката за Windows за да се дозволи ова.</translation> <translation id="828798499196665338">Родителот ги исклучил „Дозволите за сајтови, апликации и екстензии“ за Chrome. Не е дозволено овозможувањето на оваа<ph name="EXTENSION_TYPE_PARAMETER" />.</translation> <translation id="8290100596633877290">Google Chrome падна. Веднаш да се стартува повторно?</translation>
diff --git a/chrome/app/resources/google_chrome_strings_mn.xtb b/chrome/app/resources/google_chrome_strings_mn.xtb index 0025393a..2ead7558 100644 --- a/chrome/app/resources/google_chrome_strings_mn.xtb +++ b/chrome/app/resources/google_chrome_strings_mn.xtb
@@ -70,6 +70,7 @@ <translation id="2139300032719313227">ChromeOS-г дахин эхлүүлнэ үү</translation> <translation id="2151406531797534936">Chrome-г одоо дахин эхлүүлнэ үү</translation> <translation id="2174917724755363426">Суулгаж дуусаагүй байна. Та цуцлахдаа итгэлтэй байна уу?</translation> +<translation id="223889379102603431">Chrome өөрийн үндсэн гэрчилгээг хэрхэн удирддаг тухай мэдээлэл</translation> <translation id="2258103955319320201">Та бүх төхөөрөмж дээрээ Chrome хөтчийн зүйлсдээ хандахын тулд нэвтэрч, дараа нь синк хийхийг асаана уу</translation> <translation id="2290014774651636340">Google-ийн API түлхүүр байхгүй байна. Google Chrome-ийн зарим функц идэвхгүй болно.</translation> <translation id="2290095356545025170">Та Google Chrome-ыг устгах гэж байгаадаа итгэлтэй байна уу?</translation> @@ -356,6 +357,7 @@ <translation id="8129812357326543296">Google Chrome-ийн тухай</translation> <translation id="813913629614996137">Эхлүүлж байна…</translation> <translation id="8255190535488645436">Google Chrome нь таны камер болон микрофоныг ашиглаж байна.</translation> +<translation id="8270775718612349140">Chrome-н удирддаг гэрчилгээ</translation> <translation id="8286862437124483331">Google Chrome нь нууц үгийг харуулахыг оролдож байна. Үүнийг зөвшөөрөхийн тулд Windows-ийн нууц үгээ бичиж оруулна уу.</translation> <translation id="828798499196665338">Таны эцэг эх Chrome-н "Сайтууд, аппууд болон өргөтгөлүүдийн зөвшөөрөл"-ийг унтраасан байна. Энэ <ph name="EXTENSION_TYPE_PARAMETER" />-г идэвхжүүлэхийг зөвшөөрдөггүй.</translation> <translation id="8290100596633877290">Өө! Google Chrome гэмтсэн байна. Дахин эхлүүлэх үү?</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ms.xtb b/chrome/app/resources/google_chrome_strings_ms.xtb index ad1d704..3bdeb42c 100644 --- a/chrome/app/resources/google_chrome_strings_ms.xtb +++ b/chrome/app/resources/google_chrome_strings_ms.xtb
@@ -66,6 +66,7 @@ <translation id="2139300032719313227">Mulakan semula Chrome OS</translation> <translation id="2151406531797534936">Sila mulakan semula Chrome sekarang</translation> <translation id="2174917724755363426">Pemasangan belum selesai. Anda pasti ingin membatalkan?</translation> +<translation id="223889379102603431">Maklumat tentang cara Chrome mengurus sijil akarnya</translation> <translation id="2258103955319320201">Untuk mengakses bahan penyemak imbas Chrome anda pada semua peranti anda, log masuk, kemudian hidupkan penyegerakan</translation> <translation id="2290014774651636340">Kunci API Google tiada. Sesetengah fungsi Google Chrome akan dilumpuhkan.</translation> <translation id="2290095356545025170">Adakah anda pasti anda mahu menyahpasang Google Chrome?</translation> @@ -348,6 +349,7 @@ <translation id="8129812357326543296">Mengenai &Google Chrome</translation> <translation id="813913629614996137">Memulakan...</translation> <translation id="8255190535488645436">Google Chrome menggunakan kamera dan mikrofon anda.</translation> +<translation id="8270775718612349140">Sijil diurus oleh Chrome</translation> <translation id="8286862437124483331">Google Chrome cuba menunjukkan kata laluan. Taip kata laluan Windows anda untuk membenarkannya.</translation> <translation id="828798499196665338">Ibu/bapa anda telah mematikan "Kebenaran untuk laman web, apl dan sambungan" untuk Chrome. Tindakan mendayakan <ph name="EXTENSION_TYPE_PARAMETER" /> ini tidak dibenarkan.</translation> <translation id="8290100596633877290">Alamak! Google Chrome mengalami ranap sistem. Lancarkan semula sekarang?</translation>
diff --git a/chrome/app/resources/google_chrome_strings_nl.xtb b/chrome/app/resources/google_chrome_strings_nl.xtb index 0e8b3945..b628fea 100644 --- a/chrome/app/resources/google_chrome_strings_nl.xtb +++ b/chrome/app/resources/google_chrome_strings_nl.xtb
@@ -68,6 +68,7 @@ <translation id="2139300032719313227">Chrome OS opnieuw opstarten</translation> <translation id="2151406531797534936">Chrome nu opnieuw opstarten</translation> <translation id="2174917724755363426">Installatie niet afgerond. Weet je zeker dat je wilt annuleren?</translation> +<translation id="223889379102603431">Informatie over hoe Chrome rootcertificaten beheert</translation> <translation id="2258103955319320201">Log in en zet synchronisatie aan voor toegang tot je Chrome-browsergegevens op al je apparaten</translation> <translation id="2290014774651636340">Google API-sleutels ontbreken. Sommige functies van Google Chrome worden uitgezet.</translation> <translation id="2290095356545025170">Weet je zeker dat je Google Chrome wilt verwijderen?</translation> @@ -351,6 +352,7 @@ <translation id="8129812357326543296">Over &Google Chrome</translation> <translation id="813913629614996137">Starten...</translation> <translation id="8255190535488645436">Google Chrome gebruikt je camera en microfoon.</translation> +<translation id="8270775718612349140">Certificaten beheerd door Chrome</translation> <translation id="8286862437124483331">Google Chrome probeert wachtwoorden te bekijken. Geef je Windows-wachtwoord op om dit toe te staan.</translation> <translation id="828798499196665338">Je ouder heeft 'Rechten voor sites, apps en extensies' uitgezet voor Chrome. Je mag deze <ph name="EXTENSION_TYPE_PARAMETER" /> niet aanzetten.</translation> <translation id="8290100596633877290">Oeps! Google Chrome is vastgelopen. Nu opnieuw starten?</translation>
diff --git a/chrome/app/resources/google_chrome_strings_no.xtb b/chrome/app/resources/google_chrome_strings_no.xtb index fe405753..76ac6e4 100644 --- a/chrome/app/resources/google_chrome_strings_no.xtb +++ b/chrome/app/resources/google_chrome_strings_no.xtb
@@ -65,6 +65,7 @@ <translation id="2139300032719313227">Start ChromeOS på nytt</translation> <translation id="2151406531797534936">Start Chrome på nytt nå</translation> <translation id="2174917724755363426">Installasjonen er ikke fullført. Er du sikker på at du vil avbryte?</translation> +<translation id="223889379102603431">Informasjon om hvordan Chrome administrerer rotsertifikatene sine</translation> <translation id="2258103955319320201">For å få tilgang til Chrome-nettlesertingene dine på alle enhetene dine, logg på og slå på synkronisering</translation> <translation id="2290014774651636340">API-nøkler for Google mangler. Noe funksjonalitet i Google Chrome blir deaktivert.</translation> <translation id="2290095356545025170">Er du sikker på at du vil avinstallere Google Chrome?</translation> @@ -347,6 +348,7 @@ <translation id="8129812357326543296">Om &Google Chrome</translation> <translation id="813913629614996137">Initialiserer …</translation> <translation id="8255190535488645436">Google Chrome bruker kameraet og mikrofonen din.</translation> +<translation id="8270775718612349140">Sertifikater administreres av Chrome</translation> <translation id="8286862437124483331">Google Chrome forsøker å vise passord. Skriv inn Windows-passordet ditt for å tillate dette.</translation> <translation id="828798499196665338">Forelderen din har slått av «Tillatelser for nettsteder, apper og utvidelser» for Chrome. Du har ikke tillatelse til å slå på denne <ph name="EXTENSION_TYPE_PARAMETER" />.</translation> <translation id="8290100596633877290">Google Chrome har fått et programstopp. Vil du starte på nytt nå?</translation>
diff --git a/chrome/app/resources/google_chrome_strings_pa.xtb b/chrome/app/resources/google_chrome_strings_pa.xtb index 28fe0b0..3cf2a13 100644 --- a/chrome/app/resources/google_chrome_strings_pa.xtb +++ b/chrome/app/resources/google_chrome_strings_pa.xtb
@@ -70,6 +70,7 @@ <translation id="2139300032719313227">ChromeOS ਨੂੰ ਮੁੜ-ਸ਼ੁਰੂ ਕਰੋ</translation> <translation id="2151406531797534936">ਕਿਰਪਾ ਕਰਕੇ ਹੁਣੇ Chrome ਨੂੰ ਮੁੜ-ਸ਼ੁਰੂ ਕਰੋ</translation> <translation id="2174917724755363426">ਸਥਾਪਨਾ ਪੂਰੀ ਨਹੀਂ ਹੋਈ। ਕੀ ਤੁਸੀਂ ਪੱਕਾ ਰੱਦ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?</translation> +<translation id="223889379102603431">Chrome ਵੱਲੋਂ ਇਸਦੇ ਰੂਟ ਸਰਟੀਫਿਕੇਟਾਂ ਦੇ ਪ੍ਰਬੰਧਨ ਦੇ ਤਰੀਕੇ ਬਾਰੇ ਜਾਣਕਾਰੀ</translation> <translation id="2258103955319320201">ਆਪਣੇ ਸਾਰੇ ਡੀਵਾਈਸਾਂ ਵਿੱਚ ਆਪਣੀ Chrome ਬ੍ਰਾਊਜ਼ਰ ਸਮੱਗਰੀ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਲਈ, ਸਾਈਨ-ਇਨ ਕਰੋ, ਫਿਰ ਸਿੰਕ ਨੂੰ ਚਾਲੂ ਕਰੋ</translation> <translation id="2290014774651636340">Google API ਕੁੰਜੀਆਂ ਮੌਜੂਦ ਨਹੀਂ ਹਨ। Google Chrome ਦੀ ਕੁਝ ਫੰਕਸ਼ਨੈਲਿਟੀ ਬੰਦ ਕੀਤੀ ਜਾਵੇਗੀ।</translation> <translation id="2290095356545025170">ਕੀ ਤੁਸੀਂ ਪੱਕਾ Google Chrome ਨੂੰ ਅਣਸਥਾਪਤ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?</translation> @@ -356,6 +357,7 @@ <translation id="8129812357326543296">&Google Chrome ਬਾਰੇ</translation> <translation id="813913629614996137">ਸ਼ੁਰੂ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ...</translation> <translation id="8255190535488645436">Google Chrome ਤੁਹਾਡਾ ਕੈਮਰਾ ਅਤੇ ਮਾਈਕ੍ਰੋਫ਼ੋਨ ਵਰਤ ਰਿਹਾ ਹੈ।</translation> +<translation id="8270775718612349140">Chrome ਵੱਲੋਂ ਪ੍ਰਬੰਧਿਤ ਕੀਤੇ ਜਾਂਦੇ ਸਰਟੀਫਿਕੇਟ</translation> <translation id="8286862437124483331">Google Chrome ਪਾਸਵਰਡ ਦਿਖਾਉਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰ ਰਿਹਾ ਹੈ। ਇਸਦੀ ਆਗਿਆ ਦੇਣ ਲਈ ਆਪਣਾ Windows ਪਾਸਵਰਡ ਟਾਈਪ ਕਰੋ।</translation> <translation id="828798499196665338">ਤੁਹਾਡੇ ਮਾਂ-ਪਿਓ ਨੇ Chrome ਲਈ "ਸਾਈਟਾਂ, ਐਪਾਂ ਅਤੇ ਐਕਸਟੈਂਸ਼ਨਾਂ ਲਈ ਇਜਾਜ਼ਤਾਂ" ਨੂੰ ਬੰਦ ਕਰ ਦਿੱਤਾ ਹੈ। ਇਸ <ph name="EXTENSION_TYPE_PARAMETER" /> ਨੂੰ ਚਾਲੂ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।</translation> <translation id="8290100596633877290">ਠਹਿਰੋ! Google Chrome ਕ੍ਰੈਸ਼ ਹੋ ਗਿਆ ਹੈ। ਕੀ ਹੁਣ ਮੁੜ-ਲਾਂਚ ਕਰਨਾ ਹੈ?</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ro.xtb b/chrome/app/resources/google_chrome_strings_ro.xtb index 6af327f..14f1acb 100644 --- a/chrome/app/resources/google_chrome_strings_ro.xtb +++ b/chrome/app/resources/google_chrome_strings_ro.xtb
@@ -64,6 +64,7 @@ <translation id="2139300032719313227">Repornește sistemul de operare Chrome</translation> <translation id="2151406531797534936">Repornește Chrome acum</translation> <translation id="2174917724755363426">Instalarea nu este finalizată. Sigur anulezi?</translation> +<translation id="223889379102603431">Informații despre modul în care Chrome gestionează certificatele rădăcină</translation> <translation id="2258103955319320201">Pentru a accesa informațiile din Chrome pe toate dispozitivele, conectează-te, apoi activează sincronizarea</translation> <translation id="2290014774651636340">Lipsesc chei pentru API-ul Google. Unele funcționalități Google Chrome vor fi dezactivate.</translation> <translation id="2290095356545025170">Sigur vrei să dezinstalezi Google Chrome?</translation> @@ -345,6 +346,7 @@ <translation id="8129812357326543296">Despre &Google Chrome</translation> <translation id="813913629614996137">Se inițializează...</translation> <translation id="8255190535488645436">Google Chrome utilizează camera foto și microfonul.</translation> +<translation id="8270775718612349140">Certificate gestionate de Chrome</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> <translation id="8290100596633877290">Hopa! Google Chrome s-a blocat. Repornești acum?</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sk.xtb b/chrome/app/resources/google_chrome_strings_sk.xtb index 926ab988..605865e 100644 --- a/chrome/app/resources/google_chrome_strings_sk.xtb +++ b/chrome/app/resources/google_chrome_strings_sk.xtb
@@ -67,6 +67,7 @@ <translation id="2139300032719313227">Reštartovanie systému Chrome OS</translation> <translation id="2151406531797534936">Reštartujte Chrome</translation> <translation id="2174917724755363426">Inštalácia nie je dokončená. Naozaj ju chcete zrušiť?</translation> +<translation id="223889379102603431">Informácie o tom, ako Chrome spravuje koreňové certifikáty</translation> <translation id="2258103955319320201">Ak chcete získať prístup k obsahu Chromu vo všetkých svojich zariadeniach, prihláste sa a zapnite synchronizáciu</translation> <translation id="2290014774651636340">Chýbajú kľúče rozhrania Google API. Niektoré funkcie prehliadača Google Chrome budú zakázané.</translation> <translation id="2290095356545025170">Naozaj chcete odinštalovať aplikáciu Google Chrome?</translation> @@ -352,6 +353,7 @@ <translation id="8129812357326543296">Informácie o prehliadači &Google Chrome</translation> <translation id="813913629614996137">Prebieha inicializácia...</translation> <translation id="8255190535488645436">Google Chrome používa vašu kameru a mikrofón.</translation> +<translation id="8270775718612349140">Certifikáty, ktoré spravuje Chrome</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> <translation id="8290100596633877290">Google Chrome zlyhal. Chcete ho spustiť znova?</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sr-Latn.xtb b/chrome/app/resources/google_chrome_strings_sr-Latn.xtb index 88958da..0bc40d1 100644 --- a/chrome/app/resources/google_chrome_strings_sr-Latn.xtb +++ b/chrome/app/resources/google_chrome_strings_sr-Latn.xtb
@@ -70,6 +70,7 @@ <translation id="2139300032719313227">Restartujte Chrome OS</translation> <translation id="2151406531797534936">Ponovo pokrenite Chrome</translation> <translation id="2174917724755363426">Instalacija nije dovršena. Želite stvarno da je otkažete?</translation> +<translation id="223889379102603431">Informacije o tome kako Chrome upravlja sertifikatima osnovnog nivoa</translation> <translation id="2258103955319320201">Da biste pristupali Chrome pregledaču na svim uređajima, prijavite se, pa uključite sinhronizaciju</translation> <translation id="2290014774651636340">Nedostaju šifre za Google API. Neke funkcije Google Chrome-a će biti onemogućene.</translation> <translation id="2290095356545025170">Da li stvarno želite da deinstalirate Google Chrome?</translation> @@ -356,6 +357,7 @@ <translation id="8129812357326543296">O &Google Chrome-u</translation> <translation id="813913629614996137">Pokreće se…</translation> <translation id="8255190535488645436">Google Chrome koristi kameru i mikrofon.</translation> +<translation id="8270775718612349140">Sertifikati kojima upravlja Chrome</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> <translation id="8290100596633877290">Opa! Google Chrome je otkazao. Želite li da ga odmah ponovo pokrenete?</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sr.xtb b/chrome/app/resources/google_chrome_strings_sr.xtb index 4eb6850..74d1cf5 100644 --- a/chrome/app/resources/google_chrome_strings_sr.xtb +++ b/chrome/app/resources/google_chrome_strings_sr.xtb
@@ -70,6 +70,7 @@ <translation id="2139300032719313227">Рестартујте Chrome ОС</translation> <translation id="2151406531797534936">Поново покрените Chrome</translation> <translation id="2174917724755363426">Инсталација није довршена. Желите стварно да је откажете?</translation> +<translation id="223889379102603431">Информације о томе како Chrome управља сертификатима основног нивоа</translation> <translation id="2258103955319320201">Да бисте приступали Chrome прегледачу на свим уређајима, пријавите се, па укључите синхронизацију</translation> <translation id="2290014774651636340">Недостају шифре за Google API. Неке функције Google Chrome-а ће бити онемогућене.</translation> <translation id="2290095356545025170">Да ли стварно желите да деинсталирате Google Chrome?</translation> @@ -356,6 +357,7 @@ <translation id="8129812357326543296">О &Google Chrome-у</translation> <translation id="813913629614996137">Покреће се…</translation> <translation id="8255190535488645436">Google Chrome користи камеру и микрофон.</translation> +<translation id="8270775718612349140">Сертификати којима управља Chrome</translation> <translation id="8286862437124483331">Google Chrome покушава да прикаже лозинке. Унесите лозинку за Windows да бисте то омогућили.</translation> <translation id="828798499196665338">Родитељ је искључио „Дозволе за сајтове, апликације и додатке“ за Chrome. Омогућавање ове ставке (<ph name="EXTENSION_TYPE_PARAMETER" />) није дозвољено.</translation> <translation id="8290100596633877290">Опа! Google Chrome је отказао. Желите ли да га одмах поново покренете?</translation>
diff --git a/chrome/app/resources/google_chrome_strings_te.xtb b/chrome/app/resources/google_chrome_strings_te.xtb index 88c0bcb1..c007f0d4 100644 --- a/chrome/app/resources/google_chrome_strings_te.xtb +++ b/chrome/app/resources/google_chrome_strings_te.xtb
@@ -66,6 +66,7 @@ <translation id="2139300032719313227">ChromeOSను రీస్టార్ట్ చేయండి</translation> <translation id="2151406531797534936">దయచేసి Chromeను ఇప్పుడే మళ్ళీ ప్రారంభించండి</translation> <translation id="2174917724755363426">ఇన్స్టాలేషన్ పూర్తి కాలేదు. మీరు ఖచ్చితంగా రద్దు చేయాలనుకుంటున్నారా?</translation> +<translation id="223889379102603431">Chrome, దాని రూట్ సర్టిఫికేట్లను ఎలా మేనేజ్ చేస్తుంది అనే దాని గురించిన సమాచారం</translation> <translation id="2258103955319320201">మీ అన్ని పరికరాలలో మీ Chrome బ్రౌజర్ సంబంధిత అంశాలను యాక్సెస్ చేయడానికి, సైన్ ఇన్ చేసి, ఆపై సింక్ను ఆన్ చేయండి</translation> <translation id="2290014774651636340">Google API కీలు లేవు. Google Chrome కార్యాచరణలో కొంత భాగం నిలిపివేయబడుతుంది.</translation> <translation id="2290095356545025170">మీరు Google Chromeను ఖచ్చితంగా అన్ఇన్స్టాల్ చేయాలని అనుకుంటున్నారా?</translation> @@ -348,6 +349,7 @@ <translation id="8129812357326543296">&Google Chrome గురించి</translation> <translation id="813913629614996137">ప్రారంభిస్తోంది...</translation> <translation id="8255190535488645436">Google Chrome మీ కెమెరా మరియు మైక్రోఫోన్ని ఉపయోగిస్తోంది.</translation> +<translation id="8270775718612349140">Chrome ద్వారా మేనేజ్ చేయబడే సర్టిఫికెట్లు</translation> <translation id="8286862437124483331">Google Chrome పాస్వర్డ్లను చూపడానికి ప్రయత్నిస్తోంది. దీన్ని అనుమతించడానికి మీ Windows పాస్వర్డ్ను టైప్ చేయండి.</translation> <translation id="828798499196665338">Chromeలో సైట్లు, యాప్లు, ఎక్స్టెన్షన్లకు సంబంధించిన అనుమతులను మీ తల్లి/తండ్రి ఆఫ్ చేశారు. ఈ <ph name="EXTENSION_TYPE_PARAMETER" />ను ఎనేబుల్ చేయడానికి అనుమతి లేదు.</translation> <translation id="8290100596633877290">ఆపండి! Google Chrome క్రాష్ అయ్యింది. ఇప్పుడు మళ్ళీ ప్రారంభించాల?</translation>
diff --git a/chrome/app/resources/google_chrome_strings_th.xtb b/chrome/app/resources/google_chrome_strings_th.xtb index ef3ac1a..b0207f0 100644 --- a/chrome/app/resources/google_chrome_strings_th.xtb +++ b/chrome/app/resources/google_chrome_strings_th.xtb
@@ -64,6 +64,7 @@ <translation id="2139300032719313227">รีสตาร์ท Chrome OS</translation> <translation id="2151406531797534936">โปรดรีสตาร์ท Chrome ตอนนี้เลย</translation> <translation id="2174917724755363426">การติดตั้งไม่สมบูรณ์ คุณแน่ใจไหมว่าต้องการยกเลิก</translation> +<translation id="223889379102603431">ข้อมูลเกี่ยวกับวิธีที่ Chrome จัดการใบรับรองรูท</translation> <translation id="2258103955319320201">หากต้องการเข้าถึงข้อมูลของคุณในเบราว์เซอร์ Chrome ในอุปกรณ์ทั้งหมด ให้ลงชื่อเข้าใช้แล้วเปิดการซิงค์</translation> <translation id="2290014774651636340">คีย์ API ของ Google หายไป การทำงานบางอย่างของ Google Chrome จะถูกปิดใช้งาน</translation> <translation id="2290095356545025170">คุณแน่ใจหรือไม่ว่าต้องการยกเลิกการติดตั้ง Google Chrome</translation> @@ -345,6 +346,7 @@ <translation id="8129812357326543296">เกี่ยวกับ &Google Chrome</translation> <translation id="813913629614996137">กำลังเริ่มดำเนินการ...</translation> <translation id="8255190535488645436">Google Chrome ใช้กล้องและไมโครโฟนของคุณอยู่</translation> +<translation id="8270775718612349140">ใบรับรองที่จัดการโดย Chrome</translation> <translation id="8286862437124483331">Google Chrome กำลังพยายามแสดงรหัสผ่าน พิมพ์รหัสผ่าน Windows ของคุณเพื่อแสดงรหัสผ่าน</translation> <translation id="828798499196665338">ผู้ปกครองได้ปิด "สิทธิ์สำหรับเว็บไซต์ แอป และส่วนขยาย" ใน Chrome ไม่อนุญาตให้เปิดใช้<ph name="EXTENSION_TYPE_PARAMETER" />นี้</translation> <translation id="8290100596633877290">อ๊ะ! Google Chrome ขัดข้อง เปิดใหม่ตอนนี้หรือไม่</translation>
diff --git a/chrome/app/resources/google_chrome_strings_vi.xtb b/chrome/app/resources/google_chrome_strings_vi.xtb index 09314b1c..c8eeff1f 100644 --- a/chrome/app/resources/google_chrome_strings_vi.xtb +++ b/chrome/app/resources/google_chrome_strings_vi.xtb
@@ -67,6 +67,7 @@ <translation id="2139300032719313227">Khởi động lại ChromeOS</translation> <translation id="2151406531797534936">Vui lòng khởi động lại Chrome ngay bây giờ</translation> <translation id="2174917724755363426">Chưa cài đặt xong. Bạn có chắc chắn muốn huỷ không?</translation> +<translation id="223889379102603431">Thông tin về cách Chrome quản lý các chứng chỉ gốc của Chrome</translation> <translation id="2258103955319320201">Để truy cập vào nội dung của bạn trên trình duyệt Chrome bằng mọi thiết bị, hãy đăng nhập rồi bật tính năng đồng bộ hóa</translation> <translation id="2290014774651636340">Khóa API của Google bị thiếu. Một số chức năng của Google Chrome sẽ bị tắt.</translation> <translation id="2290095356545025170">Bạn có chắc chắn muốn gỡ cài đặt Google Chrome không?</translation> @@ -351,6 +352,7 @@ <translation id="8129812357326543296">Giới thiệu về &Google Chrome</translation> <translation id="813913629614996137">Đang khởi chạy...</translation> <translation id="8255190535488645436">Google Chrome đang sử dụng máy ảnh và micrô của bạn.</translation> +<translation id="8270775718612349140">Chứng chỉ do Chrome quản lý</translation> <translation id="8286862437124483331">Google Chrome đang cố gắng hiển thị mật khẩu. Hãy nhập mật khẩu Windows của bạn để cho phép việc này.</translation> <translation id="828798499196665338">Cha mẹ bạn đã tắt tùy chọn "Quyền của các trang web, ứng dụng và tiện ích" đối với Chrome. Bạn không được phép bật <ph name="EXTENSION_TYPE_PARAMETER" /> này.</translation> <translation id="8290100596633877290">Chà! Google Chrome đã bị lỗi. Mở lại bây giờ không? </translation>
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index 6617f76..ac0711c 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -2031,6 +2031,7 @@ "//components/autofill/content/browser", "//components/autofill/core/browser", "//components/autofill_assistant/browser/", + "//components/autofill_assistant/browser/public:password_change", "//components/autofill_assistant/browser/public:public", "//components/autofill_assistant/content/browser", "//components/autofill_assistant/content/common:mojo_interfaces", @@ -2179,6 +2180,7 @@ "//components/paint_preview/features", "//components/password_manager/content/browser", "//components/password_manager/core/browser", + "//components/password_manager/core/browser:capabilities", "//components/password_manager/core/common", "//components/payments/content:utils", "//components/payments/core", @@ -3709,8 +3711,6 @@ "enterprise/connectors/analysis/content_analysis_downloads_delegate.h", "enterprise/connectors/analysis/files_request_handler.cc", "enterprise/connectors/analysis/files_request_handler.h", - "enterprise/connectors/analysis/local_binary_upload_service.cc", - "enterprise/connectors/analysis/local_binary_upload_service.h", "enterprise/connectors/analysis/page_print_analysis_request.cc", "enterprise/connectors/analysis/page_print_analysis_request.h", "enterprise/connectors/analysis/request_handler_base.cc", @@ -4479,7 +4479,6 @@ "//components/web_modal", "//courgette:courgette_lib", "//services/device/public/cpp/hid", - "//third_party/content_analysis_sdk:liblcasdk", "//third_party/sqlite", "//third_party/zxcvbn-cpp", "//ui/webui/resources/cr_components/app_management:mojo_bindings", @@ -6233,6 +6232,10 @@ if (is_linux || is_win || is_mac) { sources += [ + "enterprise/connectors/analysis/content_analysis_sdk_manager.cc", + "enterprise/connectors/analysis/content_analysis_sdk_manager.h", + "enterprise/connectors/analysis/local_binary_upload_service.cc", + "enterprise/connectors/analysis/local_binary_upload_service.h", "enterprise/connectors/device_trust/attestation/desktop/crypto_utility.cc", "enterprise/connectors/device_trust/attestation/desktop/crypto_utility.h", "enterprise/connectors/device_trust/attestation/desktop/desktop_attestation_service.cc", @@ -6270,6 +6273,7 @@ "//components/device_signals/core/browser", "//components/device_signals/core/common", ] + public_deps += [ "//third_party/content_analysis_sdk:liblcasdk" ] if (is_win) { deps += [
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index 4b0aae8b..ed3ba8c6 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -6247,6 +6247,10 @@ FEATURE_WITH_PARAMS_VALUE_TYPE(share::kDesktopSharePreview, kDesktopSharePreviewVariations, "DesktopSharePreview")}, + {"sharing-desktop-share-to-google-collections", + flag_descriptions::kSharingDesktopShareToGoogleCollectionsName, + flag_descriptions::kSharingDesktopShareToGoogleCollectionsDescription, + kOsDesktop, FEATURE_VALUE_TYPE(share::kShareToGoogleCollections)}, #endif #if BUILDFLAG(IS_CHROMEOS_ASH)
diff --git a/chrome/browser/app_controller_mac.mm b/chrome/browser/app_controller_mac.mm index 5ba1fb3..4ca6870 100644 --- a/chrome/browser/app_controller_mac.mm +++ b/chrome/browser/app_controller_mac.mm
@@ -539,6 +539,7 @@ - (void)dealloc { [[_closeTabMenuItem menu] setDelegate:nil]; + [NSMenu cr_setMenuItemForKeyEquivalentEventPreSearchBlock:nil]; [super dealloc]; }
diff --git a/chrome/browser/apps/intent_helper/metrics/intent_handling_metrics.cc b/chrome/browser/apps/intent_helper/metrics/intent_handling_metrics.cc index 4a98f2f9..9370720 100644 --- a/chrome/browser/apps/intent_helper/metrics/intent_handling_metrics.cc +++ b/chrome/browser/apps/intent_helper/metrics/intent_handling_metrics.cc
@@ -17,11 +17,11 @@ namespace { -const char kLinkCapturingHistogram[] = "ChromeOS.Intents.LinkCapturingEvent"; +const char kLinkCapturingHistogram[] = "ChromeOS.Intents.LinkCapturingEvent2"; const char kLinkCapturingHistogramWeb[] = - "ChromeOS.Intents.LinkCapturingEvent.WebApp"; + "ChromeOS.Intents.LinkCapturingEvent2.WebApp"; const char kLinkCapturingHistogramArc[] = - "ChromeOS.Intents.LinkCapturingEvent.ArcApp"; + "ChromeOS.Intents.LinkCapturingEvent2.ArcApp"; using PickerAction = apps::IntentHandlingMetrics::PickerAction; using IntentPickerAction = apps::IntentHandlingMetrics::IntentPickerAction; @@ -195,7 +195,9 @@ case PickerEntryType::kUnknown: case PickerEntryType::kDevice: case PickerEntryType::kMacOs: - break; + // These cases do not represent entering an app and should not record + // any histograms. + return; } base::UmaHistogramEnumeration(kLinkCapturingHistogram, event); }
diff --git a/chrome/browser/apps/intent_helper/metrics/intent_handling_metrics_unittest.cc b/chrome/browser/apps/intent_helper/metrics/intent_handling_metrics_unittest.cc index 01314c2..309324ed 100644 --- a/chrome/browser/apps/intent_helper/metrics/intent_handling_metrics_unittest.cc +++ b/chrome/browser/apps/intent_helper/metrics/intent_handling_metrics_unittest.cc
@@ -150,13 +150,13 @@ // Link capturing entry point shown for unknown app type. test.RecordLinkCapturingEntryPointShown(app_info); histogram_tester.ExpectBucketCount( - "ChromeOS.Intents.LinkCapturingEvent.ArcApp", + "ChromeOS.Intents.LinkCapturingEvent2.ArcApp", IntentHandlingMetrics::LinkCapturingEvent::kEntryPointShown, 0); histogram_tester.ExpectBucketCount( - "ChromeOS.Intents.LinkCapturingEvent.WebApp", + "ChromeOS.Intents.LinkCapturingEvent2.WebApp", IntentHandlingMetrics::LinkCapturingEvent::kEntryPointShown, 0); histogram_tester.ExpectBucketCount( - "ChromeOS.Intents.LinkCapturingEvent", + "ChromeOS.Intents.LinkCapturingEvent2", IntentHandlingMetrics::LinkCapturingEvent::kEntryPointShown, 1); // Prepare the app info for next testcase. @@ -167,13 +167,13 @@ // Link capturing entry point shown for web app type. test.RecordLinkCapturingEntryPointShown(app_info); histogram_tester.ExpectBucketCount( - "ChromeOS.Intents.LinkCapturingEvent.ArcApp", + "ChromeOS.Intents.LinkCapturingEvent2.ArcApp", IntentHandlingMetrics::LinkCapturingEvent::kEntryPointShown, 0); histogram_tester.ExpectBucketCount( - "ChromeOS.Intents.LinkCapturingEvent.WebApp", + "ChromeOS.Intents.LinkCapturingEvent2.WebApp", IntentHandlingMetrics::LinkCapturingEvent::kEntryPointShown, 1); histogram_tester.ExpectBucketCount( - "ChromeOS.Intents.LinkCapturingEvent", + "ChromeOS.Intents.LinkCapturingEvent2", IntentHandlingMetrics::LinkCapturingEvent::kEntryPointShown, 2); // Prepare the app info for next testcase. @@ -188,13 +188,13 @@ // Link capturing entry point shown for 2 web apps and 1 ARC app. test.RecordLinkCapturingEntryPointShown(app_info); histogram_tester.ExpectBucketCount( - "ChromeOS.Intents.LinkCapturingEvent.ArcApp", + "ChromeOS.Intents.LinkCapturingEvent2.ArcApp", IntentHandlingMetrics::LinkCapturingEvent::kEntryPointShown, 1); histogram_tester.ExpectBucketCount( - "ChromeOS.Intents.LinkCapturingEvent.WebApp", + "ChromeOS.Intents.LinkCapturingEvent2.WebApp", IntentHandlingMetrics::LinkCapturingEvent::kEntryPointShown, 2); histogram_tester.ExpectBucketCount( - "ChromeOS.Intents.LinkCapturingEvent", + "ChromeOS.Intents.LinkCapturingEvent2", IntentHandlingMetrics::LinkCapturingEvent::kEntryPointShown, 3); } @@ -207,13 +207,13 @@ PickerEntryType::kArc, IntentHandlingMetrics::LinkCapturingEvent::kAppOpened); histogram_tester.ExpectBucketCount( - "ChromeOS.Intents.LinkCapturingEvent.ArcApp", + "ChromeOS.Intents.LinkCapturingEvent2.ArcApp", IntentHandlingMetrics::LinkCapturingEvent::kAppOpened, 1); histogram_tester.ExpectBucketCount( - "ChromeOS.Intents.LinkCapturingEvent.WebApp", + "ChromeOS.Intents.LinkCapturingEvent2.WebApp", IntentHandlingMetrics::LinkCapturingEvent::kAppOpened, 0); histogram_tester.ExpectBucketCount( - "ChromeOS.Intents.LinkCapturingEvent", + "ChromeOS.Intents.LinkCapturingEvent2", IntentHandlingMetrics::LinkCapturingEvent::kAppOpened, 1); // Link capturing settings changed for web app. @@ -221,13 +221,13 @@ PickerEntryType::kWeb, IntentHandlingMetrics::LinkCapturingEvent::kSettingsChanged); histogram_tester.ExpectBucketCount( - "ChromeOS.Intents.LinkCapturingEvent.ArcApp", + "ChromeOS.Intents.LinkCapturingEvent2.ArcApp", IntentHandlingMetrics::LinkCapturingEvent::kSettingsChanged, 0); histogram_tester.ExpectBucketCount( - "ChromeOS.Intents.LinkCapturingEvent.WebApp", + "ChromeOS.Intents.LinkCapturingEvent2.WebApp", IntentHandlingMetrics::LinkCapturingEvent::kSettingsChanged, 1); histogram_tester.ExpectBucketCount( - "ChromeOS.Intents.LinkCapturingEvent", + "ChromeOS.Intents.LinkCapturingEvent2", IntentHandlingMetrics::LinkCapturingEvent::kSettingsChanged, 1); }
diff --git a/chrome/browser/apps/intent_helper/supported_links_infobar_delegate_browsertest.cc b/chrome/browser/apps/intent_helper/supported_links_infobar_delegate_browsertest.cc index a60bd04..2119148 100644 --- a/chrome/browser/apps/intent_helper/supported_links_infobar_delegate_browsertest.cc +++ b/chrome/browser/apps/intent_helper/supported_links_infobar_delegate_browsertest.cc
@@ -92,10 +92,10 @@ test_web_app_id())); histogram_tester.ExpectBucketCount( - "ChromeOS.Intents.LinkCapturingEvent.WebApp", + "ChromeOS.Intents.LinkCapturingEvent2.WebApp", apps::IntentHandlingMetrics::LinkCapturingEvent::kSettingsChanged, 1); histogram_tester.ExpectBucketCount( - "ChromeOS.Intents.LinkCapturingEvent", + "ChromeOS.Intents.LinkCapturingEvent2", apps::IntentHandlingMetrics::LinkCapturingEvent::kSettingsChanged, 1); }
diff --git a/chrome/browser/ash/accessibility/select_to_speak_browsertest.cc b/chrome/browser/ash/accessibility/select_to_speak_browsertest.cc index 20635184..b5bcdc0 100644 --- a/chrome/browser/ash/accessibility/select_to_speak_browsertest.cc +++ b/chrome/browser/ash/accessibility/select_to_speak_browsertest.cc
@@ -32,7 +32,6 @@ #include "content/public/browser/notification_service.h" #include "content/public/test/browser_test.h" #include "content/public/test/browser_test_utils.h" -#include "extensions/browser/browsertest_util.h" #include "extensions/browser/extension_host.h" #include "extensions/browser/extension_host_test_helper.h" #include "extensions/browser/notification_types.h" @@ -87,24 +86,6 @@ ASSERT_TRUE( ui_test_utils::NavigateToURL(browser(), GURL(url::kAboutBlankURL))); - - // Select to speak loads part of itself (eventually all of itself) via a - // dynamic import. This means that the background page signals a load event - // prior to the import being fully finished. Wait for it here. - std::string script = - R"JS( - (async function() { - await import("/select_to_speak/select_to_speak_main.js"); - window.domAutomationController.send('ok'); - })(); - )JS"; - - std::string result = - extensions::browsertest_util::ExecuteScriptInBackgroundPage( - browser()->profile(), extension_misc::kSelectToSpeakExtensionId, - script, - extensions::browsertest_util::ScriptUserActivation::kDontActivate); - ASSERT_EQ(result, "ok"); } void SetUpInProcessBrowserTestFixture() override { @@ -422,9 +403,13 @@ sm_.Replay(); } -// Flaky on ChromeOS MSAN bots: https://crbug.com/1227368 and ChromeOS in -// general: https://crbug.com/1225388 -IN_PROC_BROWSER_TEST_F(SelectToSpeakTest, DISABLED_BreaksAtParagraphBounds) { +// Flaky on ChromeOS MSAN bots: https://crbug.com/1227368 +#if defined(MEMORY_SANITIZER) +#define MAYBE_BreaksAtParagraphBounds DISABLED_BreaksAtParagraphBounds +#else +#define MAYBE_BreaksAtParagraphBounds BreaksAtParagraphBounds +#endif +IN_PROC_BROWSER_TEST_F(SelectToSpeakTest, MAYBE_BreaksAtParagraphBounds) { ActivateSelectToSpeakInWindowBounds( "data:text/html;charset=utf-8,<div><p>First paragraph</p>" "<p>Second paragraph</p></div>"); @@ -497,13 +482,7 @@ sm_.Replay(); } -// Flaky on ChromeOS MSAN bots: https://crbug.com/1227368 -#if defined(MEMORY_SANITIZER) -#define MAYBE_FocusRingMovesWithMouse DISABLED_FocusRingMovesWithMouse -#else -#define MAYBE_FocusRingMovesWithMouse FocusRingMovesWithMouse -#endif -IN_PROC_BROWSER_TEST_F(SelectToSpeakTest, MAYBE_FocusRingMovesWithMouse) { +IN_PROC_BROWSER_TEST_F(SelectToSpeakTest, FocusRingMovesWithMouse) { // Create a callback for the focus ring observer. base::RepeatingCallback<void()> callback = base::BindRepeating(&SelectToSpeakTest::OnFocusRingChanged, GetWeakPtr()); @@ -637,10 +616,8 @@ sm_.Replay(); } -// TODO(crbug.com/1227368): Flaky on ChromeOS MSAN bots. -// TODO(crbug.com/1344562): Flaky on other CrOS bots too. IN_PROC_BROWSER_TEST_F(SelectToSpeakTest, - DISABLED_SelectToSpeakDoesNotDismissTrayBubble) { + SelectToSpeakDoesNotDismissTrayBubble) { // Open tray bubble menu. tray_test_api_->ShowBubble();
diff --git a/chrome/browser/ash/crosapi/crosapi_ash.cc b/chrome/browser/ash/crosapi/crosapi_ash.cc index 9012c39..9fec393 100644 --- a/chrome/browser/ash/crosapi/crosapi_ash.cc +++ b/chrome/browser/ash/crosapi/crosapi_ash.cc
@@ -9,6 +9,8 @@ #include <vector> #include "ash/components/account_manager/account_manager_factory.h" +#include "ash/display/cros_display_config.h" +#include "ash/public/ash_interfaces.h" #include "base/dcheck_is_on.h" #include "chrome/browser/apps/app_service/app_service_proxy.h" #include "chrome/browser/apps/app_service/app_service_proxy_factory.h" @@ -593,6 +595,11 @@ content_protection_ash_->BindReceiver(std::move(receiver)); } +void CrosapiAsh::BindCrosDisplayConfigController( + mojo::PendingReceiver<mojom::CrosDisplayConfigController> receiver) { + ash::BindCrosDisplayConfigController(std::move(receiver)); +} + void CrosapiAsh::BindDeskTemplate( mojo::PendingReceiver<mojom::DeskTemplate> receiver) { desk_template_ash_->BindReceiver(std::move(receiver));
diff --git a/chrome/browser/ash/crosapi/crosapi_ash.h b/chrome/browser/ash/crosapi/crosapi_ash.h index 1dbb117..26995ea 100644 --- a/chrome/browser/ash/crosapi/crosapi_ash.h +++ b/chrome/browser/ash/crosapi/crosapi_ash.h
@@ -12,6 +12,7 @@ #include "base/memory/raw_ptr.h" #include "base/memory/weak_ptr.h" #include "chrome/browser/ash/crosapi/crosapi_id.h" +#include "chromeos/crosapi/mojom/cros_display_config.mojom.h" #include "chromeos/crosapi/mojom/crosapi.mojom.h" #include "chromeos/crosapi/mojom/emoji_picker.mojom-forward.h" #include "chromeos/crosapi/mojom/task_manager.mojom.h" @@ -153,6 +154,9 @@ mojo::PendingReceiver<mojom::ClipboardHistory> receiver) override; void BindContentProtection( mojo::PendingReceiver<mojom::ContentProtection> receiver) override; + void BindCrosDisplayConfigController( + mojo::PendingReceiver<mojom::CrosDisplayConfigController> receiver) + override; void BindDeskTemplate( mojo::PendingReceiver<mojom::DeskTemplate> receiver) override; void BindDeviceAttributes(
diff --git a/chrome/browser/ash/crosapi/crosapi_util.cc b/chrome/browser/ash/crosapi/crosapi_util.cc index 97d57b7..72564fe 100644 --- a/chrome/browser/ash/crosapi/crosapi_util.cc +++ b/chrome/browser/ash/crosapi/crosapi_util.cc
@@ -51,6 +51,7 @@ #include "chromeos/crosapi/mojom/clipboard.mojom.h" #include "chromeos/crosapi/mojom/clipboard_history.mojom.h" #include "chromeos/crosapi/mojom/content_protection.mojom.h" +#include "chromeos/crosapi/mojom/cros_display_config.mojom.h" #include "chromeos/crosapi/mojom/crosapi.mojom.h" #include "chromeos/crosapi/mojom/desk_template.mojom.h" #include "chromeos/crosapi/mojom/device_attributes.mojom.h" @@ -234,7 +235,7 @@ return {T::Uuid_, T::Version_}; } -static_assert(crosapi::mojom::Crosapi::Version_ == 88, +static_assert(crosapi::mojom::Crosapi::Version_ == 89, "If you add a new crosapi, please add it to " "kInterfaceVersionEntries below."); @@ -260,6 +261,7 @@ MakeInterfaceVersionEntry<crosapi::mojom::Clipboard>(), MakeInterfaceVersionEntry<crosapi::mojom::ClipboardHistory>(), MakeInterfaceVersionEntry<crosapi::mojom::ContentProtection>(), + MakeInterfaceVersionEntry<crosapi::mojom::CrosDisplayConfigController>(), MakeInterfaceVersionEntry<crosapi::mojom::Crosapi>(), MakeInterfaceVersionEntry<crosapi::mojom::DeskTemplate>(), MakeInterfaceVersionEntry<crosapi::mojom::DeviceAttributes>(),
diff --git a/chrome/browser/ash/crosapi/system_display_ash.cc b/chrome/browser/ash/crosapi/system_display_ash.cc index 25b73a0..193e4c3 100644 --- a/chrome/browser/ash/crosapi/system_display_ash.cc +++ b/chrome/browser/ash/crosapi/system_display_ash.cc
@@ -51,7 +51,7 @@ void SystemDisplayAsh::OnDisplayInfoResult( GetDisplayUnitInfoListCallback callback, std::vector<DisplayUnitInfo> src_info_list) { - std::vector<crosapi::mojom::DisplayUnitInfoPtr> dst_info_list; + std::vector<crosapi::mojom::SysDisplayUnitInfoPtr> dst_info_list; dst_info_list.reserve(src_info_list.size()); for (const auto& src_info : src_info_list) { dst_info_list.emplace_back( @@ -95,13 +95,14 @@ // Start Source 2. if (!is_observing_cros_display_config_) { - mojo::PendingRemote<ash::mojom::CrosDisplayConfigController> display_config; + mojo::PendingRemote<crosapi::mojom::CrosDisplayConfigController> + display_config; ash::BindCrosDisplayConfigController( display_config.InitWithNewPipeAndPassReceiver()); cros_display_config_ = - mojo::Remote<ash::mojom::CrosDisplayConfigController>( + mojo::Remote<crosapi::mojom::CrosDisplayConfigController>( std::move(display_config)); - mojo::PendingAssociatedRemote<ash::mojom::CrosDisplayConfigObserver> + mojo::PendingAssociatedRemote<crosapi::mojom::CrosDisplayConfigObserver> observer; cros_display_config_observer_receiver_.Bind( observer.InitWithNewEndpointAndPassReceiver());
diff --git a/chrome/browser/ash/crosapi/system_display_ash.h b/chrome/browser/ash/crosapi/system_display_ash.h index 43e094d3..3545b2c 100644 --- a/chrome/browser/ash/crosapi/system_display_ash.h +++ b/chrome/browser/ash/crosapi/system_display_ash.h
@@ -7,9 +7,9 @@ #include <vector> -#include "ash/public/mojom/cros_display_config.mojom.h" #include "base/callback.h" #include "base/memory/weak_ptr.h" +#include "chromeos/crosapi/mojom/cros_display_config.mojom.h" #include "chromeos/crosapi/mojom/system_display.mojom.h" #include "extensions/browser/api/system_display/display_info_provider.h" #include "extensions/common/api/system_display.h" @@ -25,8 +25,8 @@ // This class must only be used from the main thread. // Display change is triggered by 2 sources: // * "Source 1": display::Screen using display::DisplayObserver. -// * "Source 2": ash::mojom::CrosDisplayConfigController using -// ash::mojom::CrosDisplayConfigObserver. +// * "Source 2": crosapi::mojom::CrosDisplayConfigController using +// crosapi::mojom::CrosDisplayConfigObserver. // To set up both sources, this class duplicates code from DisplayInfoProvider // and DisplayInfoProviderChromeOS. This is necessary because the activation of // these sources are managed differently: DisplayInfoProvider's sources are @@ -34,7 +34,7 @@ // controlled by |observers_| change. class SystemDisplayAsh : public mojom::SystemDisplay, public display::DisplayObserver, - public ash::mojom::CrosDisplayConfigObserver { + public crosapi::mojom::CrosDisplayConfigObserver { public: // This type was generated from IDL. using DisplayUnitInfo = extensions::api::system_display::DisplayUnitInfo; @@ -69,7 +69,7 @@ void OnDisplayMetricsChanged(const display::Display& display, uint32_t /*metrics*/) override; - // ash::mojom::CrosDisplayConfigObserver (for Source 2): + // crosapi::mojom::CrosDisplayConfigObserver (for Source 2): void OnDisplayConfigChanged() override; // Starts listening to display change event sources. No-op if already started. @@ -89,8 +89,9 @@ // Source 2 status and objects. bool is_observing_cros_display_config_ = false; - mojo::Remote<ash::mojom::CrosDisplayConfigController> cros_display_config_; - mojo::AssociatedReceiver<ash::mojom::CrosDisplayConfigObserver> + mojo::Remote<crosapi::mojom::CrosDisplayConfigController> + cros_display_config_; + mojo::AssociatedReceiver<crosapi::mojom::CrosDisplayConfigObserver> cros_display_config_observer_receiver_{this}; base::WeakPtrFactory<SystemDisplayAsh> weak_ptr_factory_{this};
diff --git a/chrome/browser/ash/crostini/crostini_port_forwarder.cc b/chrome/browser/ash/crostini/crostini_port_forwarder.cc index b8173f7..05eea10b8 100644 --- a/chrome/browser/ash/crostini/crostini_port_forwarder.cc +++ b/chrome/browser/ash/crostini/crostini_port_forwarder.cc
@@ -111,13 +111,14 @@ bool CrostiniPortForwarder::RemovePortPreference(const PortRuleKey& key) { PrefService* pref_service = profile_->GetPrefs(); ListPrefUpdate update(pref_service, crostini::prefs::kCrostiniPortForwarding); - base::Value* all_ports = update.Get(); - base::Value::ListView list_view = all_ports->GetListDeprecated(); + base::Value::List& update_list = update->GetList(); auto it = std::find_if( - list_view.begin(), list_view.end(), + update_list.begin(), update_list.end(), [&key, this](const auto& dict) { return MatchPortRuleDict(dict, key); }); - - return all_ports->EraseListIter(it); + if (it == update_list.end()) + return false; + update_list.erase(it); + return true; } absl::optional<base::Value> CrostiniPortForwarder::ReadPortPreference( @@ -358,7 +359,7 @@ const guest_os::GuestId& container_id) { PrefService* pref_service = profile_->GetPrefs(); ListPrefUpdate update(pref_service, crostini::prefs::kCrostiniPortForwarding); - update->EraseListValueIf([&container_id, this](const auto& dict) { + update->GetList().EraseIf([&container_id, this](const auto& dict) { return MatchPortRuleContainerId(dict, container_id); });
diff --git a/chrome/browser/ash/guest_os/guest_id.cc b/chrome/browser/ash/guest_os/guest_id.cc index f6dd855..e6c6d0b 100644 --- a/chrome/browser/ash/guest_os/guest_id.cc +++ b/chrome/browser/ash/guest_os/guest_id.cc
@@ -143,19 +143,23 @@ void RemoveContainerFromPrefs(Profile* profile, const GuestId& container_id) { auto* pref_service = profile->GetPrefs(); ListPrefUpdate updater(pref_service, prefs::kGuestOsContainers); - updater->EraseListIter( - std::find_if(updater->GetListDeprecated().begin(), - updater->GetListDeprecated().end(), [&](const auto& dict) { - return MatchContainerDict(dict, container_id); - })); + base::Value::List& update_list = updater->GetList(); + auto it = std::find_if( + update_list.begin(), update_list.end(), + [&](const auto& dict) { return MatchContainerDict(dict, container_id); }); + if (it != update_list.end()) + update_list.erase(it); } void RemoveVmFromPrefs(Profile* profile, VmType vm_type) { auto* pref_service = profile->GetPrefs(); ListPrefUpdate updater(pref_service, prefs::kGuestOsContainers); - updater->EraseListIter(std::find_if( - updater->GetListDeprecated().begin(), updater->GetListDeprecated().end(), - [&](const auto& dict) { return VmTypeFromPref(dict) == vm_type; })); + base::Value::List& update_list = updater->GetList(); + auto it = std::find_if( + update_list.begin(), update_list.end(), + [&](const auto& dict) { return VmTypeFromPref(dict) == vm_type; }); + if (it != update_list.end()) + update_list.erase(it); } const base::Value* GetContainerPrefValue(Profile* profile,
diff --git a/chrome/browser/ash/guest_os/guest_os_share_path.cc b/chrome/browser/ash/guest_os/guest_os_share_path.cc index 99ec710..128acc6 100644 --- a/chrome/browser/ash/guest_os/guest_os_share_path.cc +++ b/chrome/browser/ash/guest_os/guest_os_share_path.cc
@@ -131,27 +131,27 @@ std::string first_failure_reason_; }; // class -void RemovePersistedPathFromPrefs(base::Value* shared_paths, +void RemovePersistedPathFromPrefs(base::Value::Dict& shared_paths, const std::string& vm_name, const base::FilePath& path) { // |shared_paths| format is {'path': ['vm1', vm2']}. // If |path| exists, remove |vm_name| from list of VMs. - base::Value* found = shared_paths->FindKey(path.value()); + base::Value::List* found = shared_paths.FindList(path.value()); if (!found) { LOG(WARNING) << "Path not in prefs to unshare path " << path.value() << " for VM " << vm_name; return; } - auto it = std::find(found->GetListDeprecated().begin(), - found->GetListDeprecated().end(), base::Value(vm_name)); - if (!found->EraseListIter(it)) { + auto it = std::find(found->begin(), found->end(), base::Value(vm_name)); + if (it == found->end()) { LOG(WARNING) << "VM not in prefs to unshare path " << path.value() << " for VM " << vm_name; return; } + found->erase(it); // If VM list is now empty, remove |path| from |shared_paths|. - if (found->GetListDeprecated().empty()) { - shared_paths->RemoveKey(path.value()); + if (found->empty()) { + shared_paths.Remove(path.value()); } } @@ -519,8 +519,7 @@ if (unpersist) { PrefService* pref_service = profile_->GetPrefs(); DictionaryPrefUpdate update(pref_service, prefs::kGuestOSPathsSharedToVms); - base::Value* shared_paths = update.Get(); - RemovePersistedPathFromPrefs(shared_paths, vm_name, path); + RemovePersistedPathFromPrefs(update->GetDict(), vm_name, path); } CallSeneschalUnsharePath(vm_name, path, std::move(callback)); @@ -569,22 +568,21 @@ const base::FilePath& path) { PrefService* pref_service = profile_->GetPrefs(); DictionaryPrefUpdate update(pref_service, prefs::kGuestOSPathsSharedToVms); - base::Value* shared_paths = update.Get(); + base::Value::Dict& shared_paths = update->GetDict(); // Check if path is already shared so we know whether we need to add it. bool already_shared = false; // Remove any paths that are children of this path. // E.g. if path /foo/bar is already shared, and then we share /foo, we // remove /foo/bar from the list since it will be shared as part of /foo. std::vector<base::FilePath> children; - for (const auto it : shared_paths->DictItems()) { + for (const auto it : shared_paths) { base::FilePath shared(it.first); auto& vms = it.second; - auto vm_matches = - base::Contains(vms.GetListDeprecated(), base::Value(vm_name)); + auto vm_matches = base::Contains(vms.GetList(), base::Value(vm_name)); if (path == shared) { already_shared = true; if (!vm_matches) { - vms.Append(vm_name); + vms.GetList().Append(vm_name); } } else if (path.IsParent(shared) && vm_matches) { children.emplace_back(shared); @@ -594,9 +592,9 @@ RemovePersistedPathFromPrefs(shared_paths, vm_name, child); } if (!already_shared) { - base::Value vms(base::Value::Type::LIST); - vms.Append(base::Value(vm_name)); - shared_paths->SetKey(path.value(), std::move(vms)); + base::Value::List vms; + vms.Append(vm_name); + shared_paths.Set(path.value(), std::move(vms)); } }
diff --git a/chrome/browser/ash/login/saml/saml_browsertest.cc b/chrome/browser/ash/login/saml/saml_browsertest.cc index e4edd58..85eb06e 100644 --- a/chrome/browser/ash/login/saml/saml_browsertest.cc +++ b/chrome/browser/ash/login/saml/saml_browsertest.cc
@@ -316,7 +316,8 @@ virtual void StartSamlAndWaitForIdpPageLoad(const std::string& gaia_email) { OobeScreenWaiter(GetFirstSigninScreen()).Wait(); - content::DOMMessageQueue message_queue; // Start observe before SAML. + content::DOMMessageQueue message_queue( + GetLoginUI()->GetWebContents()); // Start observe before SAML. SetupAuthFlowChangeListener(); LoginDisplayHost::default_host() ->GetOobeUI() @@ -496,7 +497,7 @@ fake_saml_idp()->GetIdpHost()); test::OobeJS().ExpectTrue(js); - content::DOMMessageQueue message_queue; // Observe before 'close'. + content::DOMMessageQueue message_queue(GetLoginUI()->GetWebContents()); SetupAuthFlowChangeListener(); // Click on 'close'. test::OobeJS().ClickOnPath(std::get<1>(GetParam()) ? kSamlBackButton @@ -532,7 +533,7 @@ &(gaia_frame_web_contents->GetController()); // Start observing before initiating SAML sign-in. - content::DOMMessageQueue message_queue; + content::DOMMessageQueue message_queue(GetLoginUI()->GetWebContents()); LoginPromptBrowserTestObserver login_prompt_observer; login_prompt_observer.Register(content::Source<content::NavigationController>( gaia_frame_navigation_controller)); @@ -676,7 +677,7 @@ StartSamlAndWaitForIdpPageLoad( saml_test_users::kFirstUserCorpExampleComEmail); - content::DOMMessageQueue message_queue; + content::DOMMessageQueue message_queue(GetLoginUI()->GetWebContents()); // Make sure that the password is scraped correctly. ASSERT_TRUE(content::ExecuteScript( GetLoginUI()->GetWebContents(), @@ -1334,7 +1335,7 @@ void SAMLPolicyTest::ShowGAIALoginForm() { ash::LoginDisplayHost::default_host()->StartWizard(GaiaView::kScreenId); OobeScreenWaiter(GaiaView::kScreenId).Wait(); - content::DOMMessageQueue message_queue; + content::DOMMessageQueue message_queue(GetLoginUI()->GetWebContents()); ASSERT_TRUE(content::ExecuteScript( GetLoginUI()->GetWebContents(), "$('gaia-signin').authenticator_.addEventListener('ready', function() {" @@ -1359,7 +1360,7 @@ } void SAMLPolicyTest::ClickNextOnSAMLInterstitialPage() { - content::DOMMessageQueue message_queue; + content::DOMMessageQueue message_queue(GetLoginUI()->GetWebContents()); SetupAuthFlowChangeListener(); test::OobeJS().TapOnPath({"gaia-signin", "interstitial-next"}); @@ -1383,7 +1384,7 @@ // message. if (test::OobeJS().GetAttributeBool("isSamlForTesting()", {"gaia-signin"})) return; - content::DOMMessageQueue message_queue; + content::DOMMessageQueue message_queue(GetLoginUI()->GetWebContents()); SetupAuthFlowChangeListener(); std::string message; do {
diff --git a/chrome/browser/ash/login/screens/encryption_migration_screen.cc b/chrome/browser/ash/login/screens/encryption_migration_screen.cc index c4b88cc..6fe704d7 100644 --- a/chrome/browser/ash/login/screens/encryption_migration_screen.cc +++ b/chrome/browser/ash/login/screens/encryption_migration_screen.cc
@@ -239,26 +239,16 @@ } // namespace EncryptionMigrationScreen::EncryptionMigrationScreen( - EncryptionMigrationScreenView* view) + base::WeakPtr<EncryptionMigrationScreenView> view) : BaseScreen(EncryptionMigrationScreenView::kScreenId, OobeScreenPriority::DEFAULT), - view_(view) { + view_(std::move(view)) { DCHECK(view_); - if (view_) - view_->SetDelegate(this); } EncryptionMigrationScreen::~EncryptionMigrationScreen() { userdataauth_observer_.reset(); power_manager_observation_.Reset(); - if (view_) - view_->SetDelegate(nullptr); -} - -void EncryptionMigrationScreen::OnViewDestroyed( - EncryptionMigrationScreenView* view) { - if (view_ == view) - view_ = nullptr; } void EncryptionMigrationScreen::ShowImpl() { @@ -266,33 +256,28 @@ view_->Show(); } -void EncryptionMigrationScreen::HideImpl() { - if (view_) - view_->Hide(); -} +void EncryptionMigrationScreen::HideImpl() {} void EncryptionMigrationScreen::SetUserContext( const UserContext& user_context) { - DCHECK(view_); user_context_ = user_context; } void EncryptionMigrationScreen::SetMode(EncryptionMigrationMode mode) { - DCHECK(view_); mode_ = mode; - view_->SetIsResuming(IsStartImmediately()); + if (view_) + view_->SetIsResuming(IsStartImmediately()); } void EncryptionMigrationScreen::SetSkipMigrationCallback( SkipMigrationCallback skip_migration_callback) { - DCHECK(view_); skip_migration_callback_ = std::move(skip_migration_callback); } void EncryptionMigrationScreen::SetupInitialView() { - DCHECK(view_); // Pass constant value(s) to the UI. - view_->SetNecessaryBatteryPercent(arc::kMigrationMinimumBatteryPercent); + if (view_) + view_->SetNecessaryBatteryPercent(arc::kMigrationMinimumBatteryPercent); // If old encryption is detected in ARC kiosk mode, skip all checks (user // confirmation, battery level, and remaining space) and start migration @@ -312,8 +297,8 @@ test_delegate = delegate; } -void EncryptionMigrationScreen::OnUserActionDeprecated( - const std::string& action_id) { +void EncryptionMigrationScreen::OnUserAction(const base::Value::List& args) { + const std::string& action_id = args[0].GetString(); if (action_id == kUserActionStartMigration) { HandleStartMigration(); } else if (action_id == kUserActionSkipMigration) { @@ -325,7 +310,7 @@ } else if (action_id == kUserActionOpenFeedbackDialog) { HandleOpenFeedbackDialog(); } else { - BaseScreen::OnUserActionDeprecated(action_id); + BaseScreen::OnUserAction(args); } } @@ -348,13 +333,13 @@ // immediately. current_battery_percent_ = 100.0; } - - view_->SetBatteryState( - *current_battery_percent_, - *current_battery_percent_ >= arc::kMigrationMinimumBatteryPercent, - proto.battery_state() == - power_manager::PowerSupplyProperties_BatteryState_CHARGING); - + if (view_) { + view_->SetBatteryState( + *current_battery_percent_, + *current_battery_percent_ >= arc::kMigrationMinimumBatteryPercent, + proto.battery_state() == + power_manager::PowerSupplyProperties_BatteryState_CHARGING); + } // If the migration was already requested and the battery level is enough now, // The migration should start immediately. if (*current_battery_percent_ >= arc::kMigrationMinimumBatteryPercent && @@ -413,7 +398,8 @@ return; current_ui_state_ = state; - view_->SetUIState(state); + if (view_) + view_->SetUIState(state); // When this handler is about to show the READY screen, we should get the // latest battery status and show it on the screen. @@ -462,10 +448,12 @@ } } else { RecordFirstScreen(FirstScreen::FIRST_SCREEN_LOW_STORAGE); - view_->SetSpaceInfoInString( - size /* availableSpaceSize */, - arc::kMigrationMinimumAvailableStorage /* necessarySpaceSize */); - UpdateUIState(EncryptionMigrationScreenView::NOT_ENOUGH_STORAGE); + if (view_) { + view_->SetSpaceInfoInString( + size /* availableSpaceSize */, + arc::kMigrationMinimumAvailableStorage /* necessarySpaceSize */); + UpdateUIState(EncryptionMigrationScreenView::NOT_ENOUGH_STORAGE); + } } } @@ -614,9 +602,11 @@ case user_data_auth::DircryptoMigrationStatus:: DIRCRYPTO_MIGRATION_IN_PROGRESS: UpdateUIState(EncryptionMigrationScreenView::MIGRATING); - view_->SetMigrationProgress( - static_cast<double>(progress.current_bytes()) / - progress.total_bytes()); + if (view_) { + view_->SetMigrationProgress( + static_cast<double>(progress.current_bytes()) / + progress.total_bytes()); + } break; case user_data_auth::DircryptoMigrationStatus::DIRCRYPTO_MIGRATION_SUCCESS: RecordMigrationResultSuccess(IsResumingIncompleteMigration(), @@ -686,7 +676,7 @@ // |mode_| will be START_MIGRATION if migration was forced. // If an incomplete migration is being resumed, it would be RESUME_MIGRATION. // We only want to disable auto-starting migration in the first case. - if (mode_ == EncryptionMigrationMode::START_MIGRATION) + if (mode_ == EncryptionMigrationMode::START_MIGRATION && view_) view_->SetIsResuming(false); }
diff --git a/chrome/browser/ash/login/screens/encryption_migration_screen.h b/chrome/browser/ash/login/screens/encryption_migration_screen.h index f0875f4..4ec7aa3 100644 --- a/chrome/browser/ash/login/screens/encryption_migration_screen.h +++ b/chrome/browser/ash/login/screens/encryption_migration_screen.h
@@ -10,6 +10,7 @@ #include "ash/components/login/auth/public/user_context.h" #include "base/callback_forward.h" +#include "base/memory/weak_ptr.h" #include "base/scoped_observation.h" #include "chrome/browser/ash/login/screens/base_screen.h" #include "chrome/browser/ash/login/screens/encryption_migration_mode.h" @@ -45,7 +46,8 @@ virtual int64_t GetFreeSpace() const = 0; }; - explicit EncryptionMigrationScreen(EncryptionMigrationScreenView* view); + explicit EncryptionMigrationScreen( + base::WeakPtr<EncryptionMigrationScreenView> view); EncryptionMigrationScreen(const EncryptionMigrationScreen&) = delete; EncryptionMigrationScreen& operator=(const EncryptionMigrationScreen&) = @@ -53,10 +55,6 @@ ~EncryptionMigrationScreen() override; - // This method is called, when view is being destroyed. Note, if Delegate is - // destroyed earlier then it has to call SetDelegate(NULL). - void OnViewDestroyed(EncryptionMigrationScreenView* view); - // Sets the UserContext for a user whose cryptohome should be migrated. void SetUserContext(const UserContext& user_context); @@ -82,7 +80,7 @@ // BaseScreen: void ShowImpl() override; void HideImpl() override; - void OnUserActionDeprecated(const std::string& action_id) override; + void OnUserAction(const base::Value::List& args) override; // PowerManagerClient::Observer implementation: void PowerChanged(const power_manager::PowerSupplyProperties& proto) override; @@ -132,7 +130,7 @@ // Stop forcing migration if it was forced by policy. void MaybeStopForcingMigration(); - EncryptionMigrationScreenView* view_; + base::WeakPtr<EncryptionMigrationScreenView> view_; // The current UI state which should be refrected in the web UI. EncryptionMigrationScreenView::UIState current_ui_state_ =
diff --git a/chrome/browser/ash/login/screens/encryption_migration_screen_unittest.cc b/chrome/browser/ash/login/screens/encryption_migration_screen_unittest.cc index 750fb0cd..35300e3 100644 --- a/chrome/browser/ash/login/screens/encryption_migration_screen_unittest.cc +++ b/chrome/browser/ash/login/screens/encryption_migration_screen_unittest.cc
@@ -62,12 +62,30 @@ bool has_wakelock_ = false; }; +class MockEncryptionMigrationScreenView : public EncryptionMigrationScreenView { + public: + MockEncryptionMigrationScreenView() = default; + ~MockEncryptionMigrationScreenView() override = default; + + MOCK_METHOD(void, Show, ()); + MOCK_METHOD(void, + SetBatteryState, + (double batteryPercent, bool isEnoughBattery, bool isCharging)); + MOCK_METHOD(void, SetIsResuming, (bool isResuming)); + MOCK_METHOD(void, SetUIState, (UIState state)); + MOCK_METHOD(void, + SetSpaceInfoInString, + (int64_t availableSpaceSize, int64_t necessarySpaceSize)); + MOCK_METHOD(void, SetNecessaryBatteryPercent, (double batteryPercent)); + MOCK_METHOD(void, SetMigrationProgress, (double progress)); +}; + // Allows access to testing-only methods of EncryptionMigrationScreen. class TestEncryptionMigrationScreen : public EncryptionMigrationScreen { public: - explicit TestEncryptionMigrationScreen(EncryptionMigrationScreenView* view) - : EncryptionMigrationScreen(view) { - } + explicit TestEncryptionMigrationScreen( + base::WeakPtr<MockEncryptionMigrationScreenView> view) + : EncryptionMigrationScreen(std::move(view)) {} // Sets the free disk space seen by EncryptionMigrationScreen. void set_free_disk_space(int64_t free_disk_space) { @@ -89,26 +107,6 @@ int64_t free_disk_space_; }; -class MockEncryptionMigrationScreenView : public EncryptionMigrationScreenView { - public: - MockEncryptionMigrationScreenView() = default; - ~MockEncryptionMigrationScreenView() override = default; - - MOCK_METHOD(void, Show, ()); - MOCK_METHOD(void, Hide, ()); - MOCK_METHOD(void, SetDelegate, (EncryptionMigrationScreen * delegate)); - MOCK_METHOD(void, - SetBatteryState, - (double batteryPercent, bool isEnoughBattery, bool isCharging)); - MOCK_METHOD(void, SetIsResuming, (bool isResuming)); - MOCK_METHOD(void, SetUIState, (UIState state)); - MOCK_METHOD(void, - SetSpaceInfoInString, - (int64_t availableSpaceSize, int64_t necessarySpaceSize)); - MOCK_METHOD(void, SetNecessaryBatteryPercent, (double batteryPercent)); - MOCK_METHOD(void, SetMigrationProgress, (double progress)); -}; - class EncryptionMigrationScreenTest : public testing::Test { public: EncryptionMigrationScreenTest() = default; @@ -134,7 +132,7 @@ Key(Key::KeyType::KEY_TYPE_SALTED_SHA256, "salt", "secret")); encryption_migration_screen_ = - std::make_unique<TestEncryptionMigrationScreen>(&mock_view_); + std::make_unique<TestEncryptionMigrationScreen>(std::move(mock_view_)); encryption_migration_screen_->SetSkipMigrationCallback( base::BindOnce(&EncryptionMigrationScreenTest::OnContinueLogin, base::Unretained(this))); @@ -156,7 +154,7 @@ std::unique_ptr<TestEncryptionMigrationScreen> encryption_migration_screen_; // Accessory objects needed by EncryptionMigrationScreen. - MockEncryptionMigrationScreenView mock_view_; + base::WeakPtr<MockEncryptionMigrationScreenView> mock_view_; // Must be the first member. base::test::TaskEnvironment task_environment_;
diff --git a/chrome/browser/ash/login/screens/recommend_apps/recommend_apps_fetcher.cc b/chrome/browser/ash/login/screens/recommend_apps/recommend_apps_fetcher.cc index 817ea4c1..78fa798 100644 --- a/chrome/browser/ash/login/screens/recommend_apps/recommend_apps_fetcher.cc +++ b/chrome/browser/ash/login/screens/recommend_apps/recommend_apps_fetcher.cc
@@ -6,7 +6,6 @@ #include "ash/constants/ash_switches.h" #include "ash/public/ash_interfaces.h" -#include "ash/public/mojom/cros_display_config.mojom.h" #include "base/callback.h" #include "base/command_line.h" #include "base/logging.h" @@ -16,6 +15,7 @@ #include "chrome/browser/ash/login/screens/recommend_apps/recommend_apps_fetcher_impl.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_manager.h" +#include "chromeos/crosapi/mojom/cros_display_config.mojom.h" #include "content/public/browser/storage_partition.h" #include "mojo/public/cpp/bindings/pending_remote.h" @@ -49,7 +49,8 @@ fake_apps_count); } - mojo::PendingRemote<mojom::CrosDisplayConfigController> display_config; + mojo::PendingRemote<crosapi::mojom::CrosDisplayConfigController> + display_config; BindCrosDisplayConfigController( display_config.InitWithNewPipeAndPassReceiver()); return std::make_unique<RecommendAppsFetcherImpl>(
diff --git a/chrome/browser/ash/login/screens/recommend_apps/recommend_apps_fetcher_impl.cc b/chrome/browser/ash/login/screens/recommend_apps/recommend_apps_fetcher_impl.cc index 3d779302..21f70d9 100644 --- a/chrome/browser/ash/login/screens/recommend_apps/recommend_apps_fetcher_impl.cc +++ b/chrome/browser/ash/login/screens/recommend_apps/recommend_apps_fetcher_impl.cc
@@ -4,7 +4,6 @@ #include "chrome/browser/ash/login/screens/recommend_apps/recommend_apps_fetcher_impl.h" -#include "ash/public/mojom/cros_display_config.mojom.h" #include "base/base64url.h" #include "base/bind.h" #include "base/json/json_reader.h" @@ -283,7 +282,8 @@ RecommendAppsFetcherImpl::RecommendAppsFetcherImpl( RecommendAppsFetcherDelegate* delegate, - mojo::PendingRemote<mojom::CrosDisplayConfigController> display_config, + mojo::PendingRemote<crosapi::mojom::CrosDisplayConfigController> + display_config, network::mojom::URLLoaderFactory* url_loader_factory) : delegate_(delegate), url_loader_factory_(url_loader_factory), @@ -367,11 +367,12 @@ } void RecommendAppsFetcherImpl::OnAshResponse( - std::vector<mojom::DisplayUnitInfoPtr> all_displays_info) { + std::vector<crosapi::mojom::DisplayUnitInfoPtr> all_displays_info) { ash_ready_ = true; int screen_density = 0; - for (const mojom::DisplayUnitInfoPtr& display_info : all_displays_info) { + for (const crosapi::mojom::DisplayUnitInfoPtr& display_info : + all_displays_info) { if (base::NumberToString(display::Display::InternalDisplayId()) == display_info->id) { screen_density = display_info->dpi_x + display_info->dpi_y;
diff --git a/chrome/browser/ash/login/screens/recommend_apps/recommend_apps_fetcher_impl.h b/chrome/browser/ash/login/screens/recommend_apps/recommend_apps_fetcher_impl.h index d136888..c673dd3 100644 --- a/chrome/browser/ash/login/screens/recommend_apps/recommend_apps_fetcher_impl.h +++ b/chrome/browser/ash/login/screens/recommend_apps/recommend_apps_fetcher_impl.h
@@ -10,13 +10,13 @@ #include <vector> #include "ash/components/arc/arc_features_parser.h" -#include "ash/public/mojom/cros_display_config.mojom.h" #include "base/callback.h" #include "base/memory/weak_ptr.h" #include "base/time/time.h" #include "base/timer/timer.h" #include "chrome/browser/ash/login/screens/recommend_apps/device_configuration.pb.h" #include "chrome/browser/ash/login/screens/recommend_apps/recommend_apps_fetcher.h" +#include "chromeos/crosapi/mojom/cros_display_config.mojom.h" #include "extensions/browser/api/system_display/display_info_provider.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/remote.h" @@ -71,7 +71,8 @@ RecommendAppsFetcherImpl( RecommendAppsFetcherDelegate* delegate, - mojo::PendingRemote<mojom::CrosDisplayConfigController> display_config, + mojo::PendingRemote<crosapi::mojom::CrosDisplayConfigController> + display_config, network::mojom::URLLoaderFactory* url_loader_factory); RecommendAppsFetcherImpl(const RecommendAppsFetcherImpl&) = delete; @@ -104,7 +105,8 @@ // Callback function called when display unit info list is retrieved from ash. // It will populate the device config info related to the screen density. - void OnAshResponse(std::vector<mojom::DisplayUnitInfoPtr> all_displays_info); + void OnAshResponse( + std::vector<crosapi::mojom::DisplayUnitInfoPtr> all_displays_info); // Callback function called when ARC features are read by the parser. // It will populate the device config info related to ARC features. @@ -171,7 +173,8 @@ ArcFeaturesGetter arc_features_getter_; - mojo::Remote<mojom::CrosDisplayConfigController> cros_display_config_; + mojo::Remote<crosapi::mojom::CrosDisplayConfigController> + cros_display_config_; base::WeakPtrFactory<RecommendAppsFetcherImpl> weak_ptr_factory_{this}; };
diff --git a/chrome/browser/ash/login/screens/recommend_apps/recommend_apps_fetcher_impl_unittest.cc b/chrome/browser/ash/login/screens/recommend_apps/recommend_apps_fetcher_impl_unittest.cc index 4106e41..2b8be00 100644 --- a/chrome/browser/ash/login/screens/recommend_apps/recommend_apps_fetcher_impl_unittest.cc +++ b/chrome/browser/ash/login/screens/recommend_apps/recommend_apps_fetcher_impl_unittest.cc
@@ -10,7 +10,6 @@ #include "ash/components/arc/arc_features_parser.h" #include "ash/constants/ash_features.h" -#include "ash/public/mojom/cros_display_config.mojom.h" #include "base/base64url.h" #include "base/files/file_path.h" #include "base/run_loop.h" @@ -25,6 +24,7 @@ #include "chrome/common/chrome_features.h" #include "chrome/test/base/testing_browser_process.h" #include "chrome/test/base/testing_profile_manager.h" +#include "chromeos/crosapi/mojom/cros_display_config.mojom.h" #include "components/user_manager/scoped_user_manager.h" #include "content/public/test/browser_task_environment.h" #include "gpu/config/gpu_info.h" @@ -103,10 +103,12 @@ return arc_features; } -class TestCrosDisplayConfig : public mojom::CrosDisplayConfigController { +class TestCrosDisplayConfig + : public crosapi::mojom::CrosDisplayConfigController { public: explicit TestCrosDisplayConfig( - mojo::PendingReceiver<mojom::CrosDisplayConfigController> receiver) + mojo::PendingReceiver<crosapi::mojom::CrosDisplayConfigController> + receiver) : receiver_(this, std::move(receiver)) {} TestCrosDisplayConfig(const TestCrosDisplayConfig&) = delete; @@ -119,7 +121,7 @@ } bool RunGetDisplayUnitInfoListCallback( - std::vector<mojom::DisplayUnitInfoPtr> unit_info_list) { + std::vector<crosapi::mojom::DisplayUnitInfoPtr> unit_info_list) { if (!get_display_unit_info_list_callback_) return false; std::move(get_display_unit_info_list_callback_) @@ -127,30 +129,31 @@ return true; } - // mojom::CrosDisplayConfigController: + // crosapi::mojom::CrosDisplayConfigController: void AddObserver( - mojo::PendingAssociatedRemote<mojom::CrosDisplayConfigObserver> observer) - override {} + mojo::PendingAssociatedRemote<crosapi::mojom::CrosDisplayConfigObserver> + observer) override {} void GetDisplayLayoutInfo(GetDisplayLayoutInfoCallback callback) override {} - void SetDisplayLayoutInfo(mojom::DisplayLayoutInfoPtr info, + void SetDisplayLayoutInfo(crosapi::mojom::DisplayLayoutInfoPtr info, SetDisplayLayoutInfoCallback callback) override {} void GetDisplayUnitInfoList( bool single_unified, GetDisplayUnitInfoListCallback callback) override { get_display_unit_info_list_callback_ = std::move(callback); } - void SetDisplayProperties(const std::string& id, - mojom::DisplayConfigPropertiesPtr properties, - mojom::DisplayConfigSource source, - SetDisplayPropertiesCallback callback) override {} + void SetDisplayProperties( + const std::string& id, + crosapi::mojom::DisplayConfigPropertiesPtr properties, + crosapi::mojom::DisplayConfigSource source, + SetDisplayPropertiesCallback callback) override {} void SetUnifiedDesktopEnabled(bool enabled) override {} void OverscanCalibration(const std::string& display_id, - mojom::DisplayConfigOperation op, + crosapi::mojom::DisplayConfigOperation op, const absl::optional<gfx::Insets>& delta, OverscanCalibrationCallback callback) override {} void TouchCalibration(const std::string& display_id, - mojom::DisplayConfigOperation op, - mojom::TouchCalibrationPtr calibration, + crosapi::mojom::DisplayConfigOperation op, + crosapi::mojom::TouchCalibrationPtr calibration, TouchCalibrationCallback callback) override {} void HighlightDisplay(int64_t id) override {} void DragDisplayDelta(int64_t display_id, @@ -158,7 +161,7 @@ int32_t delta_y) override {} private: - mojo::Receiver<mojom::CrosDisplayConfigController> receiver_; + mojo::Receiver<crosapi::mojom::CrosDisplayConfigController> receiver_; GetDisplayUnitInfoListCallback get_display_unit_info_list_callback_; }; @@ -260,7 +263,7 @@ display::Screen::SetScreenInstance(&test_screen_); display::SetInternalDisplayIds({test_screen_.GetPrimaryDisplay().id()}); - mojo::PendingRemote<mojom::CrosDisplayConfigController> + mojo::PendingRemote<crosapi::mojom::CrosDisplayConfigController> remote_display_config; cros_display_config_ = std::make_unique<TestCrosDisplayConfig>( remote_display_config.InitWithNewPipeAndPassReceiver()); @@ -296,13 +299,13 @@ const float y; }; - std::vector<mojom::DisplayUnitInfoPtr> CreateDisplayUnitInfo( + std::vector<crosapi::mojom::DisplayUnitInfoPtr> CreateDisplayUnitInfo( const Dpi& internal_dpi, absl::optional<Dpi> external_dpi) { - std::vector<mojom::DisplayUnitInfoPtr> info_list; + std::vector<crosapi::mojom::DisplayUnitInfoPtr> info_list; if (external_dpi.has_value()) { - auto external_info = mojom::DisplayUnitInfo::New(); + auto external_info = crosapi::mojom::DisplayUnitInfo::New(); external_info->id = base::NumberToString(test_screen_.GetPrimaryDisplay().id() + 1); external_info->is_internal = false; @@ -311,7 +314,7 @@ info_list.emplace_back(std::move(external_info)); } - auto info = mojom::DisplayUnitInfo::New(); + auto info = crosapi::mojom::DisplayUnitInfo::New(); info->id = base::NumberToString(test_screen_.GetPrimaryDisplay().id()); info->is_internal = true; info->dpi_x = internal_dpi.x;
diff --git a/chrome/browser/ash/login/users/chrome_user_manager_impl.cc b/chrome/browser/ash/login/users/chrome_user_manager_impl.cc index db7244d..be30c82 100644 --- a/chrome/browser/ash/login/users/chrome_user_manager_impl.cc +++ b/chrome/browser/ash/login/users/chrome_user_manager_impl.cc
@@ -1374,10 +1374,13 @@ void ChromeUserManagerImpl::RemoveReportingUser(const AccountId& account_id) { ListPrefUpdate users_update(GetLocalState(), ::prefs::kReportingUsers); - users_update->EraseListIter( - std::find(users_update->GetListDeprecated().begin(), - users_update->GetListDeprecated().end(), - base::Value(FullyCanonicalize(account_id.GetUserEmail())))); + base::Value::List& update_list = users_update->GetList(); + auto it = + std::find(update_list.begin(), update_list.end(), + base::Value(FullyCanonicalize(account_id.GetUserEmail()))); + if (it == update_list.end()) + return; + update_list.erase(it); } const AccountId& ChromeUserManagerImpl::GetGuestAccountId() const {
diff --git a/chrome/browser/ash/login/users/supervised_user_manager_impl.cc b/chrome/browser/ash/login/users/supervised_user_manager_impl.cc index dac2c5a..8e7c54d2 100644 --- a/chrome/browser/ash/login/users/supervised_user_manager_impl.cc +++ b/chrome/browser/ash/login/users/supervised_user_manager_impl.cc
@@ -253,7 +253,7 @@ const std::string& user_id) { PrefService* prefs = g_browser_process->local_state(); ListPrefUpdate prefs_new_users_update(prefs, kSupervisedUsersFirstRun); - prefs_new_users_update->EraseListValue(base::Value(user_id)); + prefs_new_users_update->GetList().EraseValue(base::Value(user_id)); CleanPref(user_id, kSupervisedUserSyncId); CleanPref(user_id, kSupervisedUserManagers); @@ -276,7 +276,7 @@ bool SupervisedUserManagerImpl::CheckForFirstRun(const std::string& user_id) { ListPrefUpdate prefs_new_users_update(g_browser_process->local_state(), kSupervisedUsersFirstRun); - return prefs_new_users_update->EraseListValue(base::Value(user_id)); + return prefs_new_users_update->GetList().EraseValue(base::Value(user_id)); } } // namespace ash
diff --git a/chrome/browser/ash/login/wizard_controller.cc b/chrome/browser/ash/login/wizard_controller.cc index ffe16b2..f86cc0f8 100644 --- a/chrome/browser/ash/login/wizard_controller.cc +++ b/chrome/browser/ash/login/wizard_controller.cc
@@ -671,7 +671,7 @@ append(std::make_unique<DeviceDisabledScreen>( oobe_ui->GetView<DeviceDisabledScreenHandler>()->AsWeakPtr())); append(std::make_unique<EncryptionMigrationScreen>( - oobe_ui->GetView<EncryptionMigrationScreenHandler>())); + oobe_ui->GetView<EncryptionMigrationScreenHandler>()->AsWeakPtr())); append(std::make_unique<ManagementTransitionScreen>( oobe_ui->GetView<ManagementTransitionScreenHandler>()->AsWeakPtr(), base::BindRepeating(&WizardController::OnManagementTransitionScreenExit,
diff --git a/chrome/browser/ash/ownership/owner_settings_service_ash.cc b/chrome/browser/ash/ownership/owner_settings_service_ash.cc index fd2e49d..38c3a14 100644 --- a/chrome/browser/ash/ownership/owner_settings_service_ash.cc +++ b/chrome/browser/ash/ownership/owner_settings_service_ash.cc
@@ -343,11 +343,11 @@ const base::Value* old_value = CrosSettings::Get()->GetPref(setting); if (old_value && !old_value->is_list()) return false; - base::Value new_value(base::Value::Type::LIST); + base::Value::List new_value; if (old_value) - new_value = old_value->Clone(); - new_value.EraseListValue(value); - return Set(setting, std::move(new_value)); + new_value = old_value->GetList().Clone(); + new_value.EraseValue(value); + return Set(setting, base::Value(std::move(new_value))); } bool OwnerSettingsServiceAsh::CommitTentativeDeviceSettings(
diff --git a/chrome/browser/ash/policy/display/display_resolution_handler.cc b/chrome/browser/ash/policy/display/display_resolution_handler.cc index a11bb09..7a248b8 100644 --- a/chrome/browser/ash/policy/display/display_resolution_handler.cc +++ b/chrome/browser/ash/policy/display/display_resolution_handler.cc
@@ -17,8 +17,8 @@ namespace policy { using DisplayUnitTraits = - mojo::StructTraits<::ash::mojom::DisplayUnitInfo::DataView, - ::ash::mojom::DisplayUnitInfoPtr>; + mojo::StructTraits<crosapi::mojom::DisplayUnitInfo::DataView, + crosapi::mojom::DisplayUnitInfoPtr>; struct DisplayResolutionHandler::InternalDisplaySettings { int scale_percentage = 0; @@ -36,8 +36,8 @@ // Create display config for the internal display using policy settings from // |internal_display_settings_|. - ash::mojom::DisplayConfigPropertiesPtr ToDisplayConfigProperties() { - auto new_config = ash::mojom::DisplayConfigProperties::New(); + crosapi::mojom::DisplayConfigPropertiesPtr ToDisplayConfigProperties() { + auto new_config = crosapi::mojom::DisplayConfigProperties::New(); // Converting percentage to factor. new_config->display_zoom_factor = scale_percentage / 100.0; return new_config; @@ -73,7 +73,7 @@ // Check if either |use_native| flag is set and mode is native or the mode // has required resolution. - bool IsSuitableDisplayMode(const ash::mojom::DisplayModePtr& mode) { + bool IsSuitableDisplayMode(const crosapi::mojom::DisplayModePtr& mode) { return (use_native && mode->is_native) || (!use_native && width == mode->size.width() && height == mode->size.height()); @@ -81,11 +81,11 @@ // Create display config for the external display using policy settings from // |external_display_settings_|. - ash::mojom::DisplayConfigPropertiesPtr ToDisplayConfigProperties( - const std::vector<ash::mojom::DisplayModePtr>& display_modes) { + crosapi::mojom::DisplayConfigPropertiesPtr ToDisplayConfigProperties( + const std::vector<crosapi::mojom::DisplayModePtr>& display_modes) { bool found_suitable_mode = false; - auto new_config = ash::mojom::DisplayConfigProperties::New(); - for (const ash::mojom::DisplayModePtr& mode : display_modes) { + auto new_config = crosapi::mojom::DisplayConfigProperties::New(); + for (const crosapi::mojom::DisplayModePtr& mode : display_modes) { // Check if the current display mode has required resolution and its // refresh rate is higher than refresh rate of the already found mode. if (IsSuitableDisplayMode(mode) && @@ -98,7 +98,7 @@ // If we couldn't find the required mode and and scale percentage doesn't // need to be changed, we have nothing to do. if (!found_suitable_mode && !scale_percentage) { - return ash::mojom::DisplayConfigPropertiesPtr(); + return crosapi::mojom::DisplayConfigPropertiesPtr(); } if (scale_percentage) { @@ -204,11 +204,12 @@ // Applies settings received with |OnSettingUpdate| to each supported display // from |info_list| if |policy_enabled_| is true. void DisplayResolutionHandler::ApplyChanges( - ash::mojom::CrosDisplayConfigController* cros_display_config, - const std::vector<ash::mojom::DisplayUnitInfoPtr>& info_list) { + crosapi::mojom::CrosDisplayConfigController* cros_display_config, + const std::vector<crosapi::mojom::DisplayUnitInfoPtr>& info_list) { if (!policy_enabled_) return; - for (const ash::mojom::DisplayUnitInfoPtr& display_unit_info : info_list) { + for (const crosapi::mojom::DisplayUnitInfoPtr& display_unit_info : + info_list) { std::string display_id = display_unit_info->id; // If policy value is marked as "recommended" we need to change the // resolution just once for each display. So we're just skipping the display @@ -218,7 +219,7 @@ continue; } - ash::mojom::DisplayConfigPropertiesPtr new_config; + crosapi::mojom::DisplayConfigPropertiesPtr new_config; if (display_unit_info->is_internal && internal_display_settings_) { new_config = internal_display_settings_->ToDisplayConfigProperties(); } else if (!display_unit_info->is_internal && external_display_settings_) { @@ -232,9 +233,9 @@ resized_display_ids_.insert(display_id); cros_display_config->SetDisplayProperties( display_unit_info->id, std::move(new_config), - ash::mojom::DisplayConfigSource::kPolicy, - base::BindOnce([](ash::mojom::DisplayConfigResult result) { - if (result == ash::mojom::DisplayConfigResult::kSuccess) { + crosapi::mojom::DisplayConfigSource::kPolicy, + base::BindOnce([](crosapi::mojom::DisplayConfigResult result) { + if (result == crosapi::mojom::DisplayConfigResult::kSuccess) { VLOG(1) << "Successfully changed display mode."; } else { LOG(ERROR) << "Couldn't change display mode. Error code: "
diff --git a/chrome/browser/ash/policy/display/display_resolution_handler.h b/chrome/browser/ash/policy/display/display_resolution_handler.h index f6bd240..0b4f219 100644 --- a/chrome/browser/ash/policy/display/display_resolution_handler.h +++ b/chrome/browser/ash/policy/display/display_resolution_handler.h
@@ -10,8 +10,8 @@ #include <string> #include <vector> -#include "ash/public/mojom/cros_display_config.mojom-forward.h" #include "chrome/browser/ash/policy/display/display_settings_handler.h" +#include "chromeos/crosapi/mojom/cros_display_config.mojom-forward.h" namespace policy { @@ -43,8 +43,9 @@ const char* SettingName() override; void OnSettingUpdate() override; void ApplyChanges( - ash::mojom::CrosDisplayConfigController* cros_display_config, - const std::vector<ash::mojom::DisplayUnitInfoPtr>& info_list) override; + crosapi::mojom::CrosDisplayConfigController* cros_display_config, + const std::vector<crosapi::mojom::DisplayUnitInfoPtr>& info_list) + override; private: struct InternalDisplaySettings;
diff --git a/chrome/browser/ash/policy/display/display_rotation_default_handler.cc b/chrome/browser/ash/policy/display/display_rotation_default_handler.cc index 7d0105a..4d20ceba 100644 --- a/chrome/browser/ash/policy/display/display_rotation_default_handler.cc +++ b/chrome/browser/ash/policy/display/display_rotation_default_handler.cc
@@ -13,40 +13,40 @@ namespace { display::Display::Rotation DisplayRotationFromRotationOptions( - ash::mojom::DisplayRotationOptions option) { + crosapi::mojom::DisplayRotationOptions option) { switch (option) { - case ash::mojom::DisplayRotationOptions::kAutoRotate: + case crosapi::mojom::DisplayRotationOptions::kAutoRotate: // Auto rotation is ignored and considered as a 0-degrees rotation. return display::Display::ROTATE_0; - case ash::mojom::DisplayRotationOptions::kZeroDegrees: + case crosapi::mojom::DisplayRotationOptions::kZeroDegrees: return display::Display::ROTATE_0; - case ash::mojom::DisplayRotationOptions::k90Degrees: + case crosapi::mojom::DisplayRotationOptions::k90Degrees: return display::Display::ROTATE_90; - case ash::mojom::DisplayRotationOptions::k180Degrees: + case crosapi::mojom::DisplayRotationOptions::k180Degrees: return display::Display::ROTATE_180; - case ash::mojom::DisplayRotationOptions::k270Degrees: + case crosapi::mojom::DisplayRotationOptions::k270Degrees: return display::Display::ROTATE_270; } } -ash::mojom::DisplayRotationOptions RotationOptionsFromDisplayRotation( +crosapi::mojom::DisplayRotationOptions RotationOptionsFromDisplayRotation( display::Display::Rotation rotation) { switch (rotation) { case display::Display::ROTATE_0: - return ash::mojom::DisplayRotationOptions::kZeroDegrees; + return crosapi::mojom::DisplayRotationOptions::kZeroDegrees; case display::Display::ROTATE_90: - return ash::mojom::DisplayRotationOptions::k90Degrees; + return crosapi::mojom::DisplayRotationOptions::k90Degrees; case display::Display::ROTATE_180: - return ash::mojom::DisplayRotationOptions::k180Degrees; + return crosapi::mojom::DisplayRotationOptions::k180Degrees; case display::Display::ROTATE_270: - return ash::mojom::DisplayRotationOptions::k270Degrees; + return crosapi::mojom::DisplayRotationOptions::k270Degrees; } } @@ -90,11 +90,12 @@ } void DisplayRotationDefaultHandler::ApplyChanges( - ash::mojom::CrosDisplayConfigController* cros_display_config, - const std::vector<ash::mojom::DisplayUnitInfoPtr>& info_list) { + crosapi::mojom::CrosDisplayConfigController* cros_display_config, + const std::vector<crosapi::mojom::DisplayUnitInfoPtr>& info_list) { if (!policy_enabled_) return; - for (const ash::mojom::DisplayUnitInfoPtr& display_unit_info : info_list) { + for (const crosapi::mojom::DisplayUnitInfoPtr& display_unit_info : + info_list) { std::string display_id = display_unit_info->id; if (rotated_display_ids_.find(display_id) != rotated_display_ids_.end()) @@ -108,12 +109,12 @@ // The following sets only the |rotation| property of the display // configuration; no other properties will be affected. - auto config_properties = ash::mojom::DisplayConfigProperties::New(); - config_properties->rotation = ash::mojom::DisplayRotation::New( + auto config_properties = crosapi::mojom::DisplayConfigProperties::New(); + config_properties->rotation = crosapi::mojom::DisplayRotation::New( RotationOptionsFromDisplayRotation(display_rotation_default_)); cros_display_config->SetDisplayProperties( display_unit_info->id, std::move(config_properties), - ash::mojom::DisplayConfigSource::kPolicy, base::DoNothing()); + crosapi::mojom::DisplayConfigSource::kPolicy, base::DoNothing()); } }
diff --git a/chrome/browser/ash/policy/display/display_rotation_default_handler.h b/chrome/browser/ash/policy/display/display_rotation_default_handler.h index 73ceb6b..2380f2a 100644 --- a/chrome/browser/ash/policy/display/display_rotation_default_handler.h +++ b/chrome/browser/ash/policy/display/display_rotation_default_handler.h
@@ -9,8 +9,8 @@ #include <string> #include <vector> -#include "ash/public/mojom/cros_display_config.mojom-forward.h" #include "chrome/browser/ash/policy/display/display_settings_handler.h" +#include "chromeos/crosapi/mojom/cros_display_config.mojom-forward.h" #include "ui/display/display.h" namespace policy { @@ -40,8 +40,9 @@ const char* SettingName() override; void OnSettingUpdate() override; void ApplyChanges( - ash::mojom::CrosDisplayConfigController* cros_display_config, - const std::vector<ash::mojom::DisplayUnitInfoPtr>& info_list) override; + crosapi::mojom::CrosDisplayConfigController* cros_display_config, + const std::vector<crosapi::mojom::DisplayUnitInfoPtr>& info_list) + override; private: bool policy_enabled_ = false;
diff --git a/chrome/browser/ash/policy/display/display_settings_handler.cc b/chrome/browser/ash/policy/display/display_settings_handler.cc index 10499fa..d8f3416 100644 --- a/chrome/browser/ash/policy/display/display_settings_handler.cc +++ b/chrome/browser/ash/policy/display/display_settings_handler.cc
@@ -8,7 +8,6 @@ #include "ash/components/settings/cros_settings_names.h" #include "ash/public/ash_interfaces.h" -#include "ash/public/mojom/cros_display_config.mojom.h" #include "base/bind.h" #include "base/callback_helpers.h" #include "base/location.h" @@ -61,10 +60,11 @@ } void DisplaySettingsHandler::OnGetInitialDisplayInfo( - std::vector<ash::mojom::DisplayUnitInfoPtr> info_list) { + std::vector<crosapi::mojom::DisplayUnitInfoPtr> info_list) { // Add this as an observer to the mojo service now that it is ready. // (We only care about changes that occur after we apply any changes below). - mojo::PendingAssociatedRemote<ash::mojom::CrosDisplayConfigObserver> observer; + mojo::PendingAssociatedRemote<crosapi::mojom::CrosDisplayConfigObserver> + observer; cros_display_config_observer_receiver_.Bind( observer.InitWithNewEndpointAndPassReceiver()); cros_display_config_->AddObserver(std::move(observer)); @@ -80,7 +80,7 @@ } void DisplaySettingsHandler::ApplyChanges( - std::vector<ash::mojom::DisplayUnitInfoPtr> info_list) { + std::vector<crosapi::mojom::DisplayUnitInfoPtr> info_list) { for (std::unique_ptr<DisplaySettingsPolicyHandler>& handler : handlers_) UpdateSettingAndApplyChanges(handler.get(), info_list); } @@ -95,14 +95,14 @@ void DisplaySettingsHandler::UpdateSettingAndApplyChanges( DisplaySettingsPolicyHandler* handler, - const std::vector<ash::mojom::DisplayUnitInfoPtr>& info_list) { + const std::vector<crosapi::mojom::DisplayUnitInfoPtr>& info_list) { handler->OnSettingUpdate(); handler->ApplyChanges(cros_display_config_.get(), info_list); } void DisplaySettingsHandler::OnConfigurationChangeForHandler( DisplaySettingsPolicyHandler* handler, - std::vector<ash::mojom::DisplayUnitInfoPtr> info_list) { + std::vector<crosapi::mojom::DisplayUnitInfoPtr> info_list) { UpdateSettingAndApplyChanges(handler, info_list); }
diff --git a/chrome/browser/ash/policy/display/display_settings_handler.h b/chrome/browser/ash/policy/display/display_settings_handler.h index 3b289dc..c8d3d18 100644 --- a/chrome/browser/ash/policy/display/display_settings_handler.h +++ b/chrome/browser/ash/policy/display/display_settings_handler.h
@@ -8,9 +8,9 @@ #include <memory> #include <vector> -#include "ash/public/mojom/cros_display_config.mojom.h" #include "base/memory/weak_ptr.h" #include "chrome/browser/ash/settings/cros_settings.h" +#include "chromeos/crosapi/mojom/cros_display_config.mojom.h" #include "mojo/public/cpp/bindings/associated_receiver.h" #include "mojo/public/cpp/bindings/remote.h" @@ -34,19 +34,20 @@ // Applies settings enforced by the policy to each display from |info_list|. // Is called on each configuration change or settings update. virtual void ApplyChanges( - ash::mojom::CrosDisplayConfigController* cros_display_config, - const std::vector<ash::mojom::DisplayUnitInfoPtr>& info_list) = 0; + crosapi::mojom::CrosDisplayConfigController* cros_display_config, + const std::vector<crosapi::mojom::DisplayUnitInfoPtr>& info_list) = 0; }; // Enforces the settings controlled by device policies related to display // configuration (i.e. DisplayRotationDefault, DeviceDisplayResolution) // On construction this class registers itself with -// ash::mojom::CrosDisplayConfigObserver for display changes and with +// crosapi::mojom::CrosDisplayConfigObserver for display changes and with // CrosSettings for settings changes. Every display configuration policy // provides a handler class inherited from |DisplaySettingsPolicyHandler| // and is registered in |DisplaySettingsHandler| instance. // see |DisplayResolutionHandler| and |DisplayRotationDefaultHandler| -class DisplaySettingsHandler : public ash::mojom::CrosDisplayConfigObserver { +class DisplaySettingsHandler + : public crosapi::mojom::CrosDisplayConfigObserver { public: // This class must be constructed after CrosSettings is initialized. DisplaySettingsHandler(); @@ -56,7 +57,7 @@ ~DisplaySettingsHandler() override; - // ash::mojom::CrosDisplayConfigObserver + // crosapi::mojom::CrosDisplayConfigObserver void OnDisplayConfigChanged() override; // Registers handler for some policy-controlled setting. All handlers must be @@ -70,13 +71,13 @@ private: // Receives the initial display info list and initializes the class. void OnGetInitialDisplayInfo( - std::vector<ash::mojom::DisplayUnitInfoPtr> info_list); + std::vector<crosapi::mojom::DisplayUnitInfoPtr> info_list); // Requests the list of displays and applies each setting. void RequestDisplaysAndApplyChanges(); - // Apply all default settings defined by policies to all conencted displays. - void ApplyChanges(std::vector<ash::mojom::DisplayUnitInfoPtr> info_list); + // Apply all default settings defined by policies to all connected displays. + void ApplyChanges(std::vector<crosapi::mojom::DisplayUnitInfoPtr> info_list); // Called on each update of the setting provided by |handler|. Requests the // list of displays and applies |handler| to each display. @@ -85,18 +86,19 @@ // Applies |handler| to each display from |info_list|. void UpdateSettingAndApplyChanges( DisplaySettingsPolicyHandler* handler, - const std::vector<ash::mojom::DisplayUnitInfoPtr>& info_list); + const std::vector<crosapi::mojom::DisplayUnitInfoPtr>& info_list); // Called on display configuration changes for each handler. void OnConfigurationChangeForHandler( DisplaySettingsPolicyHandler* handler, - std::vector<ash::mojom::DisplayUnitInfoPtr> info_list); + std::vector<crosapi::mojom::DisplayUnitInfoPtr> info_list); // Provides access to the current display configurations, both for reading and // updating. - mojo::Remote<ash::mojom::CrosDisplayConfigController> cros_display_config_; + mojo::Remote<crosapi::mojom::CrosDisplayConfigController> + cros_display_config_; std::vector<std::unique_ptr<DisplaySettingsPolicyHandler>> handlers_; - mojo::AssociatedReceiver<ash::mojom::CrosDisplayConfigObserver> + mojo::AssociatedReceiver<crosapi::mojom::CrosDisplayConfigObserver> cros_display_config_observer_receiver_{this}; std::vector<base::CallbackListSubscription> settings_subscriptions_; bool started_ = false;
diff --git a/chrome/browser/ash/preferences.cc b/chrome/browser/ash/preferences.cc index e86b5ae..12c2f3a 100644 --- a/chrome/browser/ash/preferences.cc +++ b/chrome/browser/ash/preferences.cc
@@ -16,7 +16,6 @@ #include "ash/constants/ash_switches.h" #include "ash/public/ash_interfaces.h" #include "ash/public/cpp/ash_prefs.h" -#include "ash/public/mojom/cros_display_config.mojom.h" #include "base/bind.h" #include "base/command_line.h" #include "base/feature_list.h"
diff --git a/chrome/browser/ash/preferences.h b/chrome/browser/ash/preferences.h index 16602bc..d8b1e1b 100644 --- a/chrome/browser/ash/preferences.h +++ b/chrome/browser/ash/preferences.h
@@ -7,10 +7,10 @@ #include <string> -#include "ash/public/mojom/cros_display_config.mojom.h" #include "base/memory/weak_ptr.h" #include "chrome/browser/ash/language_preferences.h" #include "chromeos/ash/components/dbus/update_engine/update_engine_client.h" +#include "chromeos/crosapi/mojom/cros_display_config.mojom.h" #include "components/prefs/pref_change_registrar.h" #include "components/prefs/pref_member.h" #include "components/sync_preferences/pref_service_syncable_observer.h" @@ -195,7 +195,8 @@ std::unique_ptr<input_method::InputMethodSyncer> input_method_syncer_; - mojo::Remote<mojom::CrosDisplayConfigController> cros_display_config_; + mojo::Remote<crosapi::mojom::CrosDisplayConfigController> + cros_display_config_; // Note: This should remain the last member so it'll be destroyed and // invalidate its weak pointers before any other members are destroyed.
diff --git a/chrome/browser/ash/smb_client/smb_persisted_share_registry.cc b/chrome/browser/ash/smb_client/smb_persisted_share_registry.cc index 115203c3..85be45ab 100644 --- a/chrome/browser/ash/smb_client/smb_persisted_share_registry.cc +++ b/chrome/browser/ash/smb_client/smb_persisted_share_registry.cc
@@ -116,11 +116,10 @@ ListPrefUpdate pref(profile_->GetPrefs(), prefs::kNetworkFileSharesSavedShares); - base::Value::ListView share_list = pref->GetListDeprecated(); - for (auto it = share_list.begin(); it != share_list.end(); ++it) { + base::Value::List& list_update = pref->GetList(); + for (auto it = list_update.begin(); it != list_update.end(); ++it) { if (GetStringValue(*it, kShareUrlKey) == share_url.ToString()) { - bool result = pref->EraseListIter(it); - DCHECK(result); + list_update.erase(it); return; } }
diff --git a/chrome/browser/autofill_assistant/password_change/apc_client_impl.cc b/chrome/browser/autofill_assistant/password_change/apc_client_impl.cc index f449695..4c7a19f 100644 --- a/chrome/browser/autofill_assistant/password_change/apc_client_impl.cc +++ b/chrome/browser/autofill_assistant/password_change/apc_client_impl.cc
@@ -14,6 +14,7 @@ #include "chrome/browser/autofill_assistant/common_dependencies_chrome.h" #include "chrome/browser/autofill_assistant/password_change/apc_external_action_delegate.h" #include "chrome/browser/autofill_assistant/password_change/apc_onboarding_coordinator.h" +#include "chrome/browser/password_manager/chrome_password_manager_client.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/autofill_assistant/password_change/apc_scrim_manager.h" #include "chrome/browser/ui/autofill_assistant/password_change/assistant_display_delegate.h" @@ -21,7 +22,10 @@ #include "chrome/common/channel_info.h" #include "components/autofill_assistant/browser/public/autofill_assistant_factory.h" #include "components/autofill_assistant/browser/public/headless_script_controller.h" +#include "components/autofill_assistant/browser/public/password_change/empty_website_login_manager_impl.h" +#include "components/autofill_assistant/browser/public/password_change/website_login_manager_impl.h" #include "components/autofill_assistant/browser/public/public_script_parameters.h" +#include "components/password_manager/core/browser/password_manager_client.h" #include "content/public/browser/web_contents.h" #include "third_party/abseil-cpp/absl/types/optional.h" #include "url/gurl.h" @@ -52,6 +56,10 @@ return; } + if (GetPasswordManagerClient() == nullptr) { + std::move(callback).Run(false); + return; + } // Ensure that only one run is ongoing. if (is_running_) { std::move(callback).Run(false); @@ -186,8 +194,14 @@ std::unique_ptr<autofill_assistant::HeadlessScriptController> ApcClientImpl::CreateHeadlessScriptController() { DCHECK(scrim_manager_); + + website_login_manager_ = + std::make_unique<autofill_assistant::WebsiteLoginManagerImpl>( + GetPasswordManagerClient(), &GetWebContents()); + apc_external_action_delegate_ = std::make_unique<ApcExternalActionDelegate>( - side_panel_coordinator_.get(), scrim_manager_.get()); + side_panel_coordinator_.get(), scrim_manager_.get(), + website_login_manager_.get()); apc_external_action_delegate_->SetupDisplay(); apc_external_action_delegate_->ShowStartingScreen(url_); @@ -196,7 +210,8 @@ GetWebContents().GetBrowserContext(), std::make_unique<autofill_assistant::CommonDependenciesChrome>()); return autofill_assistant->CreateHeadlessScriptController( - &GetWebContents(), apc_external_action_delegate_.get()); + &GetWebContents(), apc_external_action_delegate_.get(), + website_login_manager_.get()); } autofill_assistant::RuntimeManager* ApcClientImpl::GetRuntimeManager() { @@ -208,4 +223,9 @@ return ApcScrimManager::Create(&GetWebContents()); } +password_manager::PasswordManagerClient* +ApcClientImpl::GetPasswordManagerClient() { + return ChromePasswordManagerClient::FromWebContents(&GetWebContents()); +} + WEB_CONTENTS_USER_DATA_KEY_IMPL(ApcClientImpl);
diff --git a/chrome/browser/autofill_assistant/password_change/apc_client_impl.h b/chrome/browser/autofill_assistant/password_change/apc_client_impl.h index c3b2fb4..efd6c4a 100644 --- a/chrome/browser/autofill_assistant/password_change/apc_client_impl.h +++ b/chrome/browser/autofill_assistant/password_change/apc_client_impl.h
@@ -24,6 +24,14 @@ class ApcExternalActionDelegate; class ApcScrimManager; +namespace autofill_assistant { +class WebsiteLoginManager; +} // namespace autofill_assistant + +namespace password_manager { +class PasswordManagerClient; +} // namespace password_manager + // Implementation of the ApcClient interface that attaches itself to a // `WebContents`. class ApcClientImpl : public content::WebContentsUserData<ApcClientImpl>, @@ -71,6 +79,10 @@ // during script runs. virtual std::unique_ptr<ApcScrimManager> CreateApcScrimManager(); + // Get the `PasswordManagerClient` so that we can initialize + // `website_login_manager_`. + virtual password_manager::PasswordManagerClient* GetPasswordManagerClient(); + explicit ApcClientImpl(content::WebContents* web_contents); private: @@ -127,6 +139,11 @@ // Manages the scrim shown during a password change run. std::unique_ptr<ApcScrimManager> scrim_manager_; + // The website login manager used to handle iteractions with the password + // manager. + std::unique_ptr<autofill_assistant::WebsiteLoginManager> + website_login_manager_; + WEB_CONTENTS_USER_DATA_KEY_DECL(); };
diff --git a/chrome/browser/autofill_assistant/password_change/apc_client_impl_unittest.cc b/chrome/browser/autofill_assistant/password_change/apc_client_impl_unittest.cc index ab0c20fc..0af442c 100644 --- a/chrome/browser/autofill_assistant/password_change/apc_client_impl_unittest.cc +++ b/chrome/browser/autofill_assistant/password_change/apc_client_impl_unittest.cc
@@ -20,6 +20,9 @@ #include "chrome/test/base/chrome_render_view_host_test_harness.h" #include "components/autofill_assistant/browser/public/mock_headless_script_controller.h" #include "components/autofill_assistant/browser/public/mock_runtime_manager.h" +#include "components/password_manager/core/browser/password_manager_client.h" +#include "components/password_manager/core/browser/password_manager_client_helper.h" +#include "components/password_manager/core/browser/stub_password_manager_client.h" #include "content/public/browser/web_contents.h" #include "content/public/test/test_renderer_host.h" #include "testing/gmock/include/gmock/gmock.h" @@ -28,6 +31,7 @@ #include "url/gurl.h" namespace { + constexpr char kUrl1[] = "https://www.example.com"; constexpr char kUsername1[] = "Lori"; constexpr char kDebugBundleId[] = "testuser/123/password_change/example.com"; @@ -43,6 +47,7 @@ constexpr int kDescriptionId1 = 3; constexpr int kDescriptionId2 = 17; + } // namespace using ::testing::DoAll; @@ -79,6 +84,10 @@ return std::move(scrim_manager_); } + password_manager::PasswordManagerClient* GetPasswordManagerClient() override { + return password_manager_client_.get(); + } + // Allows setting an onboarding coordinator that is returned by the factory // function. Must be called at least once before every expected call to // `CreateOnboardingCoordinator()`. @@ -112,6 +121,13 @@ scrim_manager_ = std::move(scrim_manager); } + // Allows setting an PasswordManagerClient. + void InjectPasswordManagerClientForTesting( + std::unique_ptr<password_manager::PasswordManagerClient> + password_manager_client) { + password_manager_client_ = std::move(password_manager_client); + } + private: std::unique_ptr<ApcOnboardingCoordinator> coordinator_; std::unique_ptr<AssistantSidePanelCoordinator> side_panel_; @@ -119,6 +135,8 @@ external_script_controller_; raw_ptr<autofill_assistant::RuntimeManager> runtime_manager_; std::unique_ptr<ApcScrimManager> scrim_manager_; + std::unique_ptr<password_manager::PasswordManagerClient> + password_manager_client_; }; // static @@ -172,6 +190,12 @@ auto scrim_manager = std::make_unique<MockApcScrimManager>(); scrim_manager_ref_ = scrim_manager.get(); test_apc_client_->InjectApcScrimManagerForTesting(std::move(scrim_manager)); + + // Prepare the PasswordManagerClient. + auto password_manager_client = + std::make_unique<password_manager::StubPasswordManagerClient>(); + test_apc_client_->InjectPasswordManagerClientForTesting( + std::move(password_manager_client)); } TestApcClientImpl* apc_client() { return test_apc_client_; } @@ -379,6 +403,18 @@ EXPECT_FALSE(client->IsRunning()); } +TEST_F(ApcClientImplTest, + CreateAndStartApcFlow_WithoutPasswordClientManagerFlowStops) { + apc_client()->InjectPasswordManagerClientForTesting(nullptr); + + apc_client()->Start(GURL(kUrl1), kUsername1, /*skip_login=*/true, + /*callback=*/base::DoNothing(), + /*debug_run_information=*/absl::nullopt); + + // Fail run. + EXPECT_FALSE(apc_client()->IsRunning()); +} + TEST_F(ApcClientImplTest, StopApcFlow) { raw_ptr<ApcClient> client = ApcClient::GetOrCreateForWebContents(web_contents());
diff --git a/chrome/browser/autofill_assistant/password_change/apc_external_action_delegate.cc b/chrome/browser/autofill_assistant/password_change/apc_external_action_delegate.cc index fc5f798..e8c3c51 100644 --- a/chrome/browser/autofill_assistant/password_change/apc_external_action_delegate.cc +++ b/chrome/browser/autofill_assistant/password_change/apc_external_action_delegate.cc
@@ -20,6 +20,7 @@ #include "components/autofill_assistant/browser/public/external_action.pb.h" #include "components/autofill_assistant/browser/public/external_action_delegate.h" #include "components/autofill_assistant/browser/public/password_change/proto/actions.pb.h" +#include "components/autofill_assistant/browser/public/password_change/website_login_manager_impl.h" #include "components/autofill_assistant/browser/public/rectf.h" #include "components/url_formatter/url_formatter.h" #include "ui/base/l10n/l10n_util.h" @@ -29,11 +30,14 @@ ApcExternalActionDelegate::ApcExternalActionDelegate( AssistantDisplayDelegate* display_delegate, - ApcScrimManager* apc_scrim_manager) + ApcScrimManager* apc_scrim_manager, + autofill_assistant::WebsiteLoginManager* website_login_manager) : display_delegate_(display_delegate), - apc_scrim_manager_(apc_scrim_manager) { + apc_scrim_manager_(apc_scrim_manager), + website_login_manager_(website_login_manager) { DCHECK(display_delegate_); DCHECK(apc_scrim_manager_); + DCHECK(website_login_manager_); } ApcExternalActionDelegate::~ApcExternalActionDelegate() = default; @@ -290,9 +294,9 @@ void ApcExternalActionDelegate::HandleGeneratedPasswordPrompt( const autofill_assistant::password_change:: UseGeneratedPasswordPromptSpecification& specification) { - // TODO(crbug.com/1331202): Replace this hardcoded password with the real - // generated one. - ShowUseGeneratedPasswordPrompt(specification, u"verySecretPassword123"); + ShowUseGeneratedPasswordPrompt( + specification, + base::UTF8ToUTF16(website_login_manager_->GetGeneratedPassword())); } void ApcExternalActionDelegate::HandleUpdateSidePanel(
diff --git a/chrome/browser/autofill_assistant/password_change/apc_external_action_delegate.h b/chrome/browser/autofill_assistant/password_change/apc_external_action_delegate.h index c04be5aca..f71277bd 100644 --- a/chrome/browser/autofill_assistant/password_change/apc_external_action_delegate.h +++ b/chrome/browser/autofill_assistant/password_change/apc_external_action_delegate.h
@@ -21,6 +21,9 @@ namespace autofill_assistant { struct RectF; } +namespace autofill_assistant { +class WebsiteLoginManager; +} // namespace autofill_assistant // Receives actions from the `HeadlessScriptController` and passes them on an // implementation of a `PasswordChangeRunDisplay`. @@ -31,8 +34,10 @@ : public autofill_assistant::ExternalActionDelegate, public PasswordChangeRunController { public: - explicit ApcExternalActionDelegate(AssistantDisplayDelegate* display_delegate, - ApcScrimManager* apc_scrim_manager); + explicit ApcExternalActionDelegate( + AssistantDisplayDelegate* display_delegate, + ApcScrimManager* apc_scrim_manager, + autofill_assistant::WebsiteLoginManager* website_login_manager); ApcExternalActionDelegate(const ApcExternalActionDelegate&) = delete; ApcExternalActionDelegate& operator=(const ApcExternalActionDelegate&) = delete; @@ -135,6 +140,10 @@ // The scrim manager to update the overlay and html elements showcasting. raw_ptr<ApcScrimManager> apc_scrim_manager_ = nullptr; + // Use to handle interactions with the password manager. + raw_ptr<autofill_assistant::WebsiteLoginManager> website_login_manager_ = + nullptr; + // Factory for weak pointers to this class. base::WeakPtrFactory<PasswordChangeRunController> weak_ptr_factory_{this}; };
diff --git a/chrome/browser/autofill_assistant/password_change/apc_external_action_delegate_unittest.cc b/chrome/browser/autofill_assistant/password_change/apc_external_action_delegate_unittest.cc index c23d5f8..04cca0a 100644 --- a/chrome/browser/autofill_assistant/password_change/apc_external_action_delegate_unittest.cc +++ b/chrome/browser/autofill_assistant/password_change/apc_external_action_delegate_unittest.cc
@@ -17,6 +17,7 @@ #include "chrome/browser/ui/autofill_assistant/password_change/password_change_run_display.h" #include "chrome/grit/generated_resources.h" #include "components/autofill_assistant/browser/public/external_action.pb.h" +#include "components/autofill_assistant/browser/public/password_change/mock_website_login_manager.h" #include "components/autofill_assistant/browser/public/password_change/proto/actions.pb.h" #include "components/autofill_assistant/browser/public/rectf.h" #include "testing/gmock/include/gmock/gmock.h" @@ -26,6 +27,7 @@ using ::testing::_; using ::testing::DoAll; +using ::testing::ReturnRef; using ::testing::SaveArg; using DomUpdateCallback = autofill_assistant::ExternalActionDelegate::DomUpdateCallback; @@ -148,7 +150,7 @@ public: ApcExternalActionDelegateTest() { action_delegate_ = std::make_unique<ApcExternalActionDelegate>( - display_delegate(), apc_scrim_manager()); + display_delegate(), apc_scrim_manager(), website_login_manager()); } void SetUp() override { @@ -162,6 +164,10 @@ MockApcScrimManager* apc_scrim_manager() { return &apc_scrim_manager_; } + autofill_assistant::MockWebsiteLoginManager* website_login_manager() { + return &website_login_manager_; + } + MockPasswordChangeRunDisplay* display() { return &display_; } ApcExternalActionDelegate* action_delegate() { @@ -173,6 +179,7 @@ MockAssistantDisplayDelegate display_delegate_; MockPasswordChangeRunDisplay display_; MockApcScrimManager apc_scrim_manager_; + autofill_assistant::MockWebsiteLoginManager website_login_manager_; // The object to be tested. std::unique_ptr<ApcExternalActionDelegate> action_delegate_; @@ -461,6 +468,9 @@ const autofill_assistant::external::Result& result)> result_callback; base::MockOnceCallback<void(DomUpdateCallback)> start_dom_checks_callback; + std::string generated_password = base::UTF16ToUTF8(kPassword); + ON_CALL(*website_login_manager(), GetGeneratedPassword()) + .WillByDefault(ReturnRef(generated_password)); // Save prompt arguments for inspection. PasswordChangeRunDisplay::PromptChoice manual_choice, generated_choice; @@ -517,6 +527,9 @@ const autofill_assistant::external::Result& result)> result_callback; base::MockOnceCallback<void(DomUpdateCallback)> start_dom_checks_callback; + std::string generated_password = base::UTF16ToUTF8(kPassword); + ON_CALL(*website_login_manager(), GetGeneratedPassword()) + .WillByDefault(ReturnRef(generated_password)); // Save prompt arguments for inspection. PasswordChangeRunDisplay::PromptChoice manual_choice, generated_choice;
diff --git a/chrome/browser/enterprise/connectors/analysis/content_analysis_sdk_manager.cc b/chrome/browser/enterprise/connectors/analysis/content_analysis_sdk_manager.cc new file mode 100644 index 0000000..faf0a2f --- /dev/null +++ b/chrome/browser/enterprise/connectors/analysis/content_analysis_sdk_manager.cc
@@ -0,0 +1,61 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/enterprise/connectors/analysis/content_analysis_sdk_manager.h" + +#include <utility> + +#include "base/task/thread_pool.h" +#include "content/public/browser/browser_thread.h" + +namespace enterprise_connectors { + +ContentAnalysisSdkManager::WrappedClient::WrappedClient( + std::unique_ptr<content_analysis::sdk::Client> client) + : client_(std::move(client)) {} + +ContentAnalysisSdkManager::WrappedClient::~WrappedClient() = default; + +// static +ContentAnalysisSdkManager* ContentAnalysisSdkManager::Get() { + static base::NoDestructor<ContentAnalysisSdkManager> manager; + return manager.get(); +} + +ContentAnalysisSdkManager::ContentAnalysisSdkManager() = default; + +ContentAnalysisSdkManager::~ContentAnalysisSdkManager() = default; + +scoped_refptr<ContentAnalysisSdkManager::WrappedClient> +ContentAnalysisSdkManager::GetClient( + content_analysis::sdk::Client::Config config) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + auto it = clients_.find(config); + if (it != clients_.end()) + return it->second; + + auto client = CreateClient(config); + if (client) { + auto wrapped = base::MakeRefCounted<WrappedClient>(std::move(client)); + clients_.insert(std::make_pair(std::move(config), wrapped)); + return wrapped; + } + + return nullptr; +} + +void ContentAnalysisSdkManager::ResetClient( + const content_analysis::sdk::Client::Config& config) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + clients_.erase(config); + // TODO(b/2398416680): recreate now? +} + +std::unique_ptr<content_analysis::sdk::Client> +ContentAnalysisSdkManager::CreateClient( + const content_analysis::sdk::Client::Config& config) { + return content_analysis::sdk::Client::Create(config); +} + +} // namespace enterprise_connectors
diff --git a/chrome/browser/enterprise/connectors/analysis/content_analysis_sdk_manager.h b/chrome/browser/enterprise/connectors/analysis/content_analysis_sdk_manager.h new file mode 100644 index 0000000..dc1e27f --- /dev/null +++ b/chrome/browser/enterprise/connectors/analysis/content_analysis_sdk_manager.h
@@ -0,0 +1,97 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_ENTERPRISE_CONNECTORS_ANALYSIS_CONTENT_ANALYSIS_SDK_MANAGER_H_ +#define CHROME_BROWSER_ENTERPRISE_CONNECTORS_ANALYSIS_CONTENT_ANALYSIS_SDK_MANAGER_H_ + +#include <map> +#include <memory> + +#include "base/memory/ref_counted.h" +#include "base/memory/scoped_refptr.h" +#include "base/no_destructor.h" + +#include "third_party/content_analysis_sdk/src/browser/include/content_analysis/sdk/analysis_client.h" + +namespace enterprise_connectors { + +// Manages different content analysis client connections for different +// service providers. Clients are shared by all profiles running in this +// browser. This class should only be accessed on the UI thread. +class ContentAnalysisSdkManager { + public: + // A wrapper class to ref count std::unique_ptr<content_analysis::sdk::Client> + // returned from the SDK. + class WrappedClient : public base::RefCountedThreadSafe<WrappedClient> { + public: + explicit WrappedClient( + std::unique_ptr<content_analysis::sdk::Client> client); + + content_analysis::sdk::Client* client() { return client_.get(); } + + private: + friend class RefCountedThreadSafe<WrappedClient>; + ~WrappedClient(); + + std::unique_ptr<content_analysis::sdk::Client> client_; + }; + + static ContentAnalysisSdkManager* Get(); + + ContentAnalysisSdkManager(const ContentAnalysisSdkManager& other) = delete; + ContentAnalysisSdkManager(ContentAnalysisSdkManager&& other) = delete; + ContentAnalysisSdkManager& operator=(const ContentAnalysisSdkManager& other) = + delete; + ContentAnalysisSdkManager& operator=(ContentAnalysisSdkManager&& other) = + delete; + + // Returns an SDK client that matches the given `config`. When calling + // this function with the same `config`, a scoped reference to the same + // `WrapperClient` is returned. A returned scoped reference remains + // valid even if the client with the given `config` is reset with a call + // to ResetClient(). + scoped_refptr<WrappedClient> GetClient( + content_analysis::sdk::Client::Config config); + + // Called when an error is detected with the given client. New calls + // to GetClient() will cause a new SDK client to be created and returned. + // Existing wrapped clients will continue to use the old client until + // they release their references. + void ResetClient(const content_analysis::sdk::Client::Config& config); + + bool HasClientForTesting( + const content_analysis::sdk::Client::Config& config) { + return clients_.count(config) > 0; + } + + protected: + // Protected for testing. + ContentAnalysisSdkManager(); + ~ContentAnalysisSdkManager(); + + private: + friend class base::NoDestructor<ContentAnalysisSdkManager>; + + // Creates a new SDK client. Virtual to be overridden in tests. + virtual std::unique_ptr<content_analysis::sdk::Client> CreateClient( + const content_analysis::sdk::Client::Config& config); + + // This comparator is required in order to use Config as the key for the + // `clients_` map. + constexpr static auto CompareConfig = + [](const content_analysis::sdk::Client::Config& c1, + const content_analysis::sdk::Client::Config& c2) { + return (c1.name < c2.name) || + (c1.name == c2.name && !c1.user_specific && c2.user_specific); + }; + + std::map<content_analysis::sdk::Client::Config, + scoped_refptr<WrappedClient>, + decltype(CompareConfig)> + clients_{CompareConfig}; +}; + +} // namespace enterprise_connectors + +#endif // CHROME_BROWSER_ENTERPRISE_CONNECTORS_ANALYSIS_CONTENT_ANALYSIS_SDK_MANAGER_H_
diff --git a/chrome/browser/enterprise/connectors/analysis/content_analysis_sdk_manager_unittest.cc b/chrome/browser/enterprise/connectors/analysis/content_analysis_sdk_manager_unittest.cc new file mode 100644 index 0000000..bea1eba6 --- /dev/null +++ b/chrome/browser/enterprise/connectors/analysis/content_analysis_sdk_manager_unittest.cc
@@ -0,0 +1,79 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/enterprise/connectors/analysis/content_analysis_sdk_manager.h" + +#include "content/public/test/browser_task_environment.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace enterprise_connectors { + +class FakeClient : public content_analysis::sdk::Client { + public: + explicit FakeClient(const content_analysis::sdk::Client::Config& config) + : config_(config) {} + ~FakeClient() override = default; + + const Config& GetConfig() const override { return config_; } + + // Sends an analysis request to the agent and waits for a response. + int Send(const content_analysis::sdk::ContentAnalysisRequest& request, + content_analysis::sdk::ContentAnalysisResponse* response) override { + return -1; + } + + // Sends an response acknowledgment back to the agent. + int Acknowledge(const content_analysis::sdk::ContentAnalysisAcknowledgement& + ack) override { + return -1; + } + + private: + content_analysis::sdk::Client::Config config_; +}; + +// A derivative of ContentAnalysisSdkManager that creates fake SDK clients +// in order to not depend on having a real service provide agent running. +class FakeContentAnalysisSdkManager : public ContentAnalysisSdkManager { + std::unique_ptr<content_analysis::sdk::Client> CreateClient( + const content_analysis::sdk::Client::Config& config) override { + return std::make_unique<FakeClient>(config); + } +}; + +class ContentAnalysisSdkManagerTest : public testing::Test { + public: + ContentAnalysisSdkManagerTest() = default; + + private: + content::BrowserTaskEnvironment task_environment_; +}; + +TEST_F(ContentAnalysisSdkManagerTest, Create) { + content_analysis::sdk::Client::Config config{"local_test"}; + FakeContentAnalysisSdkManager manager; + + EXPECT_FALSE(manager.HasClientForTesting(config)); + + auto wrapped = manager.GetClient(config); + EXPECT_TRUE(manager.HasClientForTesting(config)); + EXPECT_TRUE(wrapped->HasAtLeastOneRef()); +} + +TEST_F(ContentAnalysisSdkManagerTest, Reset) { + content_analysis::sdk::Client::Config config{"local_test"}; + FakeContentAnalysisSdkManager manager; + + auto wrapped = manager.GetClient(config); + + manager.ResetClient(config); + EXPECT_FALSE(manager.HasClientForTesting(config)); + + // Existing refptr should still be valid. + EXPECT_TRUE(wrapped->HasOneRef()); + EXPECT_EQ(config.name, wrapped->client()->GetConfig().name); + EXPECT_EQ(config.user_specific, wrapped->client()->GetConfig().user_specific); +} + +} // namespace enterprise_connectors
diff --git a/chrome/browser/enterprise/connectors/analysis/file_transfer_analysis_delegate_unittest.cc b/chrome/browser/enterprise/connectors/analysis/file_transfer_analysis_delegate_unittest.cc index d80cbda..400cc04 100644 --- a/chrome/browser/enterprise/connectors/analysis/file_transfer_analysis_delegate_unittest.cc +++ b/chrome/browser/enterprise/connectors/analysis/file_transfer_analysis_delegate_unittest.cc
@@ -150,7 +150,7 @@ {file_manager::VOLUME_TYPE_CROSTINI, absl::nullopt, "CROSTINI"}, {file_manager::VOLUME_TYPE_ANDROID_FILES, absl::nullopt, "ARC"}, {file_manager::VOLUME_TYPE_DOCUMENTS_PROVIDER, absl::nullopt, "ARC"}, - {file_manager::VOLUME_TYPE_SMB, absl::nullopt, "SAMBA"}, + {file_manager::VOLUME_TYPE_SMB, absl::nullopt, "SMB"}, {file_manager::VOLUME_TYPE_SYSTEM_INTERNAL, absl::nullopt, "UNKNOWN"}, {file_manager::VOLUME_TYPE_GUEST_OS, guest_os::VmType::TERMINA, "CROSTINI"}, {file_manager::VOLUME_TYPE_GUEST_OS, guest_os::VmType::PLUGIN_VM,
diff --git a/chrome/browser/enterprise/connectors/analysis/local_binary_upload_service.cc b/chrome/browser/enterprise/connectors/analysis/local_binary_upload_service.cc index 5e24e2ec..85c1da25 100644 --- a/chrome/browser/enterprise/connectors/analysis/local_binary_upload_service.cc +++ b/chrome/browser/enterprise/connectors/analysis/local_binary_upload_service.cc
@@ -4,10 +4,13 @@ #include "chrome/browser/enterprise/connectors/analysis/local_binary_upload_service.h" +#include <memory> + #include "base/notreached.h" #include "base/task/thread_pool.h" #include "base/threading/scoped_blocking_call.h" #include "chrome/browser/enterprise/connectors/analysis/analysis_settings.h" +#include "chrome/browser/enterprise/connectors/analysis/content_analysis_sdk_manager.h" #include "content/public/browser/browser_thread.h" #include "third_party/abseil-cpp/absl/types/optional.h" #include "third_party/content_analysis_sdk/src/browser/include/content_analysis/sdk/analysis_client.h" @@ -15,6 +18,13 @@ namespace enterprise_connectors { namespace { +// Build a content analysis SDK client config based on the request being sent. +content_analysis::sdk::Client::Config SDKConfigFromRequest( + const safe_browsing::BinaryUploadService::Request* request) { + return {request->cloud_or_local_settings().local_path(), + request->cloud_or_local_settings().user_specific()}; +} + // Convert enterprise connector ContentAnalysisRequest into the SDK equivalent. // SDK ContentAnalysisRequest is a strict subset of the enterprise connector // version, therefore the function should always work. @@ -46,70 +56,65 @@ return response; } +// Sends a request to the local server provider and waits for a response. absl::optional<content_analysis::sdk::ContentAnalysisResponse> SendRequestToSDK( - content_analysis::sdk::Client* client, - content_analysis::sdk::ContentAnalysisRequest - local_content_analysis_request) { + scoped_refptr<ContentAnalysisSdkManager::WrappedClient> wrapped, + content_analysis::sdk::ContentAnalysisRequest sdk_request) { base::ScopedBlockingCall scoped_blocking_call(FROM_HERE, base::BlockingType::MAY_BLOCK); + content_analysis::sdk::ContentAnalysisResponse response; - client->Send(local_content_analysis_request, &response); - - return response; -} - -} // namespace - -LocalBinaryUploadService::LocalBinaryUploadService( - std::unique_ptr<AnalysisSettings> analysis_settings) - : analysis_settings_(std::move(analysis_settings)) { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); -} - -LocalBinaryUploadService::~LocalBinaryUploadService() = default; - -void LocalBinaryUploadService::OnSentRequestStatus( - std::unique_ptr<Request> request, - absl::optional<content_analysis::sdk::ContentAnalysisResponse> response) { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - Result result; - ContentAnalysisResponse chrome_content_analysis_response; - if (response.has_value()) { - result = Result::SUCCESS; - chrome_content_analysis_response = - ConvertSDKResponseToChromeResponse(response.value()); - } else { - result = Result::UPLOAD_FAILURE; - // Release old client when the status is not ok. - client_.reset(); + if (wrapped && wrapped->client()) { + int sts = wrapped->client()->Send(sdk_request, &response); + if (sts == 0) + return response; } - request->FinishRequest(result, std::move(chrome_content_analysis_response)); + return absl::nullopt; } -void LocalBinaryUploadService::DoLocalContentAnalysis( - std::unique_ptr<Request> request, - Result result, - Request::Data data) { +// Handles the response from the local service provider. +void HandleResponseFromSDK( + std::unique_ptr<safe_browsing::BinaryUploadService::Request> request, + absl::optional<content_analysis::sdk::ContentAnalysisResponse> + sdk_response) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - if (result != Result::SUCCESS) { + safe_browsing::BinaryUploadService::Result result; + ContentAnalysisResponse response; + if (sdk_response.has_value()) { + result = safe_browsing::BinaryUploadService::Result::SUCCESS; + response = ConvertSDKResponseToChromeResponse(sdk_response.value()); + } else { + result = safe_browsing::BinaryUploadService::Result::UPLOAD_FAILURE; + ContentAnalysisSdkManager::Get()->ResetClient( + SDKConfigFromRequest(request.get())); + } + request->FinishRequest(result, std::move(response)); +} + +// Sends a request's data to the local service provider. Handles the response +// the service provider asynchronously. +void DoLocalContentAnalysis( + std::unique_ptr<safe_browsing::BinaryUploadService::Request> request, + safe_browsing::BinaryUploadService::Result result, + safe_browsing::BinaryUploadService::Request::Data data) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + if (result != safe_browsing::BinaryUploadService::Result::SUCCESS) { request->FinishRequest(result, ContentAnalysisResponse()); return; } - // TODO(b/226679912): Add logic to support OS-user-specific agents. - if (!client_) { - DCHECK(analysis_settings_->cloud_or_local_settings.is_local_analysis()); - client_ = content_analysis::sdk::Client::Create( - {analysis_settings_->cloud_or_local_settings.local_settings() - .local_path}); - } - content_analysis::sdk::ContentAnalysisRequest local_content_analysis_request = + request->SetRandomRequestToken(); + + DCHECK(request->cloud_or_local_settings().is_local_analysis()); + auto client = ContentAnalysisSdkManager::Get()->GetClient( + SDKConfigFromRequest(request.get())); + content_analysis::sdk::ContentAnalysisRequest sdk_request = ConvertChromeRequestToSDKRequest(request->content_analysis_request()); if (!data.contents.empty()) { - local_content_analysis_request.set_text_content(std::move(data.contents)); + sdk_request.set_text_content(std::move(data.contents)); } else if (!data.path.empty()) { - local_content_analysis_request.set_file_path(data.path.AsUTF8Unsafe()); + sdk_request.set_file_path(data.path.AsUTF8Unsafe()); } else { NOTREACHED(); } @@ -120,17 +125,18 @@ FROM_HERE, {base::TaskPriority::USER_VISIBLE, base::MayBlock(), base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN}, - // `client_` passed as naked pointer to avoid using `std::move()` which - // will reset `client_`, making chrome continually connecting and - // disconnecting from agent. - // Because LocalBinaryUploadService is a profile keyed service, the object - // should live for at least as long as the profile. Besides, the task is - // posted with `SKIP_ON_SHUTDOWN`, therefore if the task is pending on - // shutdown, it won't run. - base::BindOnce(&SendRequestToSDK, base::Unretained(client_.get()), - std::move(local_content_analysis_request)), - base::BindOnce(&LocalBinaryUploadService::OnSentRequestStatus, - weakptr_factory_.GetWeakPtr(), std::move(request))); + base::BindOnce(&SendRequestToSDK, client, std::move(sdk_request)), + base::BindOnce(&HandleResponseFromSDK, std::move(request))); +} + +} // namespace + +LocalBinaryUploadService::LocalBinaryUploadService() { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); +} + +LocalBinaryUploadService::~LocalBinaryUploadService() { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); } void LocalBinaryUploadService::MaybeUploadForDeepScanning( @@ -138,8 +144,7 @@ DCHECK_CURRENTLY_ON(content::BrowserThread::UI); Request* raw_request = request.get(); raw_request->GetRequestData( - base::BindOnce(&LocalBinaryUploadService::DoLocalContentAnalysis, - weakptr_factory_.GetWeakPtr(), std::move(request))); + base::BindOnce(&DoLocalContentAnalysis, std::move(request))); } } // namespace enterprise_connectors
diff --git a/chrome/browser/enterprise/connectors/analysis/local_binary_upload_service.h b/chrome/browser/enterprise/connectors/analysis/local_binary_upload_service.h index 72c4f50..76cc5c9b 100644 --- a/chrome/browser/enterprise/connectors/analysis/local_binary_upload_service.h +++ b/chrome/browser/enterprise/connectors/analysis/local_binary_upload_service.h
@@ -5,10 +5,7 @@ #ifndef CHROME_BROWSER_ENTERPRISE_CONNECTORS_ANALYSIS_LOCAL_BINARY_UPLOAD_SERVICE_H_ #define CHROME_BROWSER_ENTERPRISE_CONNECTORS_ANALYSIS_LOCAL_BINARY_UPLOAD_SERVICE_H_ -#include <memory> - #include "chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.h" -#include "third_party/content_analysis_sdk/src/browser/include/content_analysis/sdk/analysis_client.h" namespace enterprise_connectors { @@ -17,27 +14,11 @@ // This class runs on the UI thread. class LocalBinaryUploadService : public safe_browsing::BinaryUploadService { public: - explicit LocalBinaryUploadService( - std::unique_ptr<AnalysisSettings> analysis_settings); + LocalBinaryUploadService(); ~LocalBinaryUploadService() override; // Send the given file contents to local partners for deep scanning. void MaybeUploadForDeepScanning(std::unique_ptr<Request> request) override; - - private: - void DoLocalContentAnalysis(std::unique_ptr<Request> request, - Result result, - Request::Data data); - - // Updates response to Chrome based on whether the SDK request is successfully - // sent. - void OnSentRequestStatus( - std::unique_ptr<Request> request, - absl::optional<content_analysis::sdk::ContentAnalysisResponse> response); - - std::unique_ptr<AnalysisSettings> analysis_settings_; - std::unique_ptr<content_analysis::sdk::Client> client_; - base::WeakPtrFactory<LocalBinaryUploadService> weakptr_factory_{this}; }; } // namespace enterprise_connectors
diff --git a/chrome/browser/enterprise/connectors/analysis/source_destination_matcher_ash.cc b/chrome/browser/enterprise/connectors/analysis/source_destination_matcher_ash.cc index dbfc44be..acfa5c5d 100644 --- a/chrome/browser/enterprise/connectors/analysis/source_destination_matcher_ash.cc +++ b/chrome/browser/enterprise/connectors/analysis/source_destination_matcher_ash.cc
@@ -158,8 +158,7 @@ if (s == "GOOGLE_DRIVE") { return SourceDestinationMatcherAsh::FsType::kGoogleDrive; } - if (s == "SAMBA") { - // TODO(crbug.com/1346233): Replace SAMBA with SMB. + if (s == "SMB") { return SourceDestinationMatcherAsh::FsType::kSmb; } if (s == "CROSTINI") { @@ -232,8 +231,7 @@ case SourceDestinationMatcherAsh::FsType::kGoogleDrive: return "GOOGLE_DRIVE"; case SourceDestinationMatcherAsh::FsType::kSmb: - // TODO(crbug.com/1346233): Replace SAMBA with SMB. - return "SAMBA"; + return "SMB"; case SourceDestinationMatcherAsh::FsType::kCrostini: return "CROSTINI"; case SourceDestinationMatcherAsh::FsType::kPluginVm:
diff --git a/chrome/browser/enterprise/connectors/analysis/source_destination_matcher_ash.h b/chrome/browser/enterprise/connectors/analysis/source_destination_matcher_ash.h index 9f0109d..e1cf1bdd 100644 --- a/chrome/browser/enterprise/connectors/analysis/source_destination_matcher_ash.h +++ b/chrome/browser/enterprise/connectors/analysis/source_destination_matcher_ash.h
@@ -126,7 +126,7 @@ ID id; std::set<FsType> fs_sources; std::set<FsType> fs_destinations; - // TODO(crbug.com/1340553): Add support for app ids and samba server + // TODO(crbug.com/1340553): Add support for app ids and smb server // configurations. };
diff --git a/chrome/browser/enterprise/connectors/analysis/source_destination_matcher_ash_unittest.cc b/chrome/browser/enterprise/connectors/analysis/source_destination_matcher_ash_unittest.cc index c8daa34..a628f555 100644 --- a/chrome/browser/enterprise/connectors/analysis/source_destination_matcher_ash_unittest.cc +++ b/chrome/browser/enterprise/connectors/analysis/source_destination_matcher_ash_unittest.cc
@@ -71,7 +71,7 @@ VolumeInfo{file_manager::VOLUME_TYPE_ANDROID_FILES, absl::nullopt, "ARC"}, VolumeInfo{file_manager::VOLUME_TYPE_DOCUMENTS_PROVIDER, absl::nullopt, "ARC"}, - VolumeInfo{file_manager::VOLUME_TYPE_SMB, absl::nullopt, "SAMBA"}, + VolumeInfo{file_manager::VOLUME_TYPE_SMB, absl::nullopt, "SMB"}, VolumeInfo{file_manager::VOLUME_TYPE_SYSTEM_INTERNAL, absl::nullopt, "UNKNOWN"}, VolumeInfo{file_manager::VOLUME_TYPE_GUEST_OS, guest_os::VmType::TERMINA, @@ -376,8 +376,7 @@ {"PROVIDED", SourceDestinationMatcherAsh::FsType::kProvided}, {"ARC", SourceDestinationMatcherAsh::FsType::kArc}, {"GOOGLE_DRIVE", SourceDestinationMatcherAsh::FsType::kGoogleDrive}, - // TODO(crbug.com/1346233): Replace SAMBA with SMB. - {"SAMBA", SourceDestinationMatcherAsh::FsType::kSmb}, + {"SMB", SourceDestinationMatcherAsh::FsType::kSmb}, {"CROSTINI", SourceDestinationMatcherAsh::FsType::kCrostini}, {"PLUGIN_VM", SourceDestinationMatcherAsh::FsType::kPluginVm}, {"BOREALIS", SourceDestinationMatcherAsh::FsType::kBorealis}, @@ -403,8 +402,7 @@ {SourceDestinationMatcherAsh::FsType::kProvided, "PROVIDED"}, {SourceDestinationMatcherAsh::FsType::kArc, "ARC"}, {SourceDestinationMatcherAsh::FsType::kGoogleDrive, "GOOGLE_DRIVE"}, - // TODO(crbug.com/1346233): Replace SAMBA with SMB. - {SourceDestinationMatcherAsh::FsType::kSmb, "SAMBA"}, + {SourceDestinationMatcherAsh::FsType::kSmb, "SMB"}, {SourceDestinationMatcherAsh::FsType::kCrostini, "CROSTINI"}, {SourceDestinationMatcherAsh::FsType::kPluginVm, "PLUGIN_VM"}, {SourceDestinationMatcherAsh::FsType::kBorealis, "BOREALIS"},
diff --git a/chrome/browser/extensions/BUILD.gn b/chrome/browser/extensions/BUILD.gn index 9a61d5c..5443011 100644 --- a/chrome/browser/extensions/BUILD.gn +++ b/chrome/browser/extensions/BUILD.gn
@@ -1004,6 +1004,8 @@ "clipboard_extension_helper_chromeos.h", "extension_keeplist_chromeos.cc", "extension_keeplist_chromeos.h", + "system_display/display_info_provider_utils.cc", + "system_display/display_info_provider_utils.h", "system_display/system_display_serialization.cc", "system_display/system_display_serialization.h", ]
diff --git a/chrome/browser/extensions/api/debugger/debugger_api.cc b/chrome/browser/extensions/api/debugger/debugger_api.cc index 1233c0a..4b303f2 100644 --- a/chrome/browser/extensions/api/debugger/debugger_api.cc +++ b/chrome/browser/extensions/api/debugger/debugger_api.cc
@@ -41,6 +41,7 @@ #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/devtools_agent_host.h" +#include "content/public/browser/navigation_entry.h" #include "content/public/browser/render_process_host.h" #include "content/public/browser/render_widget_host.h" #include "content/public/browser/web_contents.h" @@ -217,6 +218,12 @@ web_contents.GetLastCommittedURL(), error)) { return false; } + if (web_contents.GetController().GetPendingEntry() && + !ExtensionMayAttachToURL( + extension, extension_profile, + web_contents.GetController().GetPendingEntry()->GetURL(), error)) { + return false; + } return ExtensionMayAttachToRenderFrameHost( extension, extension_profile, web_contents.GetPrimaryMainFrame(), error);
diff --git a/chrome/browser/extensions/api/enterprise_reporting_private/conversion_utils.cc b/chrome/browser/extensions/api/enterprise_reporting_private/conversion_utils.cc index 8f36e71..775a250 100644 --- a/chrome/browser/extensions/api/enterprise_reporting_private/conversion_utils.cc +++ b/chrome/browser/extensions/api/enterprise_reporting_private/conversion_utils.cc
@@ -9,6 +9,7 @@ #include <memory> #include <utility> +#include "base/base64url.h" #include "base/files/file_path.h" #include "components/device_signals/core/browser/signals_types.h" #include "components/device_signals/core/common/common_types.h" @@ -62,6 +63,13 @@ } } +std::string EncodeHash(const std::string& byte_string) { + std::string encoded_string; + base::Base64UrlEncode(byte_string, base::Base64UrlEncodePolicy::OMIT_PADDING, + &encoded_string); + return encoded_string; +} + } // namespace std::vector<device_signals::GetFileSystemInfoOptions> @@ -102,8 +110,8 @@ response.presence = ConvertPresenceValue(file_system_item.presence); if (file_system_item.sha256_hash) { - response.sha256_hash = - std::make_unique<std::string>(file_system_item.sha256_hash.value()); + response.sha256_hash = std::make_unique<std::string>( + EncodeHash(file_system_item.sha256_hash.value())); } if (file_system_item.executable_metadata) { @@ -121,7 +129,7 @@ if (executable_metadata.public_key_sha256) { response.public_key_sha256 = std::make_unique<std::string>( - executable_metadata.public_key_sha256.value()); + EncodeHash(executable_metadata.public_key_sha256.value())); } if (executable_metadata.product_name) {
diff --git a/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_unittest.cc b/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_unittest.cc index 0513039..1053444 100644 --- a/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_unittest.cc +++ b/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_unittest.cc
@@ -1424,7 +1424,7 @@ EXPECT_EQ(parsed_file_system_signal->presence, enterprise_reporting_private::PRESENCE_VALUE_FOUND); EXPECT_EQ(*parsed_file_system_signal->sha256_hash.get(), - fake_file_item.sha256_hash.value()); + "c29tZSBoYXNoZWQgdmFsdWU"); histogram_tester_.ExpectUniqueSample( "Enterprise.DeviceSignals.Collection.Success", signal_name(), 1);
diff --git a/chrome/browser/extensions/api/management/chrome_management_api_delegate.cc b/chrome/browser/extensions/api/management/chrome_management_api_delegate.cc index fdf0443..ee3f137d 100644 --- a/chrome/browser/extensions/api/management/chrome_management_api_delegate.cc +++ b/chrome/browser/extensions/api/management/chrome_management_api_delegate.cc
@@ -337,6 +337,7 @@ // These modes are not supported by the extension app backend. case web_app::DisplayMode::kWindowControlsOverlay: case web_app::DisplayMode::kTabbed: + case web_app::DisplayMode::kBorderless: case web_app::DisplayMode::kUndefined: info.launch_type = extensions::api::management::LAUNCH_TYPE_NONE; break;
diff --git a/chrome/browser/extensions/api/system_display/system_display_extension_apitest.cc b/chrome/browser/extensions/api/system_display/system_display_extension_apitest.cc index 837d0bd..0315a19 100644 --- a/chrome/browser/extensions/api/system_display/system_display_extension_apitest.cc +++ b/chrome/browser/extensions/api/system_display/system_display_extension_apitest.cc
@@ -62,7 +62,7 @@ #endif // BUILDFLAG(IS_WIN) -#if !BUILDFLAG(IS_CHROMEOS_ASH) +#if !(BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_CHROMEOS_LACROS)) using SystemDisplayExtensionApiFunctionTest = SystemDisplayExtensionApiTest;
diff --git a/chrome/browser/extensions/extension_special_storage_policy.cc b/chrome/browser/extensions/extension_special_storage_policy.cc index dbd10c1..2596ad3 100644 --- a/chrome/browser/extensions/extension_special_storage_policy.cc +++ b/chrome/browser/extensions/extension_special_storage_policy.cc
@@ -147,18 +147,6 @@ return cookie_settings_->IsCookieSessionOnly(origin); } -network::DeleteCookiePredicate -ExtensionSpecialStoragePolicy::CreateDeleteCookieOnExitPredicate() { - if (!cookie_settings_) - return network::DeleteCookiePredicate(); - // Fetch the list of cookies related content_settings and bind it - // to CookieSettings::ShouldDeleteCookieOnExit to avoid fetching it on - // every call. - return base::BindRepeating( - &content_settings::CookieSettings::ShouldDeleteCookieOnExit, - cookie_settings_, cookie_settings_->GetCookieSettings()); -} - bool ExtensionSpecialStoragePolicy::HasSessionOnlyOrigins() { if (!cookie_settings_) return false;
diff --git a/chrome/browser/extensions/extension_special_storage_policy.h b/chrome/browser/extensions/extension_special_storage_policy.h index 2d77fa17..2fb94ad 100644 --- a/chrome/browser/extensions/extension_special_storage_policy.h +++ b/chrome/browser/extensions/extension_special_storage_policy.h
@@ -13,7 +13,6 @@ #include "base/task/sequenced_task_runner.h" #include "base/thread_annotations.h" #include "extensions/common/extension_set.h" -#include "services/network/public/cpp/session_cookie_delete_predicate.h" #include "storage/browser/quota/special_storage_policy.h" #include "url/gurl.h" @@ -41,7 +40,6 @@ bool HasIsolatedStorage(const GURL& origin) override; bool HasSessionOnlyOrigins() override; bool IsStorageDurable(const GURL& origin) override; - network::DeleteCookiePredicate CreateDeleteCookieOnExitPredicate() override; // Methods used by the ExtensionService to populate this class. void GrantRightsForExtension(const extensions::Extension* extension);
diff --git a/chrome/browser/extensions/mock_extension_special_storage_policy.cc b/chrome/browser/extensions/mock_extension_special_storage_policy.cc index 6c3ffc4..ca32e2d 100644 --- a/chrome/browser/extensions/mock_extension_special_storage_policy.cc +++ b/chrome/browser/extensions/mock_extension_special_storage_policy.cc
@@ -3,7 +3,6 @@ // found in the LICENSE file. #include "chrome/browser/extensions/mock_extension_special_storage_policy.h" -#include "base/callback.h" MockExtensionSpecialStoragePolicy::MockExtensionSpecialStoragePolicy() : ExtensionSpecialStoragePolicy(NULL) {} @@ -25,9 +24,4 @@ return false; } -network::DeleteCookiePredicate -MockExtensionSpecialStoragePolicy::CreateDeleteCookieOnExitPredicate() { - return network::DeleteCookiePredicate(); -} - MockExtensionSpecialStoragePolicy::~MockExtensionSpecialStoragePolicy() {}
diff --git a/chrome/browser/extensions/mock_extension_special_storage_policy.h b/chrome/browser/extensions/mock_extension_special_storage_policy.h index 8c23fa65..e9f74ed 100644 --- a/chrome/browser/extensions/mock_extension_special_storage_policy.h +++ b/chrome/browser/extensions/mock_extension_special_storage_policy.h
@@ -8,7 +8,6 @@ #include <set> #include "chrome/browser/extensions/extension_special_storage_policy.h" -#include "services/network/public/cpp/session_cookie_delete_predicate.h" #include "url/gurl.h" // This class is the same as MockSpecialStoragePolicy (in @@ -28,7 +27,6 @@ bool IsStorageUnlimited(const GURL& origin) override; bool IsStorageSessionOnly(const GURL& origin) override; bool HasSessionOnlyOrigins() override; - network::DeleteCookiePredicate CreateDeleteCookieOnExitPredicate() override; void AddProtected(const GURL& origin) { protected_.insert(origin);
diff --git a/chrome/browser/extensions/system_display/display_info_provider_chromeos.cc b/chrome/browser/extensions/system_display/display_info_provider_chromeos.cc index 865714c..57c6727 100644 --- a/chrome/browser/extensions/system_display/display_info_provider_chromeos.cc +++ b/chrome/browser/extensions/system_display/display_info_provider_chromeos.cc
@@ -8,11 +8,11 @@ #include <cmath> #include "ash/public/ash_interfaces.h" -#include "ash/public/mojom/cros_display_config.mojom.h" #include "base/bind.h" #include "base/strings/string_number_conversions.h" #include "base/threading/thread_task_runner_handle.h" #include "chrome/browser/extensions/system_display/display_info_provider.h" +#include "chrome/browser/extensions/system_display/display_info_provider_utils.h" #include "extensions/common/api/system_display.h" #include "ui/display/display.h" #include "ui/display/screen.h" @@ -39,37 +39,21 @@ return display; } -ash::mojom::DisplayLayoutPosition GetDisplayLayoutPosition( +crosapi::mojom::DisplayLayoutPosition GetDisplayLayoutPosition( system_display::LayoutPosition position) { switch (position) { case system_display::LAYOUT_POSITION_TOP: - return ash::mojom::DisplayLayoutPosition::kTop; + return crosapi::mojom::DisplayLayoutPosition::kTop; case system_display::LAYOUT_POSITION_RIGHT: - return ash::mojom::DisplayLayoutPosition::kRight; + return crosapi::mojom::DisplayLayoutPosition::kRight; case system_display::LAYOUT_POSITION_BOTTOM: - return ash::mojom::DisplayLayoutPosition::kBottom; + return crosapi::mojom::DisplayLayoutPosition::kBottom; case system_display::LAYOUT_POSITION_LEFT: case system_display::LAYOUT_POSITION_NONE: - return ash::mojom::DisplayLayoutPosition::kLeft; + return crosapi::mojom::DisplayLayoutPosition::kLeft; } NOTREACHED(); - return ash::mojom::DisplayLayoutPosition::kLeft; -} - -system_display::LayoutPosition GetLayoutPositionFromMojo( - ash::mojom::DisplayLayoutPosition position) { - switch (position) { - case ash::mojom::DisplayLayoutPosition::kTop: - return system_display::LayoutPosition::LAYOUT_POSITION_TOP; - case ash::mojom::DisplayLayoutPosition::kRight: - return system_display::LayoutPosition::LAYOUT_POSITION_RIGHT; - case ash::mojom::DisplayLayoutPosition::kBottom: - return system_display::LayoutPosition::LAYOUT_POSITION_BOTTOM; - case ash::mojom::DisplayLayoutPosition::kLeft: - return system_display::LayoutPosition::LAYOUT_POSITION_LEFT; - } - NOTREACHED(); - return system_display::LayoutPosition::LAYOUT_POSITION_LEFT; + return crosapi::mojom::DisplayLayoutPosition::kLeft; } gfx::Insets GetInsets(const system_display::Insets& insets) { @@ -82,39 +66,39 @@ rotation == 270; } -ash::mojom::DisplayRotationOptions GetMojomDisplayRotationOptions( +crosapi::mojom::DisplayRotationOptions GetMojomDisplayRotationOptions( int rotation_value) { DCHECK(IsValidRotation(rotation_value)); switch (rotation_value) { case -1: - return ash::mojom::DisplayRotationOptions::kAutoRotate; + return crosapi::mojom::DisplayRotationOptions::kAutoRotate; case 0: - return ash::mojom::DisplayRotationOptions::kZeroDegrees; + return crosapi::mojom::DisplayRotationOptions::kZeroDegrees; case 90: - return ash::mojom::DisplayRotationOptions::k90Degrees; + return crosapi::mojom::DisplayRotationOptions::k90Degrees; case 180: - return ash::mojom::DisplayRotationOptions::k180Degrees; + return crosapi::mojom::DisplayRotationOptions::k180Degrees; case 270: - return ash::mojom::DisplayRotationOptions::k270Degrees; + return crosapi::mojom::DisplayRotationOptions::k270Degrees; default: NOTREACHED(); - return ash::mojom::DisplayRotationOptions::kZeroDegrees; + return crosapi::mojom::DisplayRotationOptions::kZeroDegrees; } } int GetRotationFromMojomDisplayRotationInfo( - ash::mojom::DisplayRotationOptions rotation_options) { + crosapi::mojom::DisplayRotationOptions rotation_options) { switch (rotation_options) { - case ash::mojom::DisplayRotationOptions::kAutoRotate: + case crosapi::mojom::DisplayRotationOptions::kAutoRotate: return -1; - case ash::mojom::DisplayRotationOptions::kZeroDegrees: + case crosapi::mojom::DisplayRotationOptions::kZeroDegrees: return 0; - case ash::mojom::DisplayRotationOptions::k90Degrees: + case crosapi::mojom::DisplayRotationOptions::k90Degrees: return 90; - case ash::mojom::DisplayRotationOptions::k180Degrees: + case crosapi::mojom::DisplayRotationOptions::k180Degrees: return 180; - case ash::mojom::DisplayRotationOptions::k270Degrees: + case crosapi::mojom::DisplayRotationOptions::k270Degrees: return 270; } } @@ -165,7 +149,7 @@ } system_display::DisplayMode GetDisplayModeFromMojo( - const ash::mojom::DisplayMode mode) { + const crosapi::mojom::DisplayMode mode) { system_display::DisplayMode result; result.width = mode.size.width(); result.height = mode.size.height(); @@ -179,7 +163,7 @@ } system_display::DisplayUnitInfo GetDisplayUnitInfoFromMojo( - const ash::mojom::DisplayUnitInfo& mojo_info) { + const crosapi::mojom::DisplayUnitInfo& mojo_info) { system_display::DisplayUnitInfo info; info.id = mojo_info.id; info.name = mojo_info.name; @@ -213,7 +197,7 @@ info.work_area.top = work_area.y(); info.work_area.width = work_area.width(); info.work_area.height = work_area.height(); - for (const ash::mojom::DisplayModePtr& mode : + for (const crosapi::mojom::DisplayModePtr& mode : mojo_info.available_display_modes) { info.modes.emplace_back(GetDisplayModeFromMojo(*mode)); } @@ -231,9 +215,9 @@ return info; } -ash::mojom::TouchCalibrationPairPtr GetTouchCalibrationPair( +crosapi::mojom::TouchCalibrationPairPtr GetTouchCalibrationPair( const system_display::TouchCalibrationPair& pair) { - auto result = ash::mojom::TouchCalibrationPair::New(); + auto result = crosapi::mojom::TouchCalibrationPair::New(); result->display_point = gfx::Point(pair.display_point.x, pair.display_point.y); result->touch_point = gfx::Point(pair.touch_point.x, pair.touch_point.y); @@ -241,10 +225,10 @@ } void SetDisplayUnitInfoLayoutProperties( - const ash::mojom::DisplayLayoutInfo& layout, + const crosapi::mojom::DisplayLayoutInfo& layout, system_display::DisplayUnitInfo* display) { display->is_unified = - layout.layout_mode == ash::mojom::DisplayLayoutMode::kUnified; + layout.layout_mode == crosapi::mojom::DisplayLayoutMode::kUnified; if (layout.mirror_source_id) { display->mirroring_source_id = *layout.mirror_source_id; if (layout.mirror_destination_ids) { @@ -263,47 +247,48 @@ } absl::optional<std::string> GetStringResult( - ash::mojom::DisplayConfigResult result) { + crosapi::mojom::DisplayConfigResult result) { switch (result) { - case ash::mojom::DisplayConfigResult::kSuccess: + case crosapi::mojom::DisplayConfigResult::kSuccess: return absl::nullopt; - case ash::mojom::DisplayConfigResult::kInvalidOperationError: + case crosapi::mojom::DisplayConfigResult::kInvalidOperationError: return "Invalid operation"; - case ash::mojom::DisplayConfigResult::kInvalidDisplayIdError: + case crosapi::mojom::DisplayConfigResult::kInvalidDisplayIdError: return "Invalid display id"; - case ash::mojom::DisplayConfigResult::kUnifiedNotEnabledError: + case crosapi::mojom::DisplayConfigResult::kUnifiedNotEnabledError: return "enableUnifiedDesktop must be called before setting is_unified"; - case ash::mojom::DisplayConfigResult::kPropertyValueOutOfRangeError: + case crosapi::mojom::DisplayConfigResult::kPropertyValueOutOfRangeError: return "Property value out of range"; - case ash::mojom::DisplayConfigResult::kNotSupportedOnInternalDisplayError: + case crosapi::mojom::DisplayConfigResult:: + kNotSupportedOnInternalDisplayError: return "Not supported for internal displays"; - case ash::mojom::DisplayConfigResult::kNegativeValueError: + case crosapi::mojom::DisplayConfigResult::kNegativeValueError: return "Negative values not supported"; - case ash::mojom::DisplayConfigResult::kSetDisplayModeError: + case crosapi::mojom::DisplayConfigResult::kSetDisplayModeError: return "Setting the display mode failed"; - case ash::mojom::DisplayConfigResult::kInvalidDisplayLayoutError: + case crosapi::mojom::DisplayConfigResult::kInvalidDisplayLayoutError: return "Invalid display layout"; - case ash::mojom::DisplayConfigResult::kMirrorModeSingleDisplayError: + case crosapi::mojom::DisplayConfigResult::kMirrorModeSingleDisplayError: return "Mirror mode requires multiple displays"; - case ash::mojom::DisplayConfigResult::kMirrorModeSourceIdError: + case crosapi::mojom::DisplayConfigResult::kMirrorModeSourceIdError: return "Mirror mode source id invalid"; - case ash::mojom::DisplayConfigResult::kMirrorModeDestIdError: + case crosapi::mojom::DisplayConfigResult::kMirrorModeDestIdError: return "Mirror mode destination id invalid"; - case ash::mojom::DisplayConfigResult::kCalibrationNotAvailableError: + case crosapi::mojom::DisplayConfigResult::kCalibrationNotAvailableError: return "Calibration not available"; - case ash::mojom::DisplayConfigResult::kCalibrationNotStartedError: + case crosapi::mojom::DisplayConfigResult::kCalibrationNotStartedError: return "Calibration not started"; - case ash::mojom::DisplayConfigResult::kCalibrationInProgressError: + case crosapi::mojom::DisplayConfigResult::kCalibrationInProgressError: return "Calibration in progress"; - case ash::mojom::DisplayConfigResult::kCalibrationInvalidDataError: + case crosapi::mojom::DisplayConfigResult::kCalibrationInvalidDataError: return "Calibration data invalid"; - case ash::mojom::DisplayConfigResult::kCalibrationFailedError: + case crosapi::mojom::DisplayConfigResult::kCalibrationFailedError: return "Calibration failed"; } return "Unknown error"; } -void LogErrorResult(ash::mojom::DisplayConfigResult result) { +void LogErrorResult(crosapi::mojom::DisplayConfigResult result) { absl::optional<std::string> str_result = GetStringResult(result); if (!str_result) return; @@ -313,7 +298,8 @@ } // namespace DisplayInfoProviderChromeOS::DisplayInfoProviderChromeOS( - mojo::PendingRemote<ash::mojom::CrosDisplayConfigController> display_config) + mojo::PendingRemote<crosapi::mojom::CrosDisplayConfigController> + display_config) : cros_display_config_(std::move(display_config)) {} DisplayInfoProviderChromeOS::~DisplayInfoProviderChromeOS() = default; @@ -331,14 +317,15 @@ // Process the 'isUnified' property. if (properties.is_unified) { - auto layout_info = ash::mojom::DisplayLayoutInfo::New(); + auto layout_info = crosapi::mojom::DisplayLayoutInfo::New(); layout_info->layout_mode = *properties.is_unified - ? ash::mojom::DisplayLayoutMode::kUnified - : ash::mojom::DisplayLayoutMode::kNormal; + ? crosapi::mojom::DisplayLayoutMode::kUnified + : crosapi::mojom::DisplayLayoutMode::kNormal; cros_display_config_->SetDisplayLayoutInfo( std::move(layout_info), base::BindOnce( - [](ErrorCallback callback, ash::mojom::DisplayConfigResult result) { + [](ErrorCallback callback, + crosapi::mojom::DisplayConfigResult result) { std::move(callback).Run(GetStringResult(result)); }, std::move(callback))); @@ -368,13 +355,13 @@ } // Global config properties. - auto config_properties = ash::mojom::DisplayConfigProperties::New(); + auto config_properties = crosapi::mojom::DisplayConfigProperties::New(); config_properties->set_primary = properties.is_primary ? *properties.is_primary : false; if (properties.overscan) config_properties->overscan = GetInsets(*properties.overscan); if (properties.rotation) { - config_properties->rotation = ash::mojom::DisplayRotation::New( + config_properties->rotation = crosapi::mojom::DisplayRotation::New( GetMojomDisplayRotationOptions(*properties.rotation)); } if (properties.bounds_origin_x || properties.bounds_origin_y) { @@ -396,7 +383,7 @@ // Display mode. if (properties.display_mode) { - auto mojo_display_mode = ash::mojom::DisplayMode::New(); + auto mojo_display_mode = crosapi::mojom::DisplayMode::New(); const api::system_display::DisplayMode& api_display_mode = *properties.display_mode; mojo_display_mode->size = @@ -415,9 +402,10 @@ cros_display_config_->SetDisplayProperties( display_id_str, std::move(config_properties), - ash::mojom::DisplayConfigSource::kUser, + crosapi::mojom::DisplayConfigSource::kUser, base::BindOnce( - [](ErrorCallback callback, ash::mojom::DisplayConfigResult result) { + [](ErrorCallback callback, + crosapi::mojom::DisplayConfigResult result) { std::move(callback).Run(GetStringResult(result)); }, std::move(callback))); @@ -426,11 +414,11 @@ void DisplayInfoProviderChromeOS::SetDisplayLayout( const DisplayLayoutList& layout_list, ErrorCallback callback) { - auto layout_info = ash::mojom::DisplayLayoutInfo::New(); + auto layout_info = crosapi::mojom::DisplayLayoutInfo::New(); // Generate the new list of layouts. - std::vector<ash::mojom::DisplayLayoutPtr> display_layouts; + std::vector<crosapi::mojom::DisplayLayoutPtr> display_layouts; for (const system_display::DisplayLayout& layout : layout_list) { - auto display_layout = ash::mojom::DisplayLayout::New(); + auto display_layout = crosapi::mojom::DisplayLayout::New(); display_layout->id = layout.id; display_layout->parent_id = layout.parent_id; display_layout->position = GetDisplayLayoutPosition(layout.position); @@ -446,15 +434,16 @@ } void DisplayInfoProviderChromeOS::CallSetDisplayLayoutInfo( - ash::mojom::DisplayLayoutInfoPtr layout_info, + crosapi::mojom::DisplayLayoutInfoPtr layout_info, ErrorCallback callback, - ash::mojom::DisplayLayoutInfoPtr cur_info) { + crosapi::mojom::DisplayLayoutInfoPtr cur_info) { // Copy the existing layout_mode. layout_info->layout_mode = cur_info->layout_mode; cros_display_config_->SetDisplayLayoutInfo( std::move(layout_info), base::BindOnce( - [](ErrorCallback callback, ash::mojom::DisplayConfigResult result) { + [](ErrorCallback callback, + crosapi::mojom::DisplayConfigResult result) { std::move(callback).Run(GetStringResult(result)); }, std::move(callback))); @@ -475,7 +464,7 @@ void DisplayInfoProviderChromeOS::CallGetDisplayUnitInfoList( bool single_unified, base::OnceCallback<void(DisplayUnitInfoList result)> callback, - ash::mojom::DisplayLayoutInfoPtr layout) { + crosapi::mojom::DisplayLayoutInfoPtr layout) { cros_display_config_->GetDisplayUnitInfoList( single_unified, base::BindOnce(&DisplayInfoProviderChromeOS::OnGetDisplayUnitInfoList, @@ -484,11 +473,11 @@ } void DisplayInfoProviderChromeOS::OnGetDisplayUnitInfoList( - ash::mojom::DisplayLayoutInfoPtr layout, + crosapi::mojom::DisplayLayoutInfoPtr layout, base::OnceCallback<void(DisplayUnitInfoList)> callback, - std::vector<ash::mojom::DisplayUnitInfoPtr> info_list) { + std::vector<crosapi::mojom::DisplayUnitInfoPtr> info_list) { DisplayUnitInfoList all_displays; - for (const ash::mojom::DisplayUnitInfoPtr& info : info_list) { + for (const crosapi::mojom::DisplayUnitInfoPtr& info : info_list) { system_display::DisplayUnitInfo display = GetDisplayUnitInfoFromMojo(*info); SetDisplayUnitInfoLayoutProperties(*layout, &display); all_displays.push_back(std::move(display)); @@ -498,32 +487,15 @@ } void DisplayInfoProviderChromeOS::GetDisplayLayout( - base::OnceCallback<void(DisplayLayoutList result)> callback) { - cros_display_config_->GetDisplayLayoutInfo(base::BindOnce( - [](base::OnceCallback<void(DisplayInfoProvider::DisplayLayoutList)> - callback, - ash::mojom::DisplayLayoutInfoPtr info) { - DisplayInfoProvider::DisplayLayoutList result; - if (info->layouts) { - for (ash::mojom::DisplayLayoutPtr& layout : *info->layouts) { - system_display::DisplayLayout display_layout; - display_layout.id = layout->id; - display_layout.parent_id = layout->parent_id; - display_layout.position = - GetLayoutPositionFromMojo(layout->position); - display_layout.offset = layout->offset; - result.emplace_back(std::move(display_layout)); - } - } - std::move(callback).Run(std::move(result)); - }, - std::move(callback))); + base::OnceCallback<void(DisplayLayoutList)> callback) { + cros_display_config_->GetDisplayLayoutInfo( + base::BindOnce(&OnGetDisplayLayoutResult, std::move(callback))); } bool DisplayInfoProviderChromeOS::OverscanCalibrationStart( const std::string& id) { cros_display_config_->OverscanCalibration( - id, ash::mojom::DisplayConfigOperation::kStart, absl::nullopt, + id, crosapi::mojom::DisplayConfigOperation::kStart, absl::nullopt, base::BindOnce(&LogErrorResult)); return true; } @@ -532,7 +504,7 @@ const std::string& id, const system_display::Insets& delta) { cros_display_config_->OverscanCalibration( - id, ash::mojom::DisplayConfigOperation::kAdjust, GetInsets(delta), + id, crosapi::mojom::DisplayConfigOperation::kAdjust, GetInsets(delta), base::BindOnce(&LogErrorResult)); return true; } @@ -540,7 +512,7 @@ bool DisplayInfoProviderChromeOS::OverscanCalibrationReset( const std::string& id) { cros_display_config_->OverscanCalibration( - id, ash::mojom::DisplayConfigOperation::kReset, absl::nullopt, + id, crosapi::mojom::DisplayConfigOperation::kReset, absl::nullopt, base::BindOnce(&LogErrorResult)); return true; } @@ -548,7 +520,7 @@ bool DisplayInfoProviderChromeOS::OverscanCalibrationComplete( const std::string& id) { cros_display_config_->OverscanCalibration( - id, ash::mojom::DisplayConfigOperation::kComplete, absl::nullopt, + id, crosapi::mojom::DisplayConfigOperation::kComplete, absl::nullopt, base::BindOnce(&LogErrorResult)); return true; } @@ -556,52 +528,53 @@ void DisplayInfoProviderChromeOS::ShowNativeTouchCalibration( const std::string& id, ErrorCallback callback) { - CallTouchCalibration(id, ash::mojom::DisplayConfigOperation::kShowNative, + CallTouchCalibration(id, crosapi::mojom::DisplayConfigOperation::kShowNative, nullptr, std::move(callback)); } bool DisplayInfoProviderChromeOS::StartCustomTouchCalibration( const std::string& id) { touch_calibration_target_id_ = id; - CallTouchCalibration(id, ash::mojom::DisplayConfigOperation::kStart, nullptr, - ErrorCallback()); + CallTouchCalibration(id, crosapi::mojom::DisplayConfigOperation::kStart, + nullptr, ErrorCallback()); return true; } bool DisplayInfoProviderChromeOS::CompleteCustomTouchCalibration( const api::system_display::TouchCalibrationPairQuad& pairs, const api::system_display::Bounds& bounds) { - auto calibration = ash::mojom::TouchCalibration::New(); + auto calibration = crosapi::mojom::TouchCalibration::New(); calibration->pairs.emplace_back(GetTouchCalibrationPair(pairs.pair1)); calibration->pairs.emplace_back(GetTouchCalibrationPair(pairs.pair2)); calibration->pairs.emplace_back(GetTouchCalibrationPair(pairs.pair3)); calibration->pairs.emplace_back(GetTouchCalibrationPair(pairs.pair4)); calibration->bounds = gfx::Size(bounds.width, bounds.height); CallTouchCalibration(touch_calibration_target_id_, - ash::mojom::DisplayConfigOperation::kComplete, + crosapi::mojom::DisplayConfigOperation::kComplete, std::move(calibration), ErrorCallback()); return true; } bool DisplayInfoProviderChromeOS::ClearTouchCalibration(const std::string& id) { - CallTouchCalibration(id, ash::mojom::DisplayConfigOperation::kReset, nullptr, - ErrorCallback()); + CallTouchCalibration(id, crosapi::mojom::DisplayConfigOperation::kReset, + nullptr, ErrorCallback()); return true; } void DisplayInfoProviderChromeOS::CallTouchCalibration( const std::string& id, - ash::mojom::DisplayConfigOperation op, - ash::mojom::TouchCalibrationPtr calibration, + crosapi::mojom::DisplayConfigOperation op, + crosapi::mojom::TouchCalibrationPtr calibration, ErrorCallback callback) { cros_display_config_->TouchCalibration( id, op, std::move(calibration), base::BindOnce( - [](ErrorCallback callback, ash::mojom::DisplayConfigResult result) { + [](ErrorCallback callback, + crosapi::mojom::DisplayConfigResult result) { if (!callback) return; std::move(callback).Run( - result == ash::mojom::DisplayConfigResult::kSuccess + result == crosapi::mojom::DisplayConfigResult::kSuccess ? absl::nullopt : GetStringResult(result)); }, @@ -611,11 +584,13 @@ void DisplayInfoProviderChromeOS::SetMirrorMode( const api::system_display::MirrorModeInfo& info, ErrorCallback callback) { - auto display_layout_info = ash::mojom::DisplayLayoutInfo::New(); + auto display_layout_info = crosapi::mojom::DisplayLayoutInfo::New(); if (info.mode == api::system_display::MIRROR_MODE_OFF) { - display_layout_info->layout_mode = ash::mojom::DisplayLayoutMode::kNormal; + display_layout_info->layout_mode = + crosapi::mojom::DisplayLayoutMode::kNormal; } else { - display_layout_info->layout_mode = ash::mojom::DisplayLayoutMode::kMirrored; + display_layout_info->layout_mode = + crosapi::mojom::DisplayLayoutMode::kMirrored; if (info.mode == api::system_display::MIRROR_MODE_MIXED) { if (!info.mirroring_source_id) { RunResultCallback(std::move(callback), "Mirror mode source id invalid"); @@ -635,7 +610,8 @@ cros_display_config_->SetDisplayLayoutInfo( std::move(display_layout_info), base::BindOnce( - [](ErrorCallback callback, ash::mojom::DisplayConfigResult result) { + [](ErrorCallback callback, + crosapi::mojom::DisplayConfigResult result) { std::move(callback).Run(GetStringResult(result)); }, std::move(callback))); @@ -644,7 +620,8 @@ void DisplayInfoProviderChromeOS::StartObserving() { DisplayInfoProvider::StartObserving(); - mojo::PendingAssociatedRemote<ash::mojom::CrosDisplayConfigObserver> observer; + mojo::PendingAssociatedRemote<crosapi::mojom::CrosDisplayConfigObserver> + observer; cros_display_config_observer_receiver_.Bind( observer.InitWithNewEndpointAndPassReceiver()); cros_display_config_->AddObserver(std::move(observer)); @@ -661,7 +638,8 @@ } std::unique_ptr<DisplayInfoProvider> CreateChromeDisplayInfoProvider() { - mojo::PendingRemote<ash::mojom::CrosDisplayConfigController> display_config; + mojo::PendingRemote<crosapi::mojom::CrosDisplayConfigController> + display_config; ash::BindCrosDisplayConfigController( display_config.InitWithNewPipeAndPassReceiver()); return std::make_unique<DisplayInfoProviderChromeOS>(
diff --git a/chrome/browser/extensions/system_display/display_info_provider_chromeos.h b/chrome/browser/extensions/system_display/display_info_provider_chromeos.h index 4e528ea..635bb1f 100644 --- a/chrome/browser/extensions/system_display/display_info_provider_chromeos.h +++ b/chrome/browser/extensions/system_display/display_info_provider_chromeos.h
@@ -8,8 +8,8 @@ #include <map> #include <memory> -#include "ash/public/mojom/cros_display_config.mojom.h" #include "base/memory/weak_ptr.h" +#include "chromeos/crosapi/mojom/cros_display_config.mojom.h" #include "extensions/browser/api/system_display/display_info_provider.h" #include "mojo/public/cpp/bindings/associated_receiver.h" #include "mojo/public/cpp/bindings/pending_remote.h" @@ -19,10 +19,10 @@ class DisplayInfoProviderChromeOS : public DisplayInfoProvider, - public ash::mojom::CrosDisplayConfigObserver { + public crosapi::mojom::CrosDisplayConfigObserver { public: explicit DisplayInfoProviderChromeOS( - mojo::PendingRemote<ash::mojom::CrosDisplayConfigController> + mojo::PendingRemote<crosapi::mojom::CrosDisplayConfigController> display_config); DisplayInfoProviderChromeOS(const DisplayInfoProviderChromeOS&) = delete; @@ -62,28 +62,30 @@ void StartObserving() override; void StopObserving() override; - // ash::mojom::CrosDisplayConfigObserver + // crosapi::mojom::CrosDisplayConfigObserver void OnDisplayConfigChanged() override; private: - void CallSetDisplayLayoutInfo(ash::mojom::DisplayLayoutInfoPtr layout_info, - ErrorCallback callback, - ash::mojom::DisplayLayoutInfoPtr cur_info); + void CallSetDisplayLayoutInfo( + crosapi::mojom::DisplayLayoutInfoPtr layout_info, + ErrorCallback callback, + crosapi::mojom::DisplayLayoutInfoPtr cur_info); void CallGetDisplayUnitInfoList( bool single_unified, base::OnceCallback<void(DisplayUnitInfoList result)> callback, - ash::mojom::DisplayLayoutInfoPtr layout); + crosapi::mojom::DisplayLayoutInfoPtr layout); void OnGetDisplayUnitInfoList( - ash::mojom::DisplayLayoutInfoPtr layout, + crosapi::mojom::DisplayLayoutInfoPtr layout, base::OnceCallback<void(DisplayUnitInfoList)> callback, - std::vector<ash::mojom::DisplayUnitInfoPtr> info_list); + std::vector<crosapi::mojom::DisplayUnitInfoPtr> info_list); void CallTouchCalibration(const std::string& id, - ash::mojom::DisplayConfigOperation op, - ash::mojom::TouchCalibrationPtr calibration, + crosapi::mojom::DisplayConfigOperation op, + crosapi::mojom::TouchCalibrationPtr calibration, ErrorCallback callback); - mojo::Remote<ash::mojom::CrosDisplayConfigController> cros_display_config_; - mojo::AssociatedReceiver<ash::mojom::CrosDisplayConfigObserver> + mojo::Remote<crosapi::mojom::CrosDisplayConfigController> + cros_display_config_; + mojo::AssociatedReceiver<crosapi::mojom::CrosDisplayConfigObserver> cros_display_config_observer_receiver_{this}; std::string touch_calibration_target_id_; base::WeakPtrFactory<DisplayInfoProviderChromeOS> weak_ptr_factory_{this};
diff --git a/chrome/browser/extensions/system_display/display_info_provider_chromeos_unittest.cc b/chrome/browser/extensions/system_display/display_info_provider_chromeos_unittest.cc index 8471a398..edd23fd 100644 --- a/chrome/browser/extensions/system_display/display_info_provider_chromeos_unittest.cc +++ b/chrome/browser/extensions/system_display/display_info_provider_chromeos_unittest.cc
@@ -71,7 +71,8 @@ // Initialize the DisplayInfoProviderChromeOS with a remote connected to our // local implementation. - mojo::PendingRemote<ash::mojom::CrosDisplayConfigController> display_config; + mojo::PendingRemote<crosapi::mojom::CrosDisplayConfigController> + display_config; cros_display_config_->BindReceiver( display_config.InitWithNewPipeAndPassReceiver()); DisplayInfoProvider::InitializeForTesting(
diff --git a/chrome/browser/extensions/system_display/display_info_provider_lacros.cc b/chrome/browser/extensions/system_display/display_info_provider_lacros.cc index dd7db5d..b97229c 100644 --- a/chrome/browser/extensions/system_display/display_info_provider_lacros.cc +++ b/chrome/browser/extensions/system_display/display_info_provider_lacros.cc
@@ -8,7 +8,9 @@ #include "base/bind.h" #include "base/logging.h" +#include "chrome/browser/extensions/system_display/display_info_provider_utils.h" #include "chrome/browser/extensions/system_display/system_display_serialization.h" +#include "chromeos/crosapi/mojom/cros_display_config.mojom.h" #include "chromeos/lacros/lacros_service.h" #include "extensions/common/api/system_display.h" #include "ui/gfx/geometry/insets.h" @@ -55,7 +57,7 @@ void DisplayInfoProviderLacros::OnCrosapiResult( base::OnceCallback<void(DisplayUnitInfoList)> callback, - std::vector<crosapi::mojom::DisplayUnitInfoPtr> src_info_list) { + std::vector<crosapi::mojom::SysDisplayUnitInfoPtr> src_info_list) { DisplayUnitInfoList dst_info_list(src_info_list.size()); for (size_t i = 0; i < src_info_list.size(); ++i) { DCHECK(src_info_list[i]); @@ -69,6 +71,121 @@ DispatchOnDisplayChangedEvent(); } +void DisplayInfoProviderLacros::GetDisplayLayout( + base::OnceCallback<void(DisplayLayoutList)> callback) { + auto* lacros_service = chromeos::LacrosService::Get(); + if (lacros_service + ->IsAvailable<crosapi::mojom::CrosDisplayConfigController>()) { + auto& remote = + lacros_service + ->GetRemote<crosapi::mojom::CrosDisplayConfigController>(); + + remote->GetDisplayLayoutInfo( + base::BindOnce(&OnGetDisplayLayoutResult, std::move(callback))); + + } else { + LOG(ERROR) << "Cros display config service is not available."; + std::move(callback).Run(DisplayLayoutList()); + } +} + +void DisplayInfoProviderLacros::SetDisplayProperties( + const std::string& display_id, + const api::system_display::DisplayProperties& properties, + ErrorCallback callback) { + constexpr char kTempError[] = + "SetDisplayProperties to be implemented in Lacros"; + NOTIMPLEMENTED() << kTempError; + std::move(callback).Run(kTempError); +} + +void DisplayInfoProviderLacros::SetDisplayLayout( + const DisplayLayoutList& layouts, + ErrorCallback callback) { + constexpr char kTempError[] = "SetDisplayLayout to be implemented in Lacros"; + NOTIMPLEMENTED() << kTempError; + std::move(callback).Run(kTempError); +} + +void DisplayInfoProviderLacros::EnableUnifiedDesktop(bool enable) { + constexpr char kTempError[] = + "EnableUnifiedDesktop to be implemented in Lacros"; + NOTIMPLEMENTED() << kTempError; +} + +bool DisplayInfoProviderLacros::OverscanCalibrationStart( + const std::string& id) { + constexpr char kTempError[] = + "OverscanCalibrationStart to be implemented in Lacros"; + NOTIMPLEMENTED() << kTempError; + return false; +} +bool DisplayInfoProviderLacros::OverscanCalibrationAdjust( + const std::string& id, + const api::system_display::Insets& delta) { + constexpr char kTempError[] = + "OverscanCalibrationAdjust to be implemented in Lacros"; + NOTIMPLEMENTED() << kTempError; + return false; +} + +bool DisplayInfoProviderLacros::OverscanCalibrationReset( + const std::string& id) { + constexpr char kTempError[] = + "OverscanCalibrationAdjust to be implemented in Lacros"; + NOTIMPLEMENTED() << kTempError; + return false; +} + +bool DisplayInfoProviderLacros::OverscanCalibrationComplete( + const std::string& id) { + constexpr char kTempError[] = + "OverscanCalibrationComplete to be implemented in Lacros"; + NOTIMPLEMENTED() << kTempError; + return false; +} + +void DisplayInfoProviderLacros::ShowNativeTouchCalibration( + const std::string& id, + ErrorCallback callback) { + constexpr char kTempError[] = + "ShowNativeTouchCalibration to be implemented in Lacros"; + NOTIMPLEMENTED() << kTempError; + std::move(callback).Run(kTempError); +} + +bool DisplayInfoProviderLacros::StartCustomTouchCalibration( + const std::string& id) { + constexpr char kTempError[] = + "StartCustomTouchCalibration to be implemented in Lacros"; + NOTIMPLEMENTED() << kTempError; + return false; +} + +bool DisplayInfoProviderLacros::CompleteCustomTouchCalibration( + const api::system_display::TouchCalibrationPairQuad& pairs, + const api::system_display::Bounds& bounds) { + constexpr char kTempError[] = + "CompleteCustomTouchCalibration to be implemented in Lacros"; + NOTIMPLEMENTED() << kTempError; + return false; +} + +bool DisplayInfoProviderLacros::ClearTouchCalibration(const std::string& id) { + constexpr char kTempError[] = + "ClearTouchCalibration to be implemented in Lacros"; + NOTIMPLEMENTED() << kTempError; + return false; +} + +void DisplayInfoProviderLacros::SetMirrorMode( + const api::system_display::MirrorModeInfo& info, + ErrorCallback callback) { + constexpr char kTempError[] = "SetMirrorMode to be implemented in Lacros"; + NOTIMPLEMENTED() << kTempError; + std::move(callback).Run(kTempError); +} + std::unique_ptr<DisplayInfoProvider> CreateChromeDisplayInfoProvider() { return std::make_unique<DisplayInfoProviderLacros>(); }
diff --git a/chrome/browser/extensions/system_display/display_info_provider_lacros.h b/chrome/browser/extensions/system_display/display_info_provider_lacros.h index 51641e11..68d56dd5 100644 --- a/chrome/browser/extensions/system_display/display_info_provider_lacros.h +++ b/chrome/browser/extensions/system_display/display_info_provider_lacros.h
@@ -33,11 +33,40 @@ bool single_unified, base::OnceCallback<void(DisplayUnitInfoList)> callback) override; + void GetDisplayLayout( + base::OnceCallback<void(DisplayLayoutList result)> callback) override; + + void SetDisplayProperties( + const std::string& display_id, + const api::system_display::DisplayProperties& properties, + ErrorCallback callback) override; + + void SetDisplayLayout(const DisplayLayoutList& layouts, + ErrorCallback callback) override; + + void EnableUnifiedDesktop(bool enable) override; + + bool OverscanCalibrationStart(const std::string& id) override; + bool OverscanCalibrationAdjust( + const std::string& id, + const api::system_display::Insets& delta) override; + bool OverscanCalibrationReset(const std::string& id) override; + bool OverscanCalibrationComplete(const std::string& id) override; + void ShowNativeTouchCalibration(const std::string& id, + ErrorCallback callback) override; + bool StartCustomTouchCalibration(const std::string& id) override; + bool CompleteCustomTouchCalibration( + const api::system_display::TouchCalibrationPairQuad& pairs, + const api::system_display::Bounds& bounds) override; + bool ClearTouchCalibration(const std::string& id) override; + void SetMirrorMode(const api::system_display::MirrorModeInfo& info, + ErrorCallback callback) override; + private: // Receiver for SystemDisplayAsh::GetDisplayUnitInfoList(). void OnCrosapiResult( base::OnceCallback<void(DisplayUnitInfoList)> callback, - std::vector<crosapi::mojom::DisplayUnitInfoPtr> src_info_list); + std::vector<crosapi::mojom::SysDisplayUnitInfoPtr> src_info_list); // crosapi::mojom::DisplayChangeObserver: void OnCrosapiDisplayChanged() override;
diff --git a/chrome/browser/extensions/system_display/display_info_provider_utils.cc b/chrome/browser/extensions/system_display/display_info_provider_utils.cc new file mode 100644 index 0000000..f9ec0ced --- /dev/null +++ b/chrome/browser/extensions/system_display/display_info_provider_utils.cc
@@ -0,0 +1,49 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/extensions/system_display/display_info_provider_utils.h" + +#include "extensions/common/api/system_display.h" + +namespace extensions { + +namespace { + +namespace system_display = api::system_display; + +system_display::LayoutPosition GetLayoutPositionFromMojo( + crosapi::mojom::DisplayLayoutPosition position) { + switch (position) { + case crosapi::mojom::DisplayLayoutPosition::kTop: + return system_display::LayoutPosition::LAYOUT_POSITION_TOP; + case crosapi::mojom::DisplayLayoutPosition::kRight: + return system_display::LayoutPosition::LAYOUT_POSITION_RIGHT; + case crosapi::mojom::DisplayLayoutPosition::kBottom: + return system_display::LayoutPosition::LAYOUT_POSITION_BOTTOM; + case crosapi::mojom::DisplayLayoutPosition::kLeft: + return system_display::LayoutPosition::LAYOUT_POSITION_LEFT; + } + NOTREACHED(); + return system_display::LayoutPosition::LAYOUT_POSITION_LEFT; +} +} // namespace + +void OnGetDisplayLayoutResult( + base::OnceCallback<void(DisplayInfoProvider::DisplayLayoutList)> callback, + crosapi::mojom::DisplayLayoutInfoPtr info) { + DisplayInfoProvider::DisplayLayoutList result; + if (info->layouts) { + for (crosapi::mojom::DisplayLayoutPtr& layout : *info->layouts) { + api::system_display::DisplayLayout display_layout; + display_layout.id = layout->id; + display_layout.parent_id = layout->parent_id; + display_layout.position = GetLayoutPositionFromMojo(layout->position); + display_layout.offset = layout->offset; + result.emplace_back(std::move(display_layout)); + } + } + std::move(callback).Run(std::move(result)); +} + +} // namespace extensions
diff --git a/chrome/browser/extensions/system_display/display_info_provider_utils.h b/chrome/browser/extensions/system_display/display_info_provider_utils.h new file mode 100644 index 0000000..e70b776 --- /dev/null +++ b/chrome/browser/extensions/system_display/display_info_provider_utils.h
@@ -0,0 +1,23 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_EXTENSIONS_SYSTEM_DISPLAY_DISPLAY_INFO_PROVIDER_UTILS_H_ +#define CHROME_BROWSER_EXTENSIONS_SYSTEM_DISPLAY_DISPLAY_INFO_PROVIDER_UTILS_H_ + +#include "chromeos/crosapi/mojom/cros_display_config.mojom.h" +#include "extensions/browser/api/system_display/display_info_provider.h" + +namespace extensions { + +// Callback function for CrosDisplayConfigController crosapi interface. +// Reused by both ash and lacros implementations of DisplayInfoProvider. +// Converts input display layout |info| from crosapi to extension api type. +// Passes converted array into a |callback|. +void OnGetDisplayLayoutResult( + base::OnceCallback<void(DisplayInfoProvider::DisplayLayoutList)> callback, + crosapi::mojom::DisplayLayoutInfoPtr info); + +} // namespace extensions + +#endif // CHROME_BROWSER_EXTENSIONS_SYSTEM_DISPLAY_DISPLAY_INFO_PROVIDER_UTILS_H_
diff --git a/chrome/browser/extensions/system_display/system_display_serialization.cc b/chrome/browser/extensions/system_display/system_display_serialization.cc index 020544d..5b1871c 100644 --- a/chrome/browser/extensions/system_display/system_display_serialization.cc +++ b/chrome/browser/extensions/system_display/system_display_serialization.cc
@@ -95,11 +95,11 @@ } // namespace // extensions::api::system_display::DisplayMode <==> -// crosapi::mojom::DisplayMode. +// crosapi::mojom::SysDisplayMode. -crosapi::mojom::DisplayModePtr SerializeDisplayMode( +crosapi::mojom::SysDisplayModePtr SerializeDisplayMode( const extensions::api::system_display::DisplayMode& src) { - auto dst = crosapi::mojom::DisplayMode::New(); + auto dst = crosapi::mojom::SysDisplayMode::New(); dst->size = SerializeSize(src.width, src.height); dst->size_in_native_pixels = SerializeSize(src.width_in_native_pixels, src.height_in_native_pixels); @@ -112,7 +112,7 @@ return dst; } -void DeserializeDisplayMode(const crosapi::mojom::DisplayMode& src, +void DeserializeDisplayMode(const crosapi::mojom::SysDisplayMode& src, extensions::api::system_display::DisplayMode* dst) { DeserializeSize(src.size, &dst->width, &dst->height); DeserializeSize(src.size_in_native_pixels, &dst->width_in_native_pixels, @@ -125,18 +125,18 @@ &dst->is_interlaced); } -// extensions::api::system_display::Edid <==> crosapi::mojom::Edid. +// extensions::api::system_display::Edid <==> crosapi::mojom::SysDisplayEdid. -crosapi::mojom::EdidPtr SerializeEdid( +crosapi::mojom::SysDisplayEdidPtr SerializeEdid( const extensions::api::system_display::Edid& src) { - auto dst = crosapi::mojom::Edid::New(); + auto dst = crosapi::mojom::SysDisplayEdid::New(); dst->manufacturer_id = src.manufacturer_id; dst->product_id = src.product_id; dst->year_of_manufacture = src.year_of_manufacture; return dst; } -void DeserializeEdid(const crosapi::mojom::Edid& src, +void DeserializeEdid(const crosapi::mojom::SysDisplayEdid& src, extensions::api::system_display::Edid* dst) { dst->manufacturer_id = src.manufacturer_id; dst->product_id = src.product_id; @@ -144,11 +144,11 @@ } // extensions::api::system_display::DisplayUnitInfo <==> -// crosapi::mojom::DisplayUnitInfo. +// crosapi::mojom::SysDisplayUnitInfo. -crosapi::mojom::DisplayUnitInfoPtr SerializeDisplayUnitInfo( +crosapi::mojom::SysDisplayUnitInfoPtr SerializeDisplayUnitInfo( const extensions::api::system_display::DisplayUnitInfo& src) { - auto dst = crosapi::mojom::DisplayUnitInfo::New(); + auto dst = crosapi::mojom::SysDisplayUnitInfo::New(); dst->id = src.id; dst->name = src.name; if (src.edid) @@ -180,7 +180,7 @@ } void DeserializeDisplayUnitInfo( - const crosapi::mojom::DisplayUnitInfo& src, + const crosapi::mojom::SysDisplayUnitInfo& src, extensions::api::system_display::DisplayUnitInfo* dst) { dst->id = src.id; dst->name = src.name;
diff --git a/chrome/browser/extensions/system_display/system_display_serialization.h b/chrome/browser/extensions/system_display/system_display_serialization.h index a2bc26a..f12ce45b 100644 --- a/chrome/browser/extensions/system_display/system_display_serialization.h +++ b/chrome/browser/extensions/system_display/system_display_serialization.h
@@ -52,33 +52,33 @@ // crosapi::mojom::DisplayMode. COMPONENT_EXPORT(CROSAPI) -crosapi::mojom::DisplayModePtr SerializeDisplayMode( +crosapi::mojom::SysDisplayModePtr SerializeDisplayMode( const extensions::api::system_display::DisplayMode& src); COMPONENT_EXPORT(CROSAPI) -void DeserializeDisplayMode(const crosapi::mojom::DisplayMode& src, +void DeserializeDisplayMode(const crosapi::mojom::SysDisplayMode& src, extensions::api::system_display::DisplayMode* dst); // extensions::api::system_display::Edid <==> crosapi::mojom::Edid. COMPONENT_EXPORT(CROSAPI) -crosapi::mojom::EdidPtr SerializeEdid( +crosapi::mojom::SysDisplayEdidPtr SerializeEdid( const extensions::api::system_display::Edid& src); COMPONENT_EXPORT(CROSAPI) -void DeserializeEdid(const crosapi::mojom::Edid& src, +void DeserializeEdid(const crosapi::mojom::SysDisplayEdid& src, extensions::api::system_display::Edid* dst); // extensions::api::system_display::DisplayUnitInfo <==> // crosapi::mojom::DisplayUnitInfo. COMPONENT_EXPORT(CROSAPI) -crosapi::mojom::DisplayUnitInfoPtr SerializeDisplayUnitInfo( +crosapi::mojom::SysDisplayUnitInfoPtr SerializeDisplayUnitInfo( const extensions::api::system_display::DisplayUnitInfo& src); COMPONENT_EXPORT(CROSAPI) void DeserializeDisplayUnitInfo( - const crosapi::mojom::DisplayUnitInfo& src, + const crosapi::mojom::SysDisplayUnitInfo& src, extensions::api::system_display::DisplayUnitInfo* dst); } // namespace system_display
diff --git a/chrome/browser/extensions/system_display/system_display_serialization_unittest.cc b/chrome/browser/extensions/system_display/system_display_serialization_unittest.cc index 0e64cf94..20093f5 100644 --- a/chrome/browser/extensions/system_display/system_display_serialization_unittest.cc +++ b/chrome/browser/extensions/system_display/system_display_serialization_unittest.cc
@@ -92,7 +92,7 @@ std::string original_json_string = MakeJsonString(test_lines, /*include_optional=*/iter > 0); auto original_obj = StringToObject<DisplayMode>(original_json_string); - crosapi::mojom::DisplayModePtr serialized_obj = + crosapi::mojom::SysDisplayModePtr serialized_obj = SerializeDisplayMode(*original_obj); DisplayMode copied_obj; DeserializeDisplayMode(*serialized_obj, &copied_obj); @@ -115,7 +115,8 @@ std::string original_json_string = MakeJsonString(test_lines, true); auto original_obj = StringToObject<Edid>(original_json_string); - crosapi::mojom::EdidPtr serialized_obj = SerializeEdid(*original_obj); + crosapi::mojom::SysDisplayEdidPtr serialized_obj = + SerializeEdid(*original_obj); Edid copied_obj; DeserializeEdid(*serialized_obj, &copied_obj); std::string copied_json_string = ObjectToString(copied_obj); @@ -213,7 +214,7 @@ std::string original_json_string = MakeJsonString(test_lines, /*include_optional=*/iter > 0); auto original_obj = StringToObject<DisplayUnitInfo>(original_json_string); - crosapi::mojom::DisplayUnitInfoPtr serialized_obj = + crosapi::mojom::SysDisplayUnitInfoPtr serialized_obj = SerializeDisplayUnitInfo(*original_obj); DisplayUnitInfo copied_obj; DeserializeDisplayUnitInfo(*serialized_obj, &copied_obj);
diff --git a/chrome/browser/feedback/system_logs/log_sources/chrome_internal_log_source.cc b/chrome/browser/feedback/system_logs/log_sources/chrome_internal_log_source.cc index 54cf745..464e9f0 100644 --- a/chrome/browser/feedback/system_logs/log_sources/chrome_internal_log_source.cc +++ b/chrome/browser/feedback/system_logs/log_sources/chrome_internal_log_source.cc
@@ -166,13 +166,13 @@ } std::string GetDisplayInfoString( - const ash::mojom::DisplayUnitInfo& display_info) { + const crosapi::mojom::DisplayUnitInfo& display_info) { std::string entry; if (!display_info.name.empty()) base::StringAppendF(&entry, "%s : ", display_info.name.c_str()); if (!display_info.edid) return entry; - const ash::mojom::Edid& edid = *display_info.edid; + const crosapi::mojom::Edid& edid = *display_info.edid; if (!edid.manufacturer_id.empty()) { base::StringAppendF(&entry, "Manufacturer: %s - ", edid.manufacturer_id.c_str()); @@ -189,16 +189,16 @@ // Called from the main (UI) thread, invokes |callback| when complete. void PopulateMonitorInfoAsync( - ash::mojom::CrosDisplayConfigController* cros_display_config_ptr, + crosapi::mojom::CrosDisplayConfigController* cros_display_config_ptr, SystemLogsResponse* response, base::OnceCallback<void()> callback) { cros_display_config_ptr->GetDisplayUnitInfoList( false /* single_unified */, base::BindOnce( [](SystemLogsResponse* response, base::OnceCallback<void()> callback, - std::vector<ash::mojom::DisplayUnitInfoPtr> info_list) { + std::vector<crosapi::mojom::DisplayUnitInfoPtr> info_list) { std::string entry; - for (const ash::mojom::DisplayUnitInfoPtr& info : info_list) { + for (const crosapi::mojom::DisplayUnitInfoPtr& info : info_list) { if (!entry.empty()) base::StringAppendF(&entry, "\n"); entry += GetDisplayInfoString(*info);
diff --git a/chrome/browser/feedback/system_logs/log_sources/chrome_internal_log_source.h b/chrome/browser/feedback/system_logs/log_sources/chrome_internal_log_source.h index 78f7e9b..c12d166 100644 --- a/chrome/browser/feedback/system_logs/log_sources/chrome_internal_log_source.h +++ b/chrome/browser/feedback/system_logs/log_sources/chrome_internal_log_source.h
@@ -10,7 +10,7 @@ #include "components/feedback/system_logs/system_logs_source.h" #if BUILDFLAG(IS_CHROMEOS_ASH) -#include "ash/public/mojom/cros_display_config.mojom.h" +#include "chromeos/crosapi/mojom/cros_display_config.mojom.h" #include "mojo/public/cpp/bindings/remote.h" #endif @@ -49,7 +49,8 @@ #endif #if BUILDFLAG(IS_CHROMEOS_ASH) - mojo::Remote<ash::mojom::CrosDisplayConfigController> cros_display_config_; + mojo::Remote<crosapi::mojom::CrosDisplayConfigController> + cros_display_config_; #endif };
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json index 359849a..b83efe08 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json
@@ -5684,6 +5684,11 @@ "expiry_milestone": 108 }, { + "name": "sharing-desktop-share-to-google-collections", + "owners": ["mhatem", "chrome-with-friends-robots@google.com"], + "expiry_milestone": 108 + }, + { "name": "sharing-hub-desktop-app-menu", "owners": [ "kristipark", "chrome-with-friends-robots@google.com" ], "expiry_milestone": 98
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index a035d07..cc685c8 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -4141,6 +4141,11 @@ "Adds a preview section to the desktop sharing hub to make it clearer what " "is about to be shared."; +const char kSharingDesktopShareToGoogleCollectionsName[] = + "Share to Google Collections"; +const char kSharingDesktopShareToGoogleCollectionsDescription[] = + "Adds an item to the sharing hub to allow sharing to Google Collections."; + const char kWebAuthenticationPermitEnterpriseAttestationName[] = "Web Authentication Enterprise Attestation"; const char kWebAuthenticationPermitEnterpriseAttestationDescription[] =
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index 8b8e406..cf45b26c 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -2368,6 +2368,9 @@ extern const char kSharingDesktopSharePreviewName[]; extern const char kSharingDesktopSharePreviewDescription[]; +extern const char kSharingDesktopShareToGoogleCollectionsName[]; +extern const char kSharingDesktopShareToGoogleCollectionsDescription[]; + extern const char kWebAuthenticationPermitEnterpriseAttestationName[]; extern const char kWebAuthenticationPermitEnterpriseAttestationDescription[];
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc index c66c234..031dccf 100644 --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -259,6 +259,7 @@ &kBookmarksRefresh, &kBackGestureRefactorAndroid, &kOmniboxModernizeVisualUpdate, + &kOptimizeGeolocationHeaderGeneration, &kOptimizeLayoutsForPullRefresh, &kPostTaskFocusTab, &kProbabilisticCryptidRenderer, @@ -745,6 +746,9 @@ const base::Feature kOmniboxModernizeVisualUpdate{ "OmniboxModernizeVisualUpdate", base::FEATURE_DISABLED_BY_DEFAULT}; +const base::Feature kOptimizeGeolocationHeaderGeneration{ + "OptimizeGeolocationHeaderGeneration", base::FEATURE_DISABLED_BY_DEFAULT}; + const base::Feature kOptimizeLayoutsForPullRefresh{ "OptimizeLayoutsForPullRefresh", base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser/flags/android/chrome_feature_list.h index 6384228..68e762eb 100644 --- a/chrome/browser/flags/android/chrome_feature_list.h +++ b/chrome/browser/flags/android/chrome_feature_list.h
@@ -115,6 +115,7 @@ extern const base::Feature kNewWindowAppMenu; extern const base::Feature kNotificationPermissionVariant; extern const base::Feature kOmniboxModernizeVisualUpdate; +extern const base::Feature kOptimizeGeolocationHeaderGeneration; extern const base::Feature kPageAnnotationsService; extern const base::Feature kBookmarksImprovedSaveFlow; extern const base::Feature kBookmarksRefresh;
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 d9926408..b7af539 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
@@ -439,6 +439,8 @@ "OmniboxUpdatedConnectionSecurityIndicators"; public static final String OPTIMIZATION_GUIDE_PUSH_NOTIFICATIONS = "OptimizationGuidePushNotifications"; + public static final String OPTIMIZE_GEOLOCATION_HEADER_GENERATION = + "OptimizeGeolocationHeaderGeneration"; public static final String OPTIMIZE_LAYOUTS_FOR_PULL_REFRESH = "OptimizeLayoutsForPullRefresh"; public static final String OVERLAY_NEW_LAYOUT = "OverlayNewLayout"; public static final String PAGE_ANNOTATIONS_SERVICE = "PageAnnotationsService";
diff --git a/chrome/browser/installable/installable_manager_browsertest.cc b/chrome/browser/installable/installable_manager_browsertest.cc index b1017bf..92a74883 100644 --- a/chrome/browser/installable/installable_manager_browsertest.cc +++ b/chrome/browser/installable/installable_manager_browsertest.cc
@@ -1950,6 +1950,32 @@ } IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, + CheckLargeScreenshotsFilteredOut) { + base::RunLoop run_loop; + std::unique_ptr<CallbackTester> tester( + new CallbackTester(run_loop.QuitClosure())); + + InstallableParams params = GetManifestParams(); + params.fetch_screenshots = true; + + NavigateAndRunInstallableManager( + browser(), tester.get(), params, + GetURLOfPageWithServiceWorkerAndManifest( + "/banners/manifest_large_screenshot.json")); + + run_loop.Run(); + + EXPECT_FALSE(blink::IsEmptyManifest(tester->manifest())); + EXPECT_FALSE(tester->manifest_url().is_empty()); + + EXPECT_FALSE(tester->valid_manifest()); + EXPECT_EQ(1u, tester->screenshots().size()); + EXPECT_EQ(551, tester->screenshots()[0].width()); + EXPECT_EQ(541, tester->screenshots()[0].height()); + EXPECT_EQ(std::vector<InstallableStatusCode>{}, tester->errors()); +} + +IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, ManifestLinkChangeReportsError) { InstallableManager* manager = GetManager(browser());
diff --git a/chrome/browser/lacros/browser_service_lacros.cc b/chrome/browser/lacros/browser_service_lacros.cc index bf28d3c..dad52b9 100644 --- a/chrome/browser/lacros/browser_service_lacros.cc +++ b/chrome/browser/lacros/browser_service_lacros.cc
@@ -106,8 +106,7 @@ auto* fre_service = LacrosFirstRunServiceFactory::GetForBrowserContext(profile); - DCHECK(fre_service); - if (can_trigger_fre && fre_service->ShouldOpenFirstRun()) { + if (fre_service && can_trigger_fre && fre_service->ShouldOpenFirstRun()) { // TODO(https://crbug.com/1313848): Consider taking a // `ScopedProfileKeepAlive`. fre_service->OpenFirstRunIfNeeded(
diff --git a/chrome/browser/lacros/browser_service_lacros_browsertest.cc b/chrome/browser/lacros/browser_service_lacros_browsertest.cc index f22cbbe..21674b1 100644 --- a/chrome/browser/lacros/browser_service_lacros_browsertest.cc +++ b/chrome/browser/lacros/browser_service_lacros_browsertest.cc
@@ -720,6 +720,11 @@ class BrowserServiceLacrosNonSyncingProfilesBrowserTest : public BrowserServiceLacrosBrowserTest { public: + BrowserServiceLacrosNonSyncingProfilesBrowserTest( + crosapi::mojom::SessionType session_type = + crosapi::mojom::SessionType::kRegularSession) + : session_type_(session_type) {} + // BrowserServiceLacrosBrowserTest: void SetUpDefaultCommandLine(base::CommandLine* command_line) override { BrowserServiceLacrosBrowserTest::SetUpDefaultCommandLine(command_line); @@ -736,6 +741,22 @@ } } + Profile* GetPrimaryProfile() { + ProfileManager* profile_manager = g_browser_process->profile_manager(); + return profile_manager->GetProfile( + profile_manager->GetPrimaryUserProfilePath()); + } + + void CreatedBrowserMainParts( + content::BrowserMainParts* browser_main_parts) override { + crosapi::mojom::BrowserInitParamsPtr init_params = + chromeos::BrowserInitParams::GetForTests()->Clone(); + init_params->session_type = session_type_; + chromeos::BrowserInitParams::SetInitParamsForTests(std::move(init_params)); + + InProcessBrowserTest::CreatedBrowserMainParts(browser_main_parts); + } + const base::HistogramTester& histogram_tester() { return histogram_tester_; } private: @@ -745,6 +766,8 @@ profiles::testing::ScopedNonEnterpriseDomainSetterForTesting non_enterprise_domain_setter_; + + crosapi::mojom::SessionType session_type_; }; IN_PROC_BROWSER_TEST_F(BrowserServiceLacrosNonSyncingProfilesBrowserTest, @@ -755,9 +778,7 @@ } IN_PROC_BROWSER_TEST_F(BrowserServiceLacrosNonSyncingProfilesBrowserTest, NewWindow_OpensFirstRun) { - ProfileManager* profile_manager = g_browser_process->profile_manager(); - EXPECT_TRUE(ShouldOpenPrimaryProfileFirstRun(profile_manager->GetProfile( - profile_manager->GetPrimaryUserProfilePath()))); + EXPECT_TRUE(ShouldOpenPrimaryProfileFirstRun(GetPrimaryProfile())); EXPECT_EQ(0u, BrowserList::GetInstance()->size()); histogram_tester().ExpectTotalCount( "Profile.LacrosPrimaryProfileFirstRunEntryPoint", 0); @@ -784,9 +805,7 @@ } IN_PROC_BROWSER_TEST_F(BrowserServiceLacrosNonSyncingProfilesBrowserTest, NewWindow_OpensFirstRun_UiClose) { - ProfileManager* profile_manager = g_browser_process->profile_manager(); - EXPECT_TRUE(ShouldOpenPrimaryProfileFirstRun(profile_manager->GetProfile( - profile_manager->GetPrimaryUserProfilePath()))); + EXPECT_TRUE(ShouldOpenPrimaryProfileFirstRun(GetPrimaryProfile())); EXPECT_EQ(0u, BrowserList::GetInstance()->size()); histogram_tester().ExpectTotalCount( "Profile.LacrosPrimaryProfileFirstRunEntryPoint", 0); @@ -813,9 +832,7 @@ } IN_PROC_BROWSER_TEST_F(BrowserServiceLacrosNonSyncingProfilesBrowserTest, NewTab_OpensFirstRun) { - ProfileManager* profile_manager = g_browser_process->profile_manager(); - EXPECT_TRUE(ShouldOpenPrimaryProfileFirstRun(profile_manager->GetProfile( - profile_manager->GetPrimaryUserProfilePath()))); + EXPECT_TRUE(ShouldOpenPrimaryProfileFirstRun(GetPrimaryProfile())); EXPECT_EQ(0u, BrowserList::GetInstance()->size()); histogram_tester().ExpectTotalCount( "Profile.LacrosPrimaryProfileFirstRunEntryPoint", 0); @@ -833,3 +850,61 @@ "Profile.LacrosPrimaryProfileFirstRunEntryPoint", LacrosFirstRunService::EntryPoint::kOther, 1); } + +class BrowserServiceLacrosNonSyncingProfilesGuestBrowserTest + : public BrowserServiceLacrosNonSyncingProfilesBrowserTest { + public: + BrowserServiceLacrosNonSyncingProfilesGuestBrowserTest() + : BrowserServiceLacrosNonSyncingProfilesBrowserTest( + crosapi::mojom::SessionType::kGuestSession) {} +}; + +IN_PROC_BROWSER_TEST_F(BrowserServiceLacrosNonSyncingProfilesGuestBrowserTest, + PRE_NewWindow_OpensFirstRun) { + // Dummy case to set up the primary profile. + histogram_tester().ExpectTotalCount( + "Profile.LacrosPrimaryProfileFirstRunEntryPoint", 0); +} +IN_PROC_BROWSER_TEST_F(BrowserServiceLacrosNonSyncingProfilesGuestBrowserTest, + NewWindow_OpensFirstRun) { + EXPECT_FALSE(ShouldOpenPrimaryProfileFirstRun(GetPrimaryProfile())); + EXPECT_EQ(0u, BrowserList::GetInstance()->size()); + histogram_tester().ExpectTotalCount( + "Profile.LacrosPrimaryProfileFirstRunEntryPoint", 0); + + NewWindowSync(/*incognito=*/false, /*should_trigger_session_restore=*/false); + + EXPECT_EQ(1u, BrowserList::GetInstance()->size()); + histogram_tester().ExpectTotalCount( + "Profile.LacrosPrimaryProfileFirstRunEntryPoint", 0); +} + +class BrowserServiceLacrosNonSyncingProfilesWebKioskBrowserTest + : public BrowserServiceLacrosNonSyncingProfilesBrowserTest { + public: + BrowserServiceLacrosNonSyncingProfilesWebKioskBrowserTest() + : BrowserServiceLacrosNonSyncingProfilesBrowserTest( + crosapi::mojom::SessionType::kWebKioskSession) {} +}; + +IN_PROC_BROWSER_TEST_F( + BrowserServiceLacrosNonSyncingProfilesWebKioskBrowserTest, + PRE_NewWindow_OpensFirstRun) { + // Dummy case to set up the primary profile. + histogram_tester().ExpectTotalCount( + "Profile.LacrosPrimaryProfileFirstRunEntryPoint", 0); +} +IN_PROC_BROWSER_TEST_F( + BrowserServiceLacrosNonSyncingProfilesWebKioskBrowserTest, + NewWindow_OpensFirstRun) { + EXPECT_FALSE(ShouldOpenPrimaryProfileFirstRun(GetPrimaryProfile())); + EXPECT_EQ(0u, BrowserList::GetInstance()->size()); + histogram_tester().ExpectTotalCount( + "Profile.LacrosPrimaryProfileFirstRunEntryPoint", 0); + + NewWindowSync(/*incognito=*/false, /*should_trigger_session_restore=*/false); + + EXPECT_EQ(1u, BrowserList::GetInstance()->size()); + histogram_tester().ExpectTotalCount( + "Profile.LacrosPrimaryProfileFirstRunEntryPoint", 0); +}
diff --git a/chrome/browser/lookalikes/lookalike_url_navigation_throttle_browsertest.cc b/chrome/browser/lookalikes/lookalike_url_navigation_throttle_browsertest.cc index 8fb435d4..1d77529 100644 --- a/chrome/browser/lookalikes/lookalike_url_navigation_throttle_browsertest.cc +++ b/chrome/browser/lookalikes/lookalike_url_navigation_throttle_browsertest.cc
@@ -1569,6 +1569,17 @@ CheckUkm({kNavigatedUrl}, "TriggeredByInitialUrl", false); } +// Combo Squatting shouldn't trigger on allowlisted sites and no +// UKM should be recorded. +IN_PROC_BROWSER_TEST_P(LookalikeUrlNavigationThrottleBrowserTest, + ComboSquatting_ShouldNotTriggeredForAllowlist) { + const GURL kNavigatedUrl = GetURL("google-login.com"); + SetEngagementScore(browser(), kNavigatedUrl, kLowEngagement); + reputation::SetSafetyTipAllowlistPatterns({"google-login.com/"}, {}, {}); + TestInterstitialNotShown(browser(), kNavigatedUrl); + CheckNoUkm(); +} + scoped_refptr<net::X509Certificate> LoadCertificate() { constexpr char kCertFileName[] = "prime256v1-sha256-google-com.public.pem";
diff --git a/chrome/browser/password_manager/android/BUILD.gn b/chrome/browser/password_manager/android/BUILD.gn index c6b186d5..0b8aa7d 100644 --- a/chrome/browser/password_manager/android/BUILD.gn +++ b/chrome/browser/password_manager/android/BUILD.gn
@@ -154,6 +154,7 @@ generate_jni("jni_headers") { visibility = [ ":backend", + ":test_support", "//chrome/browser", ] sources = [ @@ -298,9 +299,26 @@ ] } +generate_jni("test_support_jni_headers") { + testonly = true + sources = [ "java/src/org/chromium/chrome/browser/password_manager/PasswordManagerTestUtilsBridge.java" ] +} + +static_library("test_support") { + testonly = true + sources = [ "password_manager_test_utils_bridge.cc" ] + + deps = [ + ":test_support_jni_headers", + "//base", + "//components/password_manager/core/browser:browser", + ] +} + android_library("test_support_java") { testonly = true sources = [ + "java/src/org/chromium/chrome/browser/password_manager/PasswordManagerTestUtilsBridge.java", "java/src/org/chromium/chrome/browser/password_manager/tests/utils/FakePasswordCheckupClientHelper.java", "java/src/org/chromium/chrome/browser/password_manager/tests/utils/FakePasswordCheckupClientHelperFactoryImpl.java", "java/src/org/chromium/chrome/browser/password_manager/tests/utils/FakePasswordSettingsAccessor.java", @@ -317,6 +335,8 @@ ":backend_interface_java", ":settings_interface_java", "//base:base_java", + "//base:jni_java", + "//build/android:build_java", "//chrome/browser/password_manager/android:settings_interface_java", "//components/password_manager/core/browser:password_manager_java_enums", "//components/password_manager/core/browser:unified_password_manager_proto_java", @@ -325,6 +345,8 @@ "//third_party/android_deps:guava_android_java", "//third_party/androidx:androidx_annotation_annotation_java", ] + + annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ] } android_library("password_manager_resource_provider_java") {
diff --git a/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordManagerTestUtilsBridge.java b/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordManagerTestUtilsBridge.java new file mode 100644 index 0000000..6dda629 --- /dev/null +++ b/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordManagerTestUtilsBridge.java
@@ -0,0 +1,25 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser.password_manager; + +import org.chromium.base.annotations.NativeMethods; + +/** + * This bridge contains static methods related to password manager test setup. + * It's intended only to be used in tests. + */ +public class PasswordManagerTestUtilsBridge { + /** + * Disables server predictions to speed up tests + */ + public static void disableServerPredictions() { + PasswordManagerTestUtilsBridgeJni.get().disableServerPredictions(); + } + + @NativeMethods + interface Natives { + void disableServerPredictions(); + } +}
diff --git a/chrome/browser/password_manager/android/password_manager_test_utils_bridge.cc b/chrome/browser/password_manager/android/password_manager_test_utils_bridge.cc new file mode 100644 index 0000000..bd7d328 --- /dev/null +++ b/chrome/browser/password_manager/android/password_manager_test_utils_bridge.cc
@@ -0,0 +1,13 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include <jni.h> +#include "chrome/browser/password_manager/android/test_support_jni_headers/PasswordManagerTestUtilsBridge_jni.h" +#include "components/password_manager/core/browser/password_form_manager.h" + +// static +void JNI_PasswordManagerTestUtilsBridge_DisableServerPredictions(JNIEnv* env) { + password_manager::PasswordFormManager:: + DisableFillingServerPredictionsForTesting(); +}
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/background_test.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/background_test.js index 3e923b9..14eee0d 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/background_test.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/background_test.js
@@ -3783,11 +3783,9 @@ mockFeedback.expectSpeech(/menu opened/).replay(); }); -// TODO(crbug.com/1346144): Fix flaky test. -AX_TEST_F( - 'ChromeVoxBackgroundTest', 'DISABLED_SelectWithOptGroup', async function() { - const mockFeedback = this.createMockFeedback(); - const site = ` +AX_TEST_F('ChromeVoxBackgroundTest', 'SelectWithOptGroup', async function() { + const mockFeedback = this.createMockFeedback(); + const site = ` <select> <optgroup label="Theropods"> <option>Tyrannosaurus</option> @@ -3796,18 +3794,18 @@ </optgroup> </select> `; - await this.runWithLoadedTree(site); - mockFeedback.expectSpeech('Tyrannosaurus', 'has pop up', 'Collapsed') - .call(doCmd('forceClickOnCurrentItem')) - .expectSpeech('Tyrannosaurus') - .call(press(KeyCode.DOWN)) - .expectSpeech('Velociraptor') - .call(press(KeyCode.DOWN)) - .expectSpeech('Deinonychus') - .call(press(KeyCode.UP)) - .expectSpeech('Velociraptor') - .replay(); - }); + await this.runWithLoadedTree(site); + mockFeedback.expectSpeech('Tyrannosaurus', 'has pop up', 'Collapsed') + .call(doCmd('forceClickOnCurrentItem')) + .expectSpeech('Tyrannosaurus') + .call(press(KeyCode.DOWN)) + .expectSpeech('Velociraptor') + .call(press(KeyCode.DOWN)) + .expectSpeech('Deinonychus') + .call(press(KeyCode.UP)) + .expectSpeech('Velociraptor') + .replay(); +}); AX_TEST_F('ChromeVoxBackgroundTest', 'GroupNavigation', async function() { const mockFeedback = this.createMockFeedback(); @@ -4070,24 +4068,21 @@ .replay(); }); -// TODO(crbug.com/1346144): Fix flaky test. -AX_TEST_F( - 'ChromeVoxBackgroundTest', 'DISABLED_GestureOnPopUpButton', - async function() { - const mockFeedback = this.createMockFeedback(); - const site = ` +AX_TEST_F('ChromeVoxBackgroundTest', 'GestureOnPopUpButton', async function() { + const mockFeedback = this.createMockFeedback(); + const site = ` <select><option>apple</option><option>banana</option></select> `; - await this.runWithLoadedTree(site); - mockFeedback.expectSpeech('Button', 'has pop up') - .call(doGesture(Gesture.CLICK)) - .expectSpeech('Button', 'has pop up', 'Expanded') - .call(doGesture(Gesture.SWIPE_DOWN1)) - .expectSpeech('banana') - .call(doGesture(Gesture.SWIPE_UP1)) - .expectSpeech('apple') - .replay(); - }); + await this.runWithLoadedTree(site); + mockFeedback.expectSpeech('Button', 'has pop up') + .call(doGesture(Gesture.CLICK)) + .expectSpeech('Button', 'has pop up', 'Expanded') + .call(doGesture(Gesture.SWIPE_DOWN1)) + .expectSpeech('banana') + .call(doGesture(Gesture.SWIPE_UP1)) + .expectSpeech('apple') + .replay(); +}); AX_TEST_F('ChromeVoxBackgroundTest', 'NestedImages', async function() { const mockFeedback = this.createMockFeedback();
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/editing_test.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/editing_test.js index 30ee503..9c2dfec6 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/editing_test.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/editing_test.js
@@ -1606,11 +1606,9 @@ .replay(); }); -// TODO(https://crbug.com/1342870): Test is flaky. -AX_TEST_F( - 'ChromeVoxEditingTest', 'DISABLED_MoveByCharSuggestions', async function() { - const mockFeedback = this.createMockFeedback(); - const site = ` +AX_TEST_F('ChromeVoxEditingTest', 'MoveByCharSuggestions', async function() { + const mockFeedback = this.createMockFeedback(); + const site = ` <div contenteditable="true" role="textbox"> <p>Start</p> <span>I </span> @@ -1620,41 +1618,41 @@ <p>End</p> </div> `; - const root = await this.runWithLoadedTree(site); - await this.focusFirstTextField(root); + const root = await this.runWithLoadedTree(site); + await this.focusFirstTextField(root); - mockFeedback.call(this.press(KeyCode.DOWN)) - .expectSpeech('I ') - // Move forward through line. - .call(this.press(KeyCode.RIGHT)) - .expectSpeech(' ') - .call(this.press(KeyCode.RIGHT)) - .expectSpeech('Suggest', 'Username', 'Insert', 'w') - .call(this.press(KeyCode.RIGHT)) - .expectSpeech('a') - .call(this.press(KeyCode.RIGHT)) - .expectSpeech('s') - .expectSpeech('Insert end') - .call(this.press(KeyCode.RIGHT)) - .call(this.press(KeyCode.RIGHT)) - .expectSpeech('Delete', 'a') - .call(this.press(KeyCode.RIGHT)) - .expectSpeech('m') - .expectSpeech('Delete end', 'Suggest end') - // Move backward through the same line. - .call(this.press(KeyCode.LEFT)) - .expectSpeech('Delete', 'a') - .call(this.press(KeyCode.LEFT)) - .call(this.press(KeyCode.LEFT)) - .expectSpeech('s', 'Insert end') - .call(this.press(KeyCode.LEFT)) - .expectSpeech('a') - .call(this.press(KeyCode.LEFT)) - .expectSpeech('Suggest', 'Insert', 'w') - .call(this.press(KeyCode.DOWN)) - .expectSpeech('End') - .replay(); - }); + mockFeedback.call(this.press(KeyCode.DOWN)) + .expectSpeech('I ') + // Move forward through line. + .call(this.press(KeyCode.RIGHT)) + .expectSpeech(' ') + .call(this.press(KeyCode.RIGHT)) + .expectSpeech('Suggest', 'Username', 'Insert', 'w') + .call(this.press(KeyCode.RIGHT)) + .expectSpeech('a') + .call(this.press(KeyCode.RIGHT)) + .expectSpeech('s') + .expectSpeech('Insert end') + .call(this.press(KeyCode.RIGHT)) + .call(this.press(KeyCode.RIGHT)) + .expectSpeech('Delete', 'a') + .call(this.press(KeyCode.RIGHT)) + .expectSpeech('m') + .expectSpeech('Delete end', 'Suggest end') + // Move backward through the same line. + .call(this.press(KeyCode.LEFT)) + .expectSpeech('Delete', 'a') + .call(this.press(KeyCode.LEFT)) + .call(this.press(KeyCode.LEFT)) + .expectSpeech('s', 'Insert end') + .call(this.press(KeyCode.LEFT)) + .expectSpeech('a') + .call(this.press(KeyCode.LEFT)) + .expectSpeech('Suggest', 'Insert', 'w') + .call(this.press(KeyCode.DOWN)) + .expectSpeech('End') + .replay(); +}); AX_TEST_F('ChromeVoxEditingTest', 'MoveByWordSuggestions', async function() { const mockFeedback = this.createMockFeedback();
diff --git a/chrome/browser/resources/chromeos/accessibility/select_to_speak/BUILD.gn b/chrome/browser/resources/chromeos/accessibility/select_to_speak/BUILD.gn index 8eda498..3cc6516c 100644 --- a/chrome/browser/resources/chromeos/accessibility/select_to_speak/BUILD.gn +++ b/chrome/browser/resources/chromeos/accessibility/select_to_speak/BUILD.gn
@@ -17,25 +17,7 @@ "$root_out_dir/resources/chromeos/accessibility/select_to_speak" group("build") { - deps = [ - ":select_to_speak_copied_files", - ":select_to_speak_script", - ] -} - -# Pulls in Closure-based common files and loads Select to Speak. -run_jsbundler("select_to_speak_script") { - mode = "compressed_bundle" - modules = [ - "//third_party/chromevox/third_party/closure-library/closure/goog/base.js", - "../common/automation_predicate.js", - "../common/automation_util.js", - "../common/constants.js", - "../common/key_code.js", - "../common/tree_walker.js", - ] - sources = [ "loader.js" ] - output_file = "$select_to_speak_out_dir/selectToSpeakScript.js" + deps = [ ":select_to_speak_copied_files" ] } # Instead of setting up one copy target for each subdirectory, use a script @@ -44,10 +26,10 @@ mode = "copy" dest_dir = select_to_speak_out_dir sources = [ + "background.html", "checked.png", "earcons/null_selection.ogg", "input_handler.js", - "loader.js", "metrics_utils.js", "node_navigation_utils.js", "node_utils.js",
diff --git a/chrome/browser/resources/chromeos/accessibility/select_to_speak/background.html b/chrome/browser/resources/chromeos/accessibility/select_to_speak/background.html new file mode 100644 index 0000000..ba4482d --- /dev/null +++ b/chrome/browser/resources/chromeos/accessibility/select_to_speak/background.html
@@ -0,0 +1,10 @@ +<!-- Global scripts. --> +<script src="/common/closure_shim.js"></script> +<script src="/common/constants.js"></script> +<script src="/common/automation_predicate.js"></script> +<script src="/common/automation_util.js"></script> +<script src="/common/key_code.js"></script> +<script src="/common/tree_walker.js"></script> + +<!-- Module entrypoint. --> +<script type="module" src="/select_to_speak/select_to_speak_main.js"></script>
diff --git a/chrome/browser/resources/chromeos/accessibility/select_to_speak/loader.js b/chrome/browser/resources/chromeos/accessibility/select_to_speak/loader.js deleted file mode 100644 index 3bba0548..0000000 --- a/chrome/browser/resources/chromeos/accessibility/select_to_speak/loader.js +++ /dev/null
@@ -1,13 +0,0 @@ -// Copyright 2022 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// TODO(accessibility): these will eventually be imgrated to ES6 modules. -goog.require('AutomationPredicate'); -goog.require('AutomationTreeWalker'); -goog.require('AutomationUtil'); -goog.require('KeyCode'); -goog.require('constants'); - -// ES6 entrypoint for Select to Speak. -import('/select_to_speak/select_to_speak_main.js');
diff --git a/chrome/browser/resources/chromeos/accessibility/select_to_speak/prefs_manager.js b/chrome/browser/resources/chromeos/accessibility/select_to_speak/prefs_manager.js index 7ad904c..443e485 100644 --- a/chrome/browser/resources/chromeos/accessibility/select_to_speak/prefs_manager.js +++ b/chrome/browser/resources/chromeos/accessibility/select_to_speak/prefs_manager.js
@@ -321,9 +321,7 @@ 'enhancedNetworkVoices': this.enhancedNetworkVoicesEnabled_, }); } - // Tests can set |this.enhancedVoicesDialogShown_|. - if (!this.enhancedVoicesDialogShown_ && - prefs['enhancedVoicesDialogShown'] !== undefined) { + if (prefs['enhancedVoicesDialogShown'] !== undefined) { this.enhancedVoicesDialogShown_ = prefs['enhancedVoicesDialogShown']; } else {
diff --git a/chrome/browser/resources/chromeos/accessibility/select_to_speak/ui_manager_unittest.js b/chrome/browser/resources/chromeos/accessibility/select_to_speak/ui_manager_unittest.js index 0dc997a0..02a620e 100644 --- a/chrome/browser/resources/chromeos/accessibility/select_to_speak/ui_manager_unittest.js +++ b/chrome/browser/resources/chromeos/accessibility/select_to_speak/ui_manager_unittest.js
@@ -81,6 +81,16 @@ * Test fixture for ui_manager.js. */ SelectToSpeakUiManagerUnitTest = class extends SelectToSpeakE2ETest { + constructor() { + super(); + this.mockAccessibilityPrivate = MockAccessibilityPrivate; + chrome.accessibilityPrivate = this.mockAccessibilityPrivate; + + this.mockPrefsManager = null; + this.mockListener = null; + this.uiManager = null; + } + /** @override */ async setUpDeferred() { await super.setUpDeferred(); @@ -88,8 +98,6 @@ await importModule('PrefsManager', '/select_to_speak/prefs_manager.js'); await importModule('ParagraphUtils', '/select_to_speak/paragraph_utils.js'); - this.mockAccessibilityPrivate = MockAccessibilityPrivate; - chrome.accessibilityPrivate = this.mockAccessibilityPrivate; this.mockPrefsManager = new MockPrefsManager(); this.mockListener = new MockUiListener(); this.uiManager = new UiManager(this.mockPrefsManager, this.mockListener);
diff --git a/chrome/browser/resources/chromeos/accessibility/select_to_speak_manifest.json.jinja2 b/chrome/browser/resources/chromeos/accessibility/select_to_speak_manifest.json.jinja2 index 9c966ad7..d6d13f7 100644 --- a/chrome/browser/resources/chromeos/accessibility/select_to_speak_manifest.json.jinja2 +++ b/chrome/browser/resources/chromeos/accessibility/select_to_speak_manifest.json.jinja2
@@ -10,7 +10,7 @@ "incognito": "split", {% endif %} "background": { - "scripts": ["select_to_speak/selectToSpeakScript.js"] + "page": "select_to_speak/background.html" }, "permissions": [ "accessibilityPrivate",
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bg.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bg.xtb index f8f349d..33d6aad 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bg.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bg.xtb
@@ -511,6 +511,7 @@ <translation id="4300318234632215983">Съобщаване на URL адреса зад връзката</translation> <translation id="4322625298640984693">сиена</translation> <translation id="4342180618051828363">{COUNT,plural, =1{точка}=3{многоточие}other{# точки}}</translation> +<translation id="4352022650330571548">въвеждане на „<ph name="PHRASE" />“</translation> <translation id="4372435075475052704">минимум: <ph name="X" /></translation> <translation id="4372705107434148843">Спиране на говора</translation> <translation id="4376316291247992553">Преглед на графиката като брайлов текст</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bn.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bn.xtb index 85818f7f..cf69b0d 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bn.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bn.xtb
@@ -511,6 +511,7 @@ <translation id="4300318234632215983">একটি লিঙ্কের পিছনের URL ঘোষণা করুন</translation> <translation id="4322625298640984693">পোড়া লাল</translation> <translation id="4342180618051828363">{COUNT,plural, =1{বিন্দু}=3{এলিপসিস}one{#টি বিন্দু}other{# বিন্দু}}</translation> +<translation id="4352022650330571548"><ph name="PHRASE" /> টাইপ করুন</translation> <translation id="4372435075475052704">ন্যূনতম:<ph name="X" /></translation> <translation id="4372705107434148843">স্পিচ থামান</translation> <translation id="4376316291247992553">ব্রেইল হিসাবে গ্রাফিক দেখুন</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ca.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ca.xtb index dc682f87..2b20bce 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ca.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ca.xtb
@@ -511,6 +511,7 @@ <translation id="4300318234632215983">Presenta l'URL darrere d'un enllaç.</translation> <translation id="4322625298640984693">Siena</translation> <translation id="4342180618051828363">{COUNT,plural, =1{punt}=3{punts suspensius}other{# punts}}</translation> +<translation id="4352022650330571548">escriu "<ph name="PHRASE" />"</translation> <translation id="4372435075475052704">mín.: <ph name="X" /></translation> <translation id="4372705107434148843">Atura la veu</translation> <translation id="4376316291247992553">Mostra el gràfic com a braille</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_cy.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_cy.xtb index a8b1b9d1..2ede425 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_cy.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_cy.xtb
@@ -511,6 +511,7 @@ <translation id="4300318234632215983">Cyhoeddi'r URL y tu ôl i ddolen</translation> <translation id="4322625298640984693">Sienna</translation> <translation id="4342180618051828363">{COUNT,plural, =1{dot}=3{ellipsis}zero{# dot}two{# ddot}many{# dot}other{# dot}}</translation> +<translation id="4352022650330571548">math <ph name="PHRASE" /></translation> <translation id="4372435075475052704">lleiafswm:<ph name="X" /></translation> <translation id="4372705107434148843">Stopio lleferydd</translation> <translation id="4376316291247992553">Gweld Graffig Fel Braille</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_de.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_de.xtb index 834dcf4..7a68db0 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_de.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_de.xtb
@@ -511,6 +511,7 @@ <translation id="4300318234632215983">URL hinter einem Link ansagen</translation> <translation id="4322625298640984693">Ocker</translation> <translation id="4342180618051828363">{COUNT,plural, =1{Punkt}=3{Auslassungspunkte}other{# Punkte}}</translation> +<translation id="4352022650330571548">„<ph name="PHRASE" />“ eingeben</translation> <translation id="4372435075475052704">Mind.: <ph name="X" /></translation> <translation id="4372705107434148843">Sprachausgabe anhalten</translation> <translation id="4376316291247992553">Grafik als Braille anzeigen</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_et.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_et.xtb index fcd4715..524306b 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_et.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_et.xtb
@@ -511,6 +511,7 @@ <translation id="4300318234632215983">Esita liURL</translation> <translation id="4322625298640984693">Sieena</translation> <translation id="4342180618051828363">{COUNT,plural, =1{punkt}=3{ellips}other{# punkti}}</translation> +<translation id="4352022650330571548">sisesta <ph name="PHRASE" /></translation> <translation id="4372435075475052704">min: <ph name="X" /></translation> <translation id="4372705107434148843">Kõne lõpetam</translation> <translation id="4376316291247992553">Graafika kuvatakse punktkirjas</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_eu.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_eu.xtb index ba3b6fd3..a66b3b0 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_eu.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_eu.xtb
@@ -511,6 +511,7 @@ <translation id="4300318234632215983">Jakinarazi esteken URLak</translation> <translation id="4322625298640984693">Siena kolorekoa</translation> <translation id="4342180618051828363">{COUNT,plural, =1{puntu}=3{hiru puntu}other{# puntu}}</translation> +<translation id="4352022650330571548">idatzi <ph name="PHRASE" /></translation> <translation id="4372435075475052704">min:<ph name="X" /></translation> <translation id="4372705107434148843">Geldiarazi hizketa</translation> <translation id="4376316291247992553">Ikusi irudiak braillez</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fa.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fa.xtb index a3d83286..bcb985f 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fa.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fa.xtb
@@ -511,6 +511,7 @@ <translation id="4300318234632215983">اعلان نشانی وب پشت یک پیوند</translation> <translation id="4322625298640984693">قهوهای مایل به زرد</translation> <translation id="4342180618051828363">{COUNT,plural, =1{نقطه}=3{سه نقطه}one{# نقطه}other{# نقطه}}</translation> +<translation id="4352022650330571548"><ph name="PHRASE" /> را تایپ کنید</translation> <translation id="4372435075475052704">حداقل: <ph name="X" /></translation> <translation id="4372705107434148843">توقف گفتار</translation> <translation id="4376316291247992553">مشاهده گرافیک بهصورت خط بریل</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fi.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fi.xtb index 13a2665..feaa5d8 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fi.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fi.xtb
@@ -511,6 +511,7 @@ <translation id="4300318234632215983">Ilmoita linkin takana oleva URL-osoite</translation> <translation id="4322625298640984693">Siena</translation> <translation id="4342180618051828363">{COUNT,plural, =1{piste}=3{ellipsi}other{# pistettä}}</translation> +<translation id="4352022650330571548">kirjoita <ph name="PHRASE" /></translation> <translation id="4372435075475052704">vähintään <ph name="X" /></translation> <translation id="4372705107434148843">Lopeta puhe</translation> <translation id="4376316291247992553">Näytä kuva pistekirjoituksena.</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_gl.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_gl.xtb index d47176c..54aa099b 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_gl.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_gl.xtb
@@ -511,6 +511,7 @@ <translation id="4300318234632215983">Anuncia o URL asociado a unha ligazón</translation> <translation id="4322625298640984693">Siena</translation> <translation id="4342180618051828363">{COUNT,plural, =1{punto}=3{puntos suspensivos}other{# puntos}}</translation> +<translation id="4352022650330571548">escribe "<ph name="PHRASE" />"</translation> <translation id="4372435075475052704">mín.:<ph name="X" /></translation> <translation id="4372705107434148843">Deter voz</translation> <translation id="4376316291247992553">Permite ver o gráfico en formato braille</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_gu.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_gu.xtb index 0cf198d..dff931f 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_gu.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_gu.xtb
@@ -511,6 +511,7 @@ <translation id="4300318234632215983">લિંકની પાછળનાં URL ની ઘોષણા કરો</translation> <translation id="4322625298640984693">સિયેના</translation> <translation id="4342180618051828363">{COUNT,plural, =1{ટપકું }=3{પદલોપ}one{# ટપકાં}other{# ટપકાં}}</translation> +<translation id="4352022650330571548"><ph name="PHRASE" /> ટાઇપ કરો</translation> <translation id="4372435075475052704">ન્યૂનતમ: <ph name="X" /></translation> <translation id="4372705107434148843">ભાષણ રોકો</translation> <translation id="4376316291247992553">ગ્રાફિકને બ્રેઇલની જેમ જુઓ</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hi.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hi.xtb index 4baba34..8ac1a65c 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hi.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hi.xtb
@@ -511,6 +511,7 @@ <translation id="4300318234632215983">किसी लिंक के पीछे का URL प्रदर्शित करें</translation> <translation id="4322625298640984693">गेरुआ</translation> <translation id="4342180618051828363">{COUNT,plural, =1{बिंदु}=3{पदलोप चिह्न}one{# बिंदु}other{# बिंदु}}</translation> +<translation id="4352022650330571548"><ph name="PHRASE" /> टाइप करें</translation> <translation id="4372435075475052704">कम से कम:<ph name="X" /></translation> <translation id="4372705107434148843">बोली रोकें</translation> <translation id="4376316291247992553">ग्राफिक को ब्रेल के रूप में देखें</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hu.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hu.xtb index c798997..7967813 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hu.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hu.xtb
@@ -511,6 +511,7 @@ <translation id="4300318234632215983">Link URL-jének felolvasása</translation> <translation id="4322625298640984693">Vörösesbarna</translation> <translation id="4342180618051828363">{COUNT,plural, =1{pont}=3{három pont}other{# pont}}</translation> +<translation id="4352022650330571548"><ph name="PHRASE" /> gépelése</translation> <translation id="4372435075475052704">min.: <ph name="X" /></translation> <translation id="4372705107434148843">Beszéd leállítása</translation> <translation id="4376316291247992553">Kép megtekintése Braille-formátumban</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hy.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hy.xtb index 0146dd9..1f7a41c 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hy.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hy.xtb
@@ -511,6 +511,7 @@ <translation id="4300318234632215983">Հնչեցնել URL-ը հղումից հետո</translation> <translation id="4322625298640984693">Դարչնագույն</translation> <translation id="4342180618051828363">{COUNT,plural, =1{կետ}=3{բազմակետ}one{# կետ}other{# կետ}}</translation> +<translation id="4352022650330571548">մուտքագրել «<ph name="PHRASE" />»</translation> <translation id="4372435075475052704">min:<ph name="X" /></translation> <translation id="4372705107434148843">Անջատել հնչյունավորումը</translation> <translation id="4376316291247992553">Փոխարկել գրաֆիկական տարրերը բրայլյան գրի</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_id.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_id.xtb index 2b1b9225..a7ca9ce 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_id.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_id.xtb
@@ -511,6 +511,7 @@ <translation id="4300318234632215983">Mengumumkan URL di belakang link</translation> <translation id="4322625298640984693">Sienna</translation> <translation id="4342180618051828363">{COUNT,plural, =1{titik}=3{tiga titik}other{# titik}}</translation> +<translation id="4352022650330571548">ketik <ph name="PHRASE" /></translation> <translation id="4372435075475052704">min:<ph name="X" /></translation> <translation id="4372705107434148843">Hentikan ucapan</translation> <translation id="4376316291247992553">Melihat Grafik Sebagai Braille</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ja.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ja.xtb index 6cab55510..8dc028a6 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ja.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ja.xtb
@@ -511,6 +511,7 @@ <translation id="4300318234632215983">リンクの URL を読み上げる</translation> <translation id="4322625298640984693">シエンナ</translation> <translation id="4342180618051828363">{COUNT,plural, =1{ドット}=3{三点リーダー}other{# 個のドット}}</translation> +<translation id="4352022650330571548"><ph name="PHRASE" /> を入力</translation> <translation id="4372435075475052704">最小: <ph name="X" /></translation> <translation id="4372705107434148843">読み上げの停止</translation> <translation id="4376316291247992553">画像を点字パターンで表示します</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_km.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_km.xtb index 26ccdd58..7ac4d91 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_km.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_km.xtb
@@ -511,6 +511,7 @@ <translation id="4300318234632215983">ប្រកាស URL ដែលនៅក្រោយតំណ</translation> <translation id="4322625298640984693">ត្នោតចាស់</translation> <translation id="4342180618051828363">{COUNT,plural, =1{ចំណុច}=3{សញ្ញាអ៊ីលីបស៊ីស}other{# ចំណុច}}</translation> +<translation id="4352022650330571548">វាយបញ្ចូល <ph name="PHRASE" /></translation> <translation id="4372435075475052704">នាទី៖<ph name="X" /></translation> <translation id="4372705107434148843">បញ្ឈប់ការនិយាយ</translation> <translation id="4376316291247992553">មើលក្រាហ្វិកជាទម្រង់ប្រែល</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ko.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ko.xtb index eb8818e..7a30168 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ko.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ko.xtb
@@ -511,6 +511,7 @@ <translation id="4300318234632215983">링크 이면의 URL 알림</translation> <translation id="4322625298640984693">시에나</translation> <translation id="4342180618051828363">{COUNT,plural, =1{마침표}=3{생략 부호}other{마침표 #개}}</translation> +<translation id="4352022650330571548"><ph name="PHRASE" /> 입력</translation> <translation id="4372435075475052704">최소:<ph name="X" /></translation> <translation id="4372705107434148843">음성 중지</translation> <translation id="4376316291247992553">그래픽을 점자로 인식하기</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ky.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ky.xtb index 834b7f19..10f4929 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ky.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ky.xtb
@@ -511,6 +511,7 @@ <translation id="4300318234632215983">Шилтеменин артындагы URL'ди жарыялоо</translation> <translation id="4322625298640984693">Охра</translation> <translation id="4342180618051828363">{COUNT,plural, =1{чекит}=3{көп чекит}other{# чекит}}</translation> +<translation id="4352022650330571548"><ph name="PHRASE" /> деп териңиз</translation> <translation id="4372435075475052704">миним.:<ph name="X" /></translation> <translation id="4372705107434148843">Кепти токтотуу</translation> <translation id="4376316291247992553">Диаграмманы Брайль арибинде көрүү</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lt.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lt.xtb index f88c97ca..63250a3 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lt.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lt.xtb
@@ -511,6 +511,7 @@ <translation id="4300318234632215983">Pranešti apie nuorodos URL</translation> <translation id="4322625298640984693">Ochros spalva</translation> <translation id="4342180618051828363">{COUNT,plural, =1{taškas}=3{daugtaškis}one{# taškas}few{# taškai}many{# dots}other{# taškų}}</translation> +<translation id="4352022650330571548">įvesti tekstą „<ph name="PHRASE" />“</translation> <translation id="4372435075475052704">min. <ph name="X" /></translation> <translation id="4372705107434148843">Sustabdyti kalbą</translation> <translation id="4376316291247992553">Peržiūrėkite diagramą kaip brailio rašmenis</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lv.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lv.xtb index a27a263..9a9e64b 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lv.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lv.xtb
@@ -511,6 +511,7 @@ <translation id="4300318234632215983">Paziņot par saites URL</translation> <translation id="4322625298640984693">Sarkanbrūna</translation> <translation id="4342180618051828363">{COUNT,plural, =1{punkts}=3{daudzpunkte}zero{# punktu}one{# punkts}other{# punkti}}</translation> +<translation id="4352022650330571548">rakstīt “<ph name="PHRASE" />”</translation> <translation id="4372435075475052704">min.: <ph name="X" /></translation> <translation id="4372705107434148843">Apturēt runas izvadi</translation> <translation id="4376316291247992553">Skatīt grafiku Braila rakstā</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mr.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mr.xtb index 34a1639b..ebc2dda 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mr.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mr.xtb
@@ -511,6 +511,7 @@ <translation id="4300318234632215983">लिंकमागील URL घोषित करा</translation> <translation id="4322625298640984693">लालसर तपकिरी</translation> <translation id="4342180618051828363">{COUNT,plural, =1{टिंब}=3{पदलोप}other{# टिंब}}</translation> +<translation id="4352022650330571548"><ph name="PHRASE" /> असे टाइप कर</translation> <translation id="4372435075475052704">किमान:<ph name="X" /></translation> <translation id="4372705107434148843">भाषण थांबवा</translation> <translation id="4376316291247992553">ग्राफिक ब्रेल म्हणून पहा</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ne.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ne.xtb index 7001df6..a8817db6 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ne.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ne.xtb
@@ -511,6 +511,7 @@ <translation id="4300318234632215983">लिंक पछि URL घोषणा गर्नुहोस्</translation> <translation id="4322625298640984693">सिएना</translation> <translation id="4342180618051828363">{COUNT,plural, =1{ डट}=3{ इलिप्सिस}other{ # डटहरू}}</translation> +<translation id="4352022650330571548"><ph name="PHRASE" /> टाइप गरियोस्</translation> <translation id="4372435075475052704">मिनेट:<ph name="X" /></translation> <translation id="4372705107434148843">बोली रोक्नुहोस्</translation> <translation id="4376316291247992553">ग्राफिकलाई ब्रेलको रूपमा हेर्नुहोस्</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sv.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sv.xtb index cce03b9..242f5c2 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sv.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sv.xtb
@@ -511,6 +511,7 @@ <translation id="4300318234632215983">Läs upp webbadressen bakom en länk</translation> <translation id="4322625298640984693">Siennabrun</translation> <translation id="4342180618051828363">{COUNT,plural, =1{punkt}=3{tre punkter}other{# punkter}}</translation> +<translation id="4352022650330571548">skriv <ph name="PHRASE" /></translation> <translation id="4372435075475052704">min: <ph name="X" /></translation> <translation id="4372705107434148843">Stoppa tal</translation> <translation id="4376316291247992553">Visa bild som punktskrift</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sw.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sw.xtb index 75828c3..85d94c29 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sw.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sw.xtb
@@ -511,6 +511,7 @@ <translation id="4300318234632215983">Tangaza URL nyuma ya kiungo</translation> <translation id="4322625298640984693">Hudhurungi Iliyokolea</translation> <translation id="4342180618051828363">{COUNT,plural, =1{kitone}=3{vitone}other{vitone #}}</translation> +<translation id="4352022650330571548">andika <ph name="PHRASE" /></translation> <translation id="4372435075475052704">kiwango cha chini:<ph name="X" /></translation> <translation id="4372705107434148843">Achisha usemi</translation> <translation id="4376316291247992553">Angalia Michoro Kama Breli</translation>
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 ab3954c..e06a5b6a 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_te.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_te.xtb
@@ -512,6 +512,7 @@ <translation id="4300318234632215983">లింక్ వెనుక URLను తెలియజేయండి</translation> <translation id="4322625298640984693">ఎర్రని గోధుమ రంగు</translation> <translation id="4342180618051828363">{COUNT,plural, =1{చుక్క}=3{మూడు చుక్కలు}other{# చుక్కలు}}</translation> +<translation id="4352022650330571548"><ph name="PHRASE" /> అని టైప్ చేయండి</translation> <translation id="4372435075475052704">కనిష్టం:<ph name="X" /></translation> <translation id="4372705107434148843">ప్రసంగాన్ని ఆపివేయండి</translation> <translation id="4376316291247992553">గ్రాఫిక్ను బ్రెయిలీ లాగా చూడండి</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_tr.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_tr.xtb index 6ad5efdf..c84a423 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_tr.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_tr.xtb
@@ -511,6 +511,7 @@ <translation id="4300318234632215983">Bir bağlantının arkasındaki URL'yi söyle</translation> <translation id="4322625298640984693">Koyu Kahverengi</translation> <translation id="4342180618051828363">{COUNT,plural, =1{nokta}=3{üç nokta}other{# nokta}}</translation> +<translation id="4352022650330571548"><ph name="PHRASE" /> yaz</translation> <translation id="4372435075475052704">en az:<ph name="X" /></translation> <translation id="4372705107434148843">Konuşmayı durdur</translation> <translation id="4376316291247992553">Grafiği Braille Olarak Göster</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_uk.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_uk.xtb index 7af08c5..169fbc8 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_uk.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_uk.xtb
@@ -511,6 +511,7 @@ <translation id="4300318234632215983">Повідомити URL-адресу посилання</translation> <translation id="4322625298640984693">Охра</translation> <translation id="4342180618051828363">{COUNT,plural, =1{крапка}=3{трикрапка}one{# крапка}few{# крапки}many{# крапок}other{# dots}}</translation> +<translation id="4352022650330571548">ввести "<ph name="PHRASE" />"</translation> <translation id="4372435075475052704">мін.: <ph name="X" /></translation> <translation id="4372705107434148843">Припинити мовлення</translation> <translation id="4376316291247992553">Перегляд графіки за допомогою шрифту Брайля</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ur.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ur.xtb index 21573e7..ea6cd6f 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ur.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ur.xtb
@@ -512,6 +512,7 @@ <translation id="4300318234632215983">لنک کے پیچھے URL کا اعلان کریں</translation> <translation id="4322625298640984693">زردی مائل بھورا</translation> <translation id="4342180618051828363">{COUNT,plural, =1{ڈاٹ}=3{ایلپسیس}other{# ڈاٹس}}</translation> +<translation id="4352022650330571548"><ph name="PHRASE" /> ٹائپ کریں</translation> <translation id="4372435075475052704">کم از کم:<ph name="X" /></translation> <translation id="4372705107434148843">اسپیچ کو روکیں</translation> <translation id="4376316291247992553">گرافک کو بریل کے طور پر دیکھیں</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zu.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zu.xtb index 2293cdf..d4c74e4 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zu.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zu.xtb
@@ -511,6 +511,7 @@ <translation id="4300318234632215983">Memezela i-URL engemuva kwesixhumanisi</translation> <translation id="4322625298640984693">I-Sienna</translation> <translation id="4342180618051828363">{COUNT,plural, =1{ichashazi}=3{kusaqhubeka}one{# amachashazi}other{# amachashazi}}</translation> +<translation id="4352022650330571548">thayipha <ph name="PHRASE" /></translation> <translation id="4372435075475052704">ncane:<ph name="X" /></translation> <translation id="4372705107434148843">Misa inkulumo</translation> <translation id="4376316291247992553">Buka izithombe njenge-Braille</translation>
diff --git a/chrome/browser/resources/settings/autofill_page/password_list_item.html b/chrome/browser/resources/settings/autofill_page/password_list_item.html index 92e77a0b..3c7cbf57 100644 --- a/chrome/browser/resources/settings/autofill_page/password_list_item.html +++ b/chrome/browser/resources/settings/autofill_page/password_list_item.html
@@ -64,11 +64,11 @@ <span>[[entry.urls.shown]]</span> </span> </div> - <input id="username" class="username-column password-field" - aria-label="$i18n{editPasswordUsernameLabel}" - disabled$="[[shouldShowSubpageButton_]]" - readonly value="[[entry.username]]" title="[[entry.username]]" - focus-row-control focus-type="username"> + <div id="username" class="username-column no-min-width"> + <span class="text-elide"> + [[entry.username]] + </span> + </div> <div class="password-column"> <template is="dom-if" if="[[!entry.federationText]]"> <input id="password" aria-label=$i18n{editPasswordPasswordLabel}
diff --git a/chrome/browser/resources/settings/autofill_page/passwords_shared.css b/chrome/browser/resources/settings/autofill_page/passwords_shared.css index 0fd5da9..0f57d0aa7 100644 --- a/chrome/browser/resources/settings/autofill_page/passwords_shared.css +++ b/chrome/browser/resources/settings/autofill_page/passwords_shared.css
@@ -27,6 +27,7 @@ } .username-column { + display: flex; flex: 1; margin: 0 8px; }
diff --git a/chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.cc b/chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.cc index 1ade739c..af8f4a8 100644 --- a/chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.cc +++ b/chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.cc
@@ -5,6 +5,8 @@ #include "chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.h" #include "base/command_line.h" +#include "base/rand_util.h" +#include "base/strings/string_number_conversions.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/enterprise/connectors/analysis/analysis_settings.h" #include "chrome/browser/enterprise/connectors/common.h" @@ -132,6 +134,13 @@ content_analysis_request_.mutable_request_data()->set_content_type(type); } +std::string BinaryUploadService::Request::SetRandomRequestToken() { + std::string token = base::RandBytesAsString(128); + token = base::HexEncode(token.data(), token.size()); + set_request_token(token); + return token; +} + enterprise_connectors::AnalysisConnector BinaryUploadService::Request::analysis_connector() { return content_analysis_request_.analysis_connector();
diff --git a/chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.h b/chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.h index 8507448..ef2488a 100644 --- a/chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.h +++ b/chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.h
@@ -125,6 +125,11 @@ return content_analysis_request_; } + const enterprise_connectors::CloudOrLocalAnalysisSettings& + cloud_or_local_settings() const { + return cloud_or_local_settings_; + } + void set_tab_url(const GURL& tab_url); const GURL& tab_url() const; @@ -147,6 +152,8 @@ void set_client_metadata(enterprise_connectors::ClientMetadata metadata); void set_content_type(const std::string& type); + std::string SetRandomRequestToken(); + // Methods for accessing the ContentAnalysisRequest. enterprise_connectors::AnalysisConnector analysis_connector(); const std::string& device_token() const;
diff --git a/chrome/browser/safe_browsing/cloud_content_scanning/cloud_binary_upload_service.cc b/chrome/browser/safe_browsing/cloud_content_scanning/cloud_binary_upload_service.cc index b896d41..1088e6e 100644 --- a/chrome/browser/safe_browsing/cloud_content_scanning/cloud_binary_upload_service.cc +++ b/chrome/browser/safe_browsing/cloud_content_scanning/cloud_binary_upload_service.cc
@@ -7,7 +7,6 @@ #include "base/base64.h" #include "base/command_line.h" #include "base/metrics/histogram_functions.h" -#include "base/rand_util.h" #include "chrome/browser/enterprise/util/affiliation.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/safe_browsing/advanced_protection_status_manager.h" @@ -273,10 +272,8 @@ active_requests_[raw_request] = std::move(request); start_times_[raw_request] = base::TimeTicks::Now(); - std::string token = base::RandBytesAsString(128); - token = base::HexEncode(token.data(), token.size()); + std::string token = raw_request->SetRandomRequestToken(); active_tokens_[raw_request] = token; - raw_request->set_request_token(token); if ((!binary_fcm_service_ || !binary_fcm_service_->Connected()) && !is_auth_request) {
diff --git a/chrome/browser/share/core/resources/share_targets.asciipb b/chrome/browser/share/core/resources/share_targets.asciipb index 7206e1c..ecd863a1 100644 --- a/chrome/browser/share/core/resources/share_targets.asciipb +++ b/chrome/browser/share/core/resources/share_targets.asciipb
@@ -8,7 +8,7 @@ ## ## Top level settings ## -version_id: 13 +version_id: 14 ## ## Share Targets @@ -886,12 +886,91 @@ "Qfz5ZKDIf72pT8T9LYCGAAAAAElFTkSuQmCC" } +targets { + nickname: "Collections" + url: "https://google.com/save/add-link?itemUrl=%(escaped_url)&itemTitle=%(escaped_title)" + icon: + "iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAABwklEQVR42pWPT0gV" + "QRzHf2Jb4MVLSIi3SjxE4M4Mkgr7dvYhXvf9OXnQg4fyKnTxuPu0U9DN6BAUPjch" + "hDQhfaB0yYPin5NCYvYH90+9h7tr8DCddqB9zpNN6gNfBn4zn/nOgAhTlCuORgZd" + "Db+zNVy2NXIWpeJSVHIoGeL7kITXhzpclWy7GmF/D95yVPlmgoi+iwdtDX11Kf7g" + "qOTgfEZ2vHRna91TxUZbRbuehlIg4KaxYlM87yjkBohUZ5uGKsPtx1x00vKXbwq6" + "Dv9KtSQtnZQkFphtzBu8cx/+h+qSVOZydVH6ydZAAgFaCEZpwf+UGDMwIJLOuHxS" + "atyDC6iFwKSFkCXGDF/XN8/A1XrZf0BNfy1Oygh3Y1k1wpfwY7FplcvP33T86rX0" + "PFxCyvRHhOYxeP+27eHobA/DVpbhon5w94XekiSmH5WbqRHs15onjhHkZ/KNqJjd" + "5PKffJSns33AoCEWyavcve4nc+u1ViNcgZiuqcztqNXl8nkynjyd2ZCL+mE86346" + "yei4X9HGj9qBI17AD9fkhJCp/OfeZ497IAn+BWLlBmQrs8CbsaWfRms5WpexlRu5" + "tdB/DQR+A0YjRBx8M61wAAAAAElFTkSuQmCC" + icon_2x: + "iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAMAAAAM7l6QAAAAIGNIUk0AAHomAACA" + "hAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAHjUExURQAAAN8/P+hDM+pC" + "NOlBNepBM+hBM+hBNehDNOhDNelCM+lCM+I4OPA8POpCNehDNepDNOtDNepDNepE" + "Nf8/P+lCNepDNOpCNOlCNehDNehDM+pCNOpCM+hCNO1GNP9VVek/NelBNOxINupC" + "NepDNehENepENOhDM/WZEetNL+pDNOhCN+dFLv+qAPm8BepBNOw/Nvu7Bvu8BetS" + "LP9/APu8Bfu5BUKD9EWD9/u8A0GG9Pm8Bfe9B0GG9Pe/B0GE9Pu9A0OD8/u6Bei5" + "C0CD8kOD8/u7BUGoTAD/AEh/7D2E9Pu8BjKnUkKE9EGF8vS6CDSmUTipVDiN/kKF" + "9EKE86i0JTSnUi6iUVWq/0GF9EKF8jqwTjKoUzSmUTKmUTKjUT+J1kCF8zSoUjKm" + "UzWoVDSnTzCpVDKoUjSnUjSmUzWkXEKD8kSD8jSnUzSoUTKmUUCF9FWqVTOnUUKF" + "8j9//zOoUjSgcTWpUzSoUzSmUTOnUgB/fzOqVTOnUzSmUjKnUCqqVTKnUzSoUzSm" + "UzSoUTKnUzKnUjOoUzWnUjWuUOpDNfmzCe9lJ/u8BfJ/HepENfaZE0KF9L+2HPm8" + "BpOyLTWoUzSoU+q7DGitPkqrSz6PxDSoVDuXoUGF8ziefkGI6P///4wdFNIAAACK" + "dFJOUwAIT5bK7Pz97s2aVAkRhu+IW+tWBI6vcJn++1i8XB0DGLMO6uBDP+OA99EX" + "Cwbs6RxPlesCyoDEIUFK/SNdJGJCV8mI/ECU3QEOGU1aYOLy6hsJ3JqW0hYDqD0N" + "6OFCGb3JU7tbHRVHmPX+/jyS/fyPA6m4BJS9Vun5ewIPgKEjBkyTx/rsz59gE8KO" + "os0AAAABYktHRKBe076gAAAACXBIWXMAAAsTAAALEwEAmpwYAAABW0lEQVQoz3XS" + "ZVPDMACA4SCDsTHc3Z3h7j58DHd3GUOHuxUKDAkOf5U2bdqGlvdLkzy95NIrADg7" + "ewdHlZOz2kWjdQV/07mpKSF3Dx2pniqKyMtbgj4aSpavqH5ypfwFDhAXA4NkGowt" + "JDQsHERoIwmNiuYwJhavxMWLChISkSYli0sp4jBVf33DaFo6UCyDpunbOypUWUEm" + "w/R9VvY/nMMynYuneUT5QI+4ALONqBAUIS5W5hKeS5W5jN+8XJkrQCXiKszVfBzX" + "gFpWH+oM5H3qOW8AjTT9+PQMm0huRtrCfNTWl1cIobFNqqZ2xB3MsPMNsnV1i9rT" + "yx3dx4z7BxDDwSGswyOcjqLZGOQbn5g0gKnpmdm5d1bnF7i3F6HQkhk9Pj6/bLZl" + "fjPLCpT1/bO6hg+zrMt9wyS5yaaVxK3tHeI77O4ZJbh/IPsvDo+OT6yn5rPzi8sr" + "YfEXQw73fK0AFkEAAAAASUVORK5CYII=" + icon_3x: + "iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAGKElEQVR42uWYa2wU" + "VRTHr2y7UG0EFBAU8QMVBeTRnZm1ILKdHVuLEOjsdMNDwIQQiBpDMCFINKyxu4BC" + "1Q+Ggg9Iqt3ZbXkICEgXKIkIwRrw/aGGGBOs+6DQbqdAn9dzUyY2G7b07uxjJvyT" + "f3b3w869vznn3nPuRanS1RLrg2GeeSkscO+EeM4XErgLQYG5Ar/bgjzTHeS5nrDA" + "3AjauSb4fhG+HwgJrBt+i/8WzRqDjKAmPv8JmPSGsJ09T6AADifioMD1hu3MJXiO" + "K2TLz9MdKESvBCZ5rC9qHE624SWejvDsQozQfRkFDdqZInADFYAWQ9RDvLU47aBX" + "bdbxYYE9qA1ACzi3P2TjxqYpfa0rIXVbMgWrOsQzzUG7tTRloH/ZbMNgLX1OBtOX" + "2fexCw1JKmzLnDkjIY3OkgF06tqkwZKaGBKY33UJqpYwgV2VFNgrAvcwRPbXewIW" + "O6eYwzz3nWFh6Wss90VKJgodGLg1KLDXoNXs0gVsiGdXJA+S+Q2WxRbSV5P63X9H" + "JZ0TqafBFzgB2sjNpIlJOyyZFImAtihyPdBueiP8swz1JslzU0l2kUxIOSwRRONr" + "LbDk4BAq4mZqrw7sM+SElVLYCG+1a9lEYILvYqfThJIkbLNlwTM/IhmTdFiiaysn" + "f59Ym8d1QBcmIQrRRhslW10BU0lXwIyjb0+ggu3baa3zkdHUcTL7eNfJbEzcvnMU" + "jsyzDAo4IrBrDAeLA8MmAHAPgVXdUZuLm5dMGziV7Ww1MqI6T2ZtJJCx7vx2KG5d" + "lxfvTBomhwpDAgPceTCOZ2X7OBwuYmOvXV4zJCyuRyPUdB7It6qG46ulMwksgY80" + "luQNNWZ060zzCdBg3HE4B19f/TRuXjx1DwIZdf26CAyNlcrRM5BG8Z42dzotbGmd" + "pAL76YBNjSgJsnsUnE7znuirtxuO7B+pgAOmPcYDBruj29UI/0MD3BnIWm9EYLAX" + "EXXUZd+gi7BZMmiET6jAvZRruMiIwIXlbefuLWB39AfKlFZtLjPmGm47n+im9aYx" + "U1o5rfbRDZRlaa8xNy1lP23joQL/aVDgnSrwZhrgW3DQkL95crJW4MLyaLcW03da" + "ylu3U9o0b7CwobpcvHa/DbM+x3sog3K58JBCj9JKF+F28fZtBxoOx8Puu8FePP4I" + "nlezAGAl4qa8YyUZOx7yW9sZ6giXt0zsfwFwbiDY6iNP4QK/SED/t1d6PWPAnrZt" + "lMAR1F9QajbcCTQayMGbDhaokDHAYrjAX/ZQumELKnpz7OVKmCq6bqUW9Vdvfc74" + "2FuPyydG4rLaYgIX1xavQ043MOy2GxPYoVejWHUEso+qsCeOTsBz/YvigWYstck6" + "hJ5YoYElO/ocT3Q0ilXXKVPxzTpzb8WhmXHg4kVZ7GZ8jtJUw9pcoVy7J3qJusPy" + "RI+heFq9b+4FAkFvsZP1lS1JFewCF74fJn8qsUND+yIUT4wsFVKAxqZ2L0TaY6u3" + "ZSUTtrj8xuMQ2YbErnWURlKz0UCyyNK+hKHBjE9sgIhzWkGdNU4T4ytbO3vnriCU" + "IZwQ8BZlBbqbLF+K46DktKgAiUdbOgARf44WdHrV8gdYv7QKnvOH+ryCPZsxvy1I" + "B+uOXlSje1cxfmmpOphWA3gjfFZwXlG0yKUTmd1rsvv1iEOmV4ljyIuBzHiDvCTI" + "DuVOz7F+tQbbdvw82I2qhy9vnY1oBIPvpgCjzYB2yKI2gOuh+R8nL8bPf3J4MHX3" + "Q0QrEgmYUD0ZSG+e9VkF5rc2xwGONjhd2IwS0bTqZSMZr/STHqGtVetw4QeXY2Gb" + "bNvaxyMtYqqXjmJlxy96hOa8L+O5H59Rga/DvdV0lAwxNc7hFtlxRo/QxAWVn16G" + "dWtBydSUGqcZIl2pN1hSBTi5dBJKlSDSy1hZuq4T4FqSfSjVyvcufJQMljlQRwSa" + "k+Uo3SK9NyM7zqUL1OITb0J27ZhxcNEIlElxsiRYfNIhclRMDagUhE83V+Mci/Qk" + "uPJ5DOr2euikzlq8UpdWSNiQ9sJLnK+2o7oW7Oq5Fp/jRVhvm1hZ9JLUh3byb0jL" + "1r6XIfaQFhPgmvqaG8cR0nNb/NIr+XLpZJQi/QcZ/3jdGfAXPAAAAABJRU5ErkJg" + "gg==" +} + ## Temporary versions of the sharing targets per locale. locale_mapping { locale_keys: "US" locale_keys: "CA" targets: "Email" + targets: "Collections" targets: "Facebook" targets: "Twitter" targets: "Reddit"
diff --git a/chrome/browser/share/share_features.cc b/chrome/browser/share/share_features.cc index 1a98f0d..68a146a7 100644 --- a/chrome/browser/share/share_features.cc +++ b/chrome/browser/share/share_features.cc
@@ -16,6 +16,8 @@ "SharingDesktopScreenshotsEdit", base::FEATURE_DISABLED_BY_DEFAULT}; const base::Feature kUpcomingSharingFeatures{"UpcomingSharingFeatures", base::FEATURE_DISABLED_BY_DEFAULT}; +const base::Feature kShareToGoogleCollections{ + "ShareToGoogleCollections", base::FEATURE_DISABLED_BY_DEFAULT}; #if !BUILDFLAG(IS_ANDROID) const base::Feature kDesktopSharePreview{"DesktopSharePreview",
diff --git a/chrome/browser/share/share_features.h b/chrome/browser/share/share_features.h index 153faca5..61969f09 100644 --- a/chrome/browser/share/share_features.h +++ b/chrome/browser/share/share_features.h
@@ -16,6 +16,7 @@ extern const base::Feature kScreenshotsForAndroidV2; extern const base::Feature kSharingDesktopScreenshotsEdit; extern const base::Feature kUpcomingSharingFeatures; +extern const base::Feature kShareToGoogleCollections; #if !BUILDFLAG(IS_ANDROID) extern const base::Feature kDesktopSharePreview;
diff --git a/chrome/browser/sharing_hub/sharing_hub_model.cc b/chrome/browser/sharing_hub/sharing_hub_model.cc index ec8e437..ef013fc 100644 --- a/chrome/browser/sharing_hub/sharing_hub_model.cc +++ b/chrome/browser/sharing_hub/sharing_hub_model.cc
@@ -18,6 +18,7 @@ #include "chrome/browser/send_tab_to_self/send_tab_to_self_util.h" #include "chrome/browser/share/core/share_targets.h" #include "chrome/browser/share/proto/share_target.pb.h" +#include "chrome/browser/share/share_features.h" #include "chrome/browser/sharing_hub/sharing_hub_features.h" #include "chrome/browser/shell_integration.h" #include "chrome/browser/ui/browser_commands.h" @@ -44,6 +45,7 @@ const char kUrlReplace[] = "%(escaped_url)"; const char kTitleReplace[] = "%(escaped_title)"; +const char kCollectionsNickname[] = "Collections"; gfx::Image DecodeIcon(std::string str) { std::string icon_str; @@ -62,6 +64,10 @@ #endif } +bool IsShareToGoogleCollectionsEnabled() { + return base::FeatureList::IsEnabled(share::kShareToGoogleCollections); +} + } // namespace SharingHubAction::SharingHubAction(int command_id, @@ -255,6 +261,11 @@ continue; } + if (target.nickname() == kCollectionsNickname && + !IsShareToGoogleCollectionsEnabled()) { + continue; + } + if (!target.icon().empty()) { gfx::Image icon = DecodeIcon(target.icon()); gfx::ImageSkia icon_skia = icon.AsImageSkia();
diff --git a/chrome/browser/supervised_user/android/java/res/layout/website_approval_bottom_sheet.xml b/chrome/browser/supervised_user/android/java/res/layout/website_approval_bottom_sheet.xml index b1690615..6509d389 100644 --- a/chrome/browser/supervised_user/android/java/res/layout/website_approval_bottom_sheet.xml +++ b/chrome/browser/supervised_user/android/java/res/layout/website_approval_bottom_sheet.xml
@@ -3,6 +3,11 @@ Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. --> +<!-- This UI should not apply dynamic colors (it should only respect the + dark/light mode of the android device). This happens for UI consistency + reasons as this screen is displayed after a GMSCore bottom sheet which + doesn't support dynamic colors. --> + <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" @@ -53,6 +58,7 @@ android:layout_height="wrap_content" android:layout_marginStart="@dimen/website_approval_horizontal_margin" android:layout_marginEnd="@dimen/website_approval_horizontal_margin" + android:backgroundTint="@color/default_bg_color_secondary" style="@style/MaterialCardStyle"> <LinearLayout @@ -106,7 +112,7 @@ </org.chromium.components.browser_ui.widget.MaterialCardViewNoShadow> <!-- The approve button --> - <org.chromium.ui.widget.ButtonCompat + <org.chromium.ui.widget.ButtonCompat android:id="@+id/approve_button" android:layout_width="match_parent" android:layout_height="wrap_content" @@ -119,6 +125,8 @@ android:ellipsize="end" android:singleLine="true" android:text="@string/parent_website_approval_approve_button" + app:buttonColor="@color/filled_button_bg" + app:buttonTextColor="@color/default_text_color_on_accent1_baseline_list" style="@style/FilledButton.Flat"/> <!-- The deny button button --> @@ -135,6 +143,7 @@ android:ellipsize="end" android:singleLine="true" android:text="@string/parent_website_approval_deny_button" + app:buttonTextColor="@color/default_text_color_blue_baseline" style="@style/TextButton"/> -</LinearLayout> \ No newline at end of file +</LinearLayout>
diff --git a/chrome/browser/supervised_user/child_accounts/child_account_service.cc b/chrome/browser/supervised_user/child_accounts/child_account_service.cc index 79d7778..baff75e 100644 --- a/chrome/browser/supervised_user/child_accounts/child_account_service.cc +++ b/chrome/browser/supervised_user/child_accounts/child_account_service.cc
@@ -257,15 +257,17 @@ parent_found = true; SetSecondCustodianPrefs(member); } - if (hoh_found && parent_found) + if (hoh_found && parent_found) { break; + } } if (!hoh_found) { - DLOG(WARNING) << "GetFamilyMembers didn't return a HOH?!"; + DLOG(WARNING) << "GetFamilyMembers didn't return a HOH."; ClearFirstCustodianPrefs(); } - if (!parent_found) + if (!parent_found) { ClearSecondCustodianPrefs(); + } family_fetcher_.reset(); family_fetch_backoff_.InformOfRequest(true); @@ -356,6 +358,8 @@ void ChildAccountService::ClearFirstCustodianPrefs() { profile_->GetPrefs()->ClearPref(prefs::kSupervisedUserCustodianName); profile_->GetPrefs()->ClearPref(prefs::kSupervisedUserCustodianEmail); + profile_->GetPrefs()->ClearPref( + prefs::kSupervisedUserCustodianObfuscatedGaiaId); profile_->GetPrefs()->ClearPref(prefs::kSupervisedUserCustodianProfileURL); profile_->GetPrefs()->ClearPref( prefs::kSupervisedUserCustodianProfileImageURL); @@ -365,6 +369,8 @@ profile_->GetPrefs()->ClearPref(prefs::kSupervisedUserSecondCustodianName); profile_->GetPrefs()->ClearPref(prefs::kSupervisedUserSecondCustodianEmail); profile_->GetPrefs()->ClearPref( + prefs::kSupervisedUserSecondCustodianObfuscatedGaiaId); + profile_->GetPrefs()->ClearPref( prefs::kSupervisedUserSecondCustodianProfileURL); profile_->GetPrefs()->ClearPref( prefs::kSupervisedUserSecondCustodianProfileImageURL);
diff --git a/chrome/browser/supervised_user/child_accounts/child_account_service_unittest.cc b/chrome/browser/supervised_user/child_accounts/child_account_service_unittest.cc index 08be047..a3b9da2 100644 --- a/chrome/browser/supervised_user/child_accounts/child_account_service_unittest.cc +++ b/chrome/browser/supervised_user/child_accounts/child_account_service_unittest.cc
@@ -8,6 +8,7 @@ #include "base/bind.h" #include "base/memory/raw_ptr.h" +#include "base/strings/string_piece.h" #include "chrome/browser/signin/chrome_signin_client_factory.h" #include "chrome/browser/signin/identity_test_environment_profile_adaptor.h" #include "chrome/browser/supervised_user/child_accounts/child_account_service_factory.h" @@ -21,10 +22,16 @@ #include "components/signin/public/identity_manager/identity_test_environment.h" #include "content/public/test/browser_task_environment.h" #include "content/public/test/test_utils.h" +#include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" +#include "chrome/browser/supervised_user/supervised_user_constants.h" + namespace { +using ::testing::IsEmpty; +using ::testing::Not; + std::unique_ptr<KeyedService> BuildTestSigninClient( content::BrowserContext* context) { Profile* profile = Profile::FromBrowserContext(context); @@ -139,8 +146,8 @@ "http://profile.url/homer/image")); members.push_back(FamilyInfoFetcher::FamilyMember( "anotherObfuscatedGaiaId", FamilyInfoFetcher::PARENT, "Marge Simpson", - /*profile_image_url=*/std::string(), "http://profile.url/marge", - /*email=*/std::string())); + /*email=*/std::string(), "http://profile.url/marge", + /*profile_image_url=*/std::string())); OnGetFamilyMembersSuccess(members); @@ -149,3 +156,28 @@ EXPECT_EQ("Marge Simpson", profile_->GetPrefs()->GetString( prefs::kSupervisedUserSecondCustodianName)); } + +TEST_F(ChildAccountServiceTest, FieldsAreClearedForNonChildAccounts) { + std::vector<FamilyInfoFetcher::FamilyMember> members; + members.emplace_back("someObfuscatedGaiaId", + FamilyInfoFetcher::HEAD_OF_HOUSEHOLD, "Homer Simpson", + "homer@simpson.com", "http://profile.url/homer", + "http://profile.url/homer/image"); + members.emplace_back("anotherObfuscatedGaiaId", FamilyInfoFetcher::PARENT, + "Marge Simpson", "marge@simpson.com", + "http://profile.url/marge", + "http://profile.url/marge/image"); + + OnGetFamilyMembersSuccess(members); + for (base::StringPiece property : supervised_users::CustodianInfoPrefs()) { + EXPECT_THAT(profile_->GetPrefs()->GetString(std::string(property)), + Not(IsEmpty())); + } + + members.clear(); + OnGetFamilyMembersSuccess(members); + for (base::StringPiece property : supervised_users::CustodianInfoPrefs()) { + EXPECT_THAT(profile_->GetPrefs()->GetString(std::string(property)), + IsEmpty()); + } +}
diff --git a/chrome/browser/supervised_user/supervised_user_constants.cc b/chrome/browser/supervised_user/supervised_user_constants.cc index 3a74407..7fa7e295 100644 --- a/chrome/browser/supervised_user/supervised_user_constants.cc +++ b/chrome/browser/supervised_user/supervised_user_constants.cc
@@ -3,6 +3,9 @@ // found in the LICENSE file. #include "chrome/browser/supervised_user/supervised_user_constants.h" +#include "base/containers/fixed_flat_set.h" +#include "base/strings/string_piece.h" +#include "chrome/common/pref_names.h" namespace supervised_users { @@ -26,4 +29,20 @@ const char kChromeOSPasswordData[] = "chromeos-password-data"; +base::fixed_flat_set<base::StringPiece, 10>& CustodianInfoPrefs() { + static auto nonce = base::MakeFixedFlatSet<base::StringPiece>({ + prefs::kSupervisedUserCustodianName, + prefs::kSupervisedUserCustodianEmail, + prefs::kSupervisedUserCustodianObfuscatedGaiaId, + prefs::kSupervisedUserCustodianProfileURL, + prefs::kSupervisedUserCustodianProfileImageURL, + prefs::kSupervisedUserSecondCustodianName, + prefs::kSupervisedUserSecondCustodianEmail, + prefs::kSupervisedUserSecondCustodianObfuscatedGaiaId, + prefs::kSupervisedUserSecondCustodianProfileURL, + prefs::kSupervisedUserSecondCustodianProfileImageURL, + }); + return nonce; +} + } // namespace supervised_users
diff --git a/chrome/browser/supervised_user/supervised_user_constants.h b/chrome/browser/supervised_user/supervised_user_constants.h index 430b0d75..c38f660 100644 --- a/chrome/browser/supervised_user/supervised_user_constants.h +++ b/chrome/browser/supervised_user/supervised_user_constants.h
@@ -5,6 +5,9 @@ #ifndef CHROME_BROWSER_SUPERVISED_USER_SUPERVISED_USER_CONSTANTS_H_ #define CHROME_BROWSER_SUPERVISED_USER_SUPERVISED_USER_CONSTANTS_H_ +#include "base/containers/fixed_flat_set.h" +#include "base/strings/string_piece.h" + namespace supervised_users { // Keys for supervised user settings. These are configured remotely and mapped @@ -25,12 +28,13 @@ extern const char kChildAccountSUID[]; // Keys for supervised user shared settings. These can be configured remotely or -// locally, and are mapped to preferences by the // SupervisedUserPrefMappingService. extern const char kChromeAvatarIndex[]; extern const char kChromeOSAvatarIndex[]; extern const char kChromeOSPasswordData[]; +base::fixed_flat_set<base::StringPiece, 10>& CustodianInfoPrefs(); + } // namespace supervised_users #endif // CHROME_BROWSER_SUPERVISED_USER_SUPERVISED_USER_CONSTANTS_H_
diff --git a/chrome/browser/supervised_user/supervised_user_service.cc b/chrome/browser/supervised_user/supervised_user_service.cc index fb24f1c..cdc44cd 100644 --- a/chrome/browser/supervised_user/supervised_user_service.cc +++ b/chrome/browser/supervised_user/supervised_user_service.cc
@@ -103,19 +103,6 @@ #endif // BUILDFLAG(ENABLE_EXTENSIONS) -const char* const kCustodianInfoPrefs[] = { - prefs::kSupervisedUserCustodianName, - prefs::kSupervisedUserCustodianEmail, - prefs::kSupervisedUserCustodianObfuscatedGaiaId, - prefs::kSupervisedUserCustodianProfileImageURL, - prefs::kSupervisedUserCustodianProfileURL, - prefs::kSupervisedUserSecondCustodianName, - prefs::kSupervisedUserSecondCustodianEmail, - prefs::kSupervisedUserSecondCustodianObfuscatedGaiaId, - prefs::kSupervisedUserSecondCustodianProfileImageURL, - prefs::kSupervisedUserSecondCustodianProfileURL, -}; - base::FilePath GetDenylistPath() { base::FilePath denylist_dir; base::PathService::Get(chrome::DIR_USER_DATA, &denylist_dir); @@ -152,8 +139,8 @@ registry->RegisterIntegerPref(prefs::kDefaultSupervisedUserFilteringBehavior, SupervisedUserURLFilter::ALLOW); registry->RegisterBooleanPref(prefs::kSupervisedUserSafeSites, true); - for (const char* pref : kCustodianInfoPrefs) { - registry->RegisterStringPref(pref, std::string()); + for (base::StringPiece pref : supervised_users::CustodianInfoPrefs()) { + registry->RegisterStringPref(std::string(pref), std::string()); } } @@ -425,9 +412,9 @@ prefs::kSupervisedUserManualURLs, base::BindRepeating(&SupervisedUserService::UpdateManualURLs, base::Unretained(this))); - for (const char* pref : kCustodianInfoPrefs) { + for (base::StringPiece pref : supervised_users::CustodianInfoPrefs()) { pref_change_registrar_.Add( - pref, + std::string(pref), base::BindRepeating(&SupervisedUserService::OnCustodianInfoChanged, base::Unretained(this))); } @@ -460,8 +447,8 @@ #endif // BUILDFLAG(ENABLE_EXTENSIONS) pref_change_registrar_.Remove(prefs::kSupervisedUserManualHosts); pref_change_registrar_.Remove(prefs::kSupervisedUserManualURLs); - for (const char* pref : kCustodianInfoPrefs) { - pref_change_registrar_.Remove(pref); + for (base::StringPiece pref : supervised_users::CustodianInfoPrefs()) { + pref_change_registrar_.Remove(std::string(pref)); } url_filter_.Clear();
diff --git a/chrome/browser/supervised_user/supervised_user_service.h b/chrome/browser/supervised_user/supervised_user_service.h index 3767161..1a10bd4 100644 --- a/chrome/browser/supervised_user/supervised_user_service.h +++ b/chrome/browser/supervised_user/supervised_user_service.h
@@ -58,7 +58,7 @@ namespace user_prefs { class PrefRegistrySyncable; -} +} // namespace user_prefs #if !BUILDFLAG(IS_ANDROID) class Browser;
diff --git a/chrome/browser/tab/BUILD.gn b/chrome/browser/tab/BUILD.gn index 21a38cda..aba58a5c 100644 --- a/chrome/browser/tab/BUILD.gn +++ b/chrome/browser/tab/BUILD.gn
@@ -128,6 +128,7 @@ sources = [ "java/src/org/chromium/chrome/browser/tab/TrustedCdn.java", "java/src/org/chromium/chrome/browser/tab/WebContentsStateBridge.java", + "java/src/org/chromium/chrome/browser/tab/state/CriticalPersistedTabData.java", "java/src/org/chromium/chrome/browser/tab/state/LevelDBPersistedDataStorage.java", ] }
diff --git a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/CriticalPersistedTabData.java b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/CriticalPersistedTabData.java index c146bb25..d15cb5d98 100644 --- a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/CriticalPersistedTabData.java +++ b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/CriticalPersistedTabData.java
@@ -16,6 +16,7 @@ import org.chromium.base.Log; import org.chromium.base.ObserverList; import org.chromium.base.TraceEvent; +import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.DoNotClassMerge; import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.supplier.Supplier; @@ -799,4 +800,9 @@ getMapperForTesting() { return sMapper; } + + @CalledByNative + public static @TabUserAgent int getUserAgent(Tab tab) { + return CriticalPersistedTabData.from(tab).getUserAgent(); + } }
diff --git a/chrome/browser/ui/android/fast_checkout/fast_checkout_view_impl.cc b/chrome/browser/ui/android/fast_checkout/fast_checkout_view_impl.cc index 5e9991d..69596c6 100644 --- a/chrome/browser/ui/android/fast_checkout/fast_checkout_view_impl.cc +++ b/chrome/browser/ui/android/fast_checkout/fast_checkout_view_impl.cc
@@ -36,11 +36,20 @@ JNIEnv* env, const base::android::JavaParamRef<jobject>& autofill_profile_java, const base::android::JavaParamRef<jobject>& credit_card_java) { - // TODO(crbug.com/1334642): Notify the controller. + std::unique_ptr<autofill::AutofillProfile> autofill_profile = + CreateFastCheckoutAutofillProfileFromJava( + env, autofill_profile_java, + g_browser_process->GetApplicationLocale()); + + std::unique_ptr<autofill::CreditCard> credit_card = + CreateFastCheckoutCreditCardFromJava(env, credit_card_java); + + controller_->OnOptionsSelected(std::move(autofill_profile), + std::move(credit_card)); } void FastCheckoutViewImpl::OnDismiss(JNIEnv* env) { - // TODO(crbug.com/1334642): Notify the controller. + controller_->OnDismiss(); } void FastCheckoutViewImpl::Show(
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/src/org/chromium/chrome/browser/ui/fast_checkout/FastCheckoutBridge.java b/chrome/browser/ui/android/fast_checkout/internal/java/src/org/chromium/chrome/browser/ui/fast_checkout/FastCheckoutBridge.java index e8bd060..86b90fa 100644 --- a/chrome/browser/ui/android/fast_checkout/internal/java/src/org/chromium/chrome/browser/ui/fast_checkout/FastCheckoutBridge.java +++ b/chrome/browser/ui/android/fast_checkout/internal/java/src/org/chromium/chrome/browser/ui/fast_checkout/FastCheckoutBridge.java
@@ -7,6 +7,7 @@ import androidx.annotation.Nullable; import org.chromium.base.annotations.CalledByNative; +import org.chromium.base.annotations.NativeMethods; import org.chromium.chrome.browser.ui.fast_checkout.data.FastCheckoutAutofillProfile; import org.chromium.chrome.browser.ui.fast_checkout.data.FastCheckoutCreditCard; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; @@ -73,12 +74,24 @@ @Override public void onDismissed() { - // TODO(crbug.com/1334642): Call native side to continue dismissing. + if (mNativeFastCheckoutBridge != 0) { + FastCheckoutBridgeJni.get().onDismiss(mNativeFastCheckoutBridge); + } } @Override public void onOptionsSelected( FastCheckoutAutofillProfile profile, FastCheckoutCreditCard creditCard) { - // TODO(crbug.com/1334642): Call native side to continue filling. + if (mNativeFastCheckoutBridge != 0) { + FastCheckoutBridgeJni.get().onOptionsSelected( + mNativeFastCheckoutBridge, profile, creditCard); + } + } + + @NativeMethods + interface Natives { + void onOptionsSelected(long nativeFastCheckoutViewImpl, FastCheckoutAutofillProfile profile, + FastCheckoutCreditCard creditCard); + void onDismiss(long nativeFastCheckoutViewImpl); } }
diff --git a/chrome/browser/ui/android/fast_checkout/java/src/org/chromium/chrome/browser/ui/fast_checkout/data/FastCheckoutAutofillProfile.java b/chrome/browser/ui/android/fast_checkout/java/src/org/chromium/chrome/browser/ui/fast_checkout/data/FastCheckoutAutofillProfile.java index e1fafaa..92fc31f 100644 --- a/chrome/browser/ui/android/fast_checkout/java/src/org/chromium/chrome/browser/ui/fast_checkout/data/FastCheckoutAutofillProfile.java +++ b/chrome/browser/ui/android/fast_checkout/java/src/org/chromium/chrome/browser/ui/fast_checkout/data/FastCheckoutAutofillProfile.java
@@ -53,10 +53,12 @@ mLanguageCode = languageCode; } + @CalledByNative public String getGUID() { return mGUID; } + @CalledByNative public String getOrigin() { return mOrigin; } @@ -65,42 +67,52 @@ return mIsLocal; } + @CalledByNative public String getHonorificPrefix() { return mHonorificPrefix; } + @CalledByNative public String getFullName() { return mFullName; } + @CalledByNative public String getCompanyName() { return mCompanyName; } + @CalledByNative public String getStreetAddress() { return mStreetAddress; } + @CalledByNative public String getRegion() { return mRegion; } + @CalledByNative public String getLocality() { return mLocality; } + @CalledByNative public String getDependentLocality() { return mDependentLocality; } + @CalledByNative public String getPostalCode() { return mPostalCode; } + @CalledByNative public String getSortingCode() { return mSortingCode; } + @CalledByNative public String getCountryCode() { return mCountryCode; } @@ -109,14 +121,17 @@ return mCountryName; } + @CalledByNative public String getPhoneNumber() { return mPhoneNumber; } + @CalledByNative public String getEmailAddress() { return mEmailAddress; } + @CalledByNative public String getLanguageCode() { return mLanguageCode; }
diff --git a/chrome/browser/ui/android/fast_checkout/java/src/org/chromium/chrome/browser/ui/fast_checkout/data/FastCheckoutCreditCard.java b/chrome/browser/ui/android/fast_checkout/java/src/org/chromium/chrome/browser/ui/fast_checkout/data/FastCheckoutCreditCard.java index a0aa061..e5e1c020 100644 --- a/chrome/browser/ui/android/fast_checkout/java/src/org/chromium/chrome/browser/ui/fast_checkout/data/FastCheckoutCreditCard.java +++ b/chrome/browser/ui/android/fast_checkout/java/src/org/chromium/chrome/browser/ui/fast_checkout/data/FastCheckoutCreditCard.java
@@ -57,26 +57,32 @@ mProductDescription = productDescription; } + @CalledByNative public String getGUID() { return mGUID; } + @CalledByNative public String getOrigin() { return mOrigin; } + @CalledByNative public boolean getIsLocal() { return mIsLocal; } + @CalledByNative public boolean getIsCached() { return mIsCached; } + @CalledByNative public String getName() { return mName; } + @CalledByNative public String getNumber() { return mNumber; } @@ -85,14 +91,17 @@ return mObfuscatedNumber; } + @CalledByNative public String getMonth() { return mMonth; } + @CalledByNative public String getYear() { return mYear; } + @CalledByNative public String getBasicCardIssuerNetwork() { return mBasicCardIssuerNetwork; } @@ -101,30 +110,37 @@ return mIssuerIconString; } + @CalledByNative public String getBillingAddressId() { return mBillingAddressId; } + @CalledByNative public String getServerId() { return mServerId; } + @CalledByNative public long getInstrumentId() { return mInstrumentId; } + @CalledByNative public String getNickname() { return mNickname; } + @CalledByNative public GURL getCardArtUrl() { return mCardArtUrl; } + @CalledByNative public @VirtualCardEnrollmentState int getVirtualCardEnrollmentState() { return mVirtualCardEnrollmentState; } + @CalledByNative public String getProductDescription() { return mProductDescription; }
diff --git a/chrome/browser/ui/android/fast_checkout/ui_view_android_utils.cc b/chrome/browser/ui/android/fast_checkout/ui_view_android_utils.cc index bf3295e..1e90ddc9 100644 --- a/chrome/browser/ui/android/fast_checkout/ui_view_android_utils.cc +++ b/chrome/browser/ui/android/fast_checkout/ui_view_android_utils.cc
@@ -4,6 +4,7 @@ #include "chrome/browser/ui/android/fast_checkout/ui_view_android_utils.h" +#include "base/android/jni_android.h" #include "base/android/jni_array.h" #include "base/android/jni_string.h" #include "base/strings/utf_string_conversion_utils.h" @@ -14,8 +15,29 @@ #include "components/autofill/core/browser/geo/autofill_country.h" #include "url/android/gurl_android.h" +namespace { using ::base::android::ConvertUTF16ToJavaString; using ::base::android::ConvertUTF8ToJavaString; +using ::base::android::JavaRef; + +void MaybeSetInfo(autofill::AutofillProfile* profile, + autofill::ServerFieldType type, + const JavaRef<jstring>& value, + const std::string& locale) { + if (value) { + profile->SetInfo(type, ConvertJavaStringToUTF16(value), locale); + } +} + +void MaybeSetRawInfo(autofill::AutofillProfile* profile, + autofill::ServerFieldType type, + const JavaRef<jstring>& value) { + if (value) { + profile->SetRawInfo(type, ConvertJavaStringToUTF16(value)); + } +} + +} // namespace base::android::ScopedJavaLocalRef<jobject> CreateFastCheckoutAutofillProfile( JNIEnv* env, @@ -87,3 +109,127 @@ static_cast<jint>(credit_card.virtual_card_enrollment_state()), ConvertUTF16ToJavaString(env, credit_card.product_description())); } + +std::unique_ptr<autofill::AutofillProfile> +CreateFastCheckoutAutofillProfileFromJava( + JNIEnv* env, + const base::android::JavaParamRef<jobject>& jprofile, + const std::string& locale) { + auto profile = std::make_unique<autofill::AutofillProfile>(); + // Only set the guid if it is an existing profile (Java guid not empty). + // Otherwise, keep the generated one. + std::string guid = ConvertJavaStringToUTF8( + Java_FastCheckoutAutofillProfile_getGUID(env, jprofile)); + if (!guid.empty()) { + profile->set_guid(guid); + } + + profile->set_origin(ConvertJavaStringToUTF8( + Java_FastCheckoutAutofillProfile_getOrigin(env, jprofile))); + MaybeSetInfo(profile.get(), autofill::NAME_FULL, + Java_FastCheckoutAutofillProfile_getFullName(env, jprofile), + locale); + MaybeSetRawInfo( + profile.get(), autofill::NAME_HONORIFIC_PREFIX, + Java_FastCheckoutAutofillProfile_getHonorificPrefix(env, jprofile)); + MaybeSetRawInfo( + profile.get(), autofill::COMPANY_NAME, + Java_FastCheckoutAutofillProfile_getCompanyName(env, jprofile)); + MaybeSetRawInfo( + profile.get(), autofill::ADDRESS_HOME_STREET_ADDRESS, + Java_FastCheckoutAutofillProfile_getStreetAddress(env, jprofile)); + MaybeSetRawInfo(profile.get(), autofill::ADDRESS_HOME_STATE, + Java_FastCheckoutAutofillProfile_getRegion(env, jprofile)); + MaybeSetRawInfo(profile.get(), autofill::ADDRESS_HOME_CITY, + Java_FastCheckoutAutofillProfile_getLocality(env, jprofile)); + MaybeSetRawInfo( + profile.get(), autofill::ADDRESS_HOME_DEPENDENT_LOCALITY, + Java_FastCheckoutAutofillProfile_getDependentLocality(env, jprofile)); + MaybeSetRawInfo( + profile.get(), autofill::ADDRESS_HOME_ZIP, + Java_FastCheckoutAutofillProfile_getPostalCode(env, jprofile)); + MaybeSetRawInfo( + profile.get(), autofill::ADDRESS_HOME_SORTING_CODE, + Java_FastCheckoutAutofillProfile_getSortingCode(env, jprofile)); + MaybeSetInfo(profile.get(), autofill::ADDRESS_HOME_COUNTRY, + Java_FastCheckoutAutofillProfile_getCountryCode(env, jprofile), + locale); + MaybeSetRawInfo( + profile.get(), autofill::PHONE_HOME_WHOLE_NUMBER, + Java_FastCheckoutAutofillProfile_getPhoneNumber(env, jprofile)); + MaybeSetRawInfo( + profile.get(), autofill::EMAIL_ADDRESS, + Java_FastCheckoutAutofillProfile_getEmailAddress(env, jprofile)); + profile->set_language_code(ConvertJavaStringToUTF8( + Java_FastCheckoutAutofillProfile_getLanguageCode(env, jprofile))); + profile->FinalizeAfterImport(); + return profile; +} + +std::unique_ptr<autofill::CreditCard> CreateFastCheckoutCreditCardFromJava( + JNIEnv* env, + const base::android::JavaParamRef<jobject>& jcredit_card) { + auto credit_card = std::make_unique<autofill::CreditCard>(); + // Only set the guid if it is an existing card (java guid not empty). + // Otherwise, keep the generated one. + std::string guid = ConvertJavaStringToUTF8( + Java_FastCheckoutCreditCard_getGUID(env, jcredit_card)); + if (!guid.empty()) { + credit_card->set_guid(guid); + } + + if (Java_FastCheckoutCreditCard_getIsLocal(env, jcredit_card)) { + credit_card->set_record_type(autofill::CreditCard::LOCAL_CARD); + } else { + if (Java_FastCheckoutCreditCard_getIsCached(env, jcredit_card)) { + credit_card->set_record_type(autofill::CreditCard::FULL_SERVER_CARD); + } else { + credit_card->set_record_type(autofill::CreditCard::MASKED_SERVER_CARD); + credit_card->SetNetworkForMaskedCard( + autofill::data_util::GetIssuerNetworkForBasicCardIssuerNetwork( + ConvertJavaStringToUTF8( + env, Java_FastCheckoutCreditCard_getBasicCardIssuerNetwork( + env, jcredit_card)))); + } + } + + credit_card->set_origin(ConvertJavaStringToUTF8( + Java_FastCheckoutCreditCard_getOrigin(env, jcredit_card))); + credit_card->SetRawInfo( + autofill::CREDIT_CARD_NAME_FULL, + ConvertJavaStringToUTF16( + Java_FastCheckoutCreditCard_getName(env, jcredit_card))); + credit_card->SetRawInfo( + autofill::CREDIT_CARD_NUMBER, + ConvertJavaStringToUTF16( + Java_FastCheckoutCreditCard_getNumber(env, jcredit_card))); + credit_card->SetRawInfo( + autofill::CREDIT_CARD_EXP_MONTH, + ConvertJavaStringToUTF16( + Java_FastCheckoutCreditCard_getMonth(env, jcredit_card))); + credit_card->SetRawInfo( + autofill::CREDIT_CARD_EXP_4_DIGIT_YEAR, + ConvertJavaStringToUTF16( + Java_FastCheckoutCreditCard_getYear(env, jcredit_card))); + credit_card->set_billing_address_id(ConvertJavaStringToUTF8( + Java_FastCheckoutCreditCard_getBillingAddressId(env, jcredit_card))); + credit_card->set_server_id(ConvertJavaStringToUTF8( + Java_FastCheckoutCreditCard_getServerId(env, jcredit_card))); + credit_card->set_instrument_id( + Java_FastCheckoutCreditCard_getInstrumentId(env, jcredit_card)); + credit_card->SetNickname(ConvertJavaStringToUTF16( + Java_FastCheckoutCreditCard_getNickname(env, jcredit_card))); + base::android::ScopedJavaLocalRef<jobject> jcard_art_url = + Java_FastCheckoutCreditCard_getCardArtUrl(env, jcredit_card); + if (!jcard_art_url.is_null()) { + credit_card->set_card_art_url( + *url::GURLAndroid::ToNativeGURL(env, jcard_art_url)); + } + credit_card->set_virtual_card_enrollment_state( + static_cast<autofill::CreditCard::VirtualCardEnrollmentState>( + Java_FastCheckoutCreditCard_getVirtualCardEnrollmentState( + env, jcredit_card))); + credit_card->set_product_description(ConvertJavaStringToUTF16( + Java_FastCheckoutCreditCard_getProductDescription(env, jcredit_card))); + return credit_card; +}
diff --git a/chrome/browser/ui/android/fast_checkout/ui_view_android_utils.h b/chrome/browser/ui/android/fast_checkout/ui_view_android_utils.h index 34e99b41..943b140 100644 --- a/chrome/browser/ui/android/fast_checkout/ui_view_android_utils.h +++ b/chrome/browser/ui/android/fast_checkout/ui_view_android_utils.h
@@ -23,4 +23,18 @@ const autofill::CreditCard& credit_card, const std::string& locale); +// Populate the AutofillProfile from the Java FastCheckoutAutofillProfile. This +// is comparable to PersonalDataManagerAndroid::PopulateNativeProfileFromJava. +std::unique_ptr<autofill::AutofillProfile> +CreateFastCheckoutAutofillProfileFromJava( + JNIEnv* env, + const base::android::JavaParamRef<jobject>& jprofile, + const std::string& locale); + +// Populate the CreditCard from the Java FastCheckoutCreditCard. This is +// comparable to PersonalDataManagerAndroid::PopulateNativeCreditCardFromJava. +std::unique_ptr<autofill::CreditCard> CreateFastCheckoutCreditCardFromJava( + JNIEnv* env, + const base::android::JavaParamRef<jobject>& jcredit_card); + #endif // CHROME_BROWSER_UI_ANDROID_FAST_CHECKOUT_UI_VIEW_ANDROID_UTILS_H_
diff --git a/chrome/browser/ui/android/fast_checkout/ui_view_android_utils_unittest.cc b/chrome/browser/ui/android/fast_checkout/ui_view_android_utils_unittest.cc new file mode 100644 index 0000000..92d113cb --- /dev/null +++ b/chrome/browser/ui/android/fast_checkout/ui_view_android_utils_unittest.cc
@@ -0,0 +1,76 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/ui/android/fast_checkout/ui_view_android_utils.h" + +#include "base/android/jni_android.h" +#include "components/autofill/core/browser/autofill_data_util.h" +#include "components/autofill/core/browser/autofill_test_utils.h" +#include "components/autofill/core/browser/data_model/autofill_profile.h" +#include "components/autofill/core/browser/geo/country_names.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" + +TEST(FastCheckoutUIViewAndroidUtils, CreateFastCheckoutAutofillProfile) { + autofill::CountryNames::SetLocaleString("en-US"); + JNIEnv* env = base::android::AttachCurrentThread(); + autofill::AutofillProfile profile = autofill::test::GetVerifiedProfile(); + + base::android::ScopedJavaLocalRef<jobject> scoped_profile = + CreateFastCheckoutAutofillProfile(env, profile, "en-US"); + + base::android::JavaParamRef<jobject> java_profile(env, scoped_profile.obj()); + + std::unique_ptr<autofill::AutofillProfile> parsed_profile = + CreateFastCheckoutAutofillProfileFromJava(env, java_profile, "en-US"); + + EXPECT_EQ(profile.guid(), parsed_profile->guid()); + EXPECT_EQ(profile.origin(), parsed_profile->origin()); + EXPECT_EQ(profile.language_code(), parsed_profile->language_code()); + + const autofill::ServerFieldType types[] = { + autofill::NAME_FULL, + autofill::NAME_FIRST, + autofill::NAME_MIDDLE, + autofill::NAME_HONORIFIC_PREFIX, + autofill::NAME_LAST, + autofill::NAME_LAST_FIRST, + autofill::NAME_LAST_SECOND, + autofill::NAME_LAST_CONJUNCTION, + autofill::COMPANY_NAME, + autofill::ADDRESS_HOME_STREET_ADDRESS, + autofill::ADDRESS_HOME_DEPENDENT_LOCALITY, + autofill::ADDRESS_HOME_CITY, + autofill::ADDRESS_HOME_STATE, + autofill::ADDRESS_HOME_ZIP, + autofill::ADDRESS_HOME_SORTING_CODE, + autofill::ADDRESS_HOME_COUNTRY, + autofill::EMAIL_ADDRESS, + autofill::PHONE_HOME_WHOLE_NUMBER, + }; + + for (autofill::ServerFieldType type : types) { + EXPECT_EQ(profile.GetRawInfo(type), parsed_profile->GetRawInfo(type)); + } +} + +TEST(FastCheckoutUIViewAndroidUtils, CreateFastCheckoutCreditCard) { + autofill::CountryNames::SetLocaleString("en-US"); + JNIEnv* env = base::android::AttachCurrentThread(); + const autofill::CreditCard credit_cards[] = { + autofill::test::GetCreditCard(), autofill::test::GetFullServerCard(), + autofill::test::GetMaskedServerCard()}; + + for (const autofill::CreditCard& credit_card : credit_cards) { + base::android::ScopedJavaLocalRef<jobject> scoped_credit_card = + CreateFastCheckoutCreditCard(env, credit_card, "en-US"); + + base::android::JavaParamRef<jobject> java_credit_card( + env, scoped_credit_card.obj()); + + std::unique_ptr<autofill::CreditCard> parsed_credit_card = + CreateFastCheckoutCreditCardFromJava(env, java_credit_card); + EXPECT_EQ(credit_card, *parsed_credit_card.get()); + } +}
diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/geo/GeolocationHeader.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/geo/GeolocationHeader.java index 9f6a7f8..a362a98 100644 --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/geo/GeolocationHeader.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/geo/GeolocationHeader.java
@@ -26,6 +26,7 @@ import org.chromium.base.TraceEvent; import org.chromium.base.annotations.CalledByNative; import org.chromium.base.metrics.RecordHistogram; +import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.omnibox.geo.VisibleNetworks.VisibleCell; import org.chromium.chrome.browser.omnibox.geo.VisibleNetworks.VisibleWifi; import org.chromium.chrome.browser.profiles.Profile; @@ -182,12 +183,6 @@ int BLOCKED = 2; } - /** The maximum value for the GeolocationHeader.TimeListening* histograms. */ - public static final int TIME_LISTENING_HISTOGRAM_MAX_MILLIS = 50 * 60 * 1000; // 50 minutes - - /** The maximum value for the GeolocationHeader.LocationAge* histograms. */ - public static final int LOCATION_AGE_HISTOGRAM_MAX_SECONDS = 30 * 24 * 60 * 60; // 30 days - @IntDef({HeaderState.HEADER_ENABLED, HeaderState.INCOGNITO, HeaderState.UNSUITABLE_URL, HeaderState.NOT_HTTPS, HeaderState.LOCATION_PERMISSION_BLOCKED}) @Retention(RetentionPolicy.SOURCE) @@ -384,26 +379,15 @@ } } - @LocationSource - int locationSource = getLocationSource(); - @Permission - int appPermission = getGeolocationPermission(tab); - @Permission - int domainPermission = getDomainPermission(profile, url); - - // Record the permission state with a histogram. - recordPermissionHistogram(locationSource, appPermission, domainPermission, - locationToAttach != null, headerState); - - if (locationSource != LocationSource.LOCATION_OFF && appPermission != Permission.BLOCKED - && domainPermission != Permission.BLOCKED && !profile.isOffTheRecord()) { - // Record the Location Age with a histogram. - recordLocationAgeHistogram(locationSource, locationAge); - long duration = sFirstLocationTime == Long.MAX_VALUE - ? 0 - : SystemClock.elapsedRealtime() - sFirstLocationTime; - // Record the Time Listening with a histogram. - recordTimeListeningHistogram(locationSource, locationToAttach != null, duration); + // TODO(crbug.com/1330739): remove this. + if (!ChromeFeatureList.isEnabled( + ChromeFeatureList.OPTIMIZE_GEOLOCATION_HEADER_GENERATION)) { + // These calls used to be necessary to record obsoleted + // histograms. We keep them here temporarily to measure the + // impact of removing them. + getLocationSource(); + getGeolocationPermission(tab); + getDomainPermission(profile, url); } // Proto encoding @@ -709,18 +693,6 @@ return UmaPermission.UNKNOWN; } - /** Records a data point for the Geolocation.Header.PermissionState histogram. */ - private static void recordPermissionHistogram(@LocationSource int locationSource, - @Permission int appPermission, @Permission int domainPermission, - boolean locationAttached, @HeaderState int headerState) { - if (headerState == HeaderState.INCOGNITO) return; - @UmaPermission - int result = getPermissionHistogramEnum( - locationSource, appPermission, domainPermission, locationAttached, headerState); - RecordHistogram.recordEnumeratedHistogram( - "Geolocation.Header.PermissionState", result, UmaPermission.NUM_ENTRIES); - } - /** * Determines the name for a Time Listening Histogram. Returns empty string if the location * source is LOCATION_OFF as we do not record histograms for that case. @@ -747,36 +719,6 @@ } } - /** Records a data point for one of the GeolocationHeader.TimeListening* histograms. */ - private static void recordTimeListeningHistogram( - int locationSource, boolean locationAttached, long duration) { - String name = getTimeListeningHistogramEnum(locationSource, locationAttached); - if (name == null) return; - RecordHistogram.recordCustomTimesHistogram( - name, duration, 1, TIME_LISTENING_HISTOGRAM_MAX_MILLIS, 50); - } - - /** Records a data point for one of the GeolocationHeader.LocationAge* histograms. */ - private static void recordLocationAgeHistogram(int locationSource, long durationMillis) { - String name = ""; - if (locationSource == LocationSource.HIGH_ACCURACY) { - name = "Geolocation.Header.LocationAge.HighAccuracy"; - } else if (locationSource == LocationSource.GPS_ONLY) { - name = "Geolocation.Header.LocationAge.GpsOnly"; - } else if (locationSource == LocationSource.BATTERY_SAVING) { - name = "Geolocation.Header.LocationAge.BatterySaving"; - } else { - Log.e(TAG, "Unexpected locationSource: " + locationSource); - assert false : "Unexpected locationSource: " + locationSource; - return; - } - long durationSeconds = durationMillis / 1000; - int duration = durationSeconds >= (long) Integer.MAX_VALUE ? Integer.MAX_VALUE - : (int) durationSeconds; - RecordHistogram.recordCustomCountHistogram( - name, duration, 1, LOCATION_AGE_HISTOGRAM_MAX_SECONDS, 50); - } - /** * Encodes location into proto encoding. */
diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/geo/GeolocationHeaderUnitTest.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/geo/GeolocationHeaderUnitTest.java index 25b7c9b..e4d441d 100644 --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/geo/GeolocationHeaderUnitTest.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/geo/GeolocationHeaderUnitTest.java
@@ -30,12 +30,14 @@ import org.chromium.base.test.BaseRobolectricTestRunner; import org.chromium.base.test.util.JniMocker; +import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.omnibox.geo.VisibleNetworks.VisibleCell; import org.chromium.chrome.browser.omnibox.geo.VisibleNetworks.VisibleWifi; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.profiles.ProfileJni; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.test.util.browser.Features; +import org.chromium.chrome.test.util.browser.Features.DisableFeatures; import org.chromium.components.browser_ui.site_settings.WebsitePreferenceBridge; import org.chromium.components.browser_ui.site_settings.WebsitePreferenceBridgeJni; import org.chromium.components.content_settings.ContentSettingValues; @@ -55,6 +57,7 @@ @RunWith(BaseRobolectricTestRunner.class) @Config(manifest = Config.NONE) @LooperMode(LooperMode.Mode.LEGACY) +@DisableFeatures({ChromeFeatureList.OPTIMIZE_GEOLOCATION_HEADER_GENERATION}) public class GeolocationHeaderUnitTest { private static final String SEARCH_URL = "https://www.google.com/search?q=potatoes";
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb index 85fafce..9e190ea 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb
@@ -974,6 +974,7 @@ <translation id="6394791151443660613">Axtarış: <ph name="SEARCH_QUERY" /></translation> <translation id="6395288395575013217">LİNK</translation> <translation id="6397616442223433927">Bağlantı bərpa edildi</translation> +<translation id="6401458660421980302">Bu tabı başqa cihaza göndərmək üçün orada Chrome'a daxil olun</translation> <translation id="6402652558933147609"><ph name="VIOLATED_URL" /> üzrə <ph name="ERROR_CODE" /></translation> <translation id="6404511346730675251">Əlfəcinə düzəliş edin</translation> <translation id="6406506848690869874">Sinx</translation> @@ -1025,6 +1026,7 @@ <translation id="6600954340915313787">Chrome'a kopYanlışır</translation> <translation id="661266467055912436">Siz və vebdəki hər kəs üçün təhlükəsizliyi artırır.</translation> <translation id="6618554661997243500">Sizin üçün populyar saytlar və hekayələrə baxmaq üçün Əsas səhifə düyməsinə toxunun</translation> +<translation id="6621391692573306628">Bu tabı başqa cihaza göndərmək üçün hər iki cihazda Chrome'a daxil olun</translation> <translation id="6627583120233659107">Qovluğa düzəliş edin</translation> <translation id="6633067410344541938">Anonim rejimi kiliddən çıxarın</translation> <translation id="6636623428211296678">Aşağıda digər ayarları araşdırın və ya indi bitirin</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 5c02fb5..4ba41da 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
@@ -78,6 +78,7 @@ <translation id="1344653310988386453">Include link to highlight</translation> <translation id="1347468774581902829">Manage activity</translation> <translation id="1360432990279830238">Sign out and turn off sync?</translation> +<translation id="1366525380420346469">When on</translation> <translation id="1373696734384179344">Insufficient memory to download the selected content.</translation> <translation id="1376578503827013741">Computing…</translation> <translation id="1382912999714108023">Not seeing your current info? Please contact your bank to update it.</translation> @@ -514,6 +515,7 @@ <translation id="3810973564298564668">Manage</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> downloads deleted</translation> <translation id="3819183753496523827">You're offline. Check your Internet connection and try again.</translation> +<translation id="3830886834687455630">Update Google Play services to check your passwords</translation> <translation id="3845098929839618392">Open in Incognito tab</translation> <translation id="3856096718352044181">Please verify that this is a valid provider or try again later</translation> <translation id="3858860766373142691">Name</translation> @@ -734,6 +736,7 @@ <translation id="5016205925109358554">Serif</translation> <translation id="5032430150487044192">Can't create QR code</translation> <translation id="5039804452771397117">Allow</translation> +<translation id="504456571576643789">Things to consider</translation> <translation id="5054455334322721892"><ph name="BEGIN_LINK1" />Other forms of activity<ph name="END_LINK1" /> may be saved in your Google Account when you’re signed in. You can delete them at any time.</translation> <translation id="5061533557687621530">To check the weather, tap the mic and say 'What’s the weather today?'</translation> <translation id="506254248375231072">No tabs</translation> @@ -976,6 +979,7 @@ <translation id="6394791151443660613">Search: <ph name="SEARCH_QUERY" /></translation> <translation id="6395288395575013217">LINK</translation> <translation id="6397616442223433927">Back online</translation> +<translation id="6401458660421980302">To send this tab to another device, sign in to Chrome there</translation> <translation id="6402652558933147609"><ph name="ERROR_CODE" /> on <ph name="VIOLATED_URL" /></translation> <translation id="6404511346730675251">Edit bookmark</translation> <translation id="6406506848690869874">Sync</translation> @@ -1027,6 +1031,7 @@ <translation id="6600954340915313787">Copied to Chrome</translation> <translation id="661266467055912436">Improves security for you and everyone on the web.</translation> <translation id="6618554661997243500">To see top sites and stories for you, tap the Home button</translation> +<translation id="6621391692573306628">To send this tab to another device, sign in to Chrome on both devices</translation> <translation id="6627583120233659107">Edit folder</translation> <translation id="6633067410344541938">Unlock Incognito</translation> <translation id="6636623428211296678">Explore more settings below or finish now</translation> @@ -1215,6 +1220,7 @@ <translation id="7641339528570811325">Clear browsing data…</translation> <translation id="7646772052135772216">Password sync isn't working</translation> <translation id="7655900163790317559">Turning on Bluetooth…</translation> +<translation id="7656862631699126784">Turn on Incognito lock</translation> <translation id="7658239707568436148">Cancel</translation> <translation id="7663313374500954251">This browser is managed by <ph name="PARENT_NAME" />.</translation> <translation id="7665369617277396874">Add account</translation> @@ -1517,6 +1523,7 @@ <translation id="9159716826369098114">Restore tab group of <ph name="TAB_COUNT" /> tabs as a new background tab group.</translation> <translation id="9169507124922466868">Navigation history is half-opened</translation> <translation id="9187955620966010988">Reaction adjusted</translation> +<translation id="9190276265094487094">You’ll have your history on all your synced devices so that you can continue what you were doing</translation> <translation id="9199368092038462496">{NUM_MINS,plural, =1{Checked 1 minute ago}other{Checked # minutes ago}}</translation> <translation id="9204836675896933765">1 file left</translation> <translation id="9205933215779845960">Can’t find that page. Check your spelling or try a search on <ph name="SEARCH_ENGINE" />.</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 3c374f3c..0512ae4 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
@@ -976,6 +976,7 @@ <translation id="6394791151443660613">Keresés: <ph name="SEARCH_QUERY" /></translation> <translation id="6395288395575013217">LINK</translation> <translation id="6397616442223433927">Ismét online</translation> +<translation id="6401458660421980302">Ha szeretné elküldeni ezt a lapot másik eszközre, jelentkezzen be a Chrome-ba az adott eszközön</translation> <translation id="6402652558933147609"><ph name="ERROR_CODE" />, <ph name="VIOLATED_URL" /></translation> <translation id="6404511346730675251">Könyvjelző szerkesztése</translation> <translation id="6406506848690869874">Szinkronizálás</translation> @@ -1027,6 +1028,7 @@ <translation id="6600954340915313787">A Chrome-ba másolva</translation> <translation id="661266467055912436">Javítja az Ön és mindenki más biztonságát az interneten.</translation> <translation id="6618554661997243500">Ha szeretné megtekinteni a legkedveltebb webhelyeit és a legfrissebb híreket, koppintson a Kezdőképernyő gombra</translation> +<translation id="6621391692573306628">A lap másik eszközre való elküldéséhez jelentkezzen be a Chrome-ba mindkét eszközön</translation> <translation id="6627583120233659107">Mappa szerkesztése</translation> <translation id="6633067410344541938">Inkognitó lapok zárolásának feloldása</translation> <translation id="6636623428211296678">Felfedezheti alább a többi beállítást, vagy befejezheti most az áttekintést</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb index a449585..8bb52344 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb
@@ -975,6 +975,7 @@ <translation id="6394791151443660613">ရှာဖွေရန်- <ph name="SEARCH_QUERY" /></translation> <translation id="6395288395575013217">လင့်ခ်</translation> <translation id="6397616442223433927">အွန်လိုင်းပြန်ရပြီ</translation> +<translation id="6401458660421980302">အခြားစက်သို့ ဤတဘ်ကို ပို့ရန် ထိုနေရာတွင် Chrome သို့ လက်မှတ်ထိုးဝင်ပါ</translation> <translation id="6402652558933147609"><ph name="VIOLATED_URL" /> ရှိ <ph name="ERROR_CODE" /></translation> <translation id="6404511346730675251">စာညှပ် တည်းဖြတ်ရန်</translation> <translation id="6406506848690869874">ထပ်တူပြုမည်</translation> @@ -1026,6 +1027,7 @@ <translation id="6600954340915313787">Chrome သို့ ကူးယူပြီး၏</translation> <translation id="661266467055912436">သင်နှင့် ဝဘ်ပေါ်ရှိ လူအားလုံးအတွက် လုံခြုံရေးကို တိုးမြှင့်ထားသည်။</translation> <translation id="6618554661997243500">သင့်အတွက် ထိပ်တန်းဝဘ်ဆိုက်များနှင့် သတင်းဆောင်းပါးများကြည့်ရန် 'ပင်မခလုတ်' ကို တို့ပါ</translation> +<translation id="6621391692573306628">အခြားစက်သို့ ဤတဘ်ကို ပို့ရန် နှစ်စက်လုံးတွင် Chrome သို့ လက်မှတ်ထိုးဝင်ပါ</translation> <translation id="6627583120233659107">ဖိုလ်ဒါ တည်းဖြတ်ရန်</translation> <translation id="6633067410344541938">ရုပ်ဖျက်မုဒ်ဖွင့်ရန်</translation> <translation id="6636623428211296678">အောက်ရှိ နောက်ထပ်ဆက်တင်များကို စူးစမ်းလေ့လာပါ (သို့) ယခုအပြီးသတ်ပါ</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 0988be4..1111183 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
@@ -976,6 +976,7 @@ <translation id="6394791151443660613">Szukaj: <ph name="SEARCH_QUERY" /></translation> <translation id="6395288395575013217">LINK</translation> <translation id="6397616442223433927">Jesteś znowu online</translation> +<translation id="6401458660421980302">Aby wysłać tę kartę na inne urządzenie, zaloguj się na nim w Chrome</translation> <translation id="6402652558933147609">Błąd <ph name="ERROR_CODE" /> adresu URL <ph name="VIOLATED_URL" /></translation> <translation id="6404511346730675251">Edytuj zakładkę</translation> <translation id="6406506848690869874">Synchronizacja</translation> @@ -1027,6 +1028,7 @@ <translation id="6600954340915313787">Skopiowana do Chrome</translation> <translation id="661266467055912436">Zwiększa bezpieczeństwo Twoje i pozostałych użytkowników internetu.</translation> <translation id="6618554661997243500">Aby zobaczyć najciekawsze strony i artykuły dla Ciebie, naciśnij przycisk strony głównej</translation> +<translation id="6621391692573306628">Aby wysłać tę kartę na inne urządzenie, na obu urządzeniach zaloguj się w Chrome</translation> <translation id="6627583120233659107">Edytuj folder</translation> <translation id="6633067410344541938">Odblokuj tryb incognito</translation> <translation id="6636623428211296678">Zobacz więcej ustawień poniżej lub zakończ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb index 9bf3d1e..a8eb345 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb
@@ -976,6 +976,7 @@ <translation id="6394791151443660613">搜尋:<ph name="SEARCH_QUERY" /></translation> <translation id="6395288395575013217">連結</translation> <translation id="6397616442223433927">已重新連線</translation> +<translation id="6401458660421980302">如要將這個分頁傳送到其他裝置,請在該裝置上登入 Chrome</translation> <translation id="6402652558933147609"><ph name="ERROR_CODE" /> (<ph name="VIOLATED_URL" />)</translation> <translation id="6404511346730675251">編輯書籤</translation> <translation id="6406506848690869874">同步處理</translation> @@ -1027,6 +1028,7 @@ <translation id="6600954340915313787">已複製至 Chrome</translation> <translation id="661266467055912436">為您和網絡上的所有使用者提高安全性。</translation> <translation id="6618554661997243500">㩒「主按鈕」就可以睇下熱門網站同報導</translation> +<translation id="6621391692573306628">如要將這個分頁傳送到其他裝置,請在這兩部裝置上登入 Chrome</translation> <translation id="6627583120233659107">編輯資料夾</translation> <translation id="6633067410344541938">解鎖無痕模式</translation> <translation id="6636623428211296678">探索下方更多設定或立即結束審核</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb index f9f577c5..c797ed2 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb
@@ -973,6 +973,7 @@ <translation id="6394791151443660613">搜尋:<ph name="SEARCH_QUERY" /></translation> <translation id="6395288395575013217">連結</translation> <translation id="6397616442223433927">已恢復連線</translation> +<translation id="6401458660421980302">如要將這個分頁傳送到其他裝置,請在該裝置上登入 Chrome</translation> <translation id="6402652558933147609"><ph name="VIOLATED_URL" /> 上發生 <ph name="ERROR_CODE" /> 錯誤</translation> <translation id="6404511346730675251">編輯書籤</translation> <translation id="6406506848690869874">同步</translation> @@ -1024,6 +1025,7 @@ <translation id="6600954340915313787">已複製到 Chrome</translation> <translation id="661266467055912436">可為你和所有網路使用者提供更完善的安全防護。</translation> <translation id="6618554661997243500">如要查看你常用的網站和精選報導,請輕觸「首頁」按鈕</translation> +<translation id="6621391692573306628">如要將這個分頁傳送到其他裝置,請在這兩部裝置上登入 Chrome</translation> <translation id="6627583120233659107">編輯資料夾</translation> <translation id="6633067410344541938">解鎖無痕模式</translation> <translation id="6636623428211296678">探索下方更多設定或立即結束審查作業</translation>
diff --git a/chrome/browser/ui/android/toolbar/BUILD.gn b/chrome/browser/ui/android/toolbar/BUILD.gn index b08941cc..5468e76 100644 --- a/chrome/browser/ui/android/toolbar/BUILD.gn +++ b/chrome/browser/ui/android/toolbar/BUILD.gn
@@ -325,6 +325,7 @@ "//chrome/test/android:chrome_java_unit_test_support", "//components/browser_ui/settings/android:java", "//components/browser_ui/styles/android:java", + "//components/browser_ui/theme/android:java_resources", "//components/browser_ui/widget/android:java", "//components/feature_engagement:feature_engagement_java", "//components/search_engines/android:java",
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarFeatures.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarFeatures.java index 9bb32091..b8c92ebd 100644 --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarFeatures.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarFeatures.java
@@ -135,6 +135,15 @@ } /** + * @return Whether the CPA action chip should use a different background color when expanded. + */ + public static boolean shouldUseAlternativeActionChipColor() { + return ChromeFeatureList.getFieldTrialParamByFeatureAsBoolean( + ChromeFeatureList.CONTEXTUAL_PAGE_ACTION_PRICE_TRACKING, + "action_chip_with_different_color", false); + } + + /** * @return Whether contextual page actions are enabled. */ public static boolean isContextualPageActionsEnabled() {
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarStatePredictorTest.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarStatePredictorTest.java index 71c286e..e5874aa 100644 --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarStatePredictorTest.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarStatePredictorTest.java
@@ -18,11 +18,8 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.annotation.Config; -import org.robolectric.annotation.Implementation; -import org.robolectric.annotation.Implements; import org.chromium.base.Callback; -import org.chromium.base.library_loader.LibraryLoader; import org.chromium.base.test.BaseRobolectricTestRunner; import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.omnibox.voice.VoiceRecognitionUtil; @@ -34,46 +31,14 @@ import org.chromium.components.segmentation_platform.proto.SegmentationProto.SegmentId; import org.chromium.ui.permissions.AndroidPermissionDelegate; -import java.util.HashMap; -import java.util.Map; - /** Unit tests for the {@code AdaptiveToolbarStatePredictor} */ -@Config(manifest = Config.NONE, - shadows = {AdaptiveToolbarStatePredictorTest.ShadowChromeFeatureList.class, - AdaptiveToolbarStatePredictorTest.ShadowVoiceRecognitionHandler.class}) +@Config(manifest = Config.NONE) @RunWith(BaseRobolectricTestRunner.class) @DisableFeatures({ChromeFeatureList.ADAPTIVE_BUTTON_IN_TOP_TOOLBAR, ChromeFeatureList.SHARE_BUTTON_IN_TOP_TOOLBAR, ChromeFeatureList.VOICE_BUTTON_IN_TOP_TOOLBAR}) @EnableFeatures({ChromeFeatureList.ADAPTIVE_BUTTON_IN_TOP_TOOLBAR_CUSTOMIZATION_V2}) public class AdaptiveToolbarStatePredictorTest { - // TODO(crbug.com/1199025): Remove this shadow. - @Implements(ChromeFeatureList.class) - static class ShadowChromeFeatureList { - static final Map<String, String> sParamValues = new HashMap<>(); - - @Implementation - public static String getFieldTrialParamByFeature(String feature, String paramKey) { - Assert.assertTrue(ChromeFeatureList.isEnabled(feature)); - return sParamValues.getOrDefault(paramKey, ""); - } - - public static void reset() { - sParamValues.clear(); - } - } - - @Implements(VoiceRecognitionUtil.class) - static class ShadowVoiceRecognitionHandler { - static boolean sIsVoiceRecognitionEnabled; - - @Implementation - public static boolean isVoiceSearchEnabled( - AndroidPermissionDelegate androidPermissionDelegate) { - return sIsVoiceRecognitionEnabled; - } - } - @Rule public TestRule mProcessor = new Features.JUnitProcessor(); @@ -83,15 +48,14 @@ @Before public void setUp() { MockitoAnnotations.initMocks(this); - LibraryLoader.getInstance().setLibrariesLoadedForNativeTests(); - ShadowChromeFeatureList.reset(); + VoiceRecognitionUtil.setIsVoiceSearchEnabledForTesting(true); AdaptiveToolbarFeatures.clearParsedParamsForTesting(); - ShadowVoiceRecognitionHandler.sIsVoiceRecognitionEnabled = true; } @After public void tearDown() { AdaptiveToolbarFeatures.clearParsedParamsForTesting(); + VoiceRecognitionUtil.setIsVoiceSearchEnabledForTesting(null); } @Test @@ -152,7 +116,7 @@ AdaptiveToolbarFeatures.setDefaultSegmentForTesting(AdaptiveToolbarFeatures.SHARE); AdaptiveToolbarFeatures.setIgnoreSegmentationResultsForTesting(false); - ShadowVoiceRecognitionHandler.sIsVoiceRecognitionEnabled = false; + VoiceRecognitionUtil.setIsVoiceSearchEnabledForTesting(false); AdaptiveToolbarStatePredictor statePredictor = buildStatePredictor(true, AdaptiveToolbarButtonVariant.UNKNOWN, true, AdaptiveToolbarButtonVariant.VOICE); UiState expected = new UiState(true, AdaptiveToolbarButtonVariant.SHARE,
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/optional_button/OptionalButtonView.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/optional_button/OptionalButtonView.java index fe5737f..8dba4b9d 100644 --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/optional_button/OptionalButtonView.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/optional_button/OptionalButtonView.java
@@ -30,12 +30,15 @@ import androidx.annotation.VisibleForTesting; import androidx.appcompat.content.res.AppCompatResources; +import com.google.android.material.color.MaterialColors; + import org.chromium.base.ApiCompatibilityUtils; import org.chromium.base.Callback; import org.chromium.base.supplier.BooleanSupplier; import org.chromium.chrome.browser.toolbar.ButtonData; import org.chromium.chrome.browser.toolbar.ButtonData.ButtonSpec; import org.chromium.chrome.browser.toolbar.R; +import org.chromium.chrome.browser.toolbar.adaptive.AdaptiveToolbarFeatures; import org.chromium.chrome.browser.toolbar.adaptive.AdaptiveToolbarFeatures.AdaptiveToolbarButtonVariant; import org.chromium.chrome.browser.toolbar.optional_button.OptionalButtonConstants.TransitionType; import org.chromium.components.browser_ui.widget.listmenu.ListMenuButton; @@ -565,7 +568,12 @@ mButton.setImageDrawable(mIconDrawable); mButton.setVisibility(GONE); - mBackground.setColorFilter(mBackgroundColorFilter); + if (AdaptiveToolbarFeatures.shouldUseAlternativeActionChipColor()) { + int highlightColor = MaterialColors.getColor(this, R.attr.colorSecondaryContainer); + mBackground.setColorFilter(highlightColor); + } else { + mBackground.setColorFilter(mBackgroundColorFilter); + } // Begin a transition, all layout changes after this call will be animated. The animation // starts at the next frame. @@ -592,6 +600,7 @@ // starts at the next frame. beginDelayedTransition(createActionChipTransition()); + mBackground.setColorFilter(mBackgroundColorFilter); mActionChipLabel.setVisibility(GONE); setWidth(mCollapsedStateWidthPx); @@ -641,6 +650,7 @@ setWidth(mCollapsedStateWidthPx); mButton.setVisibility(VISIBLE); + mBackground.setColorFilter(mBackgroundColorFilter); mBackground.setVisibility(mNextButtonType == ButtonType.DYNAMIC ? VISIBLE : GONE); mState = State.RUNNING_SHOW_TRANSITION;
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/optional_button/OptionalButtonViewTest.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/optional_button/OptionalButtonViewTest.java index d18feff..d1d1e0a 100644 --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/optional_button/OptionalButtonViewTest.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/optional_button/OptionalButtonViewTest.java
@@ -16,11 +16,14 @@ import static org.mockito.Mockito.when; import android.app.Activity; +import android.content.Context; import android.content.res.Resources; +import android.graphics.ColorFilter; import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Looper; import android.transition.Transition; +import android.view.ContextThemeWrapper; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; @@ -33,6 +36,7 @@ import androidx.appcompat.content.res.AppCompatResources; +import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -43,12 +47,15 @@ import org.robolectric.shadows.ShadowLooper; import org.chromium.base.Callback; +import org.chromium.base.FeatureList; +import org.chromium.base.FeatureList.TestValues; import org.chromium.base.supplier.BooleanSupplier; import org.chromium.base.test.BaseRobolectricTestRunner; +import org.chromium.chrome.R; +import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.toolbar.ButtonData; import org.chromium.chrome.browser.toolbar.ButtonData.ButtonSpec; import org.chromium.chrome.browser.toolbar.ButtonDataImpl; -import org.chromium.chrome.browser.toolbar.R; import org.chromium.chrome.browser.toolbar.adaptive.AdaptiveToolbarFeatures.AdaptiveToolbarButtonVariant; import org.chromium.chrome.browser.toolbar.optional_button.OptionalButtonConstants.TransitionType; @@ -57,7 +64,7 @@ */ @RunWith(BaseRobolectricTestRunner.class) public class OptionalButtonViewTest { - private Activity mActivity; + private Context mActivity; private OptionalButtonView mOptionalButtonView; private ImageButton mInnerButton; @@ -66,13 +73,19 @@ private ShadowLooper mShadowLooper; private BooleanSupplier mMockAnimationChecker; private Callback<Transition> mMockBeginDelayedTransition; - private int mBeginTransitionCount; @Before public void setUp() { - mActivity = Robolectric.setupActivity(Activity.class); + mActivity = new ContextThemeWrapper( + Robolectric.setupActivity(Activity.class), R.style.Theme_BrowserUI_DayNight); mMockAnimationChecker = Mockito.mock(BooleanSupplier.class); when(mMockAnimationChecker.getAsBoolean()).thenReturn(true); + TestValues testValues = new TestValues(); + testValues.addFieldTrialParamOverride( + ChromeFeatureList.CONTEXTUAL_PAGE_ACTION_PRICE_TRACKING, + "action_chip_with_different_color", "false"); + + FeatureList.setTestValues(testValues); mOptionalButtonView = (OptionalButtonView) LayoutInflater.from(mActivity).inflate( R.layout.optional_button_layout, null, false); @@ -349,6 +362,42 @@ } @Test + public void testUpdateButtonWithAnimation_actionChipWithAlternativeColor() { + ButtonData actionChipButtonData = getDataForPriceTrackingActionChip(); + + // Alternative color is controlled by a field trial param. + TestValues testValues = new TestValues(); + testValues.addFieldTrialParamOverride( + ChromeFeatureList.CONTEXTUAL_PAGE_ACTION_PRICE_TRACKING, + "action_chip_with_different_color", "true"); + FeatureList.setTestValues(testValues); + + ViewGroup transitionRoot = mock(ViewGroup.class); + mOptionalButtonView.setTransitionRoot(transitionRoot); + + // Transition from hidden to action chip + mOptionalButtonView.updateButtonWithAnimation(actionChipButtonData); + + // Normally called by TransitionManager. + mOptionalButtonView.onTransitionStart(null); + mOptionalButtonView.onTransitionEnd(null); + + ColorFilter filterAfterExpansion = mButtonBackground.getColorFilter(); + + // Advance looper to begin collapse transition. + mShadowLooper.runOneTask(); + // Normally called by TransitionManager. + mOptionalButtonView.onTransitionStart(null); + mOptionalButtonView.onTransitionEnd(null); + + ColorFilter filterAfterCollapse = mButtonBackground.getColorFilter(); + + Assert.assertNotNull(filterAfterCollapse); + Assert.assertNotNull(filterAfterExpansion); + Assert.assertNotEquals(filterAfterCollapse, filterAfterExpansion); + } + + @Test public void testSetIconDrawableWithAnimation_hideIcon() { ButtonData buttonData = getDataForStaticNewTabIconButton();
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java index 45f05e78..d6390472 100644 --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java
@@ -744,7 +744,16 @@ private int getBoundsAfterAccountingForRightButtons() { if (mStartSurfaceScrollFraction == 1.0f) return mToolbarSidePadding; - return Math.max(mToolbarSidePadding, mToolbarButtonsContainer.getWidth()); + int toolbarButtonsContainerWidth = mToolbarButtonsContainer.getWidth(); + + // If the button container changed but there's no optional button animation running then we + // must have shown the optional button without an animation, use measuredWidth() to take + // into account the optional button's space. + if (mToolbarButtonsContainer.isDirty() && !mOptionalButtonAnimationRunning) { + toolbarButtonsContainerWidth = mToolbarButtonsContainer.getMeasuredWidth(); + } + + return Math.max(mToolbarSidePadding, toolbarButtonsContainerWidth); } /** @@ -2536,9 +2545,12 @@ getToolbarDataProvider() .getNewTabPageDelegate() .transitioningAwayFromLocationBar(); + boolean isInOverviewAndShowingOmnibox = + getToolbarDataProvider().isInOverviewAndShowingOmnibox(); return mTabSwitcherState == STATIC_TAB && !mUrlFocusChangeInProgress - && !urlHasFocus() && !transitioningAwayFromLocationBarInNTP; + && !urlHasFocus() && !transitioningAwayFromLocationBarInNTP + && !isInOverviewAndShowingOmnibox; } };
diff --git a/chrome/browser/ui/ash/desks/desks_client_browsertest.cc b/chrome/browser/ui/ash/desks/desks_client_browsertest.cc index b4011221..8ba2c5f 100644 --- a/chrome/browser/ui/ash/desks/desks_client_browsertest.cc +++ b/chrome/browser/ui/ash/desks/desks_client_browsertest.cc
@@ -67,7 +67,6 @@ #include "chrome/browser/web_applications/test/web_app_install_test_utils.h" #include "chrome/browser/web_applications/user_display_mode.h" #include "chrome/browser/web_applications/web_app_provider.h" -#include "chrome/test/base/chromeos/ash_browser_test_starter.h" #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/ui_test_utils.h" #include "chromeos/ui/base/window_state_type.h" @@ -2461,116 +2460,7 @@ loop2.Run(); } -class DesksTemplatesClientLacrosTest : public InProcessBrowserTest { - public: - DesksTemplatesClientLacrosTest() { - scoped_feature_list_.InitWithFeatures( - /*enabled_features=*/{ash::features::kDesksTemplates}, - /*disabled_features=*/{ash::features::kDeskTemplateSync}); - } - DesksTemplatesClientLacrosTest(const DesksTemplatesClientLacrosTest&) = - delete; - DesksTemplatesClientLacrosTest& operator=( - const DesksTemplatesClientLacrosTest&) = delete; - ~DesksTemplatesClientLacrosTest() override = default; - - // InProcessBrowserTest: - void SetUpInProcessBrowserTestFixture() override { - if (!ash_starter_.HasLacrosArgument()) - return; - - ASSERT_TRUE(ash_starter_.PrepareEnvironmentForLacros()); - } - - void SetUpOnMainThread() override { - if (!ash_starter_.HasLacrosArgument()) - return; - - // `StartLacros()` will bring up one lacros browser. There will also be one - // classic browser from `InProcessBrowserTest` that can be accessed with - // `browser()`. - LacrosWindowWaiter waiter; - ash_starter_.StartLacros(this); - std::ignore = waiter.Wait(/*expected_count=*/1u); - } - - protected: - // Helper class which waits for lacros windows to become visible. - class LacrosWindowWaiter : public aura::WindowObserver { - public: - LacrosWindowWaiter() { - window_observation_.Observe(ash::Shell::GetPrimaryRootWindow()); - } - LacrosWindowWaiter(const LacrosWindowWaiter&) = delete; - LacrosWindowWaiter& operator=(const LacrosWindowWaiter&) = delete; - ~LacrosWindowWaiter() override = default; - - // Spins the loop and waits for `expected_count` number of lacros windows to - // become visible. - aura::Window::Windows Wait(size_t expected_count) { - DCHECK(windows_.empty()); - DCHECK_GT(expected_count, 0u); - - expected_count_ = expected_count; - run_loop_.Run(); - return windows_; - } - - // aura::WindowObserver:: - void OnWindowVisibilityChanged(aura::Window* window, - bool visible) override { - if (!visible || !crosapi::browser_util::IsLacrosWindow(window)) - return; - - windows_.push_back(window); - if (windows_.size() < expected_count_) - return; - - run_loop_.Quit(); - } - - private: - size_t expected_count_ = 0u; - - // The vector of lacros windows that where shown while waiting. - aura::Window::Windows windows_; - - base::RunLoop run_loop_; - - base::ScopedObservation<aura::Window, aura::WindowObserver> - window_observation_{this}; - }; - - base::test::ScopedFeatureList scoped_feature_list_; - test::AshBrowserTestStarter ash_starter_; -}; - -// Tests launching a template with a browser window. -IN_PROC_BROWSER_TEST_F(DesksTemplatesClientLacrosTest, SystemUILaunchBrowser) { - if (!ash_starter_.HasLacrosArgument()) - return; - - ASSERT_TRUE(crosapi::BrowserManager::Get()->IsRunning()); - - // Enter overview and save the current desk as a template. The current desk - // has one lacros browser, and one regular browser. - ash::ToggleOverview(); - ash::WaitForOverviewEnterAnimation(); - ClickSaveDeskAsTemplateButton(); - - // Launch the saved desk template. We expect two launched lacros windows, - // since the regular browser window was saved and will be launched as a lacros - // window. Check the launched windows will have data in - // `app_restore::kWindowInfoKey`, otherwise ash does not know that they are - // launched from desk templates. See https://crbug.com/1333965 for more - // details. - LacrosWindowWaiter waiter; - ClickFirstTemplateItem(); - aura::Window::Windows launched_windows = waiter.Wait(/*expected_count=*/2u); - ASSERT_EQ(2u, launched_windows.size()); - for (auto* window : launched_windows) - EXPECT_TRUE(window->GetProperty(app_restore::kWindowInfoKey)); -} +// TODO(crbug.com/1333965): Add some tests to launch LaCros browser. class DesksTemplatesClientArcTest : public InProcessBrowserTest { public:
diff --git a/chrome/browser/ui/intent_picker_tab_helper_unittest.cc b/chrome/browser/ui/intent_picker_tab_helper_unittest.cc index c6bf848..c1bf8e5 100644 --- a/chrome/browser/ui/intent_picker_tab_helper_unittest.cc +++ b/chrome/browser/ui/intent_picker_tab_helper_unittest.cc
@@ -121,13 +121,13 @@ // None of the histograms should be incremented. histogram_tester.ExpectBucketCount( - "ChromeOS.Intents.LinkCapturingEvent.WebApp", + "ChromeOS.Intents.LinkCapturingEvent2.WebApp", apps::IntentHandlingMetrics::LinkCapturingEvent::kEntryPointShown, 0); histogram_tester.ExpectBucketCount( - "ChromeOS.Intents.LinkCapturingEvent.ArcApp", + "ChromeOS.Intents.LinkCapturingEvent2.ArcApp", apps::IntentHandlingMetrics::LinkCapturingEvent::kEntryPointShown, 0); histogram_tester.ExpectBucketCount( - "ChromeOS.Intents.LinkCapturingEvent", + "ChromeOS.Intents.LinkCapturingEvent2", apps::IntentHandlingMetrics::LinkCapturingEvent::kEntryPointShown, 0); // Create app list with both a web and an ARC app, and show the intent picker @@ -140,13 +140,13 @@ // All of the histograms should be incremented. histogram_tester.ExpectBucketCount( - "ChromeOS.Intents.LinkCapturingEvent.WebApp", + "ChromeOS.Intents.LinkCapturingEvent2.WebApp", apps::IntentHandlingMetrics::LinkCapturingEvent::kEntryPointShown, 1); histogram_tester.ExpectBucketCount( - "ChromeOS.Intents.LinkCapturingEvent.ArcApp", + "ChromeOS.Intents.LinkCapturingEvent2.ArcApp", apps::IntentHandlingMetrics::LinkCapturingEvent::kEntryPointShown, 1); histogram_tester.ExpectBucketCount( - "ChromeOS.Intents.LinkCapturingEvent", + "ChromeOS.Intents.LinkCapturingEvent2", apps::IntentHandlingMetrics::LinkCapturingEvent::kEntryPointShown, 1); // Hide the intent picker icon. @@ -160,13 +160,13 @@ // Only the web app and general histograms should be incremented. histogram_tester.ExpectBucketCount( - "ChromeOS.Intents.LinkCapturingEvent.WebApp", + "ChromeOS.Intents.LinkCapturingEvent2.WebApp", apps::IntentHandlingMetrics::LinkCapturingEvent::kEntryPointShown, 2); histogram_tester.ExpectBucketCount( - "ChromeOS.Intents.LinkCapturingEvent.ArcApp", + "ChromeOS.Intents.LinkCapturingEvent2.ArcApp", apps::IntentHandlingMetrics::LinkCapturingEvent::kEntryPointShown, 1); histogram_tester.ExpectBucketCount( - "ChromeOS.Intents.LinkCapturingEvent", + "ChromeOS.Intents.LinkCapturingEvent2", apps::IntentHandlingMetrics::LinkCapturingEvent::kEntryPointShown, 2); // Hide the intent picker icon. @@ -180,13 +180,13 @@ // Only the ARC app and general histograms should be incremented. histogram_tester.ExpectBucketCount( - "ChromeOS.Intents.LinkCapturingEvent.WebApp", + "ChromeOS.Intents.LinkCapturingEvent2.WebApp", apps::IntentHandlingMetrics::LinkCapturingEvent::kEntryPointShown, 2); histogram_tester.ExpectBucketCount( - "ChromeOS.Intents.LinkCapturingEvent.ArcApp", + "ChromeOS.Intents.LinkCapturingEvent2.ArcApp", apps::IntentHandlingMetrics::LinkCapturingEvent::kEntryPointShown, 2); histogram_tester.ExpectBucketCount( - "ChromeOS.Intents.LinkCapturingEvent", + "ChromeOS.Intents.LinkCapturingEvent2", apps::IntentHandlingMetrics::LinkCapturingEvent::kEntryPointShown, 3); // Hide the intent picker icon. @@ -202,13 +202,13 @@ // Only the general histogram should be incremented. histogram_tester.ExpectBucketCount( - "ChromeOS.Intents.LinkCapturingEvent.WebApp", + "ChromeOS.Intents.LinkCapturingEvent2.WebApp", apps::IntentHandlingMetrics::LinkCapturingEvent::kEntryPointShown, 2); histogram_tester.ExpectBucketCount( - "ChromeOS.Intents.LinkCapturingEvent.ArcApp", + "ChromeOS.Intents.LinkCapturingEvent2.ArcApp", apps::IntentHandlingMetrics::LinkCapturingEvent::kEntryPointShown, 2); histogram_tester.ExpectBucketCount( - "ChromeOS.Intents.LinkCapturingEvent", + "ChromeOS.Intents.LinkCapturingEvent2", apps::IntentHandlingMetrics::LinkCapturingEvent::kEntryPointShown, 4); } #endif // #if BUILDFLAG(IS_CHROMEOS)
diff --git a/chrome/browser/ui/views/frame/top_controls_slide_controller_chromeos_browsertest.cc b/chrome/browser/ui/views/frame/top_controls_slide_controller_chromeos_browsertest.cc index c7bbede4..382273e 100644 --- a/chrome/browser/ui/views/frame/top_controls_slide_controller_chromeos_browsertest.cc +++ b/chrome/browser/ui/views/frame/top_controls_slide_controller_chromeos_browsertest.cc
@@ -13,8 +13,6 @@ #include "ash/public/ash_interfaces.h" #include "ash/public/cpp/tablet_mode.h" #include "ash/public/cpp/test/shell_test_api.h" -#include "ash/public/mojom/cros_display_config.mojom-test-utils.h" -#include "ash/public/mojom/cros_display_config.mojom.h" #include "base/bind.h" #include "base/callback_helpers.h" #include "base/command_line.h" @@ -34,6 +32,8 @@ #include "chrome/common/url_constants.h" #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/ui_test_utils.h" +#include "chromeos/crosapi/mojom/cros_display_config.mojom-test-utils.h" +#include "chromeos/crosapi/mojom/cros_display_config.mojom.h" #include "components/content_settings/core/common/content_settings_types.h" #include "components/permissions/permission_request.h" #include "components/permissions/permission_request_manager.h" @@ -950,31 +950,33 @@ // Try all possible rotations. Changing display rotation should *not* unhide // top chrome. - const std::vector<ash::mojom::DisplayRotationOptions> rotations_to_try = { - ash::mojom::DisplayRotationOptions::k90Degrees, - ash::mojom::DisplayRotationOptions::k180Degrees, - ash::mojom::DisplayRotationOptions::k270Degrees, - ash::mojom::DisplayRotationOptions::kZeroDegrees, + const std::vector<crosapi::mojom::DisplayRotationOptions> rotations_to_try = { + crosapi::mojom::DisplayRotationOptions::k90Degrees, + crosapi::mojom::DisplayRotationOptions::k180Degrees, + crosapi::mojom::DisplayRotationOptions::k270Degrees, + crosapi::mojom::DisplayRotationOptions::kZeroDegrees, }; - mojo::Remote<ash::mojom::CrosDisplayConfigController> cros_display_config; + mojo::Remote<crosapi::mojom::CrosDisplayConfigController> cros_display_config; ash::BindCrosDisplayConfigController( cros_display_config.BindNewPipeAndPassReceiver()); - ash::mojom::CrosDisplayConfigControllerAsyncWaiter waiter_for( + crosapi::mojom::CrosDisplayConfigControllerAsyncWaiter waiter_for( cros_display_config.get()); - std::vector<ash::mojom::DisplayUnitInfoPtr> info_list; + std::vector<crosapi::mojom::DisplayUnitInfoPtr> info_list; waiter_for.GetDisplayUnitInfoList(false /* single_unified */, &info_list); - for (const ash::mojom::DisplayUnitInfoPtr& display_unit_info : info_list) { + for (const crosapi::mojom::DisplayUnitInfoPtr& display_unit_info : + info_list) { const std::string display_id = display_unit_info->id; for (const auto& rotation : rotations_to_try) { BrowserViewLayoutWaiter browser_view_layout_waiter(browser_view()); - auto config_properties = ash::mojom::DisplayConfigProperties::New(); - config_properties->rotation = ash::mojom::DisplayRotation::New(rotation); - ash::mojom::DisplayConfigResult result; - waiter_for.SetDisplayProperties(display_id, std::move(config_properties), - ash::mojom::DisplayConfigSource::kUser, - &result); - EXPECT_EQ(result, ash::mojom::DisplayConfigResult::kSuccess); + auto config_properties = crosapi::mojom::DisplayConfigProperties::New(); + config_properties->rotation = + crosapi::mojom::DisplayRotation::New(rotation); + crosapi::mojom::DisplayConfigResult result; + waiter_for.SetDisplayProperties( + display_id, std::move(config_properties), + crosapi::mojom::DisplayConfigSource::kUser, &result); + EXPECT_EQ(result, crosapi::mojom::DisplayConfigResult::kSuccess); // Wait for the browser view to change its bounds as a result of display // rotation.
diff --git a/chrome/browser/ui/views/intent_picker_bubble_view_browsertest_chromeos.cc b/chrome/browser/ui/views/intent_picker_bubble_view_browsertest_chromeos.cc index 69aebe9..c2071bb 100644 --- a/chrome/browser/ui/views/intent_picker_bubble_view_browsertest_chromeos.cc +++ b/chrome/browser/ui/views/intent_picker_bubble_view_browsertest_chromeos.cc
@@ -911,26 +911,26 @@ // WebApp histogram. histogram_tester.ExpectBucketCount( - "ChromeOS.Intents.LinkCapturingEvent.WebApp", + "ChromeOS.Intents.LinkCapturingEvent2.WebApp", apps::IntentHandlingMetrics::LinkCapturingEvent::kEntryPointShown, 1); histogram_tester.ExpectBucketCount( - "ChromeOS.Intents.LinkCapturingEvent.WebApp", + "ChromeOS.Intents.LinkCapturingEvent2.WebApp", apps::IntentHandlingMetrics::LinkCapturingEvent::kAppOpened, 1); // ArcApp histogram. histogram_tester.ExpectBucketCount( - "ChromeOS.Intents.LinkCapturingEvent.ArcApp", + "ChromeOS.Intents.LinkCapturingEvent2.ArcApp", apps::IntentHandlingMetrics::LinkCapturingEvent::kEntryPointShown, 1); histogram_tester.ExpectBucketCount( - "ChromeOS.Intents.LinkCapturingEvent.ArcApp", + "ChromeOS.Intents.LinkCapturingEvent2.ArcApp", apps::IntentHandlingMetrics::LinkCapturingEvent::kAppOpened, 0); // General histogram. histogram_tester.ExpectBucketCount( - "ChromeOS.Intents.LinkCapturingEvent", + "ChromeOS.Intents.LinkCapturingEvent2", apps::IntentHandlingMetrics::LinkCapturingEvent::kEntryPointShown, 1); histogram_tester.ExpectBucketCount( - "ChromeOS.Intents.LinkCapturingEvent", + "ChromeOS.Intents.LinkCapturingEvent2", apps::IntentHandlingMetrics::LinkCapturingEvent::kAppOpened, 1); } @@ -1208,13 +1208,13 @@ // Check that the correct histograms are incremented for recording that // settings were changed. histogram_tester.ExpectBucketCount( - "ChromeOS.Intents.LinkCapturingEvent.WebApp", + "ChromeOS.Intents.LinkCapturingEvent2.WebApp", apps::IntentHandlingMetrics::LinkCapturingEvent::kSettingsChanged, 1); histogram_tester.ExpectBucketCount( - "ChromeOS.Intents.LinkCapturingEvent.ArcApp", + "ChromeOS.Intents.LinkCapturingEvent2.ArcApp", apps::IntentHandlingMetrics::LinkCapturingEvent::kSettingsChanged, 0); histogram_tester.ExpectBucketCount( - "ChromeOS.Intents.LinkCapturingEvent", + "ChromeOS.Intents.LinkCapturingEvent2", apps::IntentHandlingMetrics::LinkCapturingEvent::kSettingsChanged, 1); }
diff --git a/chrome/browser/ui/views/side_search/unified_side_search_controller.cc b/chrome/browser/ui/views/side_search/unified_side_search_controller.cc index 0acb2ace..85795c2a 100644 --- a/chrome/browser/ui/views/side_search/unified_side_search_controller.cc +++ b/chrome/browser/ui/views/side_search/unified_side_search_controller.cc
@@ -70,6 +70,12 @@ void UnifiedSideSearchController::SidePanelAvailabilityChanged( bool should_close) { if (should_close) { + auto* registry = SidePanelRegistry::Get(web_contents()); + if (registry && registry->active_entry().has_value() && + registry->active_entry().value()->id() == + SidePanelEntry::Id::kSideSearch) { + registry->ResetActiveEntry(); + } CloseSidePanel(); } else { UpdateSidePanel();
diff --git a/chrome/browser/ui/views/side_search/unified_side_search_controller_interactive_uitest.cc b/chrome/browser/ui/views/side_search/unified_side_search_controller_interactive_uitest.cc index b4633d5..5766873 100644 --- a/chrome/browser/ui/views/side_search/unified_side_search_controller_interactive_uitest.cc +++ b/chrome/browser/ui/views/side_search/unified_side_search_controller_interactive_uitest.cc
@@ -247,12 +247,11 @@ EXPECT_FALSE(side_panel->GetVisible()); } -// TODO(yuhengh): Currently if a side search side panel WebContents crashes -// with the unified side panel in a background tab, switching to the tab will -// re-open the side panel and reload the side panel WebContents. Determine if -// this is expected behavior and update this test. -IN_PROC_BROWSER_TEST_F(SideSearchV2Test, - DISABLED_SidePanelCrashesCloseSidePanel) { +IN_PROC_BROWSER_TEST_F(SideSearchV2Test, SidePanelCrashesCloseSidePanel) { + auto* browser_view = BrowserViewFor(browser()); + auto* coordinator = browser_view->side_panel_coordinator(); + coordinator->SetNoDelaysForTesting(); + // Open two tabs with the side panel open. NavigateToMatchingSearchPageAndOpenSidePanel(browser()); AppendTab(browser(), GetNonMatchingUrl()); @@ -278,9 +277,23 @@ // Side panel should be closed and the WebContents cleared. EXPECT_FALSE(side_panel->GetVisible()); EXPECT_EQ(nullptr, GetSidePanelContentsFor(browser(), 1)); + EXPECT_EQ(nullptr, GetSidePanelContentsFor(browser(), 0)); + + // Reopen side panel. + coordinator->Show(); + + // Since the side panel contents of the first tab is already cleared, + // switch back to the first tab to reload side panel contents. + ActivateTabAt(browser(), 0); + EXPECT_NE(nullptr, GetSidePanelContentsFor(browser(), 0)); + ActivateTabAt(browser(), 1); + + // Side panel is still open. + EXPECT_TRUE(side_panel->GetVisible()); // Simulate a crash in the side panel contents of the first tab which is not // currently active. + EXPECT_NE(nullptr, GetSidePanelContentsFor(browser(), 0)); auto* rph_first_tab = GetSidePanelContentsFor(browser(), 0) ->GetPrimaryMainFrame() ->GetProcess();
diff --git a/chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler.cc index dba7e38..d5252e81 100644 --- a/chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler.cc +++ b/chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler.cc
@@ -13,39 +13,15 @@ namespace chromeos { -constexpr StaticOobeScreenId EncryptionMigrationScreenView::kScreenId; - EncryptionMigrationScreenHandler::EncryptionMigrationScreenHandler() - : BaseScreenHandler(kScreenId) { - set_user_acted_method_path_deprecated( - "login.EncryptionMigrationScreen.userActed"); -} + : BaseScreenHandler(kScreenId) {} -EncryptionMigrationScreenHandler::~EncryptionMigrationScreenHandler() { - if (delegate_) - delegate_->OnViewDestroyed(this); -} +EncryptionMigrationScreenHandler::~EncryptionMigrationScreenHandler() = default; void EncryptionMigrationScreenHandler::Show() { - if (!IsJavascriptAllowed() || !delegate_) { - show_on_init_ = true; - return; - } ShowInWebUI(); } -void EncryptionMigrationScreenHandler::Hide() { - show_on_init_ = false; -} - -void EncryptionMigrationScreenHandler::SetDelegate( - EncryptionMigrationScreen* delegate) { - delegate_ = delegate; - BaseScreenHandler::SetBaseScreenDeprecated(delegate); - if (IsJavascriptAllowed()) - InitializeDeprecated(); -} - void EncryptionMigrationScreenHandler::DeclareLocalizedValues( ::login::LocalizedValuesBuilder* builder) { builder->Add("migrationReadyTitle", IDS_ENCRYPTION_MIGRATION_READY_TITLE); @@ -94,47 +70,35 @@ builder->Add("gaiaLoading", IDS_LOGIN_GAIA_LOADING_MESSAGE); } -void EncryptionMigrationScreenHandler::InitializeDeprecated() { - if (!IsJavascriptAllowed() || !delegate_) - return; - - if (show_on_init_) { - Show(); - show_on_init_ = false; - } -} - void EncryptionMigrationScreenHandler::SetBatteryState(double batteryPercent, bool isEnoughBattery, bool isCharging) { - CallJS("login.EncryptionMigrationScreen.setBatteryState", batteryPercent, - isEnoughBattery, isCharging); + CallExternalAPI("setBatteryState", batteryPercent, isEnoughBattery, + isCharging); } void EncryptionMigrationScreenHandler::SetIsResuming(bool isResuming) { - CallJS("login.EncryptionMigrationScreen.setIsResuming", isResuming); + CallExternalAPI("setIsResuming", isResuming); } void EncryptionMigrationScreenHandler::SetUIState(UIState state) { - CallJS("login.EncryptionMigrationScreen.setUIState", static_cast<int>(state)); + CallExternalAPI("setUIState", static_cast<int>(state)); } void EncryptionMigrationScreenHandler::SetSpaceInfoInString( int64_t availableSpaceSize, int64_t necessarySpaceSize) { - CallJS("login.EncryptionMigrationScreen.setSpaceInfoInString", - ui::FormatBytes(availableSpaceSize), - ui::FormatBytes(necessarySpaceSize)); + CallExternalAPI("setSpaceInfoInString", ui::FormatBytes(availableSpaceSize), + ui::FormatBytes(necessarySpaceSize)); } void EncryptionMigrationScreenHandler::SetNecessaryBatteryPercent( double batteryPercent) { - CallJS("login.EncryptionMigrationScreen.setNecessaryBatteryPercent", - batteryPercent); + CallExternalAPI("setNecessaryBatteryPercent", batteryPercent); } void EncryptionMigrationScreenHandler::SetMigrationProgress(double progress) { - CallJS("login.EncryptionMigrationScreen.setMigrationProgress", progress); + CallExternalAPI("setMigrationProgress", progress); } } // namespace chromeos
diff --git a/chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler.h b/chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler.h index 8cd9336..15ffbe0 100644 --- a/chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler.h +++ b/chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler.h
@@ -5,17 +5,16 @@ #ifndef CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_ENCRYPTION_MIGRATION_SCREEN_HANDLER_H_ #define CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_ENCRYPTION_MIGRATION_SCREEN_HANDLER_H_ +#include "base/memory/weak_ptr.h" #include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h" -namespace ash { -class EncryptionMigrationScreen; -} - namespace chromeos { -class EncryptionMigrationScreenView { +class EncryptionMigrationScreenView + : public base::SupportsWeakPtr<EncryptionMigrationScreenView> { public: - constexpr static StaticOobeScreenId kScreenId{"encryption-migration"}; + inline constexpr static StaticOobeScreenId kScreenId{ + "encryption-migration", "EncryptionMigrationScreen"}; // Enumeration for migration UI state. These values must be kept in sync with // EncryptionMigrationUIState in JS code, and match the numbering for @@ -30,11 +29,9 @@ COUNT }; - virtual ~EncryptionMigrationScreenView() {} + virtual ~EncryptionMigrationScreenView() = default; virtual void Show() = 0; - virtual void Hide() = 0; - virtual void SetDelegate(ash::EncryptionMigrationScreen* delegate) = 0; virtual void SetBatteryState(double batteryPercent, bool isEnoughBattery, bool isCharging) = 0; @@ -63,8 +60,6 @@ // EncryptionMigrationScreenView implementation: void Show() override; - void Hide() override; - void SetDelegate(ash::EncryptionMigrationScreen* delegate) override; void SetBatteryState(double batteryPercent, bool isEnoughBattery, bool isCharging) override; @@ -78,11 +73,6 @@ // BaseScreenHandler implementation: void DeclareLocalizedValues( ::login::LocalizedValuesBuilder* builder) override; - void InitializeDeprecated() override; - - private: - ash::EncryptionMigrationScreen* delegate_ = nullptr; - bool show_on_init_ = false; }; } // namespace chromeos
diff --git a/chrome/browser/ui/webui/chromeos/login/oobe_display_chooser.cc b/chrome/browser/ui/webui/chromeos/login/oobe_display_chooser.cc index 01411d6..cfa5b33f 100644 --- a/chrome/browser/ui/webui/chromeos/login/oobe_display_chooser.cc +++ b/chrome/browser/ui/webui/chromeos/login/oobe_display_chooser.cc
@@ -88,12 +88,12 @@ device_data_manager->GetTouchscreenDevices()) { if (IsAllowListedVendorId(device.vendor_id) && device.target_display_id != display::kInvalidDisplayId) { - auto config_properties = ash::mojom::DisplayConfigProperties::New(); + auto config_properties = crosapi::mojom::DisplayConfigProperties::New(); config_properties->set_primary = true; cros_display_config_->SetDisplayProperties( base::NumberToString(device.target_display_id), - std::move(config_properties), ash::mojom::DisplayConfigSource::kUser, - base::DoNothing()); + std::move(config_properties), + crosapi::mojom::DisplayConfigSource::kUser, base::DoNothing()); break; } }
diff --git a/chrome/browser/ui/webui/chromeos/login/oobe_display_chooser.h b/chrome/browser/ui/webui/chromeos/login/oobe_display_chooser.h index 3cc17a7..685e6b3 100644 --- a/chrome/browser/ui/webui/chromeos/login/oobe_display_chooser.h +++ b/chrome/browser/ui/webui/chromeos/login/oobe_display_chooser.h
@@ -5,9 +5,9 @@ #ifndef CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_OOBE_DISPLAY_CHOOSER_H_ #define CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_OOBE_DISPLAY_CHOOSER_H_ -#include "ash/public/mojom/cros_display_config.mojom.h" #include "base/memory/weak_ptr.h" #include "base/scoped_observation.h" +#include "chromeos/crosapi/mojom/cros_display_config.mojom.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/remote.h" #include "ui/events/devices/device_data_manager.h" @@ -33,7 +33,7 @@ void TryToPlaceUiOnTouchDisplay(); void set_cros_display_config_for_test( - mojo::PendingRemote<ash::mojom::CrosDisplayConfigController> + mojo::PendingRemote<crosapi::mojom::CrosDisplayConfigController> cros_display_config) { cros_display_config_.reset(); cros_display_config_.Bind(std::move(cros_display_config)); @@ -53,7 +53,8 @@ base::ScopedObservation<ui::DeviceDataManager, ui::InputDeviceEventObserver> scoped_observation_{this}; - mojo::Remote<ash::mojom::CrosDisplayConfigController> cros_display_config_; + mojo::Remote<crosapi::mojom::CrosDisplayConfigController> + cros_display_config_; base::WeakPtrFactory<OobeDisplayChooser> weak_ptr_factory_{this}; };
diff --git a/chrome/browser/ui/webui/chromeos/login/oobe_display_chooser_unittest.cc b/chrome/browser/ui/webui/chromeos/login/oobe_display_chooser_unittest.cc index 1ae02bc3..26e427e3 100644 --- a/chrome/browser/ui/webui/chromeos/login/oobe_display_chooser_unittest.cc +++ b/chrome/browser/ui/webui/chromeos/login/oobe_display_chooser_unittest.cc
@@ -8,11 +8,11 @@ #include <vector> #include "ash/display/display_configuration_controller.h" -#include "ash/public/mojom/cros_display_config.mojom.h" #include "ash/shell.h" #include "base/run_loop.h" #include "base/strings/string_number_conversions.h" #include "chrome/test/base/chrome_ash_test_base.h" +#include "chromeos/crosapi/mojom/cros_display_config.mojom.h" #include "mojo/public/cpp/bindings/pending_associated_remote.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/receiver.h" @@ -30,48 +30,50 @@ namespace { -class TestCrosDisplayConfig : public ash::mojom::CrosDisplayConfigController { +class TestCrosDisplayConfig + : public crosapi::mojom::CrosDisplayConfigController { public: TestCrosDisplayConfig() = default; TestCrosDisplayConfig(const TestCrosDisplayConfig&) = delete; TestCrosDisplayConfig& operator=(const TestCrosDisplayConfig&) = delete; - mojo::PendingRemote<ash::mojom::CrosDisplayConfigController> + mojo::PendingRemote<crosapi::mojom::CrosDisplayConfigController> CreateRemoteAndBind() { return receiver_.BindNewPipeAndPassRemote(); } - // ash::mojom::CrosDisplayConfigController: + // crosapi::mojom::CrosDisplayConfigController: void AddObserver( - mojo::PendingAssociatedRemote<ash::mojom::CrosDisplayConfigObserver> + mojo::PendingAssociatedRemote<crosapi::mojom::CrosDisplayConfigObserver> observer) override {} void GetDisplayLayoutInfo(GetDisplayLayoutInfoCallback callback) override {} - void SetDisplayLayoutInfo(ash::mojom::DisplayLayoutInfoPtr info, + void SetDisplayLayoutInfo(crosapi::mojom::DisplayLayoutInfoPtr info, SetDisplayLayoutInfoCallback callback) override {} void GetDisplayUnitInfoList( bool single_unified, GetDisplayUnitInfoListCallback callback) override {} - void SetDisplayProperties(const std::string& id, - ash::mojom::DisplayConfigPropertiesPtr properties, - ash::mojom::DisplayConfigSource source, - SetDisplayPropertiesCallback callback) override { + void SetDisplayProperties( + const std::string& id, + crosapi::mojom::DisplayConfigPropertiesPtr properties, + crosapi::mojom::DisplayConfigSource source, + SetDisplayPropertiesCallback callback) override { if (properties->set_primary) { int64_t display_id; base::StringToInt64(id, &display_id); ash::Shell::Get()->window_tree_host_manager()->SetPrimaryDisplayId( display_id); } - std::move(callback).Run(ash::mojom::DisplayConfigResult::kSuccess); + std::move(callback).Run(crosapi::mojom::DisplayConfigResult::kSuccess); } void SetUnifiedDesktopEnabled(bool enabled) override {} void OverscanCalibration(const std::string& display_id, - ash::mojom::DisplayConfigOperation op, + crosapi::mojom::DisplayConfigOperation op, const absl::optional<gfx::Insets>& delta, OverscanCalibrationCallback callback) override {} void TouchCalibration(const std::string& display_id, - ash::mojom::DisplayConfigOperation op, - ash::mojom::TouchCalibrationPtr calibration, + crosapi::mojom::DisplayConfigOperation op, + crosapi::mojom::TouchCalibrationPtr calibration, TouchCalibrationCallback callback) override {} void HighlightDisplay(int64_t id) override {} void DragDisplayDelta(int64_t display_id, @@ -79,7 +81,7 @@ int32_t delta_y) override {} private: - mojo::Receiver<ash::mojom::CrosDisplayConfigController> receiver_{this}; + mojo::Receiver<crosapi::mojom::CrosDisplayConfigController> receiver_{this}; }; class OobeDisplayChooserTest : public ChromeAshTestBase {
diff --git a/chrome/browser/ui/webui/chromeos/login/testapi/oobe_test_api_handler.cc b/chrome/browser/ui/webui/chromeos/login/testapi/oobe_test_api_handler.cc index 3cc0e66..8d082fc 100644 --- a/chrome/browser/ui/webui/chromeos/login/testapi/oobe_test_api_handler.cc +++ b/chrome/browser/ui/webui/chromeos/login/testapi/oobe_test_api_handler.cc
@@ -8,7 +8,6 @@ #include "ash/constants/ash_switches.h" #include "ash/public/ash_interfaces.h" #include "ash/public/cpp/tablet_mode.h" -#include "ash/public/mojom/cros_display_config.mojom.h" #include "base/bind.h" #include "base/check.h" #include "base/logging.h" @@ -144,7 +143,7 @@ void OobeTestAPIHandler::HandleGetPrimaryDisplayName( const std::string& callback_id) { - mojo::Remote<ash::mojom::CrosDisplayConfigController> cros_display_config; + mojo::Remote<crosapi::mojom::CrosDisplayConfigController> cros_display_config; ash::BindCrosDisplayConfigController( cros_display_config.BindNewPipeAndPassReceiver()); @@ -156,9 +155,9 @@ void OobeTestAPIHandler::OnGetDisplayUnitInfoList( const std::string& callback_id, - std::vector<ash::mojom::DisplayUnitInfoPtr> info_list) { + std::vector<crosapi::mojom::DisplayUnitInfoPtr> info_list) { std::string display_name; - for (const ash::mojom::DisplayUnitInfoPtr& info : info_list) { + for (const crosapi::mojom::DisplayUnitInfoPtr& info : info_list) { if (info->is_primary) { display_name = info->name; break;
diff --git a/chrome/browser/ui/webui/chromeos/login/testapi/oobe_test_api_handler.h b/chrome/browser/ui/webui/chromeos/login/testapi/oobe_test_api_handler.h index 8aaf69c..591d91f 100644 --- a/chrome/browser/ui/webui/chromeos/login/testapi/oobe_test_api_handler.h +++ b/chrome/browser/ui/webui/chromeos/login/testapi/oobe_test_api_handler.h
@@ -8,9 +8,9 @@ #include <string> #include <vector> -#include "ash/public/mojom/cros_display_config.mojom.h" #include "base/values.h" #include "chrome/browser/ui/webui/chromeos/login/base_webui_handler.h" +#include "chromeos/crosapi/mojom/cros_display_config.mojom.h" namespace chromeos { @@ -38,7 +38,7 @@ void HandleGetPrimaryDisplayName(const std::string& callback_id); void OnGetDisplayUnitInfoList( const std::string& callback_id, - std::vector<ash::mojom::DisplayUnitInfoPtr> info_list); + std::vector<crosapi::mojom::DisplayUnitInfoPtr> info_list); }; } // namespace chromeos
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 9c213a2..85a74f2 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
@@ -262,6 +262,7 @@ {"modulesMenuItem", IDS_NTP_CUSTOMIZE_MENU_MODULES_LABEL}, {"shortcutsOption", IDS_NTP_CUSTOMIZE_MENU_SHORTCUTS_LABEL}, {"shortcutsSuggested", IDS_NTP_CUSTOMIZE_MOST_VISITED_DESC}, + {"themesContainerLabel", IDS_NTP_THEMES_CONTAINER_LABEL}, {"themesMenuItem", IDS_NTP_CUSTOMIZE_MENU_COLOR_LABEL}, {"thirdPartyThemeDescription", IDS_NTP_CUSTOMIZE_3PT_THEME_DESC}, {"uninstallThirdPartyThemeButton", IDS_NTP_CUSTOMIZE_3PT_THEME_UNINSTALL},
diff --git a/chrome/browser/ui/webui/settings/chromeos/device_display_handler.h b/chrome/browser/ui/webui/settings/chromeos/device_display_handler.h index d3a3730..ab829bf 100644 --- a/chrome/browser/ui/webui/settings/chromeos/device_display_handler.h +++ b/chrome/browser/ui/webui/settings/chromeos/device_display_handler.h
@@ -5,8 +5,8 @@ #ifndef CHROME_BROWSER_UI_WEBUI_SETTINGS_CHROMEOS_DEVICE_DISPLAY_HANDLER_H_ #define CHROME_BROWSER_UI_WEBUI_SETTINGS_CHROMEOS_DEVICE_DISPLAY_HANDLER_H_ -#include "ash/public/mojom/cros_display_config.mojom.h" #include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h" +#include "chromeos/crosapi/mojom/cros_display_config.mojom.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/remote.h" @@ -30,7 +30,8 @@ void HandleHighlightDisplay(const base::Value::List& args); void HandleDragDisplayDelta(const base::Value::List& args); - mojo::Remote<ash::mojom::CrosDisplayConfigController> cros_display_config_; + mojo::Remote<crosapi::mojom::CrosDisplayConfigController> + cros_display_config_; }; } // namespace settings
diff --git a/chrome/browser/ui/webui/settings/chromeos/device_section.cc b/chrome/browser/ui/webui/settings/chromeos/device_section.cc index 61307e3..30f8e2591 100644 --- a/chrome/browser/ui/webui/settings/chromeos/device_section.cc +++ b/chrome/browser/ui/webui/settings/chromeos/device_section.cc
@@ -857,7 +857,8 @@ // Display search tags are added/removed dynamically. ash::BindCrosDisplayConfigController( cros_display_config_.BindNewPipeAndPassReceiver()); - mojo::PendingAssociatedRemote<ash::mojom::CrosDisplayConfigObserver> observer; + mojo::PendingAssociatedRemote<crosapi::mojom::CrosDisplayConfigObserver> + observer; cros_display_config_observer_receiver_.Bind( observer.InitWithNewEndpointAndPassReceiver()); cros_display_config_->AddObserver(std::move(observer)); @@ -1143,15 +1144,15 @@ } void DeviceSection::OnGetDisplayUnitInfoList( - std::vector<ash::mojom::DisplayUnitInfoPtr> display_unit_info_list) { + std::vector<crosapi::mojom::DisplayUnitInfoPtr> display_unit_info_list) { cros_display_config_->GetDisplayLayoutInfo(base::BindOnce( &DeviceSection::OnGetDisplayLayoutInfo, base::Unretained(this), std::move(display_unit_info_list))); } void DeviceSection::OnGetDisplayLayoutInfo( - std::vector<ash::mojom::DisplayUnitInfoPtr> display_unit_info_list, - ash::mojom::DisplayLayoutInfoPtr display_layout_info) { + std::vector<crosapi::mojom::DisplayUnitInfoPtr> display_unit_info_list, + crosapi::mojom::DisplayLayoutInfoPtr display_layout_info) { bool has_multiple_displays = display_unit_info_list.size() > 1u; // Mirroring mode is active if there's at least one display and if there's a @@ -1168,7 +1169,7 @@ unified_desktop_mode |= display_unit_info->is_primary && display_layout_info->layout_mode == - ash::mojom::DisplayLayoutMode::kUnified; + crosapi::mojom::DisplayLayoutMode::kUnified; } SearchTagRegistry::ScopedTagUpdater updater = registry()->StartUpdate();
diff --git a/chrome/browser/ui/webui/settings/chromeos/device_section.h b/chrome/browser/ui/webui/settings/chromeos/device_section.h index e93e3cc..5d8a04b 100644 --- a/chrome/browser/ui/webui/settings/chromeos/device_section.h +++ b/chrome/browser/ui/webui/settings/chromeos/device_section.h
@@ -8,11 +8,11 @@ #include <vector> #include "ash/public/cpp/night_light_controller.h" -#include "ash/public/mojom/cros_display_config.mojom.h" #include "base/memory/weak_ptr.h" #include "base/values.h" #include "chrome/browser/ash/system/pointer_device_observer.h" #include "chrome/browser/ui/webui/settings/chromeos/os_settings_section.h" +#include "chromeos/crosapi/mojom/cros_display_config.mojom.h" #include "chromeos/dbus/power/power_manager_client.h" #include "mojo/public/cpp/bindings/associated_receiver.h" #include "mojo/public/cpp/bindings/remote.h" @@ -35,7 +35,7 @@ public system::PointerDeviceObserver::Observer, public ui::InputDeviceEventObserver, public ash::NightLightController::Observer, - public ash::mojom::CrosDisplayConfigObserver, + public crosapi::mojom::CrosDisplayConfigObserver, public PowerManagerClient::Observer { public: DeviceSection(Profile* profile, @@ -78,17 +78,18 @@ void UpdateStylusSearchTags(); void OnGetDisplayUnitInfoList( - std::vector<ash::mojom::DisplayUnitInfoPtr> display_unit_info_list); + std::vector<crosapi::mojom::DisplayUnitInfoPtr> display_unit_info_list); void OnGetDisplayLayoutInfo( - std::vector<ash::mojom::DisplayUnitInfoPtr> display_unit_info_list, - ash::mojom::DisplayLayoutInfoPtr display_layout_info); + std::vector<crosapi::mojom::DisplayUnitInfoPtr> display_unit_info_list, + crosapi::mojom::DisplayLayoutInfoPtr display_layout_info); void AddDevicePointersStrings(content::WebUIDataSource* html_source); PrefService* pref_service_; system::PointerDeviceObserver pointer_device_observer_; - mojo::Remote<ash::mojom::CrosDisplayConfigController> cros_display_config_; - mojo::AssociatedReceiver<ash::mojom::CrosDisplayConfigObserver> + mojo::Remote<crosapi::mojom::CrosDisplayConfigController> + cros_display_config_; + mojo::AssociatedReceiver<crosapi::mojom::CrosDisplayConfigObserver> cros_display_config_observer_receiver_{this}; base::WeakPtrFactory<DeviceSection> weak_ptr_factory_{this}; };
diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc index 29a39fe..285721c 100644 --- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc +++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
@@ -1368,6 +1368,7 @@ // Color picker strings: {"colorPickerLabel", IDS_NTP_CUSTOMIZE_COLOR_PICKER_LABEL}, {"defaultThemeLabel", IDS_NTP_CUSTOMIZE_DEFAULT_LABEL}, + {"themesContainerLabel", IDS_SETTINGS_PICK_A_THEME_COLOR}, {"thirdPartyThemeDescription", IDS_NTP_CUSTOMIZE_3PT_THEME_DESC}, {"uninstallThirdPartyThemeButton", IDS_NTP_CUSTOMIZE_3PT_THEME_UNINSTALL},
diff --git a/chrome/browser/ui/webui/signin/profile_customization_ui.cc b/chrome/browser/ui/webui/signin/profile_customization_ui.cc index 5435645b..2c70ea6 100644 --- a/chrome/browser/ui/webui/signin/profile_customization_ui.cc +++ b/chrome/browser/ui/webui/signin/profile_customization_ui.cc
@@ -64,6 +64,8 @@ // Color picker strings: {"colorPickerLabel", IDS_NTP_CUSTOMIZE_COLOR_PICKER_LABEL}, {"defaultThemeLabel", IDS_NTP_CUSTOMIZE_DEFAULT_LABEL}, + {"themesContainerLabel", + IDS_PROFILE_CUSTOMIZATION_THEMES_CONTAINER_LABEL}, {"thirdPartyThemeDescription", IDS_NTP_CUSTOMIZE_3PT_THEME_DESC}, {"uninstallThirdPartyThemeButton", IDS_NTP_CUSTOMIZE_3PT_THEME_UNINSTALL}, };
diff --git a/chrome/browser/ui/webui/signin/profile_picker_ui.cc b/chrome/browser/ui/webui/signin/profile_picker_ui.cc index b3936884..bd84023 100644 --- a/chrome/browser/ui/webui/signin/profile_picker_ui.cc +++ b/chrome/browser/ui/webui/signin/profile_picker_ui.cc
@@ -161,6 +161,8 @@ // Color picker. {"colorPickerLabel", IDS_NTP_CUSTOMIZE_COLOR_PICKER_LABEL}, {"defaultThemeLabel", IDS_NTP_CUSTOMIZE_DEFAULT_LABEL}, + {"themesContainerLabel", + IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_LOCAL_PROFILE_CREATION_THEME_TEXT}, {"thirdPartyThemeDescription", IDS_NTP_CUSTOMIZE_3PT_THEME_DESC}, {"uninstallThirdPartyThemeButton", IDS_NTP_CUSTOMIZE_3PT_THEME_UNINSTALL},
diff --git a/chrome/browser/web_applications/app_service/web_app_publisher_helper.cc b/chrome/browser/web_applications/app_service/web_app_publisher_helper.cc index cff7118..9f09a55 100644 --- a/chrome/browser/web_applications/app_service/web_app_publisher_helper.cc +++ b/chrome/browser/web_applications/app_service/web_app_publisher_helper.cc
@@ -1126,6 +1126,7 @@ case blink::mojom::DisplayMode::kStandalone: case blink::mojom::DisplayMode::kFullscreen: case blink::mojom::DisplayMode::kWindowControlsOverlay: + case blink::mojom::DisplayMode::kBorderless: return apps::WindowMode::kWindow; } }
diff --git a/chrome/browser/web_applications/proto/web_app.proto b/chrome/browser/web_applications/proto/web_app.proto index fac1e6e..639216e50 100644 --- a/chrome/browser/web_applications/proto/web_app.proto +++ b/chrome/browser/web_applications/proto/web_app.proto
@@ -144,6 +144,7 @@ FULLSCREEN = 4; WINDOW_CONTROLS_OVERLAY = 5; TABBED = 6; + BORDERLESS = 7; } // Local data. May vary across devices. Not to be synced.
diff --git a/chrome/browser/web_applications/web_app_database.cc b/chrome/browser/web_applications/web_app_database.cc index 34cf395..f778a60e 100644 --- a/chrome/browser/web_applications/web_app_database.cc +++ b/chrome/browser/web_applications/web_app_database.cc
@@ -1410,6 +1410,8 @@ return DisplayMode::kWindowControlsOverlay; case WebAppProto::TABBED: return DisplayMode::kTabbed; + case WebAppProto::BORDERLESS: + return DisplayMode::kBorderless; } } @@ -1446,6 +1448,8 @@ return WebAppProto::WINDOW_CONTROLS_OVERLAY; case DisplayMode::kTabbed: return WebAppProto::TABBED; + case DisplayMode::kBorderless: + return WebAppProto::BORDERLESS; } }
diff --git a/chrome/browser/web_applications/web_app_proto_utils.cc b/chrome/browser/web_applications/web_app_proto_utils.cc index c6f93d1..dbc51061 100644 --- a/chrome/browser/web_applications/web_app_proto_utils.cc +++ b/chrome/browser/web_applications/web_app_proto_utils.cc
@@ -158,6 +158,7 @@ case DisplayMode::kMinimalUi: case DisplayMode::kFullscreen: case DisplayMode::kWindowControlsOverlay: + case DisplayMode::kBorderless: NOTREACHED(); [[fallthrough]]; case DisplayMode::kStandalone:
diff --git a/chrome/browser/web_applications/web_app_utils.cc b/chrome/browser/web_applications/web_app_utils.cc index 70e36096..0bc6d8da 100644 --- a/chrome/browser/web_applications/web_app_utils.cc +++ b/chrome/browser/web_applications/web_app_utils.cc
@@ -111,6 +111,8 @@ return DisplayMode::kTabbed; else return DisplayMode::kStandalone; + case DisplayMode::kBorderless: + return DisplayMode::kBorderless; } } @@ -605,6 +607,7 @@ case DisplayMode::kFullscreen: case DisplayMode::kWindowControlsOverlay: case DisplayMode::kTabbed: + case DisplayMode::kBorderless: return apps::LaunchContainer::kLaunchContainerWindow; case DisplayMode::kUndefined: return apps::LaunchContainer::kLaunchContainerNone;
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt index ab1ae71..96ad07a 100644 --- a/chrome/build/linux.pgo.txt +++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@ -chrome-linux-main-1658468244-df5a2009a208ce525cd6620d0c52189fcef4aac5.profdata +chrome-linux-main-1658491057-fe80b523a6a9e1edd4634ac9632ad21b9a4d0713.profdata
diff --git a/chrome/build/mac-arm.pgo.txt b/chrome/build/mac-arm.pgo.txt index b5c031cdd..4cb3436 100644 --- a/chrome/build/mac-arm.pgo.txt +++ b/chrome/build/mac-arm.pgo.txt
@@ -1 +1 @@ -chrome-mac-arm-main-1658447672-83b13ac957eb2ab0e6d993cb751bb4c29bbd96ae.profdata +chrome-mac-arm-main-1658491057-e72f9fce5fc943f682aae1d124bfb9a4f94b6bb9.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt index c497583..bcade26 100644 --- a/chrome/build/mac.pgo.txt +++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@ -chrome-mac-main-1658468244-ba14fd36411e594e4de9742d5db6eb67309e4c6e.profdata +chrome-mac-main-1658491057-137863e05dfa84c00e67b2981b56cb9ef4e57418.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt index e657a38b..a22df75 100644 --- a/chrome/build/win32.pgo.txt +++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@ -chrome-win32-main-1658468244-7f1d5e544cf00379526e67f5fa480ccee77382a7.profdata +chrome-win32-main-1658491057-297ad2fd0b2745bd27323a7a1fbf9a95daf2eee0.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt index 57630bde..879a0a6 100644 --- a/chrome/build/win64.pgo.txt +++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@ -chrome-win64-main-1658480335-2bb2682efc76e89e4c4b6fc4d7145cc67a2e89a8.profdata +chrome-win64-main-1658491057-140c232c100ea8eea7a30b798a594c64546127c9.profdata
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 2459310..cdb7937 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -6275,6 +6275,7 @@ "../browser/translate/android/translate_bridge_unittest.cc", "../browser/translate/translate_manager_render_view_host_android_unittest.cc", "../browser/ui/android/autofill/save_card_message_controller_android_unittest.cc", + "../browser/ui/android/fast_checkout/ui_view_android_utils_unittest.cc", "../browser/ui/android/tab_model/tab_model_list_unittest.cc", "../browser/ui/android/toolbar/location_bar_model_android_unittest.cc", "../browser/ui/autofill/payments/autofill_error_dialog_controller_impl_unittest.cc", @@ -6909,6 +6910,7 @@ "//chrome/browser/web_applications:web_applications_test_support", "//components/app_constants", "//components/autofill_assistant/browser/public", + "//components/autofill_assistant/browser/public:password_change", "//components/autofill_assistant/browser/public:proto", "//components/autofill_assistant/browser/public:unit_test_support", "//components/autofill_assistant/browser/public/password_change/proto:proto", @@ -7842,6 +7844,7 @@ if (is_linux || is_mac || is_win) { sources += [ + "../browser/enterprise/connectors/analysis/content_analysis_sdk_manager_unittest.cc", "../browser/policy/local_sync_policy_handler_unittest.cc", "../common/extensions/api/system_indicator/system_indicator_handler_unittest.cc", ]
diff --git a/chrome/test/data/banners/manifest_large_screenshot.json b/chrome/test/data/banners/manifest_large_screenshot.json new file mode 100644 index 0000000..1d5fcc28 --- /dev/null +++ b/chrome/test/data/banners/manifest_large_screenshot.json
@@ -0,0 +1,19 @@ +{ + "name": "PWA Large Screenshot", + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua", + "screenshots": [ + { + "src": "screenshot2_large.jpeg", + "type": "image/jpeg", + "sizes": "4000x3927" + }, + { + "src": "screenshot2.jpeg", + "type": "image/jpeg", + "sizes": "551x541" + } + ], + "scope": ".", + "start_url": "manifest_test_page.html", + "display": "standalone" + } \ No newline at end of file
diff --git a/chrome/test/data/banners/screenshot2_large.jpg b/chrome/test/data/banners/screenshot2_large.jpg new file mode 100644 index 0000000..f8cbb4e --- /dev/null +++ b/chrome/test/data/banners/screenshot2_large.jpg Binary files differ
diff --git a/chrome/test/data/chromeos/oobe_webui_browsertest.js b/chrome/test/data/chromeos/oobe_webui_browsertest.js deleted file mode 100644 index baa82ae..0000000 --- a/chrome/test/data/chromeos/oobe_webui_browsertest.js +++ /dev/null
@@ -1,229 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -GEN('#include "chrome/browser/ui/browser.h"'); -GEN('#include "chrome/browser/ui/browser_commands.h"'); -GEN('#include "chrome/browser/ui/exclusive_access/exclusive_access_test.h"'); -GEN('#include "content/public/test/browser_test.h"'); - -/** - * Fixture for ChromeOs WebUI OOBE testing. - * - * There's one test for each page in the Chrome OS Out-of-box-experience - * (OOBE), so that an accessibility audit can be run automatically on - * each one. This will alert a developer immediately if they accidentally - * forget to label a control, or if a focusable control ends up - * off-screen without being disabled, for example. - * @constructor - */ -function OobeWebUITest() {} - -OobeWebUITest.prototype = { - __proto__: testing.Test.prototype, - - /** @override */ - browsePreload: 'chrome://oobe/oobe', - - /** @override */ - testGenPreamble: function() { - // OobeWebUI should run in fullscreen. - GEN('FullscreenNotificationObserver fullscreen_observer(browser());'); - GEN('chrome::ToggleFullscreenMode(browser());'); - GEN('fullscreen_observer.Wait();'); - }, - - /** @override */ - setUp: function() { - testing.Test.prototype.setUp.call(this); - - /* False positives. http://crbug.com/501489 */ - this.accessibilityAuditConfig.ignoreSelectors('badAriaAttributeValue', - '#cancelConfirmDlg'); - this.accessibilityAuditConfig.ignoreSelectors( - 'nonExistentAriaLabelledbyElement', - '#cancelConfirmDlg'); - - /** - * False positive AX_FOCUS_01. - * https://github.com/GoogleChrome/accessibility-developer-tools/issues/171 - */ - this.accessibilityAuditConfig.ignoreSelectors( - 'focusableElementNotVisibleAndNotAriaHidden', - '#iconButton'); - - // Enable when failure is resolved. - // AX_ARIA_02: http://crbug.com/560932 - this.accessibilityAuditConfig.ignoreSelectors( - 'nonExistentAriaRelatedElement', - '#cancelConfirmDlg'); - - var requiredOwnedAriaRoleMissingSelectors = [ - '#supervised-user-creation-image-grid', - 'body > .decorated', - ]; - - // Enable when failure is resolved. - // AX_ARIA_08: http://crbug.com/560924 - this.accessibilityAuditConfig.ignoreSelectors( - 'requiredOwnedAriaRoleMissing', - requiredOwnedAriaRoleMissingSelectors); - - // Polymer.PaperButtonBehavior.ariaActiveAttribute starts with aria- but is - // not an ARIA attribute. Ignore for paper-icon-button. - this.accessibilityAuditConfig.ignoreSelectors( - 'badAriaAttribute', - 'paper-icon-button[aria-active-attribute]'); - - var badAriaAttributeSelectors = [ - '#forgotPasswordDlg', - '#cancelConfirmDlg', - ]; - - // Enable when failure is resolved. - // AX_ARIA_11: http://crbug.com/560935 - this.accessibilityAuditConfig.ignoreSelectors( - 'badAriaAttribute', - badAriaAttributeSelectors); - - var controlsWithoutLabelSelectors = [ - '#supervised-user-creation-managers-pane', - '#supervised-user-creation-name', - '#supervised-user-creation-password', - '#supervised-user-creation-password-confirm', - ]; - - // Enable when failure is resolved. - // AX_TEXT_01: http://crbug.com/560939 - this.accessibilityAuditConfig.ignoreSelectors( - 'controlsWithoutLabel', - controlsWithoutLabelSelectors); - }, -}; - -function createOobeWebUITestSupervisedManagerData() { - return { 'managers': - [ - { 'username' : 'user@invalid.domain', - 'displayName' : 'John Doe', - 'emailAddress' : 'user@invalid.domain' - }, - { 'username' : 'other@invalid.domain', - 'displayName' : 'Joanna Doe', - 'emailAddress' : 'other@invalid.domain' - } - ] - }; -} - -// Fails on chromeos, http://crbug.com/665315 -TEST_F('OobeWebUITest', 'DISABLED_EmptyOobe', function() { -}); - -// Fails on chromeos, http://crbug.com/665315 -TEST_F('OobeWebUITest', 'DISABLED_OobeConnect', function() { - Oobe.getInstance().showScreen({'id':'connect'}); -}); - -// Fails on chromeos, http://crbug.com/665315 -TEST_F('OobeWebUITest', 'DISABLED_OobeEula', function() { - Oobe.getInstance().showScreen({'id':'eula'}); -}); - -// Fails on chromeos, http://crbug.com/665315 -TEST_F('OobeWebUITest', 'DISABLED_OobeUpdate', function() { - Oobe.getInstance().showScreen({'id':'oobe-update'}); -}); - -// Fails on chromeos, http://crbug.com/665315 -TEST_F('OobeWebUITest', 'DISABLED_OobeGaiaSignIn', function() { - Oobe.getInstance().showScreen({'id':'gaia-signin'}); -}); - -// Fails on chromeos, http://crbug.com/665315 -TEST_F('OobeWebUITest', 'DISABLED_OobeSupervisedUsers', function() { - Oobe.getInstance().showScreen( - {'id' : 'supervised-user-creation', - 'data' : createOobeWebUITestSupervisedManagerData()}); -}); - -// Fails on chromeos, http://crbug.com/665315 -TEST_F('OobeWebUITest', 'DISABLED_OobeSupervisedUsers2', function() { - Oobe.getInstance().showScreen( - {'id' : 'supervised-user-creation', - 'data' : createOobeWebUITestSupervisedManagerData()}); - $('supervised-user-creation').setVisiblePage_('manager'); -}); - -// Fails on chromeos, http://crbug.com/665315 -TEST_F('OobeWebUITest', 'DISABLED_OobeSupervisedUsers3', function() { - Oobe.getInstance().showScreen( - {'id' : 'supervised-user-creation', - 'data' : createOobeWebUITestSupervisedManagerData()}); - $('supervised-user-creation').setDefaultImages( - {'first' : 0, - 'images' : [{'url': 'chrome://nothing/', 'title': 'None'}, - {'url': 'chrome://nothing/', 'title': 'None'}]}); - $('supervised-user-creation').setVisiblePage_('username'); -}); - -// TODO: this either needs a WebUILoginDisplay instance or some -// other way to initialize the appropriate C++ handlers. -TEST_F('OobeWebUITest', 'DISABLED_OobeUserImage', function() { - Oobe.getInstance().showScreen({'id':'user-image'}); -}); - -// Fails on chromeos, http://crbug.com/665315 -TEST_F('OobeWebUITest', 'DISABLED_HIDDetectionScreenTest', function() { - function getPincodeSymbol(i) { - return $('hid-keyboard-pincode-sym-' + (i + 1)); - } - - function getDisplayedPincode() { - var pincode = ''; - for (var i = 0; i < 6; ++i) - pincode += getPincodeSymbol(i).textContent; - return pincode; - } - - login.HIDDetectionScreen.contextChanged({ - 'keyboard-state': 'searching', - 'mouse-state': 'searching' - }); - Oobe.showScreen({'id': 'hid-detection'}); - expectTrue($('hid-keyboard-pincode').hidden); - - login.HIDDetectionScreen.contextChanged({ - 'keyboard-state': 'pairing', - 'keyboard-pincode': '013188' - }); - expectFalse($('hid-keyboard-pincode').hidden); - expectEquals('013188', getDisplayedPincode()); - - login.HIDDetectionScreen.contextChanged({ - 'num-keys-entered-expected': true, - 'num-keys-entered-pincode': 3 - }); - expectFalse($('hid-keyboard-pincode').hidden); - expectEquals('013188', getDisplayedPincode()); - [ - { 'key-typed': true }, - { 'key-typed': true }, - { 'key-typed': true }, - { 'key-next': true }, - { 'key-untyped': true }, - { 'key-untyped': true }, - { 'key-untyped': true } // Enter key symbol. - ].forEach(function(expectedClasses, i) { - var symbol = getPincodeSymbol(i); - ['key-typed', 'key-untyped', 'key-next'].forEach(function(className) { - expectEquals(!!expectedClasses[className], - symbol.classList.contains(className)); - }); - }); - - login.HIDDetectionScreen.contextChanged({ - 'keyboard-state': 'connected' - }); - expectTrue($('hid-keyboard-pincode').hidden); -});
diff --git a/chrome/test/data/extensions/api_test/debugger/background.js b/chrome/test/data/extensions/api_test/debugger/background.js index d5c08fe..0d21dab5 100644 --- a/chrome/test/data/extensions/api_test/debugger/background.js +++ b/chrome/test/data/extensions/api_test/debugger/background.js
@@ -130,13 +130,12 @@ function onDetach(from, reason) { chrome.debugger.onDetach.removeListener(onDetach); + chrome.debugger.attach( + debuggee, protocolVersion, fail('Cannot access a chrome:// URL')); chrome.test.assertTrue(responded); chrome.test.assertEq(debuggee.tabId, from.tabId); chrome.test.assertEq("target_closed", reason); - chrome.tabs.remove(tab.id, function() { - chrome.test.assertNoLastError(); - chrome.test.succeed(); - }); + chrome.tabs.remove(tab.id, pass()) } chrome.test.assertNoLastError();
diff --git a/chrome/test/data/policy/policy_test_cases.json b/chrome/test/data/policy/policy_test_cases.json index 7e1de5b..99fcf72 100644 --- a/chrome/test/data/policy/policy_test_cases.json +++ b/chrome/test/data/policy/policy_test_cases.json
@@ -15825,7 +15825,7 @@ "file_system_type": "MY_FILES" }, { - "file_system_type": "SAMBA" + "file_system_type": "SMB" } ], "destinations": [{ @@ -15848,7 +15848,7 @@ "file_system_type": "ARC" }, { - "file_system_type": "SAMBA" + "file_system_type": "SMB" }, { "file_system_type": "MY_FILES"
diff --git a/chrome/test/data/webui/BUILD.gn b/chrome/test/data/webui/BUILD.gn index 4613f20..e97b949 100644 --- a/chrome/test/data/webui/BUILD.gn +++ b/chrome/test/data/webui/BUILD.gn
@@ -152,7 +152,6 @@ "../../../browser/resources/chromeos/login/security_token_pin_browsertest.js", "../../../browser/ui/webui/chromeos/bluetooth_pairing_dialog_browsertest.js", "../../../browser/ui/webui/chromeos/certificate_manager_dialog_browsertest.js", - "../chromeos/oobe_webui_browsertest.js", "chromeos/account_manager/account_manager_browsertest.js", "chromeos/arc_account_picker/arc_account_picker_browsertest.js", "chromeos/edu_coexistence/edu_coexistence_browsertest.js",
diff --git a/chrome/test/data/webui/settings/passwords_device_section_test.ts b/chrome/test/data/webui/settings/passwords_device_section_test.ts index fa4196d..d9315d7 100644 --- a/chrome/test/data/webui/settings/passwords_device_section_test.ts +++ b/chrome/test/data/webui/settings/passwords_device_section_test.ts
@@ -60,7 +60,9 @@ expectedPassword.urls.shown, listItemElement.$.originUrl.textContent!.trim()); assertEquals(expectedPassword.urls.link, listItemElement.$.originUrl.href); - assertEquals(expectedPassword.username, listItemElement.$.username.value); + assertEquals( + expectedPassword.username, + listItemElement.$.username.textContent!.trim()); } }
diff --git a/chrome/test/data/webui/settings/passwords_section_test.ts b/chrome/test/data/webui/settings/passwords_section_test.ts index c3a43e60..36a4214 100644 --- a/chrome/test/data/webui/settings/passwords_section_test.ts +++ b/chrome/test/data/webui/settings/passwords_section_test.ts
@@ -57,7 +57,7 @@ assertTrue(!!listItem); assertEquals(expected.urls.shown, listItem.$.originUrl.textContent!.trim()); assertEquals(expected.urls.link, listItem.$.originUrl.href); - assertEquals(expected.username, listItem.$.username.value); + assertEquals(expected.username, listItem.$.username.textContent!.trim()); } }
diff --git a/chromeos/CHROMEOS_LKGM b/chromeos/CHROMEOS_LKGM index 96c815b..81b380b 100644 --- a/chromeos/CHROMEOS_LKGM +++ b/chromeos/CHROMEOS_LKGM
@@ -1 +1 @@ -14977.0.0 \ No newline at end of file +14996.0.0 \ No newline at end of file
diff --git a/chromeos/ash/components/memory/userspace_swap/userspace_swap.cc b/chromeos/ash/components/memory/userspace_swap/userspace_swap.cc index f66870e..4d98cfd 100644 --- a/chromeos/ash/components/memory/userspace_swap/userspace_swap.cc +++ b/chromeos/ash/components/memory/userspace_swap/userspace_swap.cc
@@ -82,14 +82,14 @@ // g_global_disk_usage is the sum of all |written_to_disk| values from each // renderer. We keep track of this number because we need to enforce the global // total swap limit. This value is safe to be fetched from any sequence. -std::atomic<uint64_t> g_global_disk_usage_bytes = ATOMIC_VAR_INIT(0); +std::atomic<uint64_t> g_global_disk_usage_bytes{0}; // This is the sum of all |reclaimed_bytes| values from each renderer. This // value is safe to be fetched from any sequence. -std::atomic<uint64_t> g_global_reclaimed_bytes = ATOMIC_VAR_INIT(0); +std::atomic<uint64_t> g_global_reclaimed_bytes{0}; // This is our global swap kill switch. -std::atomic<bool> g_global_swap_allowed = ATOMIC_VAR_INIT(true); +std::atomic<bool> g_global_swap_allowed{true}; class RendererSwapDataImpl : public RendererSwapData { public:
diff --git a/chromeos/crosapi/mojom/BUILD.gn b/chromeos/crosapi/mojom/BUILD.gn index 538b3b7..5d6d7b44 100644 --- a/chromeos/crosapi/mojom/BUILD.gn +++ b/chromeos/crosapi/mojom/BUILD.gn
@@ -24,6 +24,7 @@ "clipboard.mojom", "clipboard_history.mojom", "content_protection.mojom", + "cros_display_config.mojom", "crosapi.mojom", "desk_template.mojom", "device_attributes.mojom", @@ -112,6 +113,7 @@ "//ui/accessibility:ax_enums_mojo", "//ui/accessibility/mojom", "//ui/base/mojom", + "//ui/display/mojom:mojom", "//ui/gfx/geometry/mojom", "//ui/gfx/image/mojom", "//ui/gfx/mojom",
diff --git a/ash/public/mojom/cros_display_config.mojom b/chromeos/crosapi/mojom/cros_display_config.mojom similarity index 73% rename from ash/public/mojom/cros_display_config.mojom rename to chromeos/crosapi/mojom/cros_display_config.mojom index 00db9b52..22c6e7b 100644 --- a/ash/public/mojom/cros_display_config.mojom +++ b/chromeos/crosapi/mojom/cros_display_config.mojom
@@ -1,8 +1,8 @@ -// Copyright 2018 The Chromium Authors. All rights reserved. +// Copyright 2022 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -module ash.mojom; +module crosapi.mojom; import "ui/gfx/geometry/mojom/geometry.mojom"; import "ui/display/mojom/display.mojom"; @@ -13,31 +13,51 @@ // sepcified. // SetDisplayLayoutInfo or SetDisplayProperties result. +[Stable, Extensible] enum DisplayConfigResult { - kSuccess = 0, + // CrosDisplayConfigController method call was successful. + [Default] kSuccess = 0, + // Operation is not supported. kInvalidOperationError, + // Input display ID represents an invalid display. kInvalidDisplayIdError, + // Unified desktop mode is disabled. kUnifiedNotEnabledError, + // Input property for operation is out of range. E.g. display zoom factor, + // bounds origin or overscan. kPropertyValueOutOfRangeError, + // Operation is not supported for internal displays. kNotSupportedOnInternalDisplayError, + // Negative values are not supportet for the operation. kNegativeValueError, + // Setting the display mode failed. kSetDisplayModeError, + // Invalid display layout error. kInvalidDisplayLayoutError, + // Mirror mode requires multiple displays. kMirrorModeSingleDisplayError, + // Mirror mode source ID is invalid. kMirrorModeSourceIdError, + // Mirror mode destination ID is invalid. kMirrorModeDestIdError, + // Calibration is not available (e.g. no external touch screen device). kCalibrationNotAvailableError, + // Calibration was not started. kCalibrationNotStartedError, + // Touch calibration is already active. kCalibrationInProgressError, + // Invalid input data for calibration. kCalibrationInvalidDataError, + // Calibration procedure failed. kCalibrationFailedError, }; // Describes how the displays are laid out. +[Stable, Extensible] enum DisplayLayoutMode { // In normal mode displays are laid out as described by // DisplayLayoutInfo.layouts. - kNormal = 0, + [Default] kNormal = 0, // In unified desktop mode, a single desktop will be stretched across all // available displays. kUnified, @@ -49,34 +69,46 @@ }; // Describes a display edge. +[Stable, Extensible] enum DisplayLayoutPosition { - kTop = 0, + [Default] kTop = 0, kRight, kBottom, kLeft }; // Describes an overscan or touch calibration operation. +[Stable, Extensible] enum DisplayConfigOperation { - kStart = 0, + // Start a calibration procedure. + [Default] kStart = 0, + // Adjusts the current overscan insets for a display. kAdjust, + // Resets the overscan insets for a display to the last saved value. kReset, + // Finish calibration procedure. Save current values and hide the overlay. kComplete, + // Displays the native touch calibration. kShowNative, }; // Describes who initiated configuration change. +[Stable, Extensible] enum DisplayConfigSource { - kUser = 0, + // Display configuration change was requested by the user. + [Default] kUser = 0, + // Display configuration change was requested by the policy. + // Don't show notifications to confirm/revert the change. kPolicy }; // Describes the options the DisplayConfigProperties.rotation and // DisplayUnitInfo.rotation_options can be set to. +[Stable, Extensible] enum DisplayRotationOptions { // In physical tablet state, enables auto-rotation and clears the user // rotation lock. Otherwise, it behaves the same as kZeroDegrees. - kAutoRotate, + [Default] kAutoRotate = 0, // In physical tablet state, Sets the user rotation lock to 0 degrees. // Otherwise, it sets the display rotation to 0. kZeroDegrees, @@ -92,188 +124,199 @@ }; // Defines a pair of display + touch points used for touch calibration. +[Stable] struct TouchCalibrationPair { // The coordinates of the display point. - gfx.mojom.Point display_point; + gfx.mojom.Point display_point@0; // The coordinates of the touch point corresponding to the display point. - gfx.mojom.Point touch_point; + gfx.mojom.Point touch_point@1; }; // Defines the data required for touch calibration. +[Stable] struct TouchCalibration { // Must contain exactly four pairs of touch calibration points. - array<TouchCalibrationPair> pairs; + array<TouchCalibrationPair> pairs@0; // Width and height of the display area when the touch calibration was // performed. - gfx.mojom.Size bounds; + gfx.mojom.Size bounds@1; }; // Defines the layout of a single display. +[Stable] struct DisplayLayout { // The unique identifier of the display. - string id; + string id@0; // The unique identifier of the parent display. Empty for the root display. - string parent_id; + string parent_id@1; // The edge of the display that is shared with the parent display. Ignored for // the root display. - DisplayLayoutPosition position; + DisplayLayoutPosition position@2; // The offset of the display along the connected edge. 0 indicates that // the topmost or leftmost corner is aligned. - int32 offset; + int32 offset@3; }; // Defines the layout mode and details. +[Stable] struct DisplayLayoutInfo { // The layout mode to use, see DisplayLayoutMode for details. - DisplayLayoutMode layout_mode; + DisplayLayoutMode layout_mode@0; // Ignored if If layout_mode is not kMirrored. Otherwise, if provided, // specifies the unique identifier of the source display for mirroring. If // not provided, mirror_destination_ids will be ignored and default ('normal') // mirrored mode will be enabled. - string? mirror_source_id; + string? mirror_source_id@1; // Ignored if layout_mode is not kMirrored. Otherwise, if provided, specifies // the unique identifiers of the displays to mirror the source display. If not // provided or empty, all displays will mirror the source display. - array<string>? mirror_destination_ids; + array<string>? mirror_destination_ids@2; // An array of layouts describing a directed graph of displays. Required if // layout_mode is kNormal or kMirrored and not all displays are mirrored // ('mixed' mode). Ignored if layout_mode is kUnified. - array<DisplayLayout>? layouts; + array<DisplayLayout>? layouts@3; }; // EDID extracted parameters. Field description refers to "VESA ENHANCED // EXTENDED DISPLAY IDENTIFICATION DATA STANDARD (Defines EDID Structure // Version 1, Revision 4)" Release A, Revision 2 September 25, 2006. // https://www.vesa.org/vesa-standards +[Stable] struct Edid { // Three character manufacturer code, Sec. 3.4.1 page 21. - string manufacturer_id; + string manufacturer_id@0; // Two byte manufacturer-assigned code, Sec. 3.4.2 page 21. - string product_id; + string product_id@1; // Year of manufacture. Sec. 3.4.4 page 22. - int32 year_of_manufacture; + int32 year_of_manufacture@2; }; // Struct wrapper so that the property can be optional. +[Stable] struct DisplayRotation { - DisplayRotationOptions rotation; + DisplayRotationOptions rotation@0; }; // Defines the properties for a display mode, i.e. a valid size and scale. +[Stable] struct DisplayMode { // The display mode size in device independent (user visible) pixels. - gfx.mojom.Size size; + gfx.mojom.Size size@0; // The display mode size in native pixels. - gfx.mojom.Size size_in_native_pixels; + gfx.mojom.Size size_in_native_pixels@1; // The display mode device scale factor. - double device_scale_factor; + double device_scale_factor@2; // The display mode refresh rate in hertz. - double refresh_rate; + double refresh_rate@3; // True if the mode is the display's native mode. - bool is_native; + bool is_native@4; // True if the mode is interlaced. - bool is_interlaced; + bool is_interlaced@5; }; // Defines the properties of an individual display, returned by // GetDisplayLayoutInfo. +[Stable] struct DisplayUnitInfo { // The unique identifier of the display. - string id; + string id@0; // The user-friendly name (e.g. "Acme LCD monitor"). - string name; + string name@1; // EDID properties when available. - Edid? edid; + Edid? edid@2; // True if this is the primary display. - bool is_primary; + bool is_primary@3; // True if this is an internal display. - bool is_internal; + bool is_internal@4; // True if this display is enabled. - bool is_enabled; + bool is_enabled@5; // True if auto-rotation is allowed. It happens when the device is in a // physical tablet state or kSupportsClamshellAutoRotation is set. - bool is_auto_rotation_allowed; + bool is_auto_rotation_allowed@6; // True if this display has a touch input device associated with it. - bool has_touch_support; + bool has_touch_support@7; // True if this display has an accelerometer associated with it. - bool has_accelerometer_support; + bool has_accelerometer_support@8; // The number of pixels per inch along the x-axis. - double dpi_x; + double dpi_x@9; // The number of pixels per inch along the y-axis. - double dpi_y; + double dpi_y@10; // The display rotation options. - DisplayRotationOptions rotation_options; + DisplayRotationOptions rotation_options@11; // The display's logical bounds. - gfx.mojom.Rect bounds; + gfx.mojom.Rect bounds@12; // The display's ovserscan insets within its screen's bounds. - gfx.mojom.Insets overscan; + gfx.mojom.Insets overscan@13; // The usable work area of the display within the display bounds. Excludes // areas of the display reserved for the OS, e.g. the taskbar and launcher. - gfx.mojom.Rect work_area; + gfx.mojom.Rect work_area@14; // The index of the selected display mode. - int32 selected_display_mode_index; + int32 selected_display_mode_index@15; // The list of available display modes. - array<DisplayMode> available_display_modes; + array<DisplayMode> available_display_modes@16; // The ratio between the display's current and default zoom. i.e. 1.0 is // is equivalent to 100% zoom, and value 1.5 is equivalent to 150% zoom. - double display_zoom_factor; + double display_zoom_factor@17; // The list of allowed zoom factor values for the display. - array<double> available_display_zoom_factors; + array<double> available_display_zoom_factors@18; }; // Properties for configuring an individual display, used in // SetDisplayProperties. +[Stable] struct DisplayConfigProperties { // If true, makes the display primary. No-op if set to false. - bool set_primary; + bool set_primary@0; // If provided, sets the display's overscan insets to the provided value. // Note: overscan values may not be negative or larger than a half of the // screen's size. Overscan cannot be changed on the internal monitor. - gfx.mojom.Insets? overscan; + gfx.mojom.Insets? overscan@1; // If provided updates the display's rotation, or if the auto-rotation is // allowed in the device, it can be used to set or clear the user rotation // lock, enabling or disabling auto-rotation. - DisplayRotation? rotation; + DisplayRotation? rotation@2; // If provided, updates the display's logical bounds origin. Note: when // updating the display origin, some constraints will be applied. so the final // bounds origin may be different than the one set. The actual bounds will be // reflected in DisplayUnitInfo. Cannot be changed on the primary display (or // if set_primary is true). - gfx.mojom.Point? bounds_origin; + gfx.mojom.Point? bounds_origin@3; // If non zero, updates the zoom associated with the display. This zoom // performs relayout and repaint thus resulting in a better quality zoom than // just performing a pixel by pixel stretch enlargement. - double display_zoom_factor; + double display_zoom_factor@4; // Optional DisplayMode properties to set. This should match one of the // modes listed in DisplayUnitInfo.available_display_modes. Other custom // modes may or may not be valid. - DisplayMode? display_mode; + DisplayMode? display_mode@5; }; // Interface for configuring displays in Chrome OS. Currently this is // implemented in Ash through classes owned by ash::Shell, but the interface // should not have any Ash specific dependencies. +[Stable, Uuid="a172cdb1-c97f-4a53-9ac9-6b96c18da099"] interface CrosDisplayConfigController { // Observers are notified when the display layout or any display properties // change. - AddObserver(pending_associated_remote<CrosDisplayConfigObserver> observer); + AddObserver@0(pending_associated_remote<CrosDisplayConfigObserver> observer); // Returns the display layout info, including the list of layouts. - GetDisplayLayoutInfo() => (DisplayLayoutInfo info); + GetDisplayLayoutInfo@1() => (DisplayLayoutInfo info); // Sets the layout mode, mirroring, and layouts. Returns kSuccess if the // layout is valid or an error value otherwise. - SetDisplayLayoutInfo(DisplayLayoutInfo info) => (DisplayConfigResult result); + SetDisplayLayoutInfo@2(DisplayLayoutInfo info) => + (DisplayConfigResult result); // Returns the properties for all displays. If |single_unified| is true, a // single display will be returned if the display layout is in unifed mode. - GetDisplayUnitInfoList(bool single_unified) => + GetDisplayUnitInfoList@3(bool single_unified) => (array<DisplayUnitInfo> info_list); // Sets |properties| for individual display with identifier |id|. |source| // should describe who initiated the change. Returns Success if the properties // are valid or an error value otherwise. - SetDisplayProperties(string id, + SetDisplayProperties@4(string id, DisplayConfigProperties properties, DisplayConfigSource source) => (DisplayConfigResult result); @@ -281,13 +324,13 @@ // Enables or disables unified desktop mode. If the current display mode is // kMirrored the mode will not be changed, if it is kNormal then the mode will // be set to kUnified. - SetUnifiedDesktopEnabled(bool enabled); + SetUnifiedDesktopEnabled@5(bool enabled); // Starts, updates, completes, or resets overscan calibration for the display // with identifier |display_id|. If |op| is kAdjust, |delta| describes the // amount to change the overscan value. Runs the callback after performing the // operation or on error. - OverscanCalibration(string display_id, + OverscanCalibration@6(string display_id, DisplayConfigOperation op, gfx.mojom.Insets? delta) => (DisplayConfigResult result); @@ -295,14 +338,14 @@ // identifier |display_id|. If |op| is kShowNative shows the native // calibration UI. Runs the callback after performing the operation or on // error. - TouchCalibration(string display_id, + TouchCalibration@7(string display_id, DisplayConfigOperation op, TouchCalibration? calibration) => (DisplayConfigResult result); // Sets |id| of display to render identification highlight on. Invalid |id| // turns identification highlight off. - HighlightDisplay(int64 id); + HighlightDisplay@8(int64 id); // Updates preview indicators with change in position of display being dragged // in display layouts section of the display settings page. |display_id| is @@ -311,12 +354,13 @@ // called. |display_id| remains the same while the drag is in progress, once // the display is dropped, the new layout is applied, updating the display // configuration. - DragDisplayDelta(int64 display_id, int32 delta_x, int32 delta_y); + DragDisplayDelta@9(int64 display_id, int32 delta_x, int32 delta_y); }; // Interface for clients needing to be informed when the display configuration // changes. +[Stable, Uuid="61eda0c8-63dc-49eb-ad43-02acfd48d4f5"] interface CrosDisplayConfigObserver { // Called any time the display configuration changes. - OnDisplayConfigChanged(); + OnDisplayConfigChanged@0(); };
diff --git a/chromeos/crosapi/mojom/crosapi.mojom b/chromeos/crosapi/mojom/crosapi.mojom index a16b5188..1a4e5bd 100644 --- a/chromeos/crosapi/mojom/crosapi.mojom +++ b/chromeos/crosapi/mojom/crosapi.mojom
@@ -21,6 +21,7 @@ import "chromeos/crosapi/mojom/clipboard.mojom"; import "chromeos/crosapi/mojom/clipboard_history.mojom"; import "chromeos/crosapi/mojom/content_protection.mojom"; +import "chromeos/crosapi/mojom/cros_display_config.mojom"; import "chromeos/crosapi/mojom/desk_template.mojom"; import "chromeos/crosapi/mojom/device_attributes.mojom"; import "chromeos/crosapi/mojom/device_settings_service.mojom"; @@ -119,8 +120,8 @@ // please note the milestone when you added it, to help us reason about // compatibility between the client applications and older ash-chrome binaries. // -// Next version: 89 -// Next method id: 93 +// Next version: 90 +// Next method id: 94 [Stable, Uuid="8b79c34f-2bf8-4499-979a-b17cac522c1e", RenamedFrom="crosapi.mojom.AshChromeService"] interface Crosapi { @@ -227,6 +228,11 @@ [MinVersion=26] BindContentProtection@31( pending_receiver<ContentProtection> receiver); + // Binds the CrosDisplayConfigController interface for querying display info. + // Added in M106. + [MinVersion=89] BindCrosDisplayConfigController@93( + pending_receiver<CrosDisplayConfigController> receiver); + // Binds the desk template factory interface. // Added in M101. [MinVersion=68] BindDeskTemplate@71(pending_receiver<DeskTemplate> receiver);
diff --git a/chromeos/crosapi/mojom/system_display.mojom b/chromeos/crosapi/mojom/system_display.mojom index 91bb0b0..f975ae3a 100644 --- a/chromeos/crosapi/mojom/system_display.mojom +++ b/chromeos/crosapi/mojom/system_display.mojom
@@ -14,8 +14,8 @@ // However, the two mojoms operate at different layers and have different // version stability requirements, so should not be mixed. -[Stable] -struct DisplayMode { +[Stable, RenamedFrom="crosapi.mojom.DisplayMode"] +struct SysDisplayMode { // The display mode sizes in device independent (user visible) pixels. gfx.mojom.Size size@0; @@ -47,8 +47,8 @@ // EXTENDED DISPLAY IDENTIFICATION DATA STANDARD (Defines EDID Structure // Version 1, Revision 4)" Release A, Revision 2 September 25, 2006. // https://www.vesa.org/vesa-standards -[Stable] -struct Edid { +[Stable, RenamedFrom="crosapi.mojom.Edid"] +struct SysDisplayEdid { // Three character manufacturer code, Sec. 3.4.1 page 21. string manufacturer_id@0; @@ -60,8 +60,8 @@ }; // Struct to transmit extensions::api::system_display::DisplayUnitInfo. -[Stable] -struct DisplayUnitInfo { +[Stable, RenamedFrom="crosapi.mojom.DisplayUnitInfo"] +struct SysDisplayUnitInfo { // The unique identifier of the display. string id@0; @@ -69,7 +69,7 @@ string name@1; // EDID properties when available. - Edid? edid@2; + SysDisplayEdid? edid@2; // Identifier of the display that is being mirrored if mirroring is enabled, // otherwise empty. This will be set for all displays (including the display @@ -124,7 +124,7 @@ // The list of available display modes. The current mode will have // is_selected=true. - array<DisplayMode> modes@17; + array<SysDisplayMode> modes@17; // True if this display has a touch input device associated with it. bool has_touch_support@18; @@ -154,7 +154,7 @@ // Returns the properties for all displays. If |single_unified| is true, a // single display will be returned if the display layout is in unifed mode. GetDisplayUnitInfoList@0(bool single_unified) => - (array<DisplayUnitInfo> info_list); + (array<SysDisplayUnitInfo> info_list); // Adds an observer for display change. Multiple observers may be registered. [MinVersion=1] AddDisplayChangeObserver@1(
diff --git a/chromeos/lacros/lacros_service.cc b/chromeos/lacros/lacros_service.cc index 8700c43..2b58c88 100644 --- a/chromeos/lacros/lacros_service.cc +++ b/chromeos/lacros/lacros_service.cc
@@ -30,6 +30,7 @@ #include "chromeos/crosapi/mojom/clipboard.mojom.h" #include "chromeos/crosapi/mojom/clipboard_history.mojom.h" #include "chromeos/crosapi/mojom/content_protection.mojom.h" +#include "chromeos/crosapi/mojom/cros_display_config.mojom.h" #include "chromeos/crosapi/mojom/crosapi.mojom.h" #include "chromeos/crosapi/mojom/desk_template.mojom.h" #include "chromeos/crosapi/mojom/device_settings_service.mojom.h" @@ -268,6 +269,10 @@ ConstructRemote< crosapi::mojom::ContentProtection, &Crosapi::BindContentProtection, Crosapi::MethodMinVersions::kBindContentProtectionMinVersion>(); + ConstructRemote< + crosapi::mojom::CrosDisplayConfigController, + &Crosapi::BindCrosDisplayConfigController, + Crosapi::MethodMinVersions::kBindCrosDisplayConfigControllerMinVersion>(); ConstructRemote<crosapi::mojom::DeskTemplate, &Crosapi::BindDeskTemplate, Crosapi::MethodMinVersions::kBindDeskTemplateMinVersion>(); ConstructRemote<
diff --git a/chromeos/strings/chromeos_strings_az.xtb b/chromeos/strings/chromeos_strings_az.xtb index 28831331..a21fbe9a 100644 --- a/chromeos/strings/chromeos_strings_az.xtb +++ b/chromeos/strings/chromeos_strings_az.xtb
@@ -118,6 +118,7 @@ <translation id="1851218745569890714">Video Konfrans</translation> <translation id="1852934301711881861">ChromeOS Flex'i quraşdırın</translation> <translation id="1856388568474281774">Aşağı ox</translation> +<translation id="1858620243986915808">Skrinşot əlavə edin</translation> <translation id="1871569928317311284">Qaranlıq temanı deaktiv edin</translation> <translation id="1874612839560830905">MTU</translation> <translation id="188114911237521550">Qaranlıq rejimi deaktiv edin</translation>
diff --git a/chromeos/strings/chromeos_strings_en-GB.xtb b/chromeos/strings/chromeos_strings_en-GB.xtb index 2993b59..eb6bc92 100644 --- a/chromeos/strings/chromeos_strings_en-GB.xtb +++ b/chromeos/strings/chromeos_strings_en-GB.xtb
@@ -92,6 +92,7 @@ <translation id="1644574205037202324">History</translation> <translation id="1645954272419197032">Please confirm device information</translation> <translation id="1662989795263954667">Stopped – out of ink</translation> +<translation id="1664796644829245314">Preview <ph name="PREVIEW_OBJECT" /></translation> <translation id="1668469839109562275">Built-in VPN</translation> <translation id="1672499492233627739">Webcam video feed</translation> <translation id="1676557873873341166">Taking video</translation> @@ -118,6 +119,7 @@ <translation id="1851218745569890714">Video conferencing</translation> <translation id="1852934301711881861">Install Chrome OS Flex</translation> <translation id="1856388568474281774">Down arrow</translation> +<translation id="1858620243986915808">Attach screenshot</translation> <translation id="1871569928317311284">Turn Dark theme off</translation> <translation id="1874612839560830905">MTU</translation> <translation id="188114911237521550">Turn dark mode off</translation> @@ -797,6 +799,7 @@ <translation id="7978412674231730200">Private key</translation> <translation id="7982789257301363584">Network</translation> <translation id="7994702968232966508">EAP method</translation> +<translation id="8018928621986160031">Saved to '<ph name="FILE_LOCATION" />'</translation> <translation id="802154636333426148">Download failed</translation> <translation id="8031884997696620457">HSPAPlus</translation> <translation id="80398733265834479">Enable auto colour mode</translation>
diff --git a/chromeos/strings/chromeos_strings_hu.xtb b/chromeos/strings/chromeos_strings_hu.xtb index 13509b5..e6bde56 100644 --- a/chromeos/strings/chromeos_strings_hu.xtb +++ b/chromeos/strings/chromeos_strings_hu.xtb
@@ -118,6 +118,7 @@ <translation id="1851218745569890714">Videokonferencia</translation> <translation id="1852934301711881861">ChromeOS Flex telepítése</translation> <translation id="1856388568474281774">Lefelé nyíl</translation> +<translation id="1858620243986915808">Képernyőkép csatolása</translation> <translation id="1871569928317311284">Sötét téma kikapcsolása</translation> <translation id="1874612839560830905">MTU</translation> <translation id="188114911237521550">Sötét mód kikapcsolása</translation>
diff --git a/chromeos/strings/chromeos_strings_my.xtb b/chromeos/strings/chromeos_strings_my.xtb index 1f424d5..799a030 100644 --- a/chromeos/strings/chromeos_strings_my.xtb +++ b/chromeos/strings/chromeos_strings_my.xtb
@@ -118,6 +118,7 @@ <translation id="1851218745569890714">ဗီဒီယိုအစည်းအဝေး</translation> <translation id="1852934301711881861">ChromeOS Flex ထည့်သွင်းရန်</translation> <translation id="1856388568474281774">အောက်ညွှန်မြား</translation> +<translation id="1858620243986915808">ဖန်သားပြင်ဓာတ်ပုံ ပူးတွဲရန်</translation> <translation id="1871569928317311284">မှောင်သည့် အပြင်အဆင် ပိတ်ရန်</translation> <translation id="1874612839560830905">MTU</translation> <translation id="188114911237521550">အမှောင်မုဒ် ပိတ်ရန်</translation>
diff --git a/chromeos/strings/chromeos_strings_pl.xtb b/chromeos/strings/chromeos_strings_pl.xtb index 35aa7c199..7ec030f 100644 --- a/chromeos/strings/chromeos_strings_pl.xtb +++ b/chromeos/strings/chromeos_strings_pl.xtb
@@ -118,6 +118,7 @@ <translation id="1851218745569890714">Rozmowy wideo</translation> <translation id="1852934301711881861">Zainstaluj ChromeOS Flex</translation> <translation id="1856388568474281774">Strzałka w dół</translation> +<translation id="1858620243986915808">Załącz zrzut ekranu</translation> <translation id="1871569928317311284">Wyłącz ciemny motyw</translation> <translation id="1874612839560830905">MTU</translation> <translation id="188114911237521550">Wyłącz tryb ciemny</translation>
diff --git a/chromeos/strings/chromeos_strings_zh-CN.xtb b/chromeos/strings/chromeos_strings_zh-CN.xtb index 47b6ed6..ccd76044 100644 --- a/chromeos/strings/chromeos_strings_zh-CN.xtb +++ b/chromeos/strings/chromeos_strings_zh-CN.xtb
@@ -518,7 +518,7 @@ <translation id="5372659122375744710">Wi-Fi 网络不安全</translation> <translation id="5376354385557966694">自动浅色模式</translation> <translation id="537872351913703572">设备将由另一用户或组织使用</translation> -<translation id="5389159777326897627">壁纸与样式</translation> +<translation id="5389159777326897627">壁纸和样式</translation> <translation id="5389224261615877010">彩虹色</translation> <translation id="5395600419410242651">清除所有数据</translation> <translation id="5400907029458559844">设备正在连接。</translation>
diff --git a/chromeos/strings/chromeos_strings_zh-HK.xtb b/chromeos/strings/chromeos_strings_zh-HK.xtb index 6f7ddca..6466a27d 100644 --- a/chromeos/strings/chromeos_strings_zh-HK.xtb +++ b/chromeos/strings/chromeos_strings_zh-HK.xtb
@@ -118,6 +118,7 @@ <translation id="1851218745569890714">視像會議</translation> <translation id="1852934301711881861">安裝 ChromeOS Flex</translation> <translation id="1856388568474281774">向下箭咀</translation> +<translation id="1858620243986915808">附加螢幕截圖</translation> <translation id="1871569928317311284">關閉深色主題背景</translation> <translation id="1874612839560830905">MTU</translation> <translation id="188114911237521550">關閉暗光模式</translation>
diff --git a/chromeos/strings/chromeos_strings_zh-TW.xtb b/chromeos/strings/chromeos_strings_zh-TW.xtb index 868c0858..71d68a5 100644 --- a/chromeos/strings/chromeos_strings_zh-TW.xtb +++ b/chromeos/strings/chromeos_strings_zh-TW.xtb
@@ -118,6 +118,7 @@ <translation id="1851218745569890714">視訊會議</translation> <translation id="1852934301711881861">安裝 ChromeOS Flex</translation> <translation id="1856388568474281774">向下鍵</translation> +<translation id="1858620243986915808">附加螢幕截圖</translation> <translation id="1871569928317311284">關閉深色主題</translation> <translation id="1874612839560830905">最大傳輸單元</translation> <translation id="188114911237521550">關閉深色模式</translation>
diff --git a/components/autofill/core/browser/BUILD.gn b/components/autofill/core/browser/BUILD.gn index a490579..2f2ed19 100644 --- a/components/autofill/core/browser/BUILD.gn +++ b/components/autofill/core/browser/BUILD.gn
@@ -171,6 +171,8 @@ "field_types.h", "form_data_importer.cc", "form_data_importer.h", + "form_data_importer_utils.cc", + "form_data_importer_utils.h", "form_parsing/address_field.cc", "form_parsing/address_field.h", "form_parsing/autofill_parsing_utils.h",
diff --git a/components/autofill/core/browser/autofill_suggestion_generator.cc b/components/autofill/core/browser/autofill_suggestion_generator.cc index d409d25..2e2b1aa1 100644 --- a/components/autofill/core/browser/autofill_suggestion_generator.cc +++ b/components/autofill/core/browser/autofill_suggestion_generator.cc
@@ -315,25 +315,10 @@ suggestion.main_text = Suggestion::Text(credit_card.GetInfo(type, app_locale), Suggestion::Text::IsPrimary(true)); suggestion.icon = credit_card.CardIconStringForAutofillSuggestion(); - std::string backend_id = credit_card.guid(); + suggestion.payload = credit_card.guid(); suggestion.match = prefix_matched_suggestion ? Suggestion::PREFIX_MATCH : Suggestion::SUBSTRING_MATCH; - GURL card_art_url_for_virtual_card_option; - if (virtual_card_option && - credit_card.record_type() == CreditCard::MASKED_SERVER_CARD) { - card_art_url_for_virtual_card_option = credit_card.card_art_url(); - } else if (virtual_card_option && - credit_card.record_type() == CreditCard::LOCAL_CARD) { - const CreditCard* server_duplicate_card = - GetServerCardForLocalCard(&credit_card); - DCHECK(server_duplicate_card); - card_art_url_for_virtual_card_option = - server_duplicate_card->card_art_url(); - backend_id = server_duplicate_card->guid(); - } - suggestion.payload = backend_id; - // Get the nickname for the card suggestion, which may not be the same as // the card's nickname if there are duplicates of the card on file. std::u16string suggestion_nickname = @@ -345,8 +330,8 @@ base::FeatureList::IsEnabled(features::kAutofillKeyboardAccessory) ? 2 : 4; // If the value is the card number, the label is the expiration date. - // Otherwise the label is the card number, or if that is empty the - // cardholder name. The label should never repeat the value. + // Otherwise the label is the card number, or if that is empty the cardholder + // name. The label should never repeat the value. if (type.GetStorableType() == CREDIT_CARD_NUMBER) { suggestion.main_text = Suggestion::Text(credit_card.CardIdentifierStringForAutofillDisplay( @@ -391,10 +376,19 @@ #endif } + // For virtual cards, use issuer's card art icon instead of network icon. if (virtual_card_option) { -#if BUILDFLAG(IS_ANDROID) - suggestion.custom_icon_url = credit_card.card_art_url(); -#endif // BUILDFLAG(IS_ANDROID) + GURL card_art_url_for_virtual_card_option; + if (credit_card.record_type() == CreditCard::MASKED_SERVER_CARD) { + card_art_url_for_virtual_card_option = credit_card.card_art_url(); + } else if (credit_card.record_type() == CreditCard::LOCAL_CARD) { + const CreditCard* server_duplicate_card = + GetServerCardForLocalCard(&credit_card); + DCHECK(server_duplicate_card); + card_art_url_for_virtual_card_option = + server_duplicate_card->card_art_url(); + suggestion.payload = server_duplicate_card->guid(); + } suggestion.frontend_id = POPUP_ITEM_ID_VIRTUAL_CREDIT_CARD_ENTRY; suggestion.minor_text.value = suggestion.main_text.value; @@ -404,10 +398,14 @@ suggestion.feature_for_iph = feature_engagement::kIPHAutofillVirtualCardSuggestionFeature.name; +#if BUILDFLAG(IS_ANDROID) + suggestion.custom_icon_url = card_art_url_for_virtual_card_option; +#else gfx::Image* image = personal_data_->GetCreditCardArtImageForUrl( card_art_url_for_virtual_card_option); if (image) suggestion.custom_icon = *image; +#endif // BUILDFLAG(IS_ANDROID) } #if BUILDFLAG(IS_ANDROID) // The card art icon should always be shown at the start of the suggestion.
diff --git a/components/autofill/core/browser/form_data_importer.cc b/components/autofill/core/browser/form_data_importer.cc index e37194c..f552ec8 100644 --- a/components/autofill/core/browser/form_data_importer.cc +++ b/components/autofill/core/browser/form_data_importer.cc
@@ -38,7 +38,6 @@ #include "components/autofill/core/browser/payments/virtual_card_enrollment_manager.h" #include "components/autofill/core/browser/personal_data_manager.h" #include "components/autofill/core/browser/validation.h" -#include "components/autofill/core/common/autofill_clock.h" #include "components/autofill/core/common/autofill_features.h" #include "components/autofill/core/common/autofill_internals/log_message.h" #include "components/autofill/core/common/autofill_internals/logging_scope.h" @@ -99,113 +98,6 @@ return true; } -// Returns true if minimum requirements for import of a given |profile| have -// been met. An address submitted via a form must have at least the fields -// required as determined by its country code. -// No verification of validity of the contents is performed. This is an -// existence check only. -bool IsMinimumAddress(const AutofillProfile& profile, - const std::string& predicted_country_code, - const std::string& app_locale, - LogBuffer* import_log_buffer, - bool collect_metrics) { - AutofillCountry country(predicted_country_code, app_locale); - - // Include the details of the country to the log. - LOG_AF(import_log_buffer) << country; - - // Check the |ADDRESS_HOME_LINE1| requirement. - bool is_line1_missing = false; - if (country.requires_line1() && !profile.HasRawInfo(ADDRESS_HOME_LINE1) && - !profile.HasRawInfo(ADDRESS_HOME_STREET_NAME)) { - LOG_AF(import_log_buffer) - << LogMessage::kImportAddressProfileFromFormFailed - << "Missing required ADDRESS_HOME_LINE1." << CTag{}; - is_line1_missing = true; - } - - // Check the |ADDRESS_HOME_CITY| requirement. - bool is_city_missing = false; - if (country.requires_city() && !profile.HasRawInfo(ADDRESS_HOME_CITY)) { - LOG_AF(import_log_buffer) - << LogMessage::kImportAddressProfileFromFormFailed - << "Missing required ADDRESS_HOME_CITY." << CTag{}; - is_city_missing = true; - } - - // Check the |ADDRESS_HOME_STATE| requirement. - bool is_state_missing = false; - if (country.requires_state() && !profile.HasRawInfo(ADDRESS_HOME_STATE)) { - LOG_AF(import_log_buffer) - << LogMessage::kImportAddressProfileFromFormFailed - << "Missing required ADDRESS_HOME_STATE." << CTag{}; - is_state_missing = true; - } - - // Check the |ADDRESS_HOME_ZIP| requirement. - bool is_zip_missing = false; - if (country.requires_zip() && !profile.HasRawInfo(ADDRESS_HOME_ZIP)) { - LOG_AF(import_log_buffer) << LogMessage::kImportAddressProfileFromFormFailed - << "Missing required ADDRESS_HOME_ZIP." << CTag{}; - is_zip_missing = true; - } - - bool is_zip_or_state_requirement_violated = false; - if (country.requires_zip_or_state() && - !profile.HasRawInfo(ADDRESS_HOME_ZIP) && - !profile.HasRawInfo(ADDRESS_HOME_STATE)) { - LOG_AF(import_log_buffer) - << LogMessage::kImportAddressProfileFromFormFailed - << "Missing required ADDRESS_HOME_ZIP or ADDRESS_HOME_STATE." << CTag{}; - is_zip_or_state_requirement_violated = true; - } - - bool is_line1_or_house_number_violated = false; - if (country.requires_line1_or_house_number() && - !profile.HasRawInfo(ADDRESS_HOME_LINE1) && - !profile.HasRawInfo(ADDRESS_HOME_HOUSE_NUMBER)) { - LOG_AF(import_log_buffer) - << LogMessage::kImportAddressProfileFromFormFailed - << "Missing required ADDRESS_HOME_LINE1 or ADDRESS_HOME_HOUSE_NUMBER." - << CTag{}; - is_line1_or_house_number_violated = true; - } - - // Collect metrics regarding the requirements. - if (collect_metrics) { - AutofillMetrics::LogAddressFormImportRequirementMetric( - is_line1_missing - ? AddressImportRequirement::LINE1_REQUIREMENT_VIOLATED - : AddressImportRequirement::LINE1_REQUIREMENT_FULFILLED); - - AutofillMetrics::LogAddressFormImportRequirementMetric( - is_city_missing ? AddressImportRequirement::CITY_REQUIREMENT_VIOLATED - : AddressImportRequirement::CITY_REQUIREMENT_FULFILLED); - - AutofillMetrics::LogAddressFormImportRequirementMetric( - is_state_missing - ? AddressImportRequirement::STATE_REQUIREMENT_VIOLATED - : AddressImportRequirement::STATE_REQUIREMENT_FULFILLED); - - AutofillMetrics::LogAddressFormImportRequirementMetric( - is_zip_missing ? AddressImportRequirement::ZIP_REQUIREMENT_VIOLATED - : AddressImportRequirement::ZIP_REQUIREMENT_FULFILLED); - - AutofillMetrics::LogAddressFormImportRequirementMetric( - is_zip_or_state_requirement_violated - ? AddressImportRequirement::ZIP_OR_STATE_REQUIREMENT_VIOLATED - : AddressImportRequirement::ZIP_OR_STATE_REQUIREMENT_FULFILLED); - - AutofillMetrics::LogAddressFormImportCountrySpecificFieldRequirementsMetric( - is_zip_missing, is_state_missing, is_city_missing, is_line1_missing); - } - - // Return true if all requirements are fulfilled. - return !(is_line1_missing || is_city_missing || is_state_missing || - is_zip_missing || is_zip_or_state_requirement_violated || - is_line1_or_house_number_violated); -} - } // namespace FormDataImporter::FormDataImporter(AutofillClient* client, @@ -235,7 +127,9 @@ virtual_card_enrollment_manager_( std::make_unique<VirtualCardEnrollmentManager>(personal_data_manager, payments_client, - client)) { + client)), + multistep_importer_(app_locale, + client_->GetVariationConfigCountryCode()) { if (personal_data_manager_) personal_data_manager_->AddObserver(this); } @@ -290,44 +184,6 @@ } // static -std::string FormDataImporter::GetPredictedCountryCode( - const AutofillProfile& profile, - const std::string& variation_country_code, - const std::string& app_locale, - LogBuffer* import_log_buffer) { - // Try to acquire the country code form the filled form. - std::string country_code = - base::UTF16ToASCII(profile.GetRawInfo(ADDRESS_HOME_COUNTRY)); - - if (import_log_buffer && !country_code.empty()) { - *import_log_buffer << LogMessage::kImportAddressProfileFromFormCountrySource - << "Country entry in form." << CTag{}; - } - - // As a fallback, use the variation service state to get a country code. - if (country_code.empty() && !variation_country_code.empty()) { - country_code = variation_country_code; - if (import_log_buffer) { - *import_log_buffer - << LogMessage::kImportAddressProfileFromFormCountrySource - << "Variations service." << CTag{}; - } - } - - // As the last resort, derive the country code from the app_locale. - if (country_code.empty()) { - country_code = AutofillCountry::CountryCodeForLocale(app_locale); - if (import_log_buffer && !country_code.empty()) { - *import_log_buffer - << LogMessage::kImportAddressProfileFromFormCountrySource - << "App locale." << CTag{}; - } - } - - return country_code; -} - -// static bool FormDataImporter::IsValidLearnableProfile( const AutofillProfile& profile, const std::string& predicted_country_code, @@ -762,8 +618,9 @@ // This requires the profile to be finalized to apply the merging logic. if (finalized_import && has_address_related_fields && !has_invalid_information) { - ProcessMultiStepImport(candidate_profile, import_metadata, - url::Origin::Create(form.source_url())); + multistep_importer_.ProcessMultiStepImport( + candidate_profile, import_metadata, + url::Origin::Create(form.source_url())); // The predicted country code has possibly changed, if |candidate_profile| // was merged with a profile containing country information. predicted_country_code = @@ -1195,114 +1052,16 @@ return true; } -void FormDataImporter::ProcessMultiStepImport( - AutofillProfile& profile, - ProfileImportMetadata& import_metadata, - const url::Origin& origin) { - if (!base::FeatureList::IsEnabled( - features::kAutofillEnableMultiStepImports)) { - return; - } - - RemoveOutdatedMultiStepCandidates(origin); - bool has_min_address_requirements = - MergeProfileWithMultiStepCandidates(profile, import_metadata, origin); - - if (!has_min_address_requirements || - features::kAutofillEnableMultiStepImportComplements.Get()) { - // Add |profile| as a |multistep_candidate|. This happens for incomplete - // profiles, which can then be complemented in later steps. When - // |kAutofillEnableMultiStepImportComplements| is enabled, complete profiles - // are stored too, which enables updating them in later steps. - // In the latter case, Autofill tries to import the `profile`. This logs - // metrics depending on `import_metadata`. To prevent double counting, - // an we store an empty `ProfileImportMetadata` object in this case. - multistep_candidates_.push_front(MultiStepFormProfileCandidate{ - .profile = profile, - .import_metadata = has_min_address_requirements - ? ProfileImportMetadata() - : import_metadata, - .timestamp = AutofillClock::Now()}); - multistep_candidates_origin_ = origin; - } -} - -void FormDataImporter::RemoveOutdatedMultiStepCandidates( - const url::Origin& origin) { - // All |multistep_candidates| share |multistep_candidates_origin|. - if (multistep_candidates_origin_.has_value() && - multistep_candidates_origin_.value() != origin) { - multistep_candidates_.clear(); - } else { - // Remove candidates that reached their TTL. - const base::TimeDelta ttl = - features::kAutofillMultiStepImportCandidateTTL.Get(); - const base::Time now = AutofillClock::Now(); - while (!multistep_candidates_.empty() && - now - multistep_candidates_.back().timestamp > ttl) { - multistep_candidates_.pop_back(); - } - } - if (multistep_candidates_.empty()) { - multistep_candidates_origin_.reset(); - } -} - -bool FormDataImporter::MergeProfileWithMultiStepCandidates( - AutofillProfile& profile, - ProfileImportMetadata& import_metadata, - const url::Origin& origin) { - // Greedily merge with a prefix of |multistep_candidates|. - AutofillProfileComparator comparator(app_locale_); - std::deque<MultiStepFormProfileCandidate>::iterator merge_candidate = - multistep_candidates_.begin(); - AutofillProfile completed_profile = profile; - ProfileImportMetadata completed_metadata = import_metadata; - // Country completion has not happened yet, so this field can be ignored. - DCHECK(!completed_metadata.did_complement_country); - while ( - merge_candidate != multistep_candidates_.end() && - comparator.AreMergeable(completed_profile, merge_candidate->profile) && - completed_profile.MergeDataFrom(merge_candidate->profile, app_locale_)) { - // ProfileImportMetadata is only relevant for metrics. If the phone number - // was removed from a partial profile, we still want that removal to appear - // in the metrics, because it would have hindered that partial profile from - // import and merging. - completed_metadata.did_remove_invalid_phone_number |= - merge_candidate->import_metadata.did_remove_invalid_phone_number; - merge_candidate++; - } - - // The minimum address requirements depend on the country, which has possibly - // changed as a result of the merge. - if (IsMinimumAddress( - completed_profile, - GetPredictedCountryCode(completed_profile, - client_->GetVariationConfigCountryCode(), - app_locale_, /*import_log_buffer=*/nullptr), - app_locale_, - /*import_log_buffer=*/nullptr, /*collect_metrics=*/false)) { - profile = std::move(completed_profile); - import_metadata = std::move(completed_metadata); - multistep_candidates_.clear(); - return true; - } else { - // Remove all profiles that couldn't be merged. - multistep_candidates_.erase(merge_candidate, multistep_candidates_.end()); - return false; - } -} - void FormDataImporter::OnBrowsingHistoryCleared( const history::DeletionInfo& deletion_info) { // Delete all multi-step import candidates when: // - The entire browsing history is cleared, or - // - At least one URL from the same origin as `multistep_candidates_origin_` + // - At least one URL from the same origin as `multistep_importer_` // is deleted. if (deletion_info.IsAllHistory() || - (multistep_candidates_origin_.has_value() && + (multistep_importer_.Origin() && base::Contains(deletion_info.deleted_rows(), - *multistep_candidates_origin_, + *multistep_importer_.Origin(), [](const history::URLRow& url_row) { return url::Origin::Create(url_row.url()); }))) {
diff --git a/components/autofill/core/browser/form_data_importer.h b/components/autofill/core/browser/form_data_importer.h index 70abf5e..4fc5e5c 100644 --- a/components/autofill/core/browser/form_data_importer.h +++ b/components/autofill/core/browser/form_data_importer.h
@@ -5,7 +5,6 @@ #ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_FORM_DATA_IMPORTER_H_ #define COMPONENTS_AUTOFILL_CORE_BROWSER_FORM_DATA_IMPORTER_H_ -#include <deque> #include <map> #include <memory> #include <string> @@ -13,10 +12,10 @@ #include "base/gtest_prod_util.h" #include "base/memory/raw_ptr.h" -#include "base/time/time.h" #include "build/build_config.h" #include "components/autofill/core/browser/autofill_client.h" #include "components/autofill/core/browser/autofill_profile_import_process.h" +#include "components/autofill/core/browser/form_data_importer_utils.h" #include "components/autofill/core/browser/form_structure.h" #include "components/autofill/core/browser/payments/credit_card_save_manager.h" #include "components/autofill/core/browser/payments/local_card_migration_manager.h" @@ -73,19 +72,6 @@ // duplicated field types in the form. CreditCard ExtractCreditCardFromForm(const FormStructure& form); - // Tries to infer the country |profile| is from, which can be useful to - // verify whether the data is sensible. Returns a two-letter ISO country code - // by considering, in decreasing order of priority: - // - The country specified in |profile| - // - The country determined by the variation service stored in - // |variation_country_code| - // - The country code corresponding to |app_locale| - static std::string GetPredictedCountryCode( - const AutofillProfile& profile, - const std::string& variation_country_code, - const std::string& app_locale, - LogBuffer* import_log_buffer); - // Checks suitability of |profile| for adding to the user's set of profiles. static bool IsValidLearnableProfile(const AutofillProfile& profile, const std::string& predicted_country_code, @@ -106,10 +92,7 @@ return virtual_card_enrollment_manager_.get(); } - void ClearMultiStepImportCandidates() { - multistep_candidates_.clear(); - multistep_candidates_origin_.reset(); - } + void ClearMultiStepImportCandidates() { multistep_importer_.Clear(); } // PersonalDataManagerObserver void OnBrowsingHistoryCleared( @@ -262,33 +245,6 @@ AutofillProfile& profile, const std::string& predicted_country_code); - // Removes updated multi-step candidates, merges |profile| with multi-step - // candidates and potentially stores it as a multi-step candidate itself. - // |profile| and |import_metadata| are updated accordingly, if the profile can - // be merged. See |MergeProfileWithMultiStepCandidates()| for details. - // Only applicable when |kAutofillEnableMultiStepImports| is enabled. - void ProcessMultiStepImport(AutofillProfile& profile, - ProfileImportMetadata& import_metadata, - const url::Origin& origin); - - // Removes any MultiStepFormProfileCandidate from |multistep_candidates_| that - // reached their TTL or have a different |origin|. - void RemoveOutdatedMultiStepCandidates(const url::Origin& origin); - - // Merges a given |profile| stepwise with |multistep_candidates_| to - // complete it. |profile| is assumed to contain no invalid information. - // Returns true if the resulting profile satisfies the minimum address - // requirements. |profile| and |import_metadata| are updated in this case with - // the result of merging all relevant candidates. - // Returns false otherwise and leaves |profile| and |import_metadata| - // unchanged. - // Any merged or colliding |multistep_candidates_| are cleared. - // |origin|: The origin of the form where |profile| was imported from. - bool MergeProfileWithMultiStepCandidates( - AutofillProfile& profile, - ProfileImportMetadata& import_metadata, - const url::Origin& origin); - // Whether a dynamic change form is imported. bool from_dynamic_change_form_ = false; @@ -333,22 +289,8 @@ std::unique_ptr<VirtualCardEnrollmentManager> virtual_card_enrollment_manager_; - // Represents a submitted form, stored to be considered as a merge candidate - // for other candidate profiles in future submits in a multi-step import flow. - struct MultiStepFormProfileCandidate { - // The import candidate. - AutofillProfile profile; - // Metadata about how |profile| was constructed. - ProfileImportMetadata import_metadata; - // Timestamp when the submit happened. - base::Time timestamp; - }; - // Current multi-step import candidates, in increasing order of their - // |timestamp|. - std::deque<MultiStepFormProfileCandidate> multistep_candidates_; - // All |multistep_candidates_| share the same origin. Has a value iff - // |multistep_candidates_| is not empty. - absl::optional<url::Origin> multistep_candidates_origin_; + // Enables importing from multi-step import flows. + MultiStepImportMerger multistep_importer_; friend class AutofillMergeTest; friend class FormDataImporterTest;
diff --git a/components/autofill/core/browser/form_data_importer_unittest.cc b/components/autofill/core/browser/form_data_importer_unittest.cc index a3334bb..47a06df3 100644 --- a/components/autofill/core/browser/form_data_importer_unittest.cc +++ b/components/autofill/core/browser/form_data_importer_unittest.cc
@@ -731,18 +731,11 @@ ConstructProfileFromTypeValuePairs({{ADDRESS_HOME_COUNTRY, "US"}}); const AutofillProfile empty_profile; // Test prioritization: profile > variation service state > app locale - EXPECT_EQ(FormDataImporter::GetPredictedCountryCode(us_profile, "DE", "de-AT", - nullptr), - "US"); - EXPECT_EQ(FormDataImporter::GetPredictedCountryCode(us_profile, "", "de-AT", - nullptr), - "US"); - EXPECT_EQ(FormDataImporter::GetPredictedCountryCode(empty_profile, "DE", - "de-AT", nullptr), + EXPECT_EQ(GetPredictedCountryCode(us_profile, "DE", "de-AT", nullptr), "US"); + EXPECT_EQ(GetPredictedCountryCode(us_profile, "", "de-AT", nullptr), "US"); + EXPECT_EQ(GetPredictedCountryCode(empty_profile, "DE", "de-AT", nullptr), "DE"); - EXPECT_EQ(FormDataImporter::GetPredictedCountryCode(empty_profile, "", - "de-AT", nullptr), - "AT"); + EXPECT_EQ(GetPredictedCountryCode(empty_profile, "", "de-AT", nullptr), "AT"); } TEST_P(FormDataImporterTest, ComplementCountry) {
diff --git a/components/autofill/core/browser/form_data_importer_utils.cc b/components/autofill/core/browser/form_data_importer_utils.cc new file mode 100644 index 0000000..23ef0c4 --- /dev/null +++ b/components/autofill/core/browser/form_data_importer_utils.cc
@@ -0,0 +1,246 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/autofill/core/browser/form_data_importer_utils.h" + +#include "base/strings/utf_string_conversions.h" +#include "components/autofill/core/browser/data_model/autofill_profile_comparator.h" +#include "components/autofill/core/browser/geo/autofill_country.h" +#include "components/autofill/core/browser/logging/log_manager.h" +#include "components/autofill/core/browser/metrics/autofill_metrics.h" +#include "components/autofill/core/common/autofill_features.h" +#include "components/autofill/core/common/autofill_internals/log_message.h" + +namespace autofill { + +namespace { + +using AddressImportRequirement = + AutofillMetrics::AddressProfileImportRequirementMetric; + +} // anonymous namespace + +bool IsMinimumAddress(const AutofillProfile& profile, + const std::string& predicted_country_code, + const std::string& app_locale, + LogBuffer* import_log_buffer, + bool collect_metrics) { + AutofillCountry country(predicted_country_code, app_locale); + + // Include the details of the country to the log. + LOG_AF(import_log_buffer) << country; + + // Check the |ADDRESS_HOME_LINE1| requirement. + bool is_line1_missing = false; + if (country.requires_line1() && !profile.HasRawInfo(ADDRESS_HOME_LINE1) && + !profile.HasRawInfo(ADDRESS_HOME_STREET_NAME)) { + LOG_AF(import_log_buffer) + << LogMessage::kImportAddressProfileFromFormFailed + << "Missing required ADDRESS_HOME_LINE1." << CTag{}; + is_line1_missing = true; + } + + // Check the |ADDRESS_HOME_CITY| requirement. + bool is_city_missing = false; + if (country.requires_city() && !profile.HasRawInfo(ADDRESS_HOME_CITY)) { + LOG_AF(import_log_buffer) + << LogMessage::kImportAddressProfileFromFormFailed + << "Missing required ADDRESS_HOME_CITY." << CTag{}; + is_city_missing = true; + } + + // Check the |ADDRESS_HOME_STATE| requirement. + bool is_state_missing = false; + if (country.requires_state() && !profile.HasRawInfo(ADDRESS_HOME_STATE)) { + LOG_AF(import_log_buffer) + << LogMessage::kImportAddressProfileFromFormFailed + << "Missing required ADDRESS_HOME_STATE." << CTag{}; + is_state_missing = true; + } + + // Check the |ADDRESS_HOME_ZIP| requirement. + bool is_zip_missing = false; + if (country.requires_zip() && !profile.HasRawInfo(ADDRESS_HOME_ZIP)) { + LOG_AF(import_log_buffer) << LogMessage::kImportAddressProfileFromFormFailed + << "Missing required ADDRESS_HOME_ZIP." << CTag{}; + is_zip_missing = true; + } + + bool is_zip_or_state_requirement_violated = false; + if (country.requires_zip_or_state() && + !profile.HasRawInfo(ADDRESS_HOME_ZIP) && + !profile.HasRawInfo(ADDRESS_HOME_STATE)) { + LOG_AF(import_log_buffer) + << LogMessage::kImportAddressProfileFromFormFailed + << "Missing required ADDRESS_HOME_ZIP or ADDRESS_HOME_STATE." << CTag{}; + is_zip_or_state_requirement_violated = true; + } + + bool is_line1_or_house_number_violated = false; + if (country.requires_line1_or_house_number() && + !profile.HasRawInfo(ADDRESS_HOME_LINE1) && + !profile.HasRawInfo(ADDRESS_HOME_HOUSE_NUMBER)) { + LOG_AF(import_log_buffer) + << LogMessage::kImportAddressProfileFromFormFailed + << "Missing required ADDRESS_HOME_LINE1 or ADDRESS_HOME_HOUSE_NUMBER." + << CTag{}; + is_line1_or_house_number_violated = true; + } + + // Collect metrics regarding the requirements. + if (collect_metrics) { + AutofillMetrics::LogAddressFormImportRequirementMetric( + is_line1_missing + ? AddressImportRequirement::LINE1_REQUIREMENT_VIOLATED + : AddressImportRequirement::LINE1_REQUIREMENT_FULFILLED); + + AutofillMetrics::LogAddressFormImportRequirementMetric( + is_city_missing ? AddressImportRequirement::CITY_REQUIREMENT_VIOLATED + : AddressImportRequirement::CITY_REQUIREMENT_FULFILLED); + + AutofillMetrics::LogAddressFormImportRequirementMetric( + is_state_missing + ? AddressImportRequirement::STATE_REQUIREMENT_VIOLATED + : AddressImportRequirement::STATE_REQUIREMENT_FULFILLED); + + AutofillMetrics::LogAddressFormImportRequirementMetric( + is_zip_missing ? AddressImportRequirement::ZIP_REQUIREMENT_VIOLATED + : AddressImportRequirement::ZIP_REQUIREMENT_FULFILLED); + + AutofillMetrics::LogAddressFormImportRequirementMetric( + is_zip_or_state_requirement_violated + ? AddressImportRequirement::ZIP_OR_STATE_REQUIREMENT_VIOLATED + : AddressImportRequirement::ZIP_OR_STATE_REQUIREMENT_FULFILLED); + + AutofillMetrics::LogAddressFormImportCountrySpecificFieldRequirementsMetric( + is_zip_missing, is_state_missing, is_city_missing, is_line1_missing); + } + + // Return true if all requirements are fulfilled. + return !(is_line1_missing || is_city_missing || is_state_missing || + is_zip_missing || is_zip_or_state_requirement_violated || + is_line1_or_house_number_violated); +} + +std::string GetPredictedCountryCode(const AutofillProfile& profile, + const std::string& variation_country_code, + const std::string& app_locale, + LogBuffer* import_log_buffer) { + // Try to acquire the country code form the filled form. + std::string country_code = + base::UTF16ToASCII(profile.GetRawInfo(ADDRESS_HOME_COUNTRY)); + + if (import_log_buffer && !country_code.empty()) { + *import_log_buffer << LogMessage::kImportAddressProfileFromFormCountrySource + << "Country entry in form." << CTag{}; + } + + // As a fallback, use the variation service state to get a country code. + if (country_code.empty() && !variation_country_code.empty()) { + country_code = variation_country_code; + if (import_log_buffer) { + *import_log_buffer + << LogMessage::kImportAddressProfileFromFormCountrySource + << "Variations service." << CTag{}; + } + } + + // As the last resort, derive the country code from the app_locale. + if (country_code.empty()) { + country_code = AutofillCountry::CountryCodeForLocale(app_locale); + if (import_log_buffer && !country_code.empty()) { + *import_log_buffer + << LogMessage::kImportAddressProfileFromFormCountrySource + << "App locale." << CTag{}; + } + } + + return country_code; +} + +MultiStepImportMerger::MultiStepImportMerger( + const std::string& app_locale, + const std::string& variation_country_code) + : app_locale_(app_locale), + variation_country_code_(variation_country_code) {} +MultiStepImportMerger::~MultiStepImportMerger() {} + +void MultiStepImportMerger::ProcessMultiStepImport( + AutofillProfile& profile, + ProfileImportMetadata& import_metadata, + const url::Origin& origin) { + if (!base::FeatureList::IsEnabled( + features::kAutofillEnableMultiStepImports)) { + return; + } + + multistep_candidates_.RemoveOutdatedItems( + features::kAutofillMultiStepImportCandidateTTL.Get(), origin); + bool has_min_address_requirements = + MergeProfileWithMultiStepCandidates(profile, import_metadata, origin); + + if (!has_min_address_requirements || + features::kAutofillEnableMultiStepImportComplements.Get()) { + // Add `profile| as a `multistep_candidate`. This happens for incomplete + // profiles, which can then be complemented in later steps. When + // `kAutofillEnableMultiStepImportComplements` is enabled, complete profiles + // are stored too, which enables updating them in later steps. + // In the latter case, Autofill tries to import the `profile`. This logs + // metrics depending on `import_metadata`. To prevent double counting, + // an we store an empty `ProfileImportMetadata` object in this case. + multistep_candidates_.Push({.profile = profile, + .import_metadata = has_min_address_requirements + ? ProfileImportMetadata() + : import_metadata}, + origin); + } +} + +bool MultiStepImportMerger::MergeProfileWithMultiStepCandidates( + AutofillProfile& profile, + ProfileImportMetadata& import_metadata, + const url::Origin& origin) { + // Greedily merge with a prefix of |multistep_candidates|. + AutofillProfileComparator comparator(app_locale_); + auto candidate_it = multistep_candidates_.items.cbegin(); + AutofillProfile completed_profile = profile; + ProfileImportMetadata completed_metadata = import_metadata; + // Country completion has not happened yet, so this field can be ignored. + DCHECK(!completed_metadata.did_complement_country); + while (candidate_it != multistep_candidates_.items.end()) { + const MultiStepFormProfileCandidate& candidate = candidate_it->data; + if (!comparator.AreMergeable(completed_profile, candidate.profile) || + completed_profile.MergeDataFrom(candidate.profile, app_locale_)) { + break; + } + // ProfileImportMetadata is only relevant for metrics. If the phone number + // was removed from a partial profile, we still want that removal to appear + // in the metrics, because it would have hindered that partial profile from + // import and merging. + completed_metadata.did_remove_invalid_phone_number |= + candidate.import_metadata.did_remove_invalid_phone_number; + candidate_it++; + } + + // The minimum address requirements depend on the country, which has possibly + // changed as a result of the merge. + if (IsMinimumAddress( + completed_profile, + GetPredictedCountryCode(completed_profile, variation_country_code_, + app_locale_, /*import_log_buffer=*/nullptr), + app_locale_, + /*import_log_buffer=*/nullptr, /*collect_metrics=*/false)) { + profile = std::move(completed_profile); + import_metadata = std::move(completed_metadata); + multistep_candidates_.Clear(); + return true; + } else { + // Remove all profiles that couldn't be merged. + multistep_candidates_.items.erase(candidate_it, + multistep_candidates_.items.end()); + return false; + } +} + +} // namespace autofill
diff --git a/components/autofill/core/browser/form_data_importer_utils.h b/components/autofill/core/browser/form_data_importer_utils.h new file mode 100644 index 0000000..9c80023 --- /dev/null +++ b/components/autofill/core/browser/form_data_importer_utils.h
@@ -0,0 +1,146 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_FORM_DATA_IMPORTER_UTILS_H_ +#define COMPONENTS_AUTOFILL_CORE_BROWSER_FORM_DATA_IMPORTER_UTILS_H_ + +#include <deque> +#include <string> + +#include "base/time/time.h" +#include "components/autofill/core/browser/autofill_profile_import_process.h" +#include "components/autofill/core/browser/data_model/autofill_profile.h" +#include "components/autofill/core/common/autofill_clock.h" +#include "components/autofill/core/common/logging/log_buffer.h" +#include "third_party/abseil-cpp/absl/types/optional.h" +#include "url/origin.h" + +namespace autofill { + +namespace internal { + +// Encapsulates a list of Ts, ordered by the time they were added (newest +// first). All Ts share the same `origin`. This is useful for tracking +// relationships between submitted forms on the same origin, within a small +// period of time. +template <class T> +struct TimestampedSameOriginQueue { + struct QueueEntry { + T data; + base::Time timestamp; + }; + std::deque<QueueEntry> items; + absl::optional<url::Origin> origin; // Shared by all `items_`. + + // Pushes `item` at the current timestamp. + void Push(const T& item, const url::Origin& item_origin) { + DCHECK(!origin || *origin == item_origin); + items.push_front({item, AutofillClock::Now()}); + origin = item_origin; + } + + // Removes all `items` from a different `origin` or older than `ttl`. + void RemoveOutdatedItems(const base::TimeDelta& ttl, + const url::Origin& new_origin) { + if (origin && *origin != new_origin) { + items.clear(); + } else { + const base::Time now = AutofillClock::Now(); + while (!items.empty() && now - items.back().timestamp > ttl) + items.pop_back(); + } + if (items.empty()) + origin.reset(); + } + + void Clear() { + items.clear(); + origin.reset(); + } +}; + +}; // namespace internal + +// Returns true if minimum requirements for import of a given `profile` have +// been met. An address submitted via a form must have at least the fields +// required as determined by its country code. +// No verification of validity of the contents is performed. This is an +// existence check only. +bool IsMinimumAddress(const AutofillProfile& profile, + const std::string& predicted_country_code, + const std::string& app_locale, + LogBuffer* import_log_buffer, + bool collect_metrics); + +// Tries to infer the country `profile` is from, which can be useful to +// verify whether the data is sensible. Returns a two-letter ISO country code +// by considering, in decreasing order of priority: +// - The country specified in `profile`. +// - The country determined by the variation service stored in +// `variation_country_code`. +// - The country code corresponding to `app_locale`. +std::string GetPredictedCountryCode(const AutofillProfile& profile, + const std::string& variation_country_code, + const std::string& app_locale, + LogBuffer* import_log_buffer); + +// Stores recently submitted profile fragments, which are merged against future +// import candidates to construct a complete profile. This enables importing +// from multi-step import flows. +class MultiStepImportMerger { + public: + MultiStepImportMerger(const std::string& app_locale, + const std::string& variation_country_code); + ~MultiStepImportMerger(); + + // Removes updated multi-step candidates, merges `profile` with multi-step + // candidates and potentially stores it as a multi-step candidate itself. + // `profile` and `import_metadata` are updated accordingly, if the profile + // can be merged. See `MergeProfileWithMultiStepCandidates()` for details. + // Only applicable when `kAutofillEnableMultiStepImports` is enabled. + void ProcessMultiStepImport(AutofillProfile& profile, + ProfileImportMetadata& import_metadata, + const url::Origin& origin); + + const absl::optional<url::Origin>& Origin() const { + return multistep_candidates_.origin; + } + + void Clear() { multistep_candidates_.Clear(); } + + private: + // Merges a given `profile` stepwise with `multistep_candidates_` to + // complete it. `profile` is assumed to contain no invalid information. + // Returns true if the resulting profile satisfies the minimum address + // requirements. `profile` and `import_metadata` are updated in this case + // with the result of merging all relevant candidates. + // Returns false otherwise and leaves `profile` and `import_metadata` + // unchanged. Any merged or colliding `multistep_candidates_` are cleared. + // `origin`: The origin of the form where `profile` was imported from. + bool MergeProfileWithMultiStepCandidates( + AutofillProfile& profile, + ProfileImportMetadata& import_metadata, + const url::Origin& origin); + + // Needed to predict the country code of a merged import candidate, to + // ultimately decide if the profile meets the minimum import requirements. + std::string app_locale_; + std::string variation_country_code_; + + // Represents a submitted form, stored to be considered as a merge candidate + // for other candidate profiles in future submits in a multi-step import + // flow. + struct MultiStepFormProfileCandidate { + // The import candidate. + AutofillProfile profile; + // Metadata about how `profile` was constructed. + ProfileImportMetadata import_metadata; + }; + internal::TimestampedSameOriginQueue<MultiStepFormProfileCandidate> + multistep_candidates_; +}; + +} // namespace autofill + +#endif // COMPONENTS_AUTOFILL_CORE_BROWSER_FORM_DATA_IMPORTER_UTILS_H_
diff --git a/components/autofill_assistant/browser/android/starter_delegate_android.cc b/components/autofill_assistant/browser/android/starter_delegate_android.cc index 2009b196..0eae543 100644 --- a/components/autofill_assistant/browser/android/starter_delegate_android.cc +++ b/components/autofill_assistant/browser/android/starter_delegate_android.cc
@@ -321,7 +321,8 @@ if (trigger_context->GetScriptParameters().GetRunHeadless()) { headless_script_controller_ = std::make_unique<HeadlessScriptControllerImpl>( - &GetWebContents(), /*action_extension_delegate=*/nullptr); + &GetWebContents(), /*action_extension_delegate=*/nullptr, + GetWebsiteLoginManager()); headless_script_controller_->StartScript( // Note: this ignores device-only parameters.
diff --git a/components/autofill_assistant/browser/autofill_assistant_impl.cc b/components/autofill_assistant/browser/autofill_assistant_impl.cc index b3760226..9c9ba8a 100644 --- a/components/autofill_assistant/browser/autofill_assistant_impl.cc +++ b/components/autofill_assistant/browser/autofill_assistant_impl.cc
@@ -11,6 +11,7 @@ #include "components/autofill_assistant/browser/desktop/starter_delegate_desktop.h" #include "components/autofill_assistant/browser/headless/headless_script_controller_impl.h" #include "components/autofill_assistant/browser/protocol_utils.h" +#include "components/autofill_assistant/browser/public/password_change/website_login_manager.h" #include "components/autofill_assistant/browser/service.pb.h" #include "components/autofill_assistant/browser/service/api_key_fetcher.h" #include "components/autofill_assistant/browser/service/cup_impl.h" @@ -137,9 +138,10 @@ std::unique_ptr<HeadlessScriptController> AutofillAssistantImpl::CreateHeadlessScriptController( content::WebContents* web_contents, - ExternalActionDelegate* action_extension_delegate) { + ExternalActionDelegate* action_extension_delegate, + WebsiteLoginManager* website_login_manager) { return std::make_unique<HeadlessScriptControllerImpl>( - web_contents, action_extension_delegate); + web_contents, action_extension_delegate, website_login_manager); } } // namespace autofill_assistant
diff --git a/components/autofill_assistant/browser/autofill_assistant_impl.h b/components/autofill_assistant/browser/autofill_assistant_impl.h index e1fc0fb..218c29a 100644 --- a/components/autofill_assistant/browser/autofill_assistant_impl.h +++ b/components/autofill_assistant/browser/autofill_assistant_impl.h
@@ -21,6 +21,7 @@ namespace autofill_assistant { class CommonDependencies; +class WebsiteLoginManager; class AutofillAssistantImpl : public autofill_assistant::AutofillAssistant { public: @@ -45,7 +46,8 @@ std::unique_ptr<HeadlessScriptController> CreateHeadlessScriptController( content::WebContents* web_contents, - ExternalActionDelegate* action_extension_delegate) override; + ExternalActionDelegate* action_extension_delegate, + WebsiteLoginManager* website_login_manager = nullptr) override; private: // The `BrowserContext` for which this `AutofillAssistantImpl` was created
diff --git a/components/autofill_assistant/browser/headless/client_headless.cc b/components/autofill_assistant/browser/headless/client_headless.cc index 344e58d5..3f65bce 100644 --- a/components/autofill_assistant/browser/headless/client_headless.cc +++ b/components/autofill_assistant/browser/headless/client_headless.cc
@@ -19,6 +19,7 @@ #include "components/autofill_assistant/browser/features.h" #include "components/autofill_assistant/browser/headless/headless_script_controller_impl.h" #include "components/autofill_assistant/browser/public/password_change/empty_website_login_manager_impl.h" +#include "components/autofill_assistant/browser/public/password_change/website_login_manager.h" #include "components/autofill_assistant/browser/public/password_change/website_login_manager_impl.h" #include "components/autofill_assistant/browser/public/ui_state.h" #include "components/autofill_assistant/browser/service/access_token_fetcher.h" @@ -45,18 +46,12 @@ content::WebContents* web_contents, const CommonDependencies* common_dependencies, ExternalActionDelegate* action_extension_delegate, + WebsiteLoginManager* website_login_manager, HeadlessScriptControllerImpl* external_script_controller) : web_contents_(web_contents), common_dependencies_(common_dependencies), + website_login_manager_(website_login_manager), external_script_controller_(external_script_controller) { - auto* password_manager_client = - common_dependencies_->GetPasswordManagerClient(web_contents); - if (password_manager_client) { - website_login_manager_ = std::make_unique<WebsiteLoginManagerImpl>( - password_manager_client, web_contents); - } else { - website_login_manager_ = std::make_unique<EmptyWebsiteLoginManagerImpl>(); - } headless_ui_controller_ = std::make_unique<HeadlessUiController>(action_extension_delegate); }
diff --git a/components/autofill_assistant/browser/headless/client_headless.h b/components/autofill_assistant/browser/headless/client_headless.h index 7c5a879..815b51a 100644 --- a/components/autofill_assistant/browser/headless/client_headless.h +++ b/components/autofill_assistant/browser/headless/client_headless.h
@@ -28,6 +28,7 @@ namespace autofill_assistant { class HeadlessScriptControllerImpl; +class WebsiteLoginManager; // An Autofill Assistant client for headless runs. class ClientHeadless : public Client, public AccessTokenFetcher { @@ -36,6 +37,7 @@ content::WebContents* web_contents, const CommonDependencies* common_dependencies, ExternalActionDelegate* action_extension_delegate, + WebsiteLoginManager* website_login_manager, HeadlessScriptControllerImpl* external_script_controller); ClientHeadless(const ClientHeadless&) = delete; ClientHeadless& operator=(const ClientHeadless&) = delete; @@ -92,7 +94,7 @@ raw_ptr<content::WebContents> web_contents_; std::unique_ptr<Controller> controller_; const raw_ptr<const CommonDependencies> common_dependencies_; - std::unique_ptr<WebsiteLoginManager> website_login_manager_; + raw_ptr<WebsiteLoginManager> website_login_manager_; std::unique_ptr<HeadlessUiController> headless_ui_controller_; raw_ptr<signin::IdentityManager> identity_manager_ = nullptr; std::unique_ptr<signin::AccessTokenFetcher> access_token_fetcher_;
diff --git a/components/autofill_assistant/browser/headless/headless_script_controller_impl.cc b/components/autofill_assistant/browser/headless/headless_script_controller_impl.cc index c0704c9..de0c37c 100644 --- a/components/autofill_assistant/browser/headless/headless_script_controller_impl.cc +++ b/components/autofill_assistant/browser/headless/headless_script_controller_impl.cc
@@ -6,21 +6,23 @@ #include "base/time/default_tick_clock.h" #include "components/autofill_assistant/browser/desktop/starter_delegate_desktop.h" +#include "components/autofill_assistant/browser/public/password_change/website_login_manager.h" #include "components/autofill_assistant/browser/starter.h" namespace autofill_assistant { HeadlessScriptControllerImpl::HeadlessScriptControllerImpl( content::WebContents* web_contents, - ExternalActionDelegate* action_extension_delegate) + ExternalActionDelegate* action_extension_delegate, + WebsiteLoginManager* website_login_manager) : web_contents_(web_contents) { DCHECK(web_contents_); auto* starter = Starter::FromWebContents(web_contents_); if (starter) { - client_ = std::make_unique<ClientHeadless>(web_contents, - starter->GetCommonDependencies(), - action_extension_delegate, this); + client_ = std::make_unique<ClientHeadless>( + web_contents, starter->GetCommonDependencies(), + action_extension_delegate, website_login_manager, this); } }
diff --git a/components/autofill_assistant/browser/headless/headless_script_controller_impl.h b/components/autofill_assistant/browser/headless/headless_script_controller_impl.h index 962c894..735589b 100644 --- a/components/autofill_assistant/browser/headless/headless_script_controller_impl.h +++ b/components/autofill_assistant/browser/headless/headless_script_controller_impl.h
@@ -21,11 +21,14 @@ namespace autofill_assistant { +class WebsiteLoginManager; + class HeadlessScriptControllerImpl : public HeadlessScriptController { public: HeadlessScriptControllerImpl( content::WebContents* web_contents, - ExternalActionDelegate* action_extension_delegate); + ExternalActionDelegate* action_extension_delegate, + WebsiteLoginManager* website_login_manager); HeadlessScriptControllerImpl(const HeadlessScriptControllerImpl&) = delete; HeadlessScriptControllerImpl& operator=(const HeadlessScriptControllerImpl&) =
diff --git a/components/autofill_assistant/browser/public/autofill_assistant.h b/components/autofill_assistant/browser/public/autofill_assistant.h index 2f8a893..409be3f8 100644 --- a/components/autofill_assistant/browser/public/autofill_assistant.h +++ b/components/autofill_assistant/browser/public/autofill_assistant.h
@@ -15,10 +15,12 @@ namespace content { class WebContents; -} +} // namespace content namespace autofill_assistant { +class WebsiteLoginManager; + // Abstract interface for exported services. class AutofillAssistant { public: @@ -65,7 +67,8 @@ virtual std::unique_ptr<HeadlessScriptController> CreateHeadlessScriptController( content::WebContents* web_contents, - ExternalActionDelegate* action_extension_delegate) = 0; + ExternalActionDelegate* action_extension_delegate, + WebsiteLoginManager* website_login_manager = nullptr) = 0; protected: AutofillAssistant() = default;
diff --git a/components/autofill_assistant/browser/public/mock_autofill_assistant.h b/components/autofill_assistant/browser/public/mock_autofill_assistant.h index d03c64af..0a57b25 100644 --- a/components/autofill_assistant/browser/public/mock_autofill_assistant.h +++ b/components/autofill_assistant/browser/public/mock_autofill_assistant.h
@@ -26,7 +26,8 @@ MOCK_METHOD(std::unique_ptr<HeadlessScriptController>, CreateHeadlessScriptController, (content::WebContents * web_contents, - ExternalActionDelegate* action_extension_delegate), + ExternalActionDelegate* action_extension_delegate, + WebsiteLoginManager* website_login_manager), (override)); };
diff --git a/components/autofill_assistant/browser/public/password_change/empty_website_login_manager_impl.cc b/components/autofill_assistant/browser/public/password_change/empty_website_login_manager_impl.cc index bebdf70c..5046f5c5 100644 --- a/components/autofill_assistant/browser/public/password_change/empty_website_login_manager_impl.cc +++ b/components/autofill_assistant/browser/public/password_change/empty_website_login_manager_impl.cc
@@ -55,6 +55,10 @@ return absl::nullopt; } +const std::string& EmptyWebsiteLoginManagerImpl::GetGeneratedPassword() { + return generated_password_; +} + void EmptyWebsiteLoginManagerImpl::PresaveGeneratedPassword( const Login& login, const std::string& password,
diff --git a/components/autofill_assistant/browser/public/password_change/empty_website_login_manager_impl.h b/components/autofill_assistant/browser/public/password_change/empty_website_login_manager_impl.h index 51022d7..d615906 100644 --- a/components/autofill_assistant/browser/public/password_change/empty_website_login_manager_impl.h +++ b/components/autofill_assistant/browser/public/password_change/empty_website_login_manager_impl.h
@@ -43,6 +43,7 @@ autofill::FormSignature form_signature, autofill::FieldSignature field_signature, uint64_t max_length) override; + const std::string& GetGeneratedPassword() override; void PresaveGeneratedPassword(const Login& login, const std::string& password, const autofill::FormData& form_data, @@ -56,6 +57,9 @@ SavePasswordLeakDetectionDelegate::Callback callback, base::TimeDelta timeout) override; bool SaveSubmittedPassword() override; + + private: + std::string generated_password_; }; } // namespace autofill_assistant
diff --git a/components/autofill_assistant/browser/public/password_change/mock_website_login_manager.h b/components/autofill_assistant/browser/public/password_change/mock_website_login_manager.h index 0a4648c..fed3e62 100644 --- a/components/autofill_assistant/browser/public/password_change/mock_website_login_manager.h +++ b/components/autofill_assistant/browser/public/password_change/mock_website_login_manager.h
@@ -52,6 +52,8 @@ uint64_t max_length), (override)); + MOCK_METHOD(const std::string&, GetGeneratedPassword, (), (override)); + MOCK_METHOD(void, PresaveGeneratedPassword, (const Login& login,
diff --git a/components/autofill_assistant/browser/public/password_change/website_login_manager.h b/components/autofill_assistant/browser/public/password_change/website_login_manager.h index 26620ef..c4ecaed45 100644 --- a/components/autofill_assistant/browser/public/password_change/website_login_manager.h +++ b/components/autofill_assistant/browser/public/password_change/website_login_manager.h
@@ -71,13 +71,18 @@ // Generates new strong password. |form/field_signature| are used to fetch // password requirements. |max_length| is the "max_length" attribute of input - // field that limits the length of value. Returns |absl::nullopt| if the - // password cannot be generated for some reason. + // field that limits the length of value. + // Stores the generated password in `generated_password` and + // returns |absl::nullopt| if the password cannot be generated for some + // reason. virtual absl::optional<std::string> GeneratePassword( autofill::FormSignature form_signature, autofill::FieldSignature field_signature, uint64_t max_length) = 0; + // Returns the password generated in `GeneratePassword()` + virtual const std::string& GetGeneratedPassword() = 0; + // Presaves generated passwod for the form. Password will be saved after // successful form submission. virtual void PresaveGeneratedPassword(
diff --git a/components/autofill_assistant/browser/public/password_change/website_login_manager_impl.cc b/components/autofill_assistant/browser/public/password_change/website_login_manager_impl.cc index e839bee..bff0228 100644 --- a/components/autofill_assistant/browser/public/password_change/website_login_manager_impl.cc +++ b/components/autofill_assistant/browser/public/password_change/website_login_manager_impl.cc
@@ -471,11 +471,15 @@ if (!driver) { return absl::nullopt; } - - return base::UTF16ToUTF8( - driver->GetPasswordGenerationHelper()->GeneratePassword( + generated_password_ = + base::UTF16ToUTF8(driver->GetPasswordGenerationHelper()->GeneratePassword( driver->GetLastCommittedURL(), form_signature, field_signature, max_length)); + return generated_password_; +} + +const std::string& WebsiteLoginManagerImpl::GetGeneratedPassword() { + return generated_password_; } void WebsiteLoginManagerImpl::PresaveGeneratedPassword(
diff --git a/components/autofill_assistant/browser/public/password_change/website_login_manager_impl.h b/components/autofill_assistant/browser/public/password_change/website_login_manager_impl.h index 56a571a..62007e7 100644 --- a/components/autofill_assistant/browser/public/password_change/website_login_manager_impl.h +++ b/components/autofill_assistant/browser/public/password_change/website_login_manager_impl.h
@@ -51,6 +51,8 @@ autofill::FieldSignature field_signature, uint64_t max_length) override; + const std::string& GetGeneratedPassword() override; + void PresaveGeneratedPassword(const Login& login, const std::string& password, const autofill::FormData& form_data, @@ -101,6 +103,9 @@ // a SavePasswordLeakDetectionDelegate. std::unique_ptr<SavePasswordLeakDetectionDelegate> leak_delegate_; + // Generated password suggested to the user. + std::string generated_password_; + // Needs to be the last member. base::WeakPtrFactory<WebsiteLoginManagerImpl> weak_ptr_factory_; };
diff --git a/components/certificate_transparency/data/log_list.json b/components/certificate_transparency/data/log_list.json index c72d86c..066fda97 100644 --- a/components/certificate_transparency/data/log_list.json +++ b/components/certificate_transparency/data/log_list.json
@@ -1,6 +1,6 @@ { - "version": "10.49", - "log_list_timestamp": "2022-07-21T12:57:00Z", + "version": "10.50", + "log_list_timestamp": "2022-07-22T12:56:39Z", "operators": [ { "name": "Google",
diff --git a/components/device_signals/DEPS b/components/device_signals/DEPS new file mode 100644 index 0000000..a740940 --- /dev/null +++ b/components/device_signals/DEPS
@@ -0,0 +1,3 @@ +include_rules = [ + "+crypto", +] \ No newline at end of file
diff --git a/components/device_signals/core/common/BUILD.gn b/components/device_signals/core/common/BUILD.gn index 7d65938..c0c4e8d 100644 --- a/components/device_signals/core/common/BUILD.gn +++ b/components/device_signals/core/common/BUILD.gn
@@ -15,12 +15,17 @@ "base_platform_delegate.cc", "common_types.cc", "file_system_service.cc", + "hashing_utils.cc", + "hashing_utils.h", "signals_constants.cc", ] public_deps = [ "//third_party/abseil-cpp:absl" ] - deps = [ "//base" ] + deps = [ + "//base", + "//crypto", + ] } source_set("features") {
diff --git a/components/device_signals/core/common/common_types.h b/components/device_signals/core/common/common_types.h index 27434b7..7dfeb2ca 100644 --- a/components/device_signals/core/common/common_types.h +++ b/components/device_signals/core/common/common_types.h
@@ -32,8 +32,8 @@ // Is true if a currently running process was spawned from this file. absl::optional<bool> is_running = absl::nullopt; - // SHA256 hash of the public key of the certificate used to sign the - // executable. + // Byte string containing the SHA256 hash of the public key of the certificate + // used to sign the executable. absl::optional<std::string> public_key_sha256 = absl::nullopt; // Product name of this executable. @@ -59,9 +59,9 @@ // Value indicating whether the specific resource could be found or not. PresenceValue presence = PresenceValue::kUnspecified; - // SHA256 hash of a file’s bytes. Ignored when `path` points to a - // directory. Collected only when `compute_sha256` is set to true in the - // corresponding GetFileSystemInfoOptions parameter. + // Byte string containing the SHA256 hash of a file’s bytes. Ignored when + // `path` points to a directory. Collected only when `compute_sha256` is set + // to true in the corresponding GetFileSystemInfoOptions parameter. absl::optional<std::string> sha256_hash = absl::nullopt; // Set of properties only relevant for executable files. Will only be
diff --git a/components/device_signals/core/common/file_system_service.cc b/components/device_signals/core/common/file_system_service.cc index 3e4eb2d..72e77af 100644 --- a/components/device_signals/core/common/file_system_service.cc +++ b/components/device_signals/core/common/file_system_service.cc
@@ -10,6 +10,7 @@ #include "base/files/file_path.h" #include "base/files/file_util.h" #include "components/device_signals/core/common/common_types.h" +#include "components/device_signals/core/common/hashing_utils.h" #include "components/device_signals/core/common/platform_delegate.h" namespace device_signals { @@ -55,6 +56,10 @@ collected_item.presence = ResolveFileSystemItem(option.file_path, &resolved_file_path); + if (option.compute_sha256) { + collected_item.sha256_hash = HashFile(resolved_file_path); + } + collected_items.push_back(std::move(collected_item)); }
diff --git a/components/device_signals/core/common/file_system_service_unittest.cc b/components/device_signals/core/common/file_system_service_unittest.cc index cd6d001..0ea783d 100644 --- a/components/device_signals/core/common/file_system_service_unittest.cc +++ b/components/device_signals/core/common/file_system_service_unittest.cc
@@ -8,6 +8,10 @@ #include <vector> #include "base/files/file_path.h" +#include "base/files/file_util.h" +#include "base/files/scoped_temp_dir.h" +#include "base/strings/string_number_conversions.h" +#include "base/strings/string_util.h" #include "components/device_signals/core/common/common_types.h" #include "components/device_signals/core/common/mock_platform_delegate.h" #include "components/device_signals/core/common/platform_delegate.h" @@ -32,6 +36,11 @@ return options; } +std::string HexEncodeHash(const std::string& hashed_data) { + return base::ToLowerASCII( + base::HexEncode(std::data(hashed_data), hashed_data.size())); +} + } // namespace class FileSystemServiceTest : public testing::Test { @@ -89,8 +98,8 @@ ExpectPathIsReadable(found_path_resolved); std::vector<GetFileSystemInfoOptions> options; - options.push_back(CreateOptions(unresolvable_file_path, false, false)); - options.push_back(CreateOptions(access_denied_path, false, false)); + options.push_back(CreateOptions(unresolvable_file_path, true, true)); + options.push_back(CreateOptions(access_denied_path, true, true)); options.push_back(CreateOptions(found_path, false, false)); std::array<PresenceValue, 4> expected_presence_values{ @@ -104,7 +113,57 @@ for (size_t i = 0; i < file_system_items.size(); i++) { EXPECT_EQ(file_system_items[i].file_path, options[i].file_path); EXPECT_EQ(file_system_items[i].presence, expected_presence_values[i]); + + // No metadata was collected, as it was only requested for the two files + // that cannot be found/accessed. + EXPECT_FALSE(file_system_items[i].sha256_hash.has_value()); + EXPECT_FALSE(file_system_items[i].executable_metadata.has_value()); } } +// Tests calculating the hash for a file when requested, but not for a +// directory. +TEST_F(FileSystemServiceTest, GetSignals_Hash_Success) { + base::ScopedTempDir scoped_dir; + ASSERT_TRUE(scoped_dir.CreateUniqueTempDir()); + + constexpr base::FilePath::CharType existing_file[] = + FILE_PATH_LITERAL("existing_file"); + + const base::FilePath absolute_file_path = + scoped_dir.GetPath().Append(existing_file); + + // Write some content. + ASSERT_TRUE(base::WriteFile(absolute_file_path, "some file content")); + + ExpectResolvablePath(absolute_file_path, absolute_file_path); + ExpectPathIsReadable(absolute_file_path); + ExpectResolvablePath(scoped_dir.GetPath(), scoped_dir.GetPath()); + ExpectPathIsReadable(scoped_dir.GetPath()); + + std::vector<GetFileSystemInfoOptions> options; + options.push_back( + CreateOptions(absolute_file_path, /*compute_sha256=*/true, false)); + options.push_back( + CreateOptions(scoped_dir.GetPath(), /*compute_sha256=*/true, false)); + + auto file_system_items = file_system_service_->GetSignals(options); + + constexpr char expected_sha256_hash[] = + "b05ffa4eea8fb5609d576a68c1066be3f99e4dc53d365a0ac2a78259b2dd91f9"; + ASSERT_EQ(file_system_items.size(), options.size()); + + // The file's hash was computed. + EXPECT_EQ(file_system_items[0].file_path, absolute_file_path); + EXPECT_EQ(file_system_items[0].presence, PresenceValue::kFound); + ASSERT_TRUE(file_system_items[0].sha256_hash.has_value()); + EXPECT_EQ(HexEncodeHash(file_system_items[0].sha256_hash.value()), + expected_sha256_hash); + + // The directory does not have a hash. + EXPECT_EQ(file_system_items[1].file_path, scoped_dir.GetPath()); + EXPECT_EQ(file_system_items[1].presence, PresenceValue::kFound); + EXPECT_FALSE(file_system_items[1].sha256_hash.has_value()); +} + } // namespace device_signals
diff --git a/components/device_signals/core/common/hashing_utils.cc b/components/device_signals/core/common/hashing_utils.cc new file mode 100644 index 0000000..4da3a0c --- /dev/null +++ b/components/device_signals/core/common/hashing_utils.cc
@@ -0,0 +1,48 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/device_signals/core/common/hashing_utils.h" + +#include <array> +#include <string> +#include <vector> + +#include "base/files/file.h" +#include "base/files/file_path.h" +#include "base/location.h" +#include "base/memory/page_size.h" +#include "base/threading/scoped_blocking_call.h" +#include "crypto/secure_hash.h" +#include "crypto/sha2.h" + +namespace device_signals { + +absl::optional<std::string> HashFile(const base::FilePath& file_path) { + base::ScopedBlockingCall scoped_blocking_call(FROM_HERE, + base::BlockingType::MAY_BLOCK); + + base::File file(file_path, base::File::FLAG_OPEN | base::File::FLAG_READ); + if (!file.IsValid()) { + return absl::nullopt; + } + + auto secure_hash = + crypto::SecureHash::Create(crypto::SecureHash::Algorithm::SHA256); + std::vector<char> buffer(base::GetPageSize()); + + int bytes_read = 0; + do { + bytes_read = file.ReadAtCurrentPos(buffer.data(), buffer.size()); + if (bytes_read == -1) { + return absl::nullopt; + } + secure_hash->Update(buffer.data(), bytes_read); + } while (bytes_read > 0); + + std::string hash(crypto::kSHA256Length, 0); + secure_hash->Finish(std::data(hash), hash.size()); + return hash; +} + +} // namespace device_signals
diff --git a/components/device_signals/core/common/hashing_utils.h b/components/device_signals/core/common/hashing_utils.h new file mode 100644 index 0000000..7c572f6 --- /dev/null +++ b/components/device_signals/core/common/hashing_utils.h
@@ -0,0 +1,24 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_DEVICE_SIGNALS_CORE_COMMON_HASHING_UTILS_H_ +#define COMPONENTS_DEVICE_SIGNALS_CORE_COMMON_HASHING_UTILS_H_ + +#include <string> + +#include "third_party/abseil-cpp/absl/types/optional.h" + +namespace base { +class FilePath; +} // namespace base + +namespace device_signals { + +// Tries to generate a byte string containing the SHA256 value of the file at +// `file_path`. Will return absl::nullopt in invalid cases. +absl::optional<std::string> HashFile(const base::FilePath& file_path); + +} // namespace device_signals + +#endif // COMPONENTS_DEVICE_SIGNALS_CORE_COMMON_HASHING_UTILS_H_
diff --git a/components/history/core/browser/sync/history_sync_bridge.cc b/components/history/core/browser/sync/history_sync_bridge.cc index a276e51..034d09c9 100644 --- a/components/history/core/browser/sync/history_sync_bridge.cc +++ b/components/history/core/browser/sync/history_sync_bridge.cc
@@ -115,11 +115,21 @@ } row.transition = ui::PageTransitionFromInt(page_transition); - // The first visit in a chain stores the referring/opener visit (if any). if (redirect_index == 0) { + // The first visit in a chain stores the chain's referring/opener visit (if + // any). row.originator_referring_visit = specifics.originator_referring_visit_id(); row.originator_opener_visit = specifics.originator_opener_visit_id(); + } else { + // All later visits in the chain are implicitly referred to by the preceding + // visit. + // TODO(crbug.com/1335055): For visits coming from legacy devices (i.e. + // using the Sessions integration), originator_visit_id will be unset, so + // we're losing the redirect chain links here. + row.originator_referring_visit = + specifics.redirect_entries(redirect_index - 1).originator_visit_id(); } + // The last visit in a chain stores the visit duration (earlier visits, i.e. // redirects, are not considered to have a duration). if (redirect_index == specifics.redirect_entries_size() - 1) {
diff --git a/components/history/core/browser/sync/history_sync_bridge_unittest.cc b/components/history/core/browser/sync/history_sync_bridge_unittest.cc index 08ee5136..5139f9c2 100644 --- a/components/history/core/browser/sync/history_sync_bridge_unittest.cc +++ b/components/history/core/browser/sync/history_sync_bridge_unittest.cc
@@ -36,16 +36,30 @@ sync_pb::HistorySpecifics CreateSpecifics( base::Time visit_time, const std::string& originator_cache_guid, - const GURL& url) { + const std::vector<GURL>& urls, + const std::vector<VisitID>& originator_visit_ids = {}) { + DCHECK_EQ(originator_visit_ids.size(), urls.size()); sync_pb::HistorySpecifics specifics; specifics.set_visit_time_windows_epoch_micros( visit_time.ToDeltaSinceWindowsEpoch().InMicroseconds()); specifics.set_originator_cache_guid(originator_cache_guid); - auto* url_entry = specifics.add_redirect_entries(); - url_entry->set_url(url.spec()); + for (size_t i = 0; i < urls.size(); ++i) { + auto* redirect_entry = specifics.add_redirect_entries(); + redirect_entry->set_originator_visit_id(originator_visit_ids[i]); + redirect_entry->set_url(urls[i].spec()); + } return specifics; } +sync_pb::HistorySpecifics CreateSpecifics( + base::Time visit_time, + const std::string& originator_cache_guid, + const GURL& url, + VisitID originator_visit_id = 0) { + return CreateSpecifics(visit_time, originator_cache_guid, std::vector{url}, + std::vector{originator_visit_id}); +} + syncer::EntityData SpecificsToEntityData( const sync_pb::HistorySpecifics& specifics) { syncer::EntityData data; @@ -780,6 +794,69 @@ EXPECT_TRUE(GetAllMetadata().empty()); } +// Note: The remapping logic is covered in the separate test suite +// VisitIDRemapperTest. This test serves as an "integration test" for the +// plumbing from HistorySyncBridge to VisitIDRemapper. +TEST_F(HistorySyncBridgeTest, RemapsOriginatorVisitIDs) { + const std::string remote_cache_guid("remote_cache_guid"); + + // Situation: There's a first visit, which refers to a chain of 3 visits, + // which in turn opens a last visit. + + const base::Time first_visit_time = base::Time::Now() - base::Minutes(10); + const VisitID first_visit_originator_id = 100; + sync_pb::HistorySpecifics entity_first = + CreateSpecifics(first_visit_time, remote_cache_guid, + GURL("https://some.url"), first_visit_originator_id); + + const base::Time chain_visit_time = base::Time::Now() - base::Minutes(9); + const std::vector<GURL> chain_urls{GURL("https://start.chain.url"), + GURL("https://middle.chain.url"), + GURL("https://end.chain.url")}; + const std::vector<VisitID> chain_originator_visit_ids{101, 102, 103}; + sync_pb::HistorySpecifics entity_chain = + CreateSpecifics(chain_visit_time, remote_cache_guid, chain_urls, + chain_originator_visit_ids); + entity_chain.set_originator_referring_visit_id( + entity_first.redirect_entries(0).originator_visit_id()); + + // TODO(crbug.com/1335055): Add another test case where the originator visit + // IDs in a chain are empty, to simulate a legacy (Sessions) client. + + const base::Time last_visit_time = base::Time::Now() - base::Minutes(8); + const VisitID last_visit_originator_id = 104; + sync_pb::HistorySpecifics entity_last = + CreateSpecifics(last_visit_time, remote_cache_guid, + GURL("https://other.url"), last_visit_originator_id); + entity_last.set_originator_opener_visit_id( + entity_chain.redirect_entries(2).originator_visit_id()); + + // Start syncing with these three entities - this should trigger the remapping + // of originator IDs into local IDs. + MergeSyncData({entity_first, entity_chain, entity_last}); + + VisitRow first_row; + ASSERT_TRUE(backend()->GetLastVisitByTime(first_visit_time, &first_row)); + ASSERT_EQ(first_row.originator_visit_id, first_visit_originator_id); + + VisitRow chain_end_row; + ASSERT_TRUE(backend()->GetLastVisitByTime(chain_visit_time, &chain_end_row)); + ASSERT_EQ(chain_end_row.originator_visit_id, + chain_originator_visit_ids.back()); + // Make sure the chain got preserved (note that GetRedirectChain is based on + // *local* visit IDs, not originator IDs). + VisitVector chain_rows = backend()->GetRedirectChain(chain_end_row); + EXPECT_EQ(chain_rows.size(), 3u); + // Make sure the referrer (first visit) got remapped. + EXPECT_EQ(chain_rows.front().referring_visit, first_row.visit_id); + + VisitRow last_row; + ASSERT_TRUE(backend()->GetLastVisitByTime(last_visit_time, &last_row)); + ASSERT_EQ(last_row.originator_visit_id, last_visit_originator_id); + // Make sure the opener (last visit of the chain) got remapped. + EXPECT_EQ(last_row.opener_visit, chain_rows.back().visit_id); +} + } // namespace } // namespace history
diff --git a/components/history_clusters/core/BUILD.gn b/components/history_clusters/core/BUILD.gn index 680aff2..5dac121 100644 --- a/components/history_clusters/core/BUILD.gn +++ b/components/history_clusters/core/BUILD.gn
@@ -33,6 +33,8 @@ "history_clusters_service.h", "history_clusters_service_task_get_most_recent_clusters.cc", "history_clusters_service_task_get_most_recent_clusters.h", + "history_clusters_service_task_update_clusters.cc", + "history_clusters_service_task_update_clusters.h", "history_clusters_types.h", "history_clusters_util.cc", "history_clusters_util.h",
diff --git a/components/history_clusters/core/history_clusters_service.cc b/components/history_clusters/core/history_clusters_service.cc index 1a8ab42..fb4e4c7 100644 --- a/components/history_clusters/core/history_clusters_service.cc +++ b/components/history_clusters/core/history_clusters_service.cc
@@ -170,6 +170,18 @@ continuation_params, std::move(callback)); } +void HistoryClustersService::UpdateClusters(base::OnceClosure callback) { + DCHECK(history_service_); + if (!GetConfig().persist_clusters_in_history_db) + return; + if (update_clusters_task_ && !update_clusters_task_->Done()) + return; + update_clusters_task_ = + std::make_unique<HistoryClustersServiceTaskUpdateClusters>( + incomplete_visit_context_annotations_, backend_.get(), + history_service_, std::move(callback)); +} + absl::optional<history::ClusterKeywordData> HistoryClustersService::DoesQueryMatchAnyCluster(const std::string& query) { if (!IsJourneysEnabled())
diff --git a/components/history_clusters/core/history_clusters_service.h b/components/history_clusters/core/history_clusters_service.h index 36b0948b..de79219 100644 --- a/components/history_clusters/core/history_clusters_service.h +++ b/components/history_clusters/core/history_clusters_service.h
@@ -25,6 +25,7 @@ #include "components/history/core/browser/history_types.h" #include "components/history_clusters/core/clustering_backend.h" #include "components/history_clusters/core/history_clusters_service_task_get_most_recent_clusters.h" +#include "components/history_clusters/core/history_clusters_service_task_update_clusters.h" #include "components/history_clusters/core/history_clusters_types.h" #include "components/keyed_service/core/keyed_service.h" #include "services/network/public/cpp/shared_url_loader_factory.h" @@ -142,6 +143,8 @@ // de-duplication across multiple batches. Any UI should almost certainly use // `QueryClustersState` instead. // + // Entrypoint to `HistoryClustersServiceTaskGetMostRecentClusters`. + // // Returns the freshest clusters created from the user visit history based on // `query`, `begin_time`, and `continuation_params`. // - `begin_time` is an inclusive lower bound. In the general case where the @@ -156,13 +159,19 @@ // score, from highest to lowest. // // TODO(tommycli): Investigate entirely hiding access to this low-level method - // behind QueryClustersState. + // behind QueryClustersState. std::unique_ptr<HistoryClustersServiceTaskGetMostRecentClusters> QueryClusters(ClusteringRequestSource clustering_request_source, base::Time begin_time, QueryClustersContinuationParams continuation_params, QueryClustersCallback callback); + // Entrypoint to the `HistoryClustersServiceTaskUpdateClusters`. Updates the + // persisted clusters in the history DB and invokes `callback` when done. + // TODO(manukh): This isn't invoked yet. It should be invoked periodically, + // e.g., every N hours checked on a timer, omnibox input, or navigation. + void UpdateClusters(base::OnceClosure callback); + // Returns matched keyword data from cache synchronously if `query` matches a // cluster keyword. This ignores clusters with only one visit to avoid // overtriggering. Note: This depends on the cache state, so this may kick off @@ -243,6 +252,11 @@ std::unique_ptr<HistoryClustersServiceTaskGetMostRecentClusters> cache_keyword_query_task_; + // Tracks the current update task. Will be `nullptr` or + // `update_clusters_task_.Done()` will be true if there is no ongoing task. + std::unique_ptr<HistoryClustersServiceTaskUpdateClusters> + update_clusters_task_; + // A list of observers for this service. base::ObserverList<Observer> observers_;
diff --git a/components/history_clusters/core/history_clusters_service_task_get_most_recent_clusters.cc b/components/history_clusters/core/history_clusters_service_task_get_most_recent_clusters.cc index 1b648c1..80f3da1 100644 --- a/components/history_clusters/core/history_clusters_service_task_get_most_recent_clusters.cc +++ b/components/history_clusters/core/history_clusters_service_task_get_most_recent_clusters.cc
@@ -74,6 +74,16 @@ ReturnMostRecentPersistedClusters(continuation_params_.continuation_time); } else { + // TODO(manukh): It's not clear how to blend unclustered and clustered + // visits when iterating recent first. E.g., if we have 4 days of + // unclustered visits, should the most recent 3 be clustered in isolation, + // while the 4th is clustered with older clustered visits? For now, we do + // the simplest approach: cluster each day in isolation. If updating + // clusters occurs frequently enough, this issue will be mitigated. + // However, since the top, most prominent clusters will be the most recent + // clusters, and current-day visits will never be pre-clustered, we + // probably want to make sure they're optimal. So we should probably not + // cluster at least the current day in isolation. history_service_get_annotated_visits_to_cluster_start_time_ = base::TimeTicks::Now(); history_service_->ScheduleDBTask( @@ -164,12 +174,17 @@ void HistoryClustersServiceTaskGetMostRecentClusters:: ReturnMostRecentPersistedClusters(base::Time exclusive_max_time) { - history_service_->GetMostRecentClusters( - begin_time_, exclusive_max_time, 1, - base::BindOnce(&HistoryClustersServiceTaskGetMostRecentClusters:: - OnGotMostRecentPersistedClusters, - weak_ptr_factory_.GetWeakPtr()), - &task_tracker_); + if (GetConfig().persist_clusters_in_history_db) + OnGotMostRecentPersistedClusters({}); + + else { + history_service_->GetMostRecentClusters( + begin_time_, exclusive_max_time, 1, + base::BindOnce(&HistoryClustersServiceTaskGetMostRecentClusters:: + OnGotMostRecentPersistedClusters, + weak_ptr_factory_.GetWeakPtr()), + &task_tracker_); + } } void HistoryClustersServiceTaskGetMostRecentClusters::
diff --git a/components/history_clusters/core/history_clusters_service_task_get_most_recent_clusters.h b/components/history_clusters/core/history_clusters_service_task_get_most_recent_clusters.h index 8686000..18bff2b6 100644 --- a/components/history_clusters/core/history_clusters_service_task_get_most_recent_clusters.h +++ b/components/history_clusters/core/history_clusters_service_task_get_most_recent_clusters.h
@@ -45,9 +45,8 @@ bool Done() { return done_; } private: - // When there remain unclustered visits, cluster unclustered visits (possibly - // in combination with clustered visits) and return the newly created - // clusters: + // When there remain unclustered visits, cluster them (possibly in combination + // with clustered visits) and return the newly created clusters: // Start() -> // OnGotAnnotatedVisitsToCluster() -> // OnGotModelClusters() @@ -59,11 +58,13 @@ // OnGotMostRecentPersistedClusters() // Invoked during construction. Will asyncly request annotated visits from - // `GetAnnotatedVisitsToCluster`. + // `GetAnnotatedVisitsToCluster`. May instead asyncly request persisted + // clusters if there's no `ClusteringBackend` or all visits are exhausted. void Start(); // Invoked after `Start()` asyncly fetches annotated visits. Will asyncly - // request clusters from `ClusteringBackend`. + // request clusters from `ClusteringBackend`. May instead asyncly request + // persisted clusters if no annotated visits were fetched void OnGotAnnotatedVisitsToCluster( // Unused because clusters aren't persisted in this flow. std::vector<int64_t> old_clusters_unused, @@ -94,12 +95,14 @@ // Used to make requests to `ClusteringBackend`. ClusteringRequestSource clustering_request_source_; - // Used to make requests to `GetAnnotatedVisitsToCluster`. + // Used to make requests to `GetAnnotatedVisitsToCluster` and + // `HistoryService`. base::Time begin_time_; QueryClustersContinuationParams continuation_params_; base::CancelableTaskTracker task_tracker_; - // Invoked after `OnGotModelClusters(). + // Invoked after either `OnGotModelClusters()` or + // `OnGotMostRecentPersistedClusters()`. QueryClustersCallback callback_; // When `Start()` kicked off the request to fetch visits to cluster.
diff --git a/components/history_clusters/core/history_clusters_service_task_update_clusters.cc b/components/history_clusters/core/history_clusters_service_task_update_clusters.cc new file mode 100644 index 0000000..16510e0 --- /dev/null +++ b/components/history_clusters/core/history_clusters_service_task_update_clusters.cc
@@ -0,0 +1,79 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "history_clusters_service_task_update_clusters.h" + +#include <utility> + +#include "base/bind.h" +#include "components/history/core/browser/history_service.h" +#include "components/history_clusters/core/clustering_backend.h" +#include "components/history_clusters/core/history_clusters_db_tasks.h" + +namespace history_clusters { + +HistoryClustersServiceTaskUpdateClusters:: + HistoryClustersServiceTaskUpdateClusters( + const IncompleteVisitMap incomplete_visit_context_annotations, + ClusteringBackend* const backend, + history::HistoryService* const history_service, + base::OnceClosure callback) + : incomplete_visit_context_annotations_( + incomplete_visit_context_annotations), + backend_(backend), + history_service_(history_service), + callback_(std::move(callback)) { + Start(); +} + +HistoryClustersServiceTaskUpdateClusters:: + ~HistoryClustersServiceTaskUpdateClusters() = default; + +void HistoryClustersServiceTaskUpdateClusters::Start() { + if (!backend_ || continuation_params_.exhausted_all_visits) { + std::move(callback_).Run(); + return; + } + history_service_->ScheduleDBTask( + FROM_HERE, + std::make_unique<GetAnnotatedVisitsToCluster>( + incomplete_visit_context_annotations_, base::Time(), + continuation_params_, false, 2, + base::BindOnce(&HistoryClustersServiceTaskUpdateClusters:: + OnGotAnnotatedVisitsToCluster, + weak_ptr_factory_.GetWeakPtr())), + &task_tracker_); +} + +void HistoryClustersServiceTaskUpdateClusters::OnGotAnnotatedVisitsToCluster( + std::vector<int64_t> old_clusters, + std::vector<history::AnnotatedVisit> annotated_visits, + QueryClustersContinuationParams continuation_params) { + if (annotated_visits.empty()) { + DCHECK(continuation_params.exhausted_all_visits); + std::move(callback_).Run(); + return; + } + // Using `kKeywordCacheGeneration` as that only determines the task priority. + backend_->GetClusters( + ClusteringRequestSource::kKeywordCacheGeneration, + base::BindOnce( + &HistoryClustersServiceTaskUpdateClusters::OnGotModelClusters, + weak_ptr_factory_.GetWeakPtr(), old_clusters, continuation_params), + annotated_visits); +} + +void HistoryClustersServiceTaskUpdateClusters::OnGotModelClusters( + std::vector<int64_t> old_cluster_ids, + QueryClustersContinuationParams continuation_params, + std::vector<history::Cluster> clusters) { + continuation_params_ = continuation_params; + history_service_->ReplaceClusters( + old_cluster_ids, clusters, + base::BindOnce(&HistoryClustersServiceTaskUpdateClusters::Start, + weak_ptr_factory_.GetWeakPtr()), + &task_tracker_); +} + +} // namespace history_clusters
diff --git a/components/history_clusters/core/history_clusters_service_task_update_clusters.h b/components/history_clusters/core/history_clusters_service_task_update_clusters.h new file mode 100644 index 0000000..72a0d6b8 --- /dev/null +++ b/components/history_clusters/core/history_clusters_service_task_update_clusters.h
@@ -0,0 +1,97 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_HISTORY_CLUSTERS_CORE_HISTORY_CLUSTERS_SERVICE_TASK_UPDATE_CLUSTERS_H_ +#define COMPONENTS_HISTORY_CLUSTERS_CORE_HISTORY_CLUSTERS_SERVICE_TASK_UPDATE_CLUSTERS_H_ + +#include <vector> + +#include "base/memory/weak_ptr.h" +#include "base/task/cancelable_task_tracker.h" +#include "base/time/time.h" +#include "components/history/core/browser/history_types.h" +#include "components/history_clusters/core/clustering_backend.h" +#include "components/history_clusters/core/history_clusters_types.h" + +namespace history { +class HistoryService; +} + +namespace history_clusters { + +// `HistoryClustersServiceTaskUpdateClusters` gets clustered and unclustered +// visits straddling the threshold and clusters them together. It continues +// doing so, moving the threshold forward 1 day each time, until reaching today. +// When re-clustering clustered visits, it takes all visits in their clusters +// and replaces those clusters. This allows existing clusters to grow without +// having to cluster an impractical number of visits simultaneously and without +// creating near-duplicate clusters. The similar +// `HistoryClustersServiceTaskGetMostRecentClusters` will consume the clusters +// this creates. In contrast to this, +// `HistoryClustersServiceTaskGetMostRecentClusters` iterates recent visits 1st +// and does not persist them. +class HistoryClustersServiceTaskUpdateClusters { + public: + HistoryClustersServiceTaskUpdateClusters( + const IncompleteVisitMap incomplete_visit_context_annotations, + ClusteringBackend* const backend, + history::HistoryService* const history_service, + base::OnceClosure callback); + ~HistoryClustersServiceTaskUpdateClusters(); + + bool Done() { return done_; } + + private: + // When there remain unclustered visits, cluster them (possibly in combination + // with clustered visits) and persist the newly created clusters: + // Start() -> + // GetAnnotatedVisitsToCluster() -> + // OnGotModelClusters() + + // Invoked during construction and after `OnGotModelClusters()` asyncly + // replaces clusters. Will asyncly request annotated visits from + // `GetAnnotatedVisitsToCluster`. May instead syncly invoke `callback_` if + // there's no `ClusteringBackend` or all visits are exhausted. + void Start(); + + // Invoked after `Start()` asyncly fetches annotated visits. Will asyncly + // request clusters from `ClusteringBackend`. May instead syncly invoke + // `callback_` if no annotated visits were fetched. + void OnGotAnnotatedVisitsToCluster( + std::vector<int64_t> old_clusters, + std::vector<history::AnnotatedVisit> annotated_visits, + QueryClustersContinuationParams continuation_params); + + // Invoked after `OnGotAnnotatedVisitsToCluster()` asyncly obtains clusters. + // Will asyncly request `old_cluster_ids` be replaced with `clusters`. + void OnGotModelClusters(std::vector<int64_t> old_cluster_ids, + QueryClustersContinuationParams continuation_params, + std::vector<history::Cluster> clusters); + + const IncompleteVisitMap incomplete_visit_context_annotations_; + // Can be nullptr. + ClusteringBackend* const backend_; + // Non-owning pointer, but never nullptr. + history::HistoryService* const history_service_; + + // Used to make requests to `GetAnnotatedVisitsToCluster` and + // `HistoryService`. + QueryClustersContinuationParams continuation_params_; + base::CancelableTaskTracker task_tracker_; + + // Invoked after either `Start()` or `OnGotAnnotatedVisitsToCluster()`. + base::OnceClosure callback_; + + // Set to true when `callback_` is invoked, either with clusters or no + // clusters. + bool done_ = false; + + // Used for async callbacks. + base::WeakPtrFactory<HistoryClustersServiceTaskUpdateClusters> + weak_ptr_factory_{this}; +}; + +} // namespace history_clusters + +#endif // COMPONENTS_HISTORY_CLUSTERS_CORE_HISTORY_CLUSTERS_SERVICE_TASK_UPDATE_CLUSTERS_H_
diff --git a/components/lookalikes/core/lookalike_url_util.cc b/components/lookalikes/core/lookalike_url_util.cc index a7fbe3e7..dd5f853 100644 --- a/components/lookalikes/core/lookalike_url_util.cc +++ b/components/lookalikes/core/lookalike_url_util.cc
@@ -116,21 +116,22 @@ const char* kBrandNamesforCSQ[] = { "adobe", "airbnb", "alibaba", "aliexpress", "amazon", "baidu", "bestbuy", "blogspot", "costco", "craigslist", - "dropbox", "ebay", "etsy", "expedia", "facebook", - "fedex", "flickr", "github", "glassdoor", "gofundme", - "google", "homedepot", "hulu", "icloud", "ikea", - "imdb", "indeed", "instagram", "intuit", "microsoft", + "dropbox", "expedia", "facebook", "fedex", "flickr", + "github", "glassdoor", "gofundme", "google", "homedepot", + "icloud", "indeed", "instagram", "intuit", "microsoft", "nbcnews", "netflix", "norton", "nytimes", "office365", "paypal", "pinterest", "playstation", "quora", "reddit", "reuters", "samsung", "spotify", "stackexchange", "stackoverflow", - "trello", "twitch", "twitter", "udemy", "usps", - "wikipedia", "wordpress", "xbox", "xfinity", "yahoo", - "yelp", "youtube", "zillow"}; + "trello", "twitch", "twitter", "udemy", "wikipedia", + "wordpress", "xfinity", "yahoo", "youtube", "zillow"}; const char* kPopularKeywordsforCSQ[] = { // Security - "account", "activate", "active", "admin", "login", - "online", "password", "security", "signin"}; + "account", "activate", "active", "admin", "login", "logout", + "online", "password", "secure", "security", "signin", "signout"}; + +// Minimum length of brand to be checked for Combo Squatting. +const size_t kMinBrandNameLengthForComboSquatting = 4; ComboSquattingParams* GetComboSquattingParams() { static ComboSquattingParams params{ @@ -1231,6 +1232,8 @@ // Check if the domain has any brand name and any popular keyword. for (size_t i = 0; i < combo_squatting_params->num_brand_names; i++) { auto* const brand = combo_squatting_params->brand_names[i]; + DCHECK(std::string(brand).size() > kMinBrandNameLengthForComboSquatting); + if (!(navigated_domain.domain_without_registry.find(brand) != std::string::npos && navigated_domain.domain_without_registry.size() != strlen(brand))) {
diff --git a/components/lookalikes/core/lookalike_url_util_unittest.cc b/components/lookalikes/core/lookalike_url_util_unittest.cc index e5415d8..028e1b6b 100644 --- a/components/lookalikes/core/lookalike_url_util_unittest.cc +++ b/components/lookalikes/core/lookalike_url_util_unittest.cc
@@ -18,9 +18,9 @@ // Tests lists for Combo Squatting. Some of these entries are intended to test // for various edge cases and aren't realistic for production. const char* const kBrandNames[] = {"google", "youtube", "sample", "example", - "vice"}; -const char* const kPopularKeywords[] = {"online", "login", "account", - "ample", "service", "test"}; + "vices"}; +const char* const kPopularKeywords[] = {"online", "login", "account", + "ample", "services", "test"}; const ComboSquattingParams kComboSquattingParams{ kBrandNames, std::size(kBrandNames), kPopularKeywords, std::size(kPopularKeywords)}; @@ -662,7 +662,7 @@ {"online.google", "", false}, // Not CSQ, brand name (vice) is part of keyword (service). - {"keyservice.com", "", false}, + {"keyservices.com", "", false}, }; for (const TestCase& test_case : kTestCases) { auto navigated =
diff --git a/components/metrics/metrics_log.h b/components/metrics/metrics_log.h index 355d7b4..a9770fc 100644 --- a/components/metrics/metrics_log.h +++ b/components/metrics/metrics_log.h
@@ -283,7 +283,24 @@ // The NetworkTimeTracker used to provide higher-quality wall clock times than // |clock_| (when available). Can be overridden for tests. - raw_ptr<const network_time::NetworkTimeTracker> network_clock_; + // + // TODO(crbug.com/1298696): browser_tests breaks with MTECheckedPtr + // enabled. Triage. + // + // Personal notes from kdlee: + // + // Specifically, MetricsServiceUserDemographicsBrowserTest. + // * AddSyncedUserBirthYearAndGenderToProtoData/0 + // * AddSyncedUserBirthYearAndGenderToProtoData/1 + // which evokes crbug.com/1102747 a little bit. Interestingly, this fails for + // me consistently when I build and run browser_tests locally, *even without + // MTECheckedPtr enabled.* But whatever bots are running this continuously + // don't see a problem. + // + // The crash happens when unwrapping this for `RecordCurrentTime()` called + // from `MetricsLog::CloseLog()`. + raw_ptr<const network_time::NetworkTimeTracker, DegradeToNoOpWhenMTE> + network_clock_; }; } // namespace metrics
diff --git a/components/page_load_metrics/browser/observers/use_counter/ukm_features.cc b/components/page_load_metrics/browser/observers/use_counter/ukm_features.cc index 52ed7aa..e3ce030 100644 --- a/components/page_load_metrics/browser/observers/use_counter/ukm_features.cc +++ b/components/page_load_metrics/browser/observers/use_counter/ukm_features.cc
@@ -239,6 +239,7 @@ WebFeature::kCookieDomainNonASCII, WebFeature::kClientHintsMetaEquivDelegateCH, WebFeature::kAuthorizationCoveredByWildcard, + WebFeature::kImageAd, })); return *opt_in_features; }
diff --git a/components/password_manager/core/browser/BUILD.gn b/components/password_manager/core/browser/BUILD.gn index 5c9fda0..67532d4e 100644 --- a/components/password_manager/core/browser/BUILD.gn +++ b/components/password_manager/core/browser/BUILD.gn
@@ -348,9 +348,6 @@ if (!is_ios) { sources += [ - "capabilities_service.h", - "capabilities_service_impl.cc", - "capabilities_service_impl.h", "http_credentials_cleaner.cc", "http_credentials_cleaner.h", "import/password_importer.cc", @@ -358,13 +355,8 @@ "password_scripts_fetcher.h", "password_scripts_fetcher_impl.cc", "password_scripts_fetcher_impl.h", - "saved_passwords_capabilities_fetcher.cc", - "saved_passwords_capabilities_fetcher.h", ] - deps += [ - "//components/autofill_assistant/browser/public", - "//components/password_manager/services/csv_password:service", - ] + deps += [ "//components/password_manager/services/csv_password:service" ] } if (!is_android && !is_ios) { @@ -399,6 +391,26 @@ } } +source_set("capabilities") { + if (!is_ios) { + sources = [ + "capabilities_service.h", + "capabilities_service_impl.cc", + "capabilities_service_impl.h", + "saved_passwords_capabilities_fetcher.cc", + "saved_passwords_capabilities_fetcher.h", + ] + deps = [ + ":browser", + "//base", + "//components/autofill_assistant/browser/public", + "//components/password_manager/core/common:features", + "//components/password_manager/services/csv_password:service", + "//url", + ] + } +} + # TODO(crbug.com/974822): Ideally, all of the "import/" subdirectory would be # in a separate BUILD.gn file inside that subdirectory. However, this requires # the big "browser" target here to be split in multiple sub-targets to avoid @@ -789,6 +801,7 @@ deps = [ ":affiliation", ":affiliation_unittests", + ":capabilities", ":csv", ":csv_unittests", ":hash_password_manager", @@ -845,7 +858,7 @@ if (!is_ios) { deps += [ - "//components/autofill_assistant/browser/public:public", + "//components/autofill_assistant/browser/public", "//components/autofill_assistant/browser/public:unit_test_support", ] }
diff --git a/components/policy/resources/policy_templates.json b/components/policy/resources/policy_templates.json index 68b5aba..16abb65 100644 --- a/components/policy/resources/policy_templates.json +++ b/components/policy/resources/policy_templates.json
@@ -25905,7 +25905,7 @@ 'PROVIDED', 'ARC', 'GOOGLE_DRIVE', - 'SAMBA', + 'SMB', 'CROSTINI', 'PLUGIN_VM', 'BOREALIS', @@ -25980,7 +25980,7 @@ 'file_system_type': 'MY_FILES' }, { - 'file_system_type': 'SAMBA' + 'file_system_type': 'SMB' } ], 'destinations': [{ @@ -26003,7 +26003,7 @@ 'file_system_type': 'ARC' }, { - 'file_system_type': 'SAMBA' + 'file_system_type': 'SMB' }, { 'file_system_type': 'MY_FILES'
diff --git a/components/policy/resources/policy_templates_de.xtb b/components/policy/resources/policy_templates_de.xtb index 78aafd22..08eca27 100644 --- a/components/policy/resources/policy_templates_de.xtb +++ b/components/policy/resources/policy_templates_de.xtb
@@ -1084,6 +1084,7 @@ Wenn die Richtlinie aktiviert oder nicht konfiguriert ist, ist die Definition über die Funktion „Schnellinfo“ aktiviert. Wenn die Richtlinie deaktiviert ist, ist die Definition über „Schnellinfo“ deaktiviert.</translation> <translation id="209586405398070749">Stabiler Kanal</translation> +<translation id="2096932573113293941">Nutzer um Erlaubnis zum Ausführen von Plug-ins bitten, die eine Autorisierung erfordern</translation> <translation id="2098658257603918882">Berichte mit Nutzungs- und Absturzdaten erstellen</translation> <translation id="2104418465060359056">Daten von Erweiterungen und Plug-ins erfassen</translation> <translation id="2106627642643925514">Hiermit wird der Standardmodus für den PIN-Druck überschrieben. Wenn der Modus nicht verfügbar ist, wird diese Richtlinie ignoriert.</translation> @@ -1213,6 +1214,7 @@ <translation id="2223393221350938149">Ausführung von JavaScript JIT für keine Website zulassen</translation> <translation id="2223582957891074498">Wenn die Richtlinie auf "True" gesetzt ist, können keine Screenshots über Tastenkombinationen oder Erweiterungs-APIs aufgenommen werden. Ist sie auf "False" gesetzt, können Screenshots aufgenommen werden.</translation> <translation id="2223598546285729819">Standardeinstellung für Benachrichtigungen</translation> +<translation id="222673035924187991">TLS Encrypted ClientHello aktivieren</translation> <translation id="2231726854197443389">Mit dieser Richtlinie wird festgelegt, ob Nutzer den Nur-HTTPS-Modus in den Einstellungen aktivieren können. Über den Nur-HTTPS-Modus werden alle Aufrufe von Websites auf HTTPS umgestellt. Wenn diese Einstellung nicht konfiguriert oder auf „Zugelassen“ festgelegt ist, dürfen Nutzer den Nur-HTTPS-Modus aktivieren. Ist sie auf „Nicht zugelassen“ festgelegt, dürfen Nutzer den Nur-HTTPS-Modus nicht aktivieren. @@ -1333,6 +1335,7 @@ <translation id="2349117476121456297">Wenn du die Richtlinie auf "True" setzt, führt die oberste Reihe der Tastatur Funktionstastenbefehle aus. Bei gedrückter Suchtaste führt die Tastatur stattdessen wieder Medientastenbefehle aus. Wenn du die Richtlinie auf "False" setzt oder nicht konfigurieren, führt die Tastatur standardmäßig Medientastenbefehle aus. Bei gedrückter Suchtaste führt die Tastatur Funktionstastenbefehle aus.</translation> +<translation id="2354439478396602136">App-Empfehlungen im <ph name="PRODUCT_OS_NAME" />-Launcher anzeigen</translation> <translation id="2355876547176311490">Nicht zulassen, dass Relayserver vom Host für den Remote-Zugriff verwendet werden können</translation> <translation id="2358176879566587521">Diese Richtlinie wurde entfernt. Sie ist mit dieser Version von <ph name="PRODUCT_NAME" /> nicht kompatibel. Weitere Informationen dazu findest du unter https://support.google.com/chrome/a/answer/7643500.</translation> <translation id="2362469626417133796">Zeitfenster für Neustart</translation> @@ -1559,6 +1562,7 @@ Nutzer können nicht ändern, in welchem Ordner die Lesezeichen abgelegt werden. Aber sie haben die Möglichkeit, den Ordner in der Lesezeichenleiste auszublenden. Der Standardname des Ordners für verwaltete Lesezeichen lautet "Verwaltete Lesezeichen", kann jedoch angepasst werden. Dazu muss der Richtlinie ein neues untergeordnetes Wörterbuch mit einem einfachen Schlüssel namens "<ph name="TOPLEVEL_NAME" />" hinzugefügt werden, wobei der gewünschte Ordnername der Wert ist. Verwaltete Lesezeichen werden nicht mit dem Nutzerkonto synchronisiert und können nicht von Erweiterungen geändert werden.</translation> <translation id="2552966063069741410">Zeitzone</translation> <translation id="2555244983262829274">„Home“-Schaltfläche in der Symbolleiste ausblenden</translation> +<translation id="2562213287271514629">Zulassen, dass veraltete <ph name="FLASH_PLUGIN_NAME" />-Plug-ins als normale <ph name="FLASH_PLUGIN_NAME" />-Plug-ins verwendet werden</translation> <translation id="2562339630163277285">Gibt die URL an, die die Suchmaschine für die Bereitstellung von Instant-Ergebnissen verwendet. Die URL sollte den String "<ph name="SEARCH_TERM_MARKER" />" enthalten, der bei der Abfrage durch den Text ersetzt wird, den der Nutzer bisher eingegeben hat. Diese Richtlinie ist optional. Falls sie nicht festgelegt wird, werden auch keine Instant-Ergebnisse angeboten. @@ -1603,6 +1607,7 @@ <translation id="2593762551209145088">Safe Browsing ist nie aktiv.</translation> <translation id="26023406105317310">Kerberos-Konten konfigurieren</translation> <translation id="2604182581880595781">Richtlinien für Netzwerkfreigaben konfigurieren.</translation> +<translation id="2608039968712973520">Nutzer um Erlaubnis zum Ausführen veralteter <ph name="FLASH_PLUGIN_NAME" />-Plug-ins bitten</translation> <translation id="2608535066974278204">Zeitraum (in Minuten), der die Dauer des Zeitfensters für den Neustart angibt.</translation> <translation id="2608887839902987727">Verhindern, dass die Captive-Portal-Authentifizierung Proxy-Einstellungen ignoriert</translation> <translation id="2608985885792348429">Standardmäßige Einstellung für die Zwischenablage</translation> @@ -1654,6 +1659,7 @@ Diese Richtlinie wurde in M77 entfernt. Diese Richtlinie gilt für die Anmeldeseite. Sieh dir auch die Richtlinie "<ph name="SITE_PER_PROCESS_POLICY_NAME" />" für die eigentliche Nutzersitzung an. Es wird empfohlen, für beide Richtlinien denselben Wert festzulegen. Wenn die Werte nicht übereinstimmen, kann es beim Beginn einer Nutzersitzung zu einer Verzögerung kommen, weil der von der Nutzerrichtlinie angegebene Wert erst angewendet werden muss. </translation> +<translation id="2697717608663878828">Test für TLS Encrypted ClientHello aktivieren</translation> <translation id="2702023190395322609">Empfehlungen zu Medien aktivieren</translation> <translation id="270582584528242502">Keine Warnung anzeigen, wenn der Nutzer versucht, den Browser zu schließen</translation> <translation id="2706708761587205154">Drucken nur mit PIN zulassen</translation> @@ -2248,6 +2254,7 @@ <translation id="3255762580838224124">Wenn die Richtlinie konfiguriert ist, wird jeder Bildschirm anhand der festgelegten Bildschirmausrichtung gedreht, wenn das Gerät neugestartet oder der Bildschirm nach einer Änderung des Richtlinienwerts zum ersten Mal angeschlossen wird. Nachdem ein Nutzer sich angemeldet hat, kann er die Bildschirmausrichtung auf der Einstellungsseite ändern, sie wird aber nach dem nächsten Neustart zurückgesetzt. Diese Richtlinie gilt sowohl für primäre als auch sekundäre Bildschirme. Ist die Richtlinie nicht konfiguriert, wird der Standardwert von 0 Grad verwendet und Nutzer können die Bildschirmausrichtung ändern. Die Bildschirmausrichtung wird dann nach dem Neustart nicht zurückgesetzt.</translation> +<translation id="3258380413685430793">Alle <ph name="FLASH_PLUGIN_NAME" />-Inhalte ausführen</translation> <translation id="325883417142483505">Mit dieser Richtlinie kannst du die Liste der URLs für die Unternehmensanmeldung festlegen (nur HTTP- und HTTPS-Protokolle). Der Passwortschutzdienst erfasst auf diesen URLs den Salted-Hash-Wert von Passwörtern und verwendet ihn, um zu prüfen, ob Passwörter wiederverwendet werden. Deine Anmeldeseiten müssen den Richtlinien unter https://www.chromium.org/developers/design-documents/create-amazing-password-forms entsprechen, damit Salted-Hash-Werte von Passwörtern in <ph name="PRODUCT_NAME" /> richtig erfasst werden können. Ist diese Einstellung deaktiviert oder nicht konfiguriert, erfasst der Passwortschutzdienst die Salted-Hash-Werte von Passwörtern nur unter https://accounts.google.com. @@ -2316,6 +2323,7 @@ Hinweis: Weitere Informationen zu Prozessschutzrichtlinien findest du unter https://chromium.googlesource.com/chromium/src/+/HEAD/docs/design/sandbox.md#Process-mitigation-policies.</translation> <translation id="3339271789059866414">Konfiguriert die Verfügbarkeit des System-Proxy-Dienstes und die Proxy-Anmeldedaten für Systemdienste. Ist diese Richtlinie nicht konfiguriert, ist der System-Proxy-Dienst nicht verfügbar.</translation> +<translation id="334231891933432876">Nutzer wird abgemeldet, sobald sein Konto nicht mehr authentifiziert ist</translation> <translation id="3348799281602260763">Wenn die Richtlinie aktiviert ist, können WebRTC-Peer-Verbindungen ein Downgrade auf veraltete Versionen der TLS/DTLS-Protokolle (DTLS 1.0, TLS 1.0 und TLS 1.1) durchführen. Wenn sie deaktiviert oder nicht konfiguriert ist, sind diese TLS/DTLS-Versionen @@ -2358,6 +2366,7 @@ Wenn diese Richtlinie nicht konfiguriert ist, werden 0 Millisekunden als Zeitlimit verwendet. Wenn die Richtlinie <ph name="DEVICE_LOCAL_ACCOUNT_AUTO_LOGIN_ID_POLICY_NAME" /> nicht konfiguriert ist, hat diese Richtlinie keine Auswirkungen.</translation> +<translation id="3397883909301547525">Keine App-Empfehlungen im Launcher von <ph name="PRODUCT_OS_NAME" /> anzeigen</translation> <translation id="3399859571630358395">Deaktivierung von schnellem Pairing (schnellem Bluetooth-Koppeln) erzwingen.</translation> <translation id="341285788698114069">Diese Richtlinie steuert die Priorität des Audioprozesses unter Windows. Wenn diese Richtlinie aktiviert ist, wird der Audioprozess mit einer Priorität ausgeführt, die über der normalen liegt. @@ -2436,6 +2445,7 @@ Die Verfügbarkeit dieser Funktion hängt außerdem von den entsprechenden Nutzerrichtlinien ab.</translation> <translation id="3495602011142234826">Wird die Richtlinie auf „true“ gesetzt, kann die Erweiterung alle Schlüssel nutzen, die für die geschäftliche Nutzung bestimmt sind, um beliebige Daten zu signieren. Ist sie auf „false“ gesetzt, können solche Schlüssel nicht verwendet werden, und Nutzer können auch keine entsprechende Berechtigung gewähren. Die einzige Ausnahme ist, dass eine Erweiterung genau einmal auf einen solchen Schlüssel zugreifen kann, sofern die Erweiterung selbst diesen Schlüssel erzeugt hat.</translation> <translation id="3496296378755072552">Passwortmanager</translation> +<translation id="3496761649331792755">Lesezeichenleiste aktivieren</translation> <translation id="3498109920669229084">Wenn die Richtlinie konfiguriert ist, wird festgelegt, welche Erweiterungen nicht von der Sperrliste betroffen sind. Der Wert "<ph name="ALL_EXTENSIONS" />" in der Sperrliste gibt an, dass alle Erweiterungen gesperrt sind und Nutzer nur die in der Zulassungsliste angegebenen Erweiterungen installieren können. @@ -3260,6 +3270,7 @@ <translation id="449423975179525290">Richtlinien für <ph name="PLUGIN_VM_NAME" /> konfigurieren.</translation> <translation id="449784980858429908">Websites automatisch die Berechtigung erteilen, eine Verbindung zu allen seriellen Ports herzustellen.</translation> <translation id="450080746522343150">Alle Downloads blockieren.</translation> +<translation id="45036050223225148">Test für Encrypted ClientHello deaktivieren</translation> <translation id="4508728400492074981">Hiermit werden die Richtlinien für die Funktion „First-Party-Sets“ gesteuert.</translation> <translation id="4510923771103268849">Nutzer hat Root-Zugriff auf Crostini-Container</translation> <translation id="4512407512989846472">Gestattet das Blockieren von Kopiervorgängen in die Zwischenablage auf bestimmten URLs</translation> @@ -3296,6 +3307,7 @@ Wenn die Richtlinie nicht konfiguriert ist, kann der Nutzer beliebige auf dem System installierte Plug-ins deaktivieren.</translation> <translation id="4549405078915181477">„Bildschirmzeit“ für Websites aktivieren</translation> <translation id="4554651132977135445">Loopback-Verarbeitungsmodus der Nutzerrichtlinien</translation> +<translation id="4554991346503872538">Nie Übersetzung anbieten</translation> <translation id="4555850956567117258">Remote-Bescheinigung (Remote Attestation) für den Nutzer aktivieren</translation> <translation id="4557134566541205630">Standardsuchanbieter-URL für die "Neuer Tab"-Seite</translation> <translation id="4558166110367609724">Überspringt automatisch die Nutzungsbedingungen und lädt den Browser.</translation> @@ -3739,6 +3751,7 @@ <translation id="5109383437323376357">Die Verfügbarkeit von Variationen bestimmen</translation> <translation id="5124368997194894978">Starten bei anliegender Netzspannung aktivieren</translation> <translation id="5130213897914754028">Websites die Nutzung von „SharedArrayBuffers“ nicht erlauben</translation> +<translation id="5130935469849337738">Übersetzung immer anbieten</translation> <translation id="5141670636904227950">Standardtyp für die Lupe festlegen, die auf der Anmeldeseite aktiviert ist</translation> <translation id="5142301680741828703">Folgende URL-Muster immer in <ph name="PRODUCT_FRAME_NAME" /> darstellen</translation> <translation id="5143258831402123447">Onlinerecherchen sind nicht unter chrome://history/journeys sichtbar.</translation> @@ -3871,6 +3884,7 @@ Wenn diese Richtlinie für ein Konto auf <ph name="POLICY_VALUE_PRIMARY_ACCOUNT_SIGNIN" /> gesetzt ist, kann dieses Konto nur als primäres Konto angemeldet werden. Eine Anmeldung als sekundäres Konto ist dann nicht zulässig.</translation> <translation id="523505283826916779">Einstellungen für Bedienungshilfen</translation> +<translation id="5238275681097851753">Sperren bestimmter <ph name="FLASH_PLUGIN_NAME" />-Inhalte zulassen</translation> <translation id="5238976843489093540">Aktivierung von schnellem Pairing (schnellem Bluetooth-Koppeln) erzwingen.</translation> <translation id="52393120393725840">Wenn die Richtlinie aktiviert ist, können Nutzer einstellen, dass <ph name="PRODUCT_NAME" /> Passwörter speichert und sie bei der nächsten Anmeldung auf einer Website bereitstellt. @@ -3937,6 +3951,7 @@ Wenn die Richtlinie nicht konfiguriert ist, können Nutzer das Dinosaurierspiel nicht auf registrierten <ph name="PRODUCT_OS_NAME" />-Geräten spielen, auf anderen aber schon.</translation> <translation id="529457411593078576">Nutzungsbedingungen während der ersten Ausführung für CCT aktivieren</translation> +<translation id="5297948043665200363">Nutzer kann angemeldet bleiben, wenn sein Konto nicht mehr authentifiziert ist</translation> <translation id="5298949392804966105">Keine Einschränkungen für verwaltete Konten</translation> <translation id="530134925949808452">Zeitpunkt (in Ortszeit), an dem das Nutzungskontingent erneuert wird.</translation> <translation id="5303080953475303561">Mit dieser Richtlinie kannst du festlegen, wie oft auf dem Sperrbildschirm das Passwort zum schnellen Entsperren angefordert wird. Immer dann, wenn der Sperrbildschirm angezeigt wird und die letzte Passworteingabe vor dem über den ausgewählten Wert festgelegten Zeitfenster liegt, steht schnelles Entsperren nicht zur Verfügung. Wenn Nutzer auf dem Sperrbildschirm bleiben, bis diese Zeit abgelaufen ist, wird das nächste Mal, wenn sie einen falschen Code eingeben oder wieder auf den Sperrbildschirm gelangen, ein Passwort angefordert, je nachdem, welche Situation zuerst eintritt. @@ -4525,6 +4540,13 @@ Für <ph name="MS_WIN_NAME" /> oder <ph name="MAC_OS_NAME" /> gilt diese Richtlinie nur, wenn <ph name="PRINT_PDF_AS_IMAGE_AVAILABILITY_POLICY_NAME" /> ebenfalls aktiviert ist.</translation> <translation id="5932767795525445337">Diese Richtlinie kann auch verwendet werden, um Android-Apps anzupinnen.</translation> +<translation id="5936193585187054065">Encrypted ClientHello (ECH) ist eine Erweiterung für TLS, um vertrauliche Felder von ClientHello zu verschlüsseln und den Datenschutz zu verbessern. + + Wenn diese Richtlinie aktiviert oder nicht konfiguriert ist, folgt <ph name="PRODUCT_NAME" /> dem standardmäßigen Einführungsprozess für ECH. Ist die Richtlinie deaktiviert, wird ECH von <ph name="PRODUCT_NAME" /> nicht aktiviert. + + Wenn die Funktion aktiviert ist, kann <ph name="PRODUCT_NAME" /> je nach Serversupport, Verfügbarkeit des HTTPS-DNS-Eintrags oder Einführungsstatus ECH verwenden. + + ECH ist ein Protokoll, das ständig weiterentwickelt wird. Die Implementierung von <ph name="PRODUCT_NAME" /> kann sich also ändern. Diese Richtlinie ist daher eine vorübergehende Maßnahme, um die ursprüngliche experimentelle Implementierung zu steuern. Sie wird durch eine endgültige Lösung ersetzt, wenn die Entwicklung des Protokolls abgeschlossen ist.</translation> <translation id="5939656968921014919">Entwicklermodus für isolierte Apps deaktivieren</translation> <translation id="5945312246863177268">Verhindert, dass Nutzer auf eine Phone Hub-Benachrichtigung klicken, um die App „Eche“ zu starten.</translation> <translation id="5946082169633555022">Beta-Kanal</translation> @@ -5126,6 +5148,7 @@ Sie hindert Unternehmensadministratoren nicht daran, eine Verbindung zu verwalteten <ph name="PRODUCT_OS_NAME" />-Geräten herzustellen. Diese Richtlinie ist nicht wirksam, wenn sie aktiviert, leer gelassen oder nicht konfiguriert wird.</translation> +<translation id="6583249367505445969">Lesezeichenleiste deaktivieren</translation> <translation id="6584541828182430328">Anzeige von Vollbild-Warnung deaktivieren</translation> <translation id="6593350713192882944">„Schnellinfo“ aktivieren</translation> <translation id="6594372503585248865">Benutzeroberflächen im Zusammenhang mit der Verbindung auf dem Remote-Host-Desktop während einer aktiven Verbindung aktivieren</translation> @@ -5601,6 +5624,7 @@ <translation id="7040229947030068419">Beispielwert</translation> <translation id="7044883996351280650">Android-Dienst "Sicherung und Wiederherstellung" konfigurieren</translation> <translation id="7047495632846973438">Gibt an, ob die Richtlinie für Berechtigungen zur Display-Erfassung ausgewählt ist oder übersprungen wird.</translation> +<translation id="7055022222176591388">Veraltete <ph name="FLASH_PLUGIN_NAME" />-Plug-ins nicht zulassen</translation> <translation id="7066292150801784098">Nicht zulassen, dass Remote-Nutzer bei der Remote-Unterstützung mit Administratorfenstern interagieren können</translation> <translation id="706669471845501145">Anzeige von Desktop-Benachrichtigungen durch Websites zulassen</translation> <translation id="70681795425744184">Nicht zulassen, dass CRD WebAuthn API-Anfragen ausführt, die von einem Remote-Host über einen Proxy weitergeleitet werden.</translation> @@ -6741,9 +6765,6 @@ <translation id="8295496526151576383">Diese Richtlinie gibt die Erweiterungen an, die den Dialog zur Bestätigung des Druckauftrags überspringen dürfen, wenn die <ph name="PRINTING_API" />-Funktion "<ph name="SUBMIT_JOB_FUNCTION" />" zum Senden eines Druckauftrags verwendet wird. Steht eine Erweiterung nicht auf der Liste oder ist die Liste nicht konfiguriert, wird dem Nutzer für jeden Aufruf von "<ph name="SUBMIT_JOB_FUNCTION" />" der Bestätigungsdialog für den Druckauftrag angezeigt.</translation> -<translation id="829641334878002866">Diese Richtlinie ermöglicht, den Zeitraum zwischen der ersten Benachrichtigung zum Neustart eines <ph name="PRODUCT_OS_NAME" />-Geräts, um eine ausstehende Aktualisierung anzuwenden, und dem Ende des durch die Richtlinie "<ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />" vorgegebenen Zeitraums in Millisekunden festzulegen. - - Wenn die Richtlinie nicht konfiguriert ist, gilt für <ph name="PRODUCT_OS_NAME" />-Geräte der standardmäßige Zeitraum von 259.200.000 Millisekunden (drei Tage).</translation> <translation id="829703642501504476">Wenn für diese Richtlinie "True" festgelegt ist, verwendet <ph name="PRODUCT_NAME" /> alternative Fehlerseiten (z. B. "Seite nicht gefunden"). Wenn für diese Richtlinie "False" festgelegt ist, verwendet <ph name="PRODUCT_NAME" /> niemals alternative Fehlerseiten. Wenn du diese Richtlinie konfigurierst, können Nutzer sie nicht ändern. Wird die Richtlinie nicht konfiguriert, ist sie aktiviert, aber Nutzer können die Einstellung ändern.</translation> @@ -7432,6 +7453,7 @@ Falls die Richtlinie nicht konfiguriert oder der Wert nicht mit einem Quick-Fix-Build verknüpft ist, wird das Gerät nicht auf einen Quick-Fix-Build aktualisiert. Wenn auf dem Gerät bereits ein Quick-Fix-Build installiert ist und die Richtlinie nicht mehr konfiguriert oder der Wert nicht mehr mit einem Quick-Fix-Build verknüpft ist, wird das Gerät auf einen regulären Build aktualisiert, sofern die Aktualisierung nicht durch eine andere Richtlinie blockiert wird.</translation> <translation id="9051019223077908578">Liste der installierten Apps und Erweiterungen auf dem Anmeldebildschirm konfigurieren</translation> +<translation id="9053841574218808519">Plug-ins, die nicht veraltet sind, immer ausführen</translation> <translation id="9055866143096316150">Bildschirm-Wakelock-Anfragen auf den Status von System-Wakelocks zurückstufen</translation> <translation id="9057444687284972605">Mit dieser Richtlinie kannst du eine Liste mit URL-Mustern festlegen und so angeben, für welche Websites auf dem Anmeldebildschirm im Frame, in dem der SAML-Flow gehostet wird, automatisch ein Clientzertifikat ausgewählt wird, wenn die Website ein Zertifikat anfordert. Zum Beispiel kann damit ein geräteübergreifendes Zertifikat konfiguriert werden, das dem SAML-IdP präsentiert wird.
diff --git a/components/policy/resources/policy_templates_es-419.xtb b/components/policy/resources/policy_templates_es-419.xtb index c7ec129..359a79e 100644 --- a/components/policy/resources/policy_templates_es-419.xtb +++ b/components/policy/resources/policy_templates_es-419.xtb
@@ -1107,6 +1107,7 @@ Si habilitas la política o no la estableces, se habilitarán las definiciones de Respuestas rápidas. Si inhabilitas la política, se inhabilitarán la definiciones de Respuestas rápidas.</translation> <translation id="209586405398070749">Canal estable</translation> +<translation id="2096932573113293941">Solicitar permiso al usuario para ejecutar complementos que requieren autorización</translation> <translation id="2098658257603918882">Habilitar informes de uso y datos relacionados con bloqueos</translation> <translation id="2104418465060359056">Enviar información de extensiones y complementos</translation> <translation id="2106627642643925514">Anula el modo de impresión con PIN predeterminado. Si el modo no está disponible, se ignorará esta política.</translation> @@ -1236,6 +1237,7 @@ <translation id="2223393221350938149">No permitir que cualquier sitio ejecute JavaScript con JIT</translation> <translation id="2223582957891074498">Si estableces la política como verdadera, no se permitirá realizar capturas de pantalla con combinaciones de teclas ni API de extensiones. Si la estableces como falsa, se permitirá realizar capturas de pantalla.</translation> <translation id="2223598546285729819">Configuración de notificación predeterminada</translation> +<translation id="222673035924187991">Habilitar TLS Encrypted ClientHello</translation> <translation id="2231726854197443389">Esta política controla si los usuarios pueden habilitar el modo solo HTTPS en la Configuración. El modo solo HTTPS actualiza todas las navegaciones a páginas HTTPS. Si no estableces esta configuración o la habilitas, los usuarios podrán habilitar el modo solo HTTPS. Si inhabilitas esta configuración, los usuarios no podrán habilitar el modo solo HTTPS. @@ -1356,6 +1358,7 @@ <translation id="2349117476121456297">Si estableces el valor "True" para la política, las teclas de la fila superior del teclado serán comandos de teclas de funciones. Si presionas la tecla de búsqueda, se restablecerá el comportamiento de las teclas multimedia. Si estableces el valor "False" para esta política o no la configuras, el teclado generará comandos de teclas de funciones de forma predeterminada. Cuando presiones la tecla de búsqueda, se cambiarán a teclas de funciones.</translation> +<translation id="2354439478396602136">Mostrar recomendaciones de apps en el selector de <ph name="PRODUCT_OS_NAME" /></translation> <translation id="2355876547176311490">Inhabilitar el uso de servidores de retransmisión por parte del host de acceso remoto</translation> <translation id="2358176879566587521">Se quita esta política. No es compatible con esta versión de <ph name="PRODUCT_NAME" />. Obtén más información en https://support.google.com/chrome/a/answer/7643500</translation> <translation id="2362469626417133796">Lapso para el reinicio</translation> @@ -1582,6 +1585,7 @@ Los usuarios no pueden modificar las carpetas donde se guardan los favoritos (pero pueden ocultarlas en la barra de favoritos). El nombre de carpeta predeterminado para los favoritos administrados es "Favoritos administrados", pero puede modificarse. Para hacerlo agrega un diccionario secundario en la política con una sola clave que se denomine "<ph name="TOPLEVEL_NAME" />" y que incluya el nombre de carpeta deseado como su valor. Los favoritos administrados no se sincronizan con la cuenta del usuario ni se pueden modificar mediante extensiones.</translation> <translation id="2552966063069741410">Zona horaria</translation> <translation id="2555244983262829274">Ocultar el botón Página principal en la barra de herramientas</translation> +<translation id="2562213287271514629">Permitir que se use el complemento de <ph name="FLASH_PLUGIN_NAME" /> desactualizado como complemento de <ph name="FLASH_PLUGIN_NAME" /> normal</translation> <translation id="2562339630163277285">Especifica la URL del motor de búsqueda que se usa para proporcionar resultados al instante. La URL debe contener el string "<ph name="SEARCH_TERM_MARKER" />", el cual se reemplazará en el momento de la consulta con el texto que el usuario haya ingresado hasta entonces. Esta política es opcional. Si no se establece, no se mostrarán resultados de la búsqueda al instante. @@ -1626,6 +1630,7 @@ <translation id="2593762551209145088">La Navegación segura nunca está activa.</translation> <translation id="26023406105317310">Configura las cuentas de Kerberos</translation> <translation id="2604182581880595781">Configura las políticas relacionadas con la función "Network File Shares".</translation> +<translation id="2608039968712973520">Solicitar permiso al usuario para ejecutar <ph name="FLASH_PLUGIN_NAME" /> desactualizado</translation> <translation id="2608535066974278204">Período (en minutos) que especifica el plazo para el reinicio.</translation> <translation id="2608887839902987727">Impedir que la autenticación del portal cautivo ignore la configuración de proxy</translation> <translation id="2608985885792348429">Configuración predeterminada del portapapeles</translation> @@ -1675,6 +1680,7 @@ <translation id="2694143893026486692">Se habilitó la lupa con vista acoplada</translation> <translation id="2696077732471707315">En la versión M77, se quitó esta política. Esta política se aplica a la pantalla de acceso. Consulta también la política <ph name="SITE_PER_PROCESS_POLICY_NAME" />, que se aplica a la sesión de usuario. Se recomienda establecer ambas políticas en el mismo valor. Si los valores no coinciden, es posible que se produzca un retraso cuando se ingresa una sesión de usuario mientras se aplica el valor que especifica la política del usuario.</translation> +<translation id="2697717608663878828">Habilitar el experimento TLS Encrypted ClientHello</translation> <translation id="2702023190395322609">Habilitar las recomendaciones de contenido multimedia</translation> <translation id="270582584528242502">No mostrar un diálogo de advertencia cuando el usuario intenta salir</translation> <translation id="2706708761587205154">Permite la impresión solo con PIN</translation> @@ -2272,6 +2278,7 @@ <translation id="3255762580838224124">Si estableces la política, las pantallas rotarán a la orientación especificada cada vez que se reinicie el dispositivo y la primera vez que se conecten después de cambiar el valor de la política. Después de acceder, los usuarios podrán cambiar la rotación de las pantallas en la página de configuración, pero volverá a cambiar la próxima vez que se reinicie el dispositivo. Esta política se aplica a la pantalla principal y a la secundaria. Si no la estableces, el valor predeterminado será 0 grados y los usuarios podrán cambiarlo. Si deciden hacerlo, no se volverá a aplicar el valor predeterminado cuando se reinicie el dispositivo.</translation> +<translation id="3258380413685430793">Ejecutar todo el contenido de <ph name="FLASH_PLUGIN_NAME" /></translation> <translation id="325883417142483505">Si estableces la política, se especificará la lista de URL de acceso empresarial (solo protocolos HTTP y HTTPS). El servicio de protección de contraseñas capturará los hash con sal de las contraseñas de estas URL y los usará para detectar la reutilización de contraseñas. Para que <ph name="PRODUCT_NAME" /> capture correctamente los hash con sal de las contraseñas, asegúrate de que tus páginas de acceso cumplan con los lineamientos ( https://www.chromium.org/developers/design-documents/create-amazing-password-forms ). Si desactivas esta configuración o no la estableces, el servicio de protección de contraseñas solo capturará los hash con sal de las contraseñas que se encuentren en https://accounts.google.com. @@ -2340,6 +2347,7 @@ Nota: Obtén más información sobre las políticas de mitigación de procesos ( https://chromium.googlesource.com/chromium/src/+/HEAD/docs/design/sandbox.md#Process-mitigation-policies ).</translation> <translation id="3339271789059866414">Configura la disponibilidad del servicio de proxy del sistema y las credenciales de proxy para los servicios del sistema. Si no se establece la política, no estará disponible el servicio de proxy del sistema.</translation> +<translation id="334231891933432876">Cerrar la sesión del usuario en cuanto se anule la autenticación de su cuenta</translation> <translation id="3348799281602260763">Si habilitas la política, las conexiones entre pares con WebRTC podrán convertirse en versiones obsoletas de los protocolos TLS/DTLS (DTLS 1.0, TLS 1.0 y TLS 1.1). Si la inhabilitas o no la estableces, se inhabilitarán estas versiones @@ -2382,6 +2390,7 @@ Si no la estableces, se utilizará 0 milisegundos como tiempo de espera. Si no estableces la política <ph name="DEVICE_LOCAL_ACCOUNT_AUTO_LOGIN_ID_POLICY_NAME" />, esta política no tendrá efecto.</translation> +<translation id="3397883909301547525">No mostrar recomendaciones de apps en el selector de <ph name="PRODUCT_OS_NAME" /></translation> <translation id="3399859571630358395">Inhabilitar de manera automática la Vinculación rápida (vinculación rápida por Bluetooth)</translation> <translation id="341285788698114069">Esta política controla la prioridad del proceso de audio en Windows. Si habilitas la política, se ejecutará el proceso de audio con prioridad por encima de la normal. @@ -2459,6 +2468,7 @@ La disponibilidad de esta funcionalidad también depende de la política del usuario correspondiente.</translation> <translation id="3495602011142234826">Si la estableces como verdadera, esta extensión podrá firmar datos arbitrarios con todas las claves diseñadas para uso corporativo. Si la estableces como falsa, no podrá acceder a ninguna de esas claves, y el usuario tampoco podrá otorgarle permiso para hacerlo. Como excepción, una extensión podrá acceder a la clave exactamente una vez si esa extensión generó la clave.</translation> <translation id="3496296378755072552">Administrador de contraseñas</translation> +<translation id="3496761649331792755">Habilitar la barra de favoritos</translation> <translation id="3498109920669229084">Si estableces la política, se especificarán las extensiones que no están sujetas a la lista de elementos bloqueados. Un valor de <ph name="ALL_EXTENSIONS" /> en una lista de elementos bloqueados significa que se incluyen todas las extensiones en esa lista, y los usuarios solo podrán instalar extensiones que figuren en la lista de elementos permitidos. @@ -3191,6 +3201,7 @@ <translation id="4372704773119750918">No permitir que el usuario de empresa forme parte de la función de varios perfiles (usuario principal o secundario)</translation> <translation id="4377599627073874279">Permitir a todos los sitios que muestren todas las imágenes</translation> <translation id="437791893267799639">No se estableció la política; no permitir la migración de datos y ARC</translation> +<translation id="4380159792986204036">Permitir que el kiosco web abra más de una ventana del navegador en cualquier pantalla</translation> <translation id="4381227367939912539">Inhabilitar el juego del huevo de pascua del dinosaurio</translation> <translation id="4382413175336720282">Inhabilita la verificación de URL en tiempo real</translation> <translation id="4387741272680827493">Si estableces la política, se especifica una lista de nombres de host que evitan las actualizaciones de HSTS precargadas de http a https. @@ -3293,6 +3304,7 @@ <translation id="449423975179525290">Configura las políticas relacionadas con <ph name="PLUGIN_VM_NAME" />.</translation> <translation id="449784980858429908">Otorgar permiso automáticamente a los sitios para conectarse a puertos en serie</translation> <translation id="450080746522343150">Bloquear todas las descargas</translation> +<translation id="45036050223225148">Inhabilitar el experimento TLS Encrypted ClientHello</translation> <translation id="4508728400492074981">Controla las políticas para la función First-Party Sets.</translation> <translation id="4510923771103268849">El usuario tiene acceso con permisos de administrador a los contenedores de Crostini</translation> <translation id="4512407512989846472">No permitir la copia al portapapeles en URLs específicas</translation> @@ -3329,6 +3341,7 @@ Si no se configura esta política, el usuario podrá inhabilitar cualquier complemento instalado en el sistema.</translation> <translation id="4549405078915181477">Activar el Tiempo de uso para sitios web</translation> <translation id="4554651132977135445">Modo de procesamiento de bucle invertido de la política del usuario</translation> +<translation id="4554991346503872538">Nunca ofrecer la traducción</translation> <translation id="4555850956567117258">Habilita la atestación remota para el usuario.</translation> <translation id="4557134566541205630">URL de la página Nueva pestaña del proveedor de búsqueda predeterminado</translation> <translation id="4558166110367609724">Omite automáticamente las Condiciones del Servicio y carga el navegador</translation> @@ -3699,6 +3712,9 @@ Para obtener información detallada sobre los patrones de URL válidos, consulta https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. <ph name="WILDCARD_VALUE" /> no es un valor aceptado para esta política.</translation> <translation id="4978533099939732984">Mostrar siempre advertencias de poco espacio en el disco</translation> +<translation id="4979714585847741269">Si habilitas la política, una app web de kiosco puede abrir otra ventana del navegador que puede colocarse en la misma pantalla o en otra. Para abrir una ventana nueva, la app web debe llamar a la función de JavaScript <ph name="OPEN_NEW_WINDOW_JS" />. + + Si inhabilitas la política o no la estableces, una app web de kiosco podrá usar solo la ventana principal del navegador y no podrá abrir una ventana nueva. Se omitirá la llamada a cualquier función de JavaScript para abrir una ventana nueva.</translation> <translation id="4980635395568992380">Tipo de datos:</translation> <translation id="4983201894483989687">Permitir la ejecución de complementos desactualizados</translation> <translation id="4986560318567565414">Ruta a Chrome para el cambio desde el navegador alternativo</translation> @@ -3771,6 +3787,7 @@ <translation id="5109383437323376357">Determina la disponibilidad de las variantes</translation> <translation id="5124368997194894978">Habilitar el inicio mediante CA (corriente alterna)</translation> <translation id="5130213897914754028">Impedir que los sitios utilicen la política SharedArrayBuffers</translation> +<translation id="5130935469849337738">Ofrecer siempre la traducción</translation> <translation id="5141670636904227950">Establece el tipo de lupa predeterminado habilitado en la pantalla de acceso.</translation> <translation id="5142301680741828703">Siempre procesar los siguientes patrones de URL en <ph name="PRODUCT_FRAME_NAME" /></translation> <translation id="5143258831402123447">Las exploraciones no podrán verse en chrome://history/journeys</translation> @@ -3903,6 +3920,7 @@ Si estableces esta política con el valor <ph name="POLICY_VALUE_PRIMARY_ACCOUNT_SIGNIN" /> en una cuenta, se le permitirá acceder solo como cuenta principal. Esta no podrá acceder como cuenta secundaria.</translation> <translation id="523505283826916779">Configuración de accesibilidad</translation> +<translation id="5238275681097851753">Permitir el bloqueo de cierto contenido de <ph name="FLASH_PLUGIN_NAME" /></translation> <translation id="5238976843489093540">Habilitar de manera automática la Vinculación rápida (vinculación rápida por Bluetooth)</translation> <translation id="52393120393725840">Si habilitas la política, <ph name="PRODUCT_NAME" /> recordará las contraseñas y las proporcionará a los usuarios la siguiente vez que accedan a su cuenta en un sitio. @@ -3973,6 +3991,7 @@ Si no la estableces, los usuario no podrán jugar al juego en el <ph name="PRODUCT_OS_NAME" /> registrado, pero podrán hacerlo en otras circunstancias.</translation> <translation id="529457411593078576">Habilita las Condiciones del Servicio en la primera ejecución para CCT</translation> +<translation id="5297948043665200363">Permitir que el usuario permanezca conectado después de que se anule la autenticación de su cuenta</translation> <translation id="5298949392804966105">No hay restricciones en las cuentas administradas</translation> <translation id="530134925949808452">La hora del día en que se renueva la cuota de uso (en hora local).</translation> <translation id="5303080953475303561">Si estableces la política, se controlará la frecuencia con la que la pantalla de bloqueo solicita la contraseña para un desbloqueo rápido. Cada vez que aparezca la pantalla de bloqueo, si se ingresó la contraseña por última vez antes del período que especifica el valor elegido, el desbloqueo rápido no estará disponible. Si el usuario permanece en la pantalla de bloqueo por más tiempo que el especificado, la próxima vez que ingrese el código incorrecto o reingrese la pantalla de bloqueo (lo que ocurra primero), se le solicitará una contraseña. @@ -4582,6 +4601,13 @@ En <ph name="MS_WIN_NAME" /> o <ph name="MAC_OS_NAME" />, esta política solo tiene efecto si también se habilita <ph name="PRINT_PDF_AS_IMAGE_AVAILABILITY_POLICY_NAME" />.</translation> <translation id="5932767795525445337">Esta política también se puede usar para fijar apps de Android.</translation> +<translation id="5936193585187054065">Encrypted ClientHello (ECH) es una extensión de TLS para encriptar campos sensibles de ClientHello y mejorar la privacidad. + + Si habilitas esta política o no la configuras, <ph name="PRODUCT_NAME" /> seguirá el proceso de lanzamiento predeterminado para ECH. Si está inhabilitada, <ph name="PRODUCT_NAME" /> no habilitará ECH. + + Cuando la función esté habilitada, <ph name="PRODUCT_NAME" /> podrá usar el ECH según la compatibilidad del servidor, la disponibilidad del registro DNS de HTTPS o el estado del lanzamiento. + + ECH es un protocolo en evolución, por lo que la implementación de <ph name="PRODUCT_NAME" /> está sujeta a cambios. Por lo tanto, esta política es una medida temporal para controlar la implementación experimental inicial. Se reemplazará con controles finales a medida que finalice el protocolo.</translation> <translation id="5939656968921014919">Inhabilitar el modo de desarrollador de apps aisladas</translation> <translation id="5945312246863177268">No permitir a los usuarios hacer clic en la notificación de Phone Hub para iniciar la aplicación Eche</translation> <translation id="5946082169633555022">Canal beta</translation> @@ -5200,6 +5226,7 @@ Tampoco impide que los administradores de empresas se conecten a dispositivos <ph name="PRODUCT_OS_NAME" /> administrados. Por último, no tiene efecto si la habilitas, la dejas vacía o no la configuras.</translation> +<translation id="6583249367505445969">Inhabilitar la barra de favoritos</translation> <translation id="6584541828182430328">Inhabilita la alerta de pantalla completa</translation> <translation id="6593350713192882944">Habilitar Respuestas rápidas</translation> <translation id="6594372503585248865">Habilitar la IU relacionada con la conexión en el escritorio del host remoto cuando una conexión está activa</translation> @@ -5675,6 +5702,7 @@ <translation id="7040229947030068419">Valor de ejemplo:</translation> <translation id="7044883996351280650">Controlar el servicio de restablecimiento y copias de seguridad</translation> <translation id="7047495632846973438">Especificar si se marca o se omite la política de permisos para la captura de pantalla</translation> +<translation id="7055022222176591388">No permitir el complemento de <ph name="FLASH_PLUGIN_NAME" /> desactualizado</translation> <translation id="7066292150801784098">Impedir que los usuarios remotos interactúen con las ventanas con permisos elevados en sesiones de asistencia remota</translation> <translation id="706669471845501145">Permitir que los sitios muestren notificaciones de escritorio.</translation> <translation id="70681795425744184">No permitir que CRD realice solicitudes a la API de WebAuthn que se envíen al proxy a través de un host remoto</translation> @@ -6170,6 +6198,7 @@ Ten en cuenta que esta política depende de la pila de verificación de certificado del sistema operativo que permite las firmas SHA-1. Si una actualización del sistema operativo cambia la forma en la que este maneja los certificados con firma SHA-1, esta política ya no tendrá efecto. Además, se trata de una solución temporal para que las empresas tengan más tiempo para dejar las firmas SHA-1. Esta política se quitará el 1 de enero de 2019 o cerca de esta fecha. Si esta política no se establece o se establece en "false", <ph name="PRODUCT_NAME" /> seguirá el programa de baja de las firmas SHA-1 anunciado públicamente.</translation> +<translation id="7577082478271919056">Permitir que una app web de kiosco abra otra ventana del navegador</translation> <translation id="7578142001795552218">Esta política le otorga permiso a Respuestas rápidas para acceder al contenido seleccionado y enviar información al servidor, a fin de obtener resultados de conversión de unidades. Si habilitas la política o no la estableces, se habilitará la conversión de unidades de Respuestas rápidas. @@ -6812,9 +6841,6 @@ <translation id="8295496526151576383">Esta política especifica las extensiones permitidas para omitir el cuadro de diálogo de confirmación de los trabajos de impresión cuando utilizan la función <ph name="SUBMIT_JOB_FUNCTION" /> de <ph name="PRINTING_API" /> para enviar un trabajo de impresión. Si no se encuentra una extensión en la lista, o no se establece la lista, el usuario verá el cuadro de diálogo de confirmación de los trabajos de impresión en todas las llamadas a la función <ph name="SUBMIT_JOB_FUNCTION" />.</translation> -<translation id="829641334878002866">Te permite establecer el período, en milisegundos, entre la primera notificación en la que se solicita reiniciar un dispositivo con <ph name="PRODUCT_OS_NAME" /> para aplicar una actualización pendiente y la finalización del período especificado en la política <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />. - - Si no se establece, se utilizará el período predeterminado de 259200000 milisegundos (tres días) para los dispositivos <ph name="PRODUCT_OS_NAME" />.</translation> <translation id="829703642501504476">Si estableces la política como verdadera, <ph name="PRODUCT_NAME" /> utilizará páginas de error alternativas integradas en el navegador (como "no se encontró la página"). Si la estableces como falsa, <ph name="PRODUCT_NAME" /> no utilizará nunca páginas de error alternativas. Si estableces la política, los usuarios no podrán cambiarla. Si no la estableces, la política estará activa, pero los usuarios podrán cambiar esta configuración.</translation> @@ -7515,6 +7541,7 @@ Si no se establece esta política, o su valor no se mapea a una versión de corrección rápida, no se actualizará el dispositivo a una versión de corrección rápida. Si el dispositivo ya está ejecutando una versión de corrección rápida y la política dejó de establecerse, o su valor ya no se mapea a una versión de corrección rápida, el dispositivo se actualizará a una versión convencional en caso de que otra política no haya bloqueado la actualización.</translation> <translation id="9051019223077908578">Configurar la lista de extensiones y apps instaladas de la pantalla de acceso</translation> +<translation id="9053841574218808519">Ejecutar siempre complementos que no estén desactualizados</translation> <translation id="9055866143096316150">Desciende el nivel de las solicitudes de bloqueo de activación de pantalla a solicitudes de bloqueo de activación del sistema</translation> <translation id="9057444687284972605">Te permite configurar una lista de patrones de URL donde se indiquen los sitios para los que se selecciona automáticamente un certificado de cliente en la pantalla de acceso, en el marco que aloja el flujo de SAML, si el sitio solicita un certificado. Por ejemplo, se puede configurar un certificado para todo el dispositivo que se presente en el IdP de SAML. @@ -7687,6 +7714,7 @@ Nota: Si bloqueas las URL internas de chrome://*, se pueden generar errores inesperados.</translation> <translation id="957778406002650056">La URL desde la cual se puede descargar la imagen de <ph name="PLUGIN_VM_NAME" />.</translation> +<translation id="958285142322823422">Prohibir que una app web de kiosco abra otra ventana del navegador</translation> <translation id="958577147847681221">Controla la creación de nuevas cuentas de usuario en <ph name="PRODUCT_OS_NAME" />. Si estableces esta política como falsa, solo los usuarios presentes en <ph name="DEVICE_USER_ALLOWLIST_POLICY_NAME" /> podrán acceder.
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb index 249c7c2..9bb1f468 100644 --- a/components/policy/resources/policy_templates_es.xtb +++ b/components/policy/resources/policy_templates_es.xtb
@@ -6827,9 +6827,6 @@ <translation id="8295496526151576383">Esta política especifica las extensiones que pueden saltarse el cuadro de diálogo de confirmación de trabajo de impresión cuando usen la función de <ph name="PRINTING_API" /> <ph name="SUBMIT_JOB_FUNCTION" /> para enviar un trabajo de impresión. Si la lista no se ha configurado o una extensión no está incluida en ella, se mostrará al usuario el cuadro de diálogo de confirmación de trabajo de impresión para cada llamada de función de <ph name="SUBMIT_JOB_FUNCTION" />.</translation> -<translation id="829641334878002866">Permite definir el periodo (en milisegundos) que transcurre entre la primera notificación que avisa de que un dispositivo <ph name="PRODUCT_OS_NAME" /> debe reiniciarse para aplicar una actualización pendiente y la finalización del periodo especificado en la política <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />. - - Si no se asigna ningún valor a esta política, se usará el periodo predeterminado de 259.200.000 milisegundos (tres días) para los dispositivos <ph name="PRODUCT_OS_NAME" />.</translation> <translation id="829703642501504476">Si se asigna el valor "True" a esta política, <ph name="PRODUCT_NAME" /> usará páginas de error alternativas que vienen incorporadas (como "No se encuentra la página"). Si se le asigna el valor "False", <ph name="PRODUCT_NAME" /> nunca usará páginas de error alternativas. Si se configura la política, los usuarios no podrán cambiarla. Si no se configura, la política estará activada, pero los usuarios podrán cambiar esta opción.</translation>
diff --git a/components/policy/resources/policy_templates_fr.xtb b/components/policy/resources/policy_templates_fr.xtb index 352d516..d41f1a294 100644 --- a/components/policy/resources/policy_templates_fr.xtb +++ b/components/policy/resources/policy_templates_fr.xtb
@@ -3174,6 +3174,7 @@ <translation id="4372704773119750918">Ne pas autoriser l'utilisateur d'entreprise à participer aux sessions à plusieurs profils, que ce soit en tant qu'utilisateur principal ou secondaire</translation> <translation id="4377599627073874279">Autoriser tous les sites à afficher toutes les images</translation> <translation id="437791893267799639">Règle non définie, interdire la migration de données et ARC</translation> +<translation id="4380159792986204036">Autoriser un kiosque Web à ouvrir plusieurs fenêtres de navigateur sur n'importe quel écran</translation> <translation id="4381227367939912539">Désactiver le jeu Easter Egg du dinosaure</translation> <translation id="4382413175336720282">La vérification en temps réel des URL est désactivée.</translation> <translation id="4387741272680827493">Cette règle permet de dresser une liste de noms d'hôte qui ignorent les mises à niveau HSTS préchargées entre http et https. @@ -3678,6 +3679,9 @@ Pour en savoir plus sur les formats d'URL valides, veuillez consulter la page https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. La valeur <ph name="WILDCARD_VALUE" /> n'est pas acceptée pour cette règle.</translation> <translation id="4978533099939732984">Toujours afficher les avertissements de type "espace disque insuffisant"</translation> +<translation id="4979714585847741269">Si cette règle est activée, une appli Web kiosque peut ouvrir une autre fenêtre de navigateur pouvant être placée sur le même écran ou sur un autre. Pour ouvrir une nouvelle fenêtre, l'appli Web doit appeler la fonction JavaScript <ph name="OPEN_NEW_WINDOW_JS" />. + + Si elle est désactivée ou n'est pas configurée, une appli Web kiosque ne peut utiliser que la fenêtre du navigateur principal, sans pouvoir en ouvrir une nouvelle. L'appel de n'importe quelle fonction JavaScript pour ouvrir une nouvelle fenêtre sera ignoré.</translation> <translation id="4980635395568992380">Type de données :</translation> <translation id="4983201894483989687">Autoriser l'exécution de plug-ins obsolètes</translation> <translation id="4986560318567565414">Chemin d'accès pour basculer vers Chrome à partir du navigateur secondaire.</translation> @@ -6126,6 +6130,7 @@ Notez que cette règle dépend de la pile de validation des certificats du système d'exploitation qui autorise les signatures SHA-1. Si la mise à jour d'un OS modifie la gestion des certificats SHA-1 par l'OS, cette règle n'aura plus d'effet. En outre, cette règle sera supprimée dans les environs du 1er janvier 2019. Si cette règle n'est pas définie, ou qu'elle est définie sur "False", <ph name="PRODUCT_NAME" /> suivra le planning d'abandon du chiffrage SHA-1 annoncé publiquement.</translation> +<translation id="7577082478271919056">Autoriser une appli Web kiosque à ouvrir une autre fenêtre de navigateur</translation> <translation id="7578142001795552218">Cette règle autorise Réponses rapides à accéder au contenu sélectionné et à envoyer au serveur les infos pour obtenir les résultats de la conversion d'unités. Si elle est activée ou si elle n'est pas configurée, la conversion d'unités pour Réponses rapides est activée. @@ -6766,9 +6771,6 @@ <translation id="8295496526151576383">Permet de définir les extensions autorisées à ignorer la boîte de dialogue de confirmation d'une tâche d'impression lorsque la fonction <ph name="SUBMIT_JOB_FUNCTION" /> est utilisée via l'API <ph name="PRINTING_API" /> pour envoyer la tâche en question. Si une extension ne figure pas dans la liste ou si cette liste n'est pas configurée, la boîte de dialogue de confirmation d'une tâche d'impression s'affiche à chaque appel de fonction <ph name="SUBMIT_JOB_FUNCTION" />.</translation> -<translation id="829641334878002866">Vous permet de définir le délai, en millisecondes, entre la première notification vous avertissant qu'un appareil <ph name="PRODUCT_OS_NAME" /> doit être redémarré pour l'application d'une mise à jour en attente et la fin du délai spécifié par la règle <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />. - - Si cette règle n'est pas définie, le délai par défaut est fixé à 259 200 000 millisecondes (trois jours) pour les appareils <ph name="PRODUCT_OS_NAME" />.</translation> <translation id="829703642501504476">Si cette règle est définie sur "True", <ph name="PRODUCT_NAME" /> utilise les variantes de pages d'erreur intégrées (telles que "Page introuvable"). Si cette règle est définie sur "False", <ph name="PRODUCT_NAME" /> n'utilise jamais les variantes de pages d'erreur. Si vous configurez cette règle, les utilisateurs ne peuvent pas la modifier. Si cette règle n'est pas définie, elle est activée par défaut. Toutefois, les utilisateurs peuvent la modifier.</translation> @@ -7628,6 +7630,7 @@ Remarque : le blocage des URL internes chrome://* peut provoquer des erreurs inattendues.</translation> <translation id="957778406002650056">URL depuis laquelle l'image de <ph name="PLUGIN_VM_NAME" /> peut être téléchargée.</translation> +<translation id="958285142322823422">Interdire à une appli Web kiosque d'ouvrir une autre fenêtre de navigateur</translation> <translation id="958577147847681221">Détermine si <ph name="PRODUCT_OS_NAME" /> autorise la création de comptes utilisateur. Si cette règle est définie sur "False", seuls les utilisateurs présents dans <ph name="DEVICE_USER_ALLOWLIST_POLICY_NAME" /> peuvent se connecter.
diff --git a/components/policy/resources/policy_templates_id.xtb b/components/policy/resources/policy_templates_id.xtb index 17b2b0f..8cd3fa9d 100644 --- a/components/policy/resources/policy_templates_id.xtb +++ b/components/policy/resources/policy_templates_id.xtb
@@ -1110,6 +1110,7 @@ Jika kebijakan ini disetel ke aktif atau tidak disetel, Definisi Jawaban Instan akan diaktifkan. Jika kebijakan ini disetel ke nonaktif, Definisi Jawaban Instan akan dinonaktifkan.</translation> <translation id="209586405398070749">Saluran stabil</translation> +<translation id="2096932573113293941">Minta izin pengguna untuk menjalankan plugin yang memerlukan otorisasi</translation> <translation id="2098658257603918882">Aktifkan laporan data penggunaan dan yang terkait error</translation> <translation id="2104418465060359056">Melaporkan informasi Ekstensi dan Plugin</translation> <translation id="2106627642643925514">Mengganti mode pencetakan PIN default. Jika mode ini tidak tersedia, kebijakan ini akan diabaikan.</translation> @@ -1239,6 +1240,7 @@ <translation id="2223393221350938149">Jangan izinkan situs apa pun menjalankan JIT JavaScript</translation> <translation id="2223582957891074498">Jika kebijakan ditetapkan ke Benar (True), screenshot yang diambil dengan pintasan keyboard atau API ekstensi tidak akan diizinkan. Jika kebijakan ditetapkan ke Salah (False), screenshot akan diizinkan.</translation> <translation id="2223598546285729819">Setelan pemberitahuan default</translation> +<translation id="222673035924187991">Mengaktifkan Encrypted ClientHello TLS</translation> <translation id="2231726854197443389">Kebijakan ini mengontrol apakah pengguna dapat mengaktifkan Mode Khusus HTTPS di Setelan. Mode Khusus HTTPS mengupgrade semua navigasi ke HTTPS. Jika setelan ini tidak disetel atau disetel ke diizinkan, pengguna akan diizinkan mengaktifkan Mode Khusus HTTPS. Jika setelan ini disetel ke tidak diizinkan, pengguna tidak akan diizinkan mengaktifkan Mode Khusus HTTPS. @@ -1359,6 +1361,7 @@ <translation id="2349117476121456297">Jika kebijakan ditetapkan ke Benar (True), tombol baris teratas pada keyboard akan bertindak sebagai perintah tombol fungsi. Jika menekan tombol Penelusuran, perilaku tombol tersebut akan kembali menjadi tombol media. Jika ditetapkan ke Salah (False) atau tidak ditetapkan, default keyboard adalah membuat perintah tombol media. Jika menekan tombol Penelusuran, tombol tersebut akan berubah menjadi tombol fungsi.</translation> +<translation id="2354439478396602136">Tampilkan rekomendasi aplikasi di peluncur <ph name="PRODUCT_OS_NAME" /></translation> <translation id="2355876547176311490">Nonaktifkan penggunaan server relai oleh host akses jarak jauh</translation> <translation id="2358176879566587521">Kebijakan ini dihapus. Kebijakan ini tidak kompatibel dengan versi <ph name="PRODUCT_NAME" /> ini. Baca selengkapnya di https://support.google.com/chrome/a/answer/7643500</translation> <translation id="2362469626417133796">Interval waktu peluncuran kembali</translation> @@ -1585,6 +1588,7 @@ Pengguna tidak dapat mengubah folder lokasi bookmark (meskipun pengguna dapat menyembunyikannya dari kolom bookmark). Nama folder default untuk bookmark terkelola adalah "Bookmark terkelola (Managed bookmarks)", tetapi dapat diubah dengan menambahkan sub-kamus baru ke kebijakan dengan kunci tunggal bernama "<ph name="TOPLEVEL_NAME" />" yang berisi nama folder yang diinginkan sebagai nilainya. Bookmark terkelola tidak disinkronkan ke akun pengguna dan ekstensi tidak dapat mengubahnya.</translation> <translation id="2552966063069741410">Zona Waktu</translation> <translation id="2555244983262829274">Sembunyikan tombol Layar Utama dari toolbar</translation> +<translation id="2562213287271514629">Izinkan <ph name="FLASH_PLUGIN_NAME" /> yang sudah tidak berlaku untuk digunakan sebagai <ph name="FLASH_PLUGIN_NAME" /> normal</translation> <translation id="2562339630163277285">Menentukan URL mesin telusur yang digunakan untuk memberikan hasil instan. URL harus berisi string <ph name="SEARCH_TERM_MARKER" />, yang akan diganti pada waktu kueri dengan teks yang telah dimasukkan oleh pengguna sejauh ini. Kebijakan ini persifat opsional. Jika tidak disetel, tidak ada hasil penelusuran instan yang akan diberikan. @@ -1629,6 +1633,7 @@ <translation id="2593762551209145088">Safe Browsing selalu tidak aktif.</translation> <translation id="26023406105317310">Konfigurasikan akun Kerberos</translation> <translation id="2604182581880595781">Mengonfigurasi kebijakan terkait fitur Berbagi File Jaringan.</translation> +<translation id="2608039968712973520">Minta izin pengguna untuk menjalankan <ph name="FLASH_PLUGIN_NAME" /> yang sudah tidak berlaku</translation> <translation id="2608535066974278204">Jangka waktu (menit) yang menentukan lamanya interval peluncuran kembali.</translation> <translation id="2608887839902987727">Cegah autentikasi captive portal mengabaikan setelan proxy</translation> <translation id="2608985885792348429">Setelan papan klip default</translation> @@ -1680,6 +1685,7 @@ Kebijakan ini dihapus di M77. Kebijakan ini berlaku untuk layar login. Baca juga kebijakan <ph name="SITE_PER_PROCESS_POLICY_NAME" /> yang berlaku untuk sesi pengguna. Pengguna disarankan untuk menetapkan kedua kebijakan ke nilai yang sama. Jika nilai tidak cocok, penundaan mungkin terjadi ketika memasuki sesi pengguna saat nilai yang ditentukan oleh kebijakan pengguna sedang diterapkan. </translation> +<translation id="2697717608663878828">Aktifkan eksperimen Encrypted ClientHello TLS</translation> <translation id="2702023190395322609">Mengaktifkan Rekomendasi Media</translation> <translation id="270582584528242502">Jangan tampilkan dialog peringatan saat pengguna mencoba menutup browser</translation> <translation id="2706708761587205154">Hanya izinkan pencetakan dengan PIN</translation> @@ -2276,6 +2282,7 @@ <translation id="3255762580838224124">Jika kebijakan disetel, tiap tampilan akan diputar sesuai dengan setelan orientasi layar setiap kali mulai ulang dan saat pertama kali terhubung setelah nilai kebijakan berubah. Pengguna dapat mengubah rotasi tampilan melalui halaman setelan setelah login, tetapi tampilan akan kembali berubah saat mulai ulang berikutnya. Kebijakan ini akan berlaku untuk tampilan utama dan sekunder. Jika tidak disetel, nilai default adalah 0 derajat dan pengguna bebas mengubahnya. Dalam hal ini, nilai default tidak diterapkan kembali saat mulai ulang.</translation> +<translation id="3258380413685430793">Jalankan semua konten <ph name="FLASH_PLUGIN_NAME" /></translation> <translation id="325883417142483505">Menyetel kebijakan akan menetapkan daftar URL Login perusahaan (hanya protokol HTTP dan HTTPS). Layanan perlindungan sandi akan merekam hash sandi yang dilengkapi salt di URL ini dan menggunakannya untuk deteksi penggunaan ulang sandi. Agar <ph name="PRODUCT_NAME" /> dapat merekam hash sandi yang dilengkapi salt dengan benar, pastikan halaman login mengikuti pedoman ( https://www.chromium.org/developers/design-documents/create-amazing-password-forms ). Jika setelan ini dinonaktifkan atau tidak disetel, layanan perlindungan sandi hanya merekam hash sandi yang dilengkapi salt di https://accounts.google.com. @@ -2344,6 +2351,7 @@ Catatan: Baca selengkapnya tentang Kebijakan mitigasi proses ( https://chromium.googlesource.com/chromium/src/+/HEAD/docs/design/sandbox.md#Process-mitigation-policies ).</translation> <translation id="3339271789059866414">Mengonfigurasi ketersediaan layanan System-proxy dan kredensial proxy untuk layanan sistem. Jika kebijakan tidak ditetapkan, layanan System-proxy tidak akan tersedia.</translation> +<translation id="334231891933432876">Buat pengguna logout segera setelah akunnya menjadi tidak terautentikasi</translation> <translation id="3348799281602260763">Jika diaktifkan, koneksi pembanding WebRTC dapat mendowngrade ke versi protokol TLS/DTLS (DTLS 1.0, TLS 1.0, dan TLS 1.1) yang sudah usang. Jika kebijakan ini disetel ke nonaktif atau tidak disetel, versi TLS/DTLS ini akan @@ -2386,6 +2394,7 @@ Jika tidak disetel, 0 milidetik akan digunakan sebagai waktu tunggu. Jika kebijakan <ph name="DEVICE_LOCAL_ACCOUNT_AUTO_LOGIN_ID_POLICY_NAME" /> tidak disetel, kebijakan ini tidak berpengaruh.</translation> +<translation id="3397883909301547525">Jangan tampilkan rekomendasi aplikasi di peluncur <ph name="PRODUCT_OS_NAME" /></translation> <translation id="3399859571630358395">Paksa penonaktifan Sambungan Cepat (penyambungan Bluetooth cepat).</translation> <translation id="341285788698114069">Kebijakan ini mengontrol prioritas proses audio di Windows. Jika kebijakan ini diaktifkan, proses audio akan berjalan dengan prioritas di atas normal. @@ -2465,6 +2474,7 @@ Ketersediaan fungsi ini akan tergantung pada kebijakan pengguna terkait.</translation> <translation id="3495602011142234826">Jika disetel ke benar (true), ekstensi ini dapat menggunakan semua kunci yang ditujukan untuk penggunaan perusahaan guna menandatangani data arbitrer. Jika disetel ke salah (false), ekstensi ini tidak dapat mengakses kunci tersebut dan pengguna juga tidak dapat memberikan izin. Sebagai pengecualian, sebuah ekstensi dapat mengakses kunci tersebut tepat hanya sekali jika ekstensi yang sama membuat kunci tersebut.</translation> <translation id="3496296378755072552">Pengelola sandi</translation> +<translation id="3496761649331792755">Aktifkan kolom bookmark</translation> <translation id="3498109920669229084">Menyetel kebijakan akan menentukan ekstensi yang tidak tunduk pada daftar yang tidak diizinkan. Nilai <ph name="ALL_EXTENSIONS" /> untuk daftar yang tidak diizinkan berarti semua ekstensi diblokir dan pengguna hanya dapat menginstal ekstensi yang tercantum dalam daftar yang diizinkan. @@ -3302,6 +3312,7 @@ <translation id="449423975179525290">Konfigurasikan kebijakan terkait <ph name="PLUGIN_VM_NAME" />.</translation> <translation id="449784980858429908">Otomatis memberikan izin ke situs untuk menghubungkan semua port serial.</translation> <translation id="450080746522343150">Blokir semua download.</translation> +<translation id="45036050223225148">Nonaktifkan eksperimen Encrypted ClientHello TLS</translation> <translation id="4508728400492074981">Mengontrol kebijakan untuk fitur Set Pihak Pertama.</translation> <translation id="4510923771103268849">Pengguna diizinkan untuk memiliki akses root ke penampung Crostini</translation> <translation id="4512407512989846472">Memungkinkan pemblokiran penyalinan ke papan klip pada URL tertentu</translation> @@ -3338,6 +3349,7 @@ Jika kebijakan ini tidak ditetapkan, pengguna dapat menonaktifkan plugin apa pun yang diinstal pada sistem.</translation> <translation id="4549405078915181477">Aktifkan Waktu Pemakaian Perangkat untuk situs</translation> <translation id="4554651132977135445">Mode pemrosesan loopback kebijakan pengguna</translation> +<translation id="4554991346503872538">Jangan pernah tawarkan terjemahan</translation> <translation id="4555850956567117258">Mengaktifkan pengesahan jarak jauh bagi pengguna</translation> <translation id="4557134566541205630">URL halaman tab baru penyedia penelusuran default</translation> <translation id="4558166110367609724">Otomatis melewati ToS dan memuat browser.</translation> @@ -3786,6 +3798,7 @@ <translation id="5109383437323376357">Menentukan ketersediaan variasi</translation> <translation id="5124368997194894978">Aktifkan booting pada tegangan AC (arus bolak-balik)</translation> <translation id="5130213897914754028">Cegah situs menggunakan SharedArrayBuffer</translation> +<translation id="5130935469849337738">Selalu tawarkan terjemahan</translation> <translation id="5141670636904227950">Menyetel jenis lup default yang diaktifkan di layar masuk</translation> <translation id="5142301680741828703">Selalu mengurai pola URL berikut di <ph name="PRODUCT_FRAME_NAME" /></translation> <translation id="5143258831402123447">Perjalanan tidak akan dapat dilihat di chrome://history/journeys.</translation> @@ -3918,6 +3931,7 @@ Jika kebijakan ini disetel ke <ph name="POLICY_VALUE_PRIMARY_ACCOUNT_SIGNIN" /> untuk suatu akun, akun ini hanya akan diizinkan login sebagai akun utama. Akun tidak akan diizinkan login sebagai akun sekunder.</translation> <translation id="523505283826916779">Setelan aksesibilitas</translation> +<translation id="5238275681097851753">Izinkan konten <ph name="FLASH_PLUGIN_NAME" /> tertentu untuk diblokir</translation> <translation id="5238976843489093540">Paksa pengaktifan Sambungan Cepat (penyambungan Bluetooth cepat).</translation> <translation id="52393120393725840">Menyetel kebijakan ke Aktif berarti pengguna dapat membuat <ph name="PRODUCT_NAME" /> mengingat sandi dan memberikannya saat mereka kembali login ke situs. @@ -3984,6 +3998,7 @@ Jika kebijakan tidak ditetapkan, pengguna tidak dapat memainkan game di <ph name="PRODUCT_OS_NAME" /> yang terdaftar, tetapi dapat memainkannya dalam kondisi lain.</translation> <translation id="529457411593078576">Menampilkan Persyaratan Layanan (ToS) saat CCT pertama kali dijalankan</translation> +<translation id="5297948043665200363">Izinkan pengguna tetap login setelah akunnya menjadi tidak terautentikasi</translation> <translation id="5298949392804966105">Tidak ada batasan di akun terkelola</translation> <translation id="530134925949808452">Waktu dalam hari dalam waktu lokal saat kuota penggunaan diperpanjang.</translation> <translation id="5303080953475303561">Menyetel kebijakan akan mengontrol frekuensi layar kunci meminta sandi untuk mode buka kunci cepat. Setiap kali layar kunci ditampilkan, jika entri sandi terakhir terjadi sebelum jangka waktu yang ditentukan oleh nilai yang dipilih, mode buka kunci cepat tidak akan tersedia. Jika pengguna tetap berada di layar kunci setelah jangka waktu ini, sandi akan diminta saat pengguna salah memasukkan kode lagi atau masuk kembali ke layar kunci, mana saja yang terjadi lebih dahulu. @@ -4594,6 +4609,13 @@ Untuk <ph name="MS_WIN_NAME" /> atau <ph name="MAC_OS_NAME" />, kebijakan ini hanya akan berpengaruh jika <ph name="PRINT_PDF_AS_IMAGE_AVAILABILITY_POLICY_NAME" /> juga diaktifkan.</translation> <translation id="5932767795525445337">Kebijakan ini juga dapat digunakan untuk memasang pin pada aplikasi Android.</translation> +<translation id="5936193585187054065">Encrypted ClientHello (ECH) adalah ekstensi ke TLS untuk mengenkripsi kolom sensitif ClientHello dan meningkatkan privasi. + + Jika kebijakan ini tidak dikonfigurasi atau disetel ke aktif, <ph name="PRODUCT_NAME" /> akan mengikuti proses peluncuran default untuk ECH. Jika kebijakan ini disetel ke nonaktif, <ph name="PRODUCT_NAME" /> tidak akan mengaktifkan ECH. + + Saat fitur ini diaktifkan, <ph name="PRODUCT_NAME" /> mungkin menggunakan atau tidak menggunakan ECH bergantung pada dukungan server, ketersediaan data DNS HTTPS, atau status peluncuran. + + ECH adalah protokol yang berkembang, sehingga penerapan <ph name="PRODUCT_NAME" /> dapat berubah sewaktu-waktu. Oleh karena itu, kebijakan ini merupakan tindakan sementara untuk mengontrol penerapan eksperimental awal. Kebijakan ini akan diganti dengan kontrol akhir saat protokol diselesaikan.</translation> <translation id="5939656968921014919">Nonaktifkan Mode Developer Aplikasi Terisolasi</translation> <translation id="5945312246863177268">Melarang pengguna mengklik notifikasi Phone Hub untuk meluncurkan aplikasi Eche.</translation> <translation id="5946082169633555022">Saluran beta</translation> @@ -5212,6 +5234,7 @@ Kebijakan ini tidak mencegah admin perusahaan terhubung ke perangkat <ph name="PRODUCT_OS_NAME" /> terkelola. Kebijakan ini tidak berpengaruh jika disetel ke aktif, dibiarkan kosong, atau tidak disetel.</translation> +<translation id="6583249367505445969">Nonaktifkan kolom bookmark</translation> <translation id="6584541828182430328">Nonaktifkan tampilkan peringatan layar penuh</translation> <translation id="6593350713192882944">Aktifkan Jawaban Instan</translation> <translation id="6594372503585248865">Aktifkan UI terkait koneksi pada desktop host jarak jauh saat koneksi aktif</translation> @@ -5689,6 +5712,7 @@ <translation id="7040229947030068419">Nilai contoh:</translation> <translation id="7044883996351280650">Mengontrol layanan pencadangan dan pemulihan Android</translation> <translation id="7047495632846973438">Menentukan apakah kebijakan izin perekaman layar dicentang atau dilewati.</translation> +<translation id="7055022222176591388">Larang <ph name="FLASH_PLUGIN_NAME" /> yang sudah tidak berlaku</translation> <translation id="7066292150801784098">Cegah interaksi pengguna jarak jauh dengan jendela administrator di sesi bantuan jarak jauh</translation> <translation id="706669471845501145">Izinkan situs menampilkan pemberitahuan desktop</translation> <translation id="70681795425744184">Jangan izinkan CRD mengeksekusi permintaan WebAuthn API yang di-proxy dari host jarak jauh.</translation> @@ -6817,9 +6841,6 @@ <translation id="8295496526151576383">Kebijakan ini menentukan ekstensi yang diizinkan untuk melewati dialog konfirmasi pekerjaan cetak ketika menggunakan fungsi <ph name="PRINTING_API" /> <ph name="SUBMIT_JOB_FUNCTION" /> untuk mengirimkan pekerjaan cetak. Jika ekstensi tidak berada dalam daftar, atau daftar tidak ditetapkan, dialog konfirmasi pekerjaan cetak akan ditampilkan ke pengguna untuk setiap panggilan fungsi <ph name="SUBMIT_JOB_FUNCTION" />.</translation> -<translation id="829641334878002866">Memungkinkan Anda menentukan jangka waktu, dalam milidetik, antara notifikasi pertama bahwa perangkat <ph name="PRODUCT_OS_NAME" /> harus dimulai ulang untuk menerapkan update tertunda dan akhir dari jangka waktu yang ditentukan oleh kebijakan <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />. - - Jika tidak ditetapkan, jangka waktu default selama 259200000 milidetik (tiga hari) akan digunakan untuk perangkat <ph name="PRODUCT_OS_NAME" />.</translation> <translation id="829703642501504476">Jika kebijakan disetel ke Benar (True), <ph name="PRODUCT_NAME" /> akan menggunakan halaman error alternatif yang telah disertakan dalam browser tersebut (seperti "halaman tidak ditemukan"). Jika kebijakan disetel ke Salah (False), <ph name="PRODUCT_NAME" /> tidak akan pernah menggunakan halaman error alternatif. Jika kebijakan disetel, pengguna tidak dapat mengubahnya. Jika tidak disetel, kebijakan akan aktif tetapi pengguna dapat mengubah setelan ini.</translation> @@ -7508,6 +7529,7 @@ Jika kebijakan ini tidak ditetapkan, atau jika nilainya tidak dipetakan ke Quick Fix Build, perangkat tidak akan diupdate ke Quick Fix Build. Jika perangkat sudah menjalankan Quick Fix Build dan kebijakan tidak ditetapkan lagi atau nilainya tidak lagi dipetakan ke Quick Fix Build, perangkat akan diupdate ke versi reguler jika update tidak diblokir oleh kebijakan lain.</translation> <translation id="9051019223077908578">Mengonfigurasi daftar aplikasi dan ekstensi terinstal di layar login</translation> +<translation id="9053841574218808519">Selalu jalankan plugin yang masih berlaku</translation> <translation id="9055866143096316150">Demosikan permintaan penguncian layar saat aktif ke permintaan penguncian layar saat aktif di sistem</translation> <translation id="9057444687284972605">Memungkinkan Anda menetapkan daftar pola URL yang menentukan situs tempat sertifikat klien dipilih secara otomatis di layar login dalam frame yang menghosting alur SAML, jika situs tersebut meminta sertifikat. Contoh penggunaan adalah ketika mengonfigurasikan sertifikat di seluruh perangkat untuk ditampilkan ke SAML IdP.
diff --git a/components/policy/resources/policy_templates_it.xtb b/components/policy/resources/policy_templates_it.xtb index a3ffb85..44946e9 100644 --- a/components/policy/resources/policy_templates_it.xtb +++ b/components/policy/resources/policy_templates_it.xtb
@@ -6798,9 +6798,6 @@ <translation id="8295496526151576383">Questo criterio specifica le estensioni consentite per ignorare la finestra di dialogo di conferma del processo di stampa utilizzando la funzione <ph name="PRINTING_API" /> <ph name="SUBMIT_JOB_FUNCTION" /> per l'invio di un processo di stampa. Se un'estensione non è presente nell'elenco o non è configurato alcun elenco, la finestra di dialogo di conferma del processo di stampa verrà visualizzata dall'utente per ogni chiamata funzione <ph name="SUBMIT_JOB_FUNCTION" />.</translation> -<translation id="829641334878002866">Ti consente di impostare il periodo di tempo, in millisecondi, tra la prima notifica relativa alla necessità di riavviare un dispositivo <ph name="PRODUCT_OS_NAME" /> per applicare un aggiornamento in sospeso e la fine del periodo di tempo specificato dal criterio <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />. - - Se non è impostato, per i dispositivi <ph name="PRODUCT_OS_NAME" /> viene utilizzato il periodo predefinito di 259200000 millisecondi (tre giorni).</translation> <translation id="829703642501504476">Se il criterio viene impostato su true, <ph name="PRODUCT_NAME" /> consente l'utilizzo di pagine di errore alternative integrate nel browser (come "pagina non trovata"). Se il criterio viene impostato su false, <ph name="PRODUCT_NAME" /> non consente mai l'utilizzo di pagine di errore alternative. Se il criterio viene configurato, gli utenti non possono modificarlo. Se non viene configurato, il criterio è attivo, ma gli utenti possono modificare questa impostazione.</translation>
diff --git a/components/policy/resources/policy_templates_ja.xtb b/components/policy/resources/policy_templates_ja.xtb index 664f568b..b23334ab8 100644 --- a/components/policy/resources/policy_templates_ja.xtb +++ b/components/policy/resources/policy_templates_ja.xtb
@@ -1032,6 +1032,7 @@ このポリシーを有効にした場合、または設定しない場合、クイック アンサーの定義が有効になります。 このポリシーを無効にした場合、クイック アンサーの定義が無効になります。</translation> <translation id="209586405398070749">Stable チャンネル</translation> +<translation id="2096932573113293941">承認を必要とするプラグインの実行許可をユーザーに求める</translation> <translation id="2098658257603918882">使用状況とクラッシュ関連データのレポートを有効にする</translation> <translation id="2104418465060359056">拡張機能とプラグインの情報についてレポートを作成する</translation> <translation id="2106627642643925514">デフォルトの PIN 印刷モードをオーバーライドします。このモードを使用できない場合、このポリシーは無視されます。</translation> @@ -1157,6 +1158,7 @@ <translation id="2223393221350938149">どのサイトにも JavaScript JIT の実行を許可しない</translation> <translation id="2223582957891074498">このポリシーを True に設定した場合、キーボード ショートカットまたは拡張機能 API を使用したスクリーンショットが許可されません。このポリシーを False に設定した場合、スクリーンショットが許可されます。</translation> <translation id="2223598546285729819">デフォルトの通知設定</translation> +<translation id="222673035924187991">TLS 暗号化 ClientHello を有効にする</translation> <translation id="2231726854197443389">このポリシーでは、ユーザーが [設定] で HTTPS 専用モードを有効にできるかどうかを管理します。HTTPS 専用モードでは、移動先がすべて HTTPS にアップグレードされます。 未設定のままにした場合や [allowed(許可する)] に設定した場合、ユーザーは HTTPS 専用モードを有効にできます。 [disallowed(許可しない)] に設定した場合、ユーザーは HTTPS 専用モードを有効にできません。 @@ -1261,6 +1263,7 @@ <translation id="2349117476121456297">このポリシーを True に設定した場合、キーボードの最上段のキーがファンクション キーのコマンドとして機能します。検索キーを押すと、メディアキーの動作に戻ります。 このポリシーを False に設定するか設定しない場合、最上段のキーを押すとデフォルトでメディアキーのコマンドが実行されます。検索キーを押すと、これらのキーはファンクション キーに変わります。</translation> +<translation id="2354439478396602136"><ph name="PRODUCT_OS_NAME" /> ランチャーにおすすめのアプリを表示する</translation> <translation id="2355876547176311490">リモート アクセスホストで中継サーバーを使用できないようにする</translation> <translation id="2358176879566587521">このポリシーは削除されました。このバージョンの <ph name="PRODUCT_NAME" /> には対応していません。詳しくは、https://support.google.com/chrome/a/answer/7643500 をご覧ください。</translation> <translation id="2362469626417133796">再起動の時間枠</translation> @@ -1463,6 +1466,7 @@ ユーザーはブックマークが保存されるフォルダを変更できません(ブックマーク バーでフォルダを非表示にすることはできます)。管理対象のブックマークのデフォルトのフォルダ名は「管理対象のブックマーク」です。フォルダ名を変更するには、希望するフォルダ名を値とする「<ph name="TOPLEVEL_NAME" />」キーを 1 つ含む新しいサブディクショナリをポリシーに追加します。管理対象のブックマークは、ユーザー アカウントと同期されず、拡張機能で変更することもできません。</translation> <translation id="2552966063069741410">タイムゾーン</translation> <translation id="2555244983262829274">ツールバーにホームボタンを表示しない</translation> +<translation id="2562213287271514629">古い <ph name="FLASH_PLUGIN_NAME" /> を通常の <ph name="FLASH_PLUGIN_NAME" /> として使用することを許可する</translation> <translation id="2562339630163277285">インスタント検索の結果表示に使用する検索エンジンの URL を指定します。この URL には <ph name="SEARCH_TERM_MARKER" /> という文字列を含めます。この文字列は、検索時にユーザーが入力したテキストに置き換えられます。 このポリシーは省略可能です。このポリシーが未設定の場合、インスタント検索の結果は表示されません。 @@ -1507,6 +1511,7 @@ <translation id="2593762551209145088">セーフ ブラウジングを常に無効にする。</translation> <translation id="26023406105317310">Kerberos アカウントを設定する</translation> <translation id="2604182581880595781">ネットワーク ファイル共有に関連するポリシーを設定します。</translation> +<translation id="2608039968712973520">古い <ph name="FLASH_PLUGIN_NAME" /> の実行許可をユーザーにリクエストする</translation> <translation id="2608535066974278204">再起動の時間枠の長さを示す分単位の期間です。</translation> <translation id="2608887839902987727">キャプティブ ポータル認証でプロキシ設定を無視できないようにする</translation> <translation id="2608985885792348429">デフォルトのクリップボード設定</translation> @@ -1558,6 +1563,7 @@ このポリシーは M77 で削除されました。 このポリシーはログイン画面に適用されます。ユーザー セッションに適用される <ph name="SITE_PER_PROCESS_POLICY_NAME" /> ポリシーもご覧になり、両方のポリシーを同じ値に設定することをおすすめします。値が一致しない場合、ユーザー セッションの開始時にはユーザー ポリシーで指定された値が適用されますが、その際に遅延が生じる可能性があります。 </translation> +<translation id="2697717608663878828">TLS 暗号化 ClientHello テストを有効にする</translation> <translation id="2702023190395322609">おすすめメディアを有効にする</translation> <translation id="270582584528242502">ユーザーが終了しようとしたときに警告ダイアログを表示しない</translation> <translation id="2706708761587205154">PIN ありの印刷のみを許可します</translation> @@ -2132,6 +2138,7 @@ <translation id="3255762580838224124">このポリシーを設定した場合、各ディスプレイは再起動のたびに指定した方向に回転します。ポリシーの値を変更した後、初めて接続したときにも、指定した方向に回転します。ユーザーはログイン後に設定ページからディスプレイの回転方法を変更することができますが、次に再起動したときにはポリシーの値に戻ります。このポリシーは、メインと予備のディスプレイに適用されます。 このポリシーを設定しない場合、デフォルト値として 0 度が使用され、ユーザーはこの値を自由に変更できます。この場合、再起動時にデフォルト値が再適用されることはありません。</translation> +<translation id="3258380413685430793">すべての <ph name="FLASH_PLUGIN_NAME" /> コンテンツを実行する</translation> <translation id="325883417142483505">このポリシーでは、企業のログイン URL のリストを設定できます(HTTP と HTTPS プロトコルのみ)。パスワード保護サービスでは、これらの URL で入力されたパスワードのソルトハッシュを取得し、パスワードの再利用を検出する目的で使用します。<ph name="PRODUCT_NAME" /> でパスワードのソルトハッシュが適切に取得されるようにするには、ログインページが https://www.chromium.org/developers/design-documents/create-amazing-password-forms のガイドラインに沿っていることを確認します。 この設定をオフにするか未設定のままにした場合、パスワード保護サービスでは https://accounts.google.com のパスワードのソルトハッシュのみを取得します。 @@ -2200,6 +2207,7 @@ 注: 詳しくはプロセス対応ポリシー(https://chromium.googlesource.com/chromium/src/+/HEAD/docs/design/sandbox.md#Process-mitigation-policies)をご覧ください。</translation> <translation id="3339271789059866414">システム プロキシ サービスを利用できるようにするかどうかとシステム サービスのプロキシ認証情報を設定します。 このポリシーが設定されていない場合、システム プロキシ サービスは利用できません。</translation> +<translation id="334231891933432876">アカウントの認証が無効になったら直ちにユーザーをログアウトする</translation> <translation id="3348799281602260763">有効にすると、WebRTC ピア接続が TLS/DTLS プロトコルのサポートが終了したバージョン(DTLS 1.0、TLS 1.0、TLS 1.1)にダウングレードされる可能性があります。 このポリシーを無効にするか、未設定のままにすると、これらの TLS/DTLS バージョンは無効になります。 @@ -2239,6 +2247,7 @@ このポリシーを未設定のままにした場合、タイムアウトは 0 ミリ秒に設定されます。 <ph name="DEVICE_LOCAL_ACCOUNT_AUTO_LOGIN_ID_POLICY_NAME" /> ポリシーが設定されていない場合、このポリシーは無視されます。</translation> +<translation id="3397883909301547525"><ph name="PRODUCT_OS_NAME" /> ランチャーにおすすめのアプリを表示しない</translation> <translation id="3399859571630358395">ファスト ペアリング(ファスト Bluetooth ペアリング)を強制的に無効にする。</translation> <translation id="341285788698114069">このポリシーでは、Windows での音声処理の優先度を制御できます。 このポリシーを有効に設定した場合、音声処理は通常より高い優先度で実行されます。 @@ -2318,6 +2327,7 @@ この機能を使用できるかどうかは、対応するユーザー ポリシーの設定にもよります。</translation> <translation id="3495602011142234826">true に設定した場合、この拡張機能では企業用に指定されたすべてのキーを任意のデータの署名に使用できます。false に設定した場合、これらのキーにアクセスすることはできず、ユーザーもこれらの権限を付与できません。ただし例外として、拡張機能が生成したキーについては、その拡張機能から 1 度だけアクセスできます。</translation> <translation id="3496296378755072552">パスワード マネージャー</translation> +<translation id="3496761649331792755">ブックマーク バーを有効にする</translation> <translation id="3498109920669229084">このポリシーを設定することで、拒否リストの対象外とする拡張機能を指定できます。 拒否リストの値が <ph name="ALL_EXTENSIONS" /> の場合、すべての拡張機能がブロック対象となり、ユーザーは許可リストに登録されている拡張機能しかインストールできません。 @@ -3126,6 +3136,7 @@ <translation id="449423975179525290"><ph name="PLUGIN_VM_NAME" /> に関連するポリシーを設定します。</translation> <translation id="449784980858429908">すべてのシリアルポートへの接続を自動的にサイトに許可します。</translation> <translation id="450080746522343150">すべてのダウンロードをブロックする</translation> +<translation id="45036050223225148">TLS 暗号化 ClientHello テストを無効にする</translation> <translation id="4508728400492074981">First-Party Sets 機能に関するポリシーを管理します。</translation> <translation id="4510923771103268849">Crostini コンテナへのルートアクセスをユーザーに許可する</translation> <translation id="4512407512989846472">指定された URL 上のクリップボードへのコピーをブロックすることを許可します</translation> @@ -3162,6 +3173,7 @@ このポリシーを設定しない場合、ユーザーはシステムにインストールされたどのプラグインも無効にできます。</translation> <translation id="4549405078915181477">ウェブサイトのスクリーンタイム設定を有効にする</translation> <translation id="4554651132977135445">ユーザー ポリシーのループバック処理モード</translation> +<translation id="4554991346503872538">翻訳の確認をしない</translation> <translation id="4555850956567117258">ユーザーのリモート認証を有効にする</translation> <translation id="4557134566541205630">デフォルトの検索プロバイダの新しいタブ ページ URL</translation> <translation id="4558166110367609724">利用規約を自動的にスキップし、ブラウザを読み込みます。</translation> @@ -3579,6 +3591,7 @@ <translation id="5109383437323376357">適用できるバリエーションを指定します</translation> <translation id="5124368997194894978">AC(交流電流)電源接続時の起動を有効にします</translation> <translation id="5130213897914754028">サイトに SharedArrayBuffers の使用を許可しない</translation> +<translation id="5130935469849337738">常に翻訳を表示する</translation> <translation id="5141670636904227950">ログイン画面で有効にする画面拡大鏡のデフォルトのタイプを設定する</translation> <translation id="5142301680741828703"><ph name="PRODUCT_FRAME_NAME" /> で次の URL パターンを常に表示する</translation> <translation id="5143258831402123447">chrome://history/journeys にジャーニーを表示しない。</translation> @@ -3695,6 +3708,7 @@ このポリシーを <ph name="POLICY_VALUE_PRIMARY_ACCOUNT_SIGNIN" /> に設定されたアカウントは、メイン アカウントとしてのみログインが許可されます。予備のアカウントとしてのログインは許可されません。</translation> <translation id="523505283826916779">ユーザー補助機能の設定</translation> +<translation id="5238275681097851753">特定の <ph name="FLASH_PLUGIN_NAME" /> コンテンツのブロックを許可する</translation> <translation id="5238976843489093540">ファスト ペアリング(ファスト Bluetooth ペアリング)を強制的に有効にする。</translation> <translation id="52393120393725840">このポリシーを有効に設定した場合、ユーザーは <ph name="PRODUCT_NAME" /> でパスワードを保存して、次回サイトにログインする際に提示するように設定できます。 @@ -3751,6 +3765,7 @@ <translation id="5290940294294002042">ユーザーが有効または無効にできるプラグインのリストを指定する</translation> <translation id="5293044154216294358">このポリシーを True に設定した場合、ユーザーが恐竜ゲームをプレイすることを許可します。このポリシーを False に設定した場合、ユーザーはデバイスがオフラインのときに恐竜のイースター エッグゲームをプレイできません。このポリシーを未設定のままにした場合、ユーザーは登録されている <ph name="PRODUCT_OS_NAME" /> ではゲームをプレイできませんが、他の環境ではプレイできます。</translation> <translation id="529457411593078576">CCT の初回実行時の利用規約を有効にする</translation> +<translation id="5297948043665200363">アカウントの認証が無効になった後もユーザーがログイン状態を維持できるようにする</translation> <translation id="5298949392804966105">管理対象アカウントに制限を課さない</translation> <translation id="530134925949808452">使用時間の割り当てが更新される時間(現地時間)です。</translation> <translation id="5303080953475303561">このポリシーでは、ロック画面でロックをクイック解除するためにパスワードの入力を求める頻度を管理できます。ロック画面が表示されるたびに、前回のパスワード入力から指定値に基づく時間が経過したかどうかが確認され、経過していなければロックのクイック解除は使用できません。ユーザーがロックを解除しないまま設定した指定時間が経過した場合は、次回ユーザーが誤ったコードを入力するか、ロック画面を再表示するかのいずれか早い方が発生した時点でパスワード入力が求められます。 @@ -4323,6 +4338,13 @@ <ph name="MS_WIN_NAME" /> または <ph name="MAC_OS_NAME" /> では、このポリシーが効果を持つのは、<ph name="PRINT_PDF_AS_IMAGE_AVAILABILITY_POLICY_NAME" /> も有効になっている場合に限られます。</translation> <translation id="5932767795525445337">このポリシーを使って Android アプリを固定することもできます。</translation> +<translation id="5936193585187054065">暗号化 ClientHello(ECH)は TLS の拡張機能です。ClientHello の機密性の高いフィールドを暗号化してプライバシーを強化します。 + + このポリシーを未設定のままにするか有効に設定した場合、<ph name="PRODUCT_NAME" /> では ECH のデフォルトのロールアウト プロセスが使用されます。無効に設定した場合、<ph name="PRODUCT_NAME" /> で ECH は有効になりません。 + + この機能が有効なとき、<ph name="PRODUCT_NAME" /> ではサーバーのサポート、利用できる HTTPS DNS レコードの有無、またはロールアウトのステータスに応じて、ECH が使用される場合もあれば、使用されない場合もあります。 + + ECH は進化中のプロトコルであるため、<ph name="PRODUCT_NAME" /> での実装には変更が生じる可能性があります。そのため、このポリシーは、試験運用版の初期実装を管理するための一時的な手段です。今後プロトコルが確定した際、最終版の管理機能に置き換わります。</translation> <translation id="5939656968921014919">分離されたアプリのデベロッパー モードを無効にします</translation> <translation id="5945312246863177268">ユーザーがスマートフォン ハブの通知をクリックして Eche アプリを起動することを許可しません。</translation> <translation id="5946082169633555022">Beta チャンネル</translation> @@ -4888,6 +4910,7 @@ このポリシーを未設定のままにするか、空のリストを指定した場合、デバイスのローカル アカウントは表示されません。</translation> <translation id="6581048059229620221">このポリシーを無効にした場合、リモート サポート ホストを起動することも、外部からの接続を受け入れるように設定することもできなくなります。このポリシーは、リモート アクセスのシナリオには影響しません。このポリシーは、企業の管理者が管理対象の <ph name="PRODUCT_OS_NAME" /> デバイスに接続する妨げにはなりません。このポリシーを有効にするか、空白または未設定のままにした場合、ポリシーは無視されます。</translation> +<translation id="6583249367505445969">ブックマーク バーを無効にする</translation> <translation id="6584541828182430328">全画面表示の警告を無効にする</translation> <translation id="6593350713192882944">クイック アンサーを有効にする</translation> <translation id="6594372503585248865">接続がアクティブなときにリモートホスト デスクトップで接続関連の UI を有効にする</translation> @@ -5338,6 +5361,7 @@ <translation id="7040229947030068419">サンプル値:</translation> <translation id="7044883996351280650">Android のバックアップと復元サービスを制御する</translation> <translation id="7047495632846973438">ディスプレイ キャプチャ許可ポリシーを照会するかスキップするかを指定します。</translation> +<translation id="7055022222176591388">古い <ph name="FLASH_PLUGIN_NAME" /> を許可しない</translation> <translation id="7066292150801784098">リモート ユーザーがリモート アシスタンス セッションで権限昇格ウィンドウとやり取りできないようにする</translation> <translation id="706669471845501145">サイトに対してデスクトップ通知の表示を許可する</translation> <translation id="70681795425744184">CRD にリモートホストからプロキシ送信される WebAuthn API リクエストの実行を許可しない。</translation> @@ -6409,9 +6433,6 @@ <translation id="8295496526151576383">このポリシーでは、<ph name="PRINTING_API" /> の <ph name="SUBMIT_JOB_FUNCTION" /> 関数を使って印刷ジョブを送信する際に、印刷ジョブの確認ダイアログをスキップできる拡張機能を指定します。 このポリシーで拡張機能を指定しない場合、またはこのポリシー自体を設定しない場合、<ph name="SUBMIT_JOB_FUNCTION" /> 関数の呼び出し時には必ず印刷ジョブの確認ダイアログが表示されます。</translation> -<translation id="829641334878002866">保留中のアップデートを適用するため <ph name="PRODUCT_OS_NAME" /> デバイスの再起動が必要であることを最初に通知してから、<ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" /> ポリシーで指定された期間の終了時点までの期間をミリ秒単位で設定します。 - - このポリシーを設定しない場合、<ph name="PRODUCT_OS_NAME" /> デバイスではデフォルトの 259200000 ミリ秒(3 日)が使用されます。</translation> <translation id="829703642501504476">このポリシーを True に設定した場合、<ph name="PRODUCT_NAME" /> では組み込まれている別のエラーページ(「ページが見つかりません」など)が使用されます。このポリシーを False に設定した場合、<ph name="PRODUCT_NAME" /> では別のエラーページは使用されません。 このポリシーを設定した場合、ユーザーは設定を変更できません。設定しなかった場合、ポリシーは有効になりますが、ユーザーはこの設定を変更できます。</translation> @@ -7086,6 +7107,7 @@ このポリシーを設定しない場合、または設定した値が Quick Fix ビルドにマッピングされていない場合、デバイスは Quick Fix ビルドに更新されません。デバイスですでに Quick Fix ビルドが実行され、ポリシーの設定が削除されたか、設定した値が Quick Fix ビルドにマッピングされなくなった場合、別のポリシーで更新がブロックされていない限り、デバイスを通常のビルドに更新します。</translation> <translation id="9051019223077908578">ログイン画面でインストールするアプリと拡張機能のリストを設定する</translation> +<translation id="9053841574218808519">期限切れでないプラグインを常に実行する</translation> <translation id="9055866143096316150">画面の wake lock のリクエストをシステムの wake lock のリクエストに引き下げる</translation> <translation id="9057444687284972605">SAML フローをホストするログイン画面のフレームで、サイトから証明書をリクエストされた場合に、どのサイトであればクライアント証明書を自動的に選択するかを URL パターンのリストで指定できます。使用例としては、SAML IdP に提示するデバイス全体の証明書を設定するケースが挙げられます。
diff --git a/components/policy/resources/policy_templates_ko.xtb b/components/policy/resources/policy_templates_ko.xtb index e59849e..17b217b 100644 --- a/components/policy/resources/policy_templates_ko.xtb +++ b/components/policy/resources/policy_templates_ko.xtb
@@ -1108,6 +1108,7 @@ 정책을 사용 설정하거나 설정하지 않으면 빠른 답변 정의가 사용 설정됩니다. 정책을 사용 중지하면 빠른 답변 정의가 사용 중지됩니다.</translation> <translation id="209586405398070749">정식 채널</translation> +<translation id="2096932573113293941">사용자에게 승인이 필요한 플러그인의 실행 허가 요청</translation> <translation id="2098658257603918882">사용 및 비정상 종료 관련 데이터 보고 사용</translation> <translation id="2104418465060359056">확장 프로그램 및 플러그인 정보 보고</translation> <translation id="2106627642643925514">기본 PIN 인쇄 모드를 재정의합니다. 이 모드를 사용할 수 없는 경우 이 정책은 무시됩니다.</translation> @@ -1237,6 +1238,7 @@ <translation id="2223393221350938149">모든 사이트에서 자바스크립트 JIT를 실행하도록 허용 안함</translation> <translation id="2223582957891074498">정책을 True로 설정하면 단축키나 확장 프로그램 API를 통해 스크린샷을 캡처할 수 없습니다. 정책을 False로 설정하면 스크린샷을 캡처할 수 있습니다.</translation> <translation id="2223598546285729819">기본 알림 설정</translation> +<translation id="222673035924187991">TLS Encrypted ClientHello 사용</translation> <translation id="2231726854197443389">이 정책은 사용자가 설정에서 HTTPS 전용 모드를 사용 설정할 수 있는지 결정합니다. HTTPS 전용 모드는 모든 탐색을 HTTPS로 업그레이드합니다. 이 설정을 설정하지 않거나 허용됨으로 설정할 경우 사용자는 HTTPS 전용 모드를 사용 설정할 수 있습니다. 이 설정을 허용되지 않음으로 설정할 경우 사용자는 HTTPS 전용 모드를 사용 설정할 수 없습니다. @@ -1357,6 +1359,7 @@ <translation id="2349117476121456297">이 정책을 True로 설정하면 맨 윗줄에 있는 키의 동작을 기능 키 명령어로 변경합니다 검색 키를 누르면 다시 미디어 키 동작으로 돌아옵니다. 정책을 False로 설정하거나 설정하지 않으면 키보드는 기본적으로 미디어 키 명령어를 만듭니다. 검색 키를 누르면 기능 키로 변경됩니다.</translation> +<translation id="2354439478396602136"><ph name="PRODUCT_OS_NAME" /> 런처에 추천 앱 표시</translation> <translation id="2355876547176311490">원격 액세스 호스트의 릴레이 서버 사용 중지</translation> <translation id="2358176879566587521">이 정책은 삭제되었습니다. 이 <ph name="PRODUCT_NAME" /> 버전과 호환되지 않습니다 . 자세한 내용은 https://support.google.com/chrome/a/answer/7643500을 참조하세요.</translation> <translation id="2362469626417133796">다시 실행 기간</translation> @@ -1583,6 +1586,7 @@ 사용자는 북마크가 있는 폴더를 변경할 수 없습니다(단, 북마크바에서 숨길 수는 있음). 관리 북마크의 기본 폴더 이름은 '관리 북마크'이지만 '<ph name="TOPLEVEL_NAME" />'이라는 단일 키와 원하는 폴더 이름으로 값을 설정하여 정책에 새 하위 사전을 추가하면 변경할 수 있습니다. 관리 북마크는 사용자 계정과 동기화되지 않으며 확장 프로그램으로 수정할 수 없습니다.</translation> <translation id="2552966063069741410">시간대</translation> <translation id="2555244983262829274">툴바에서 홈 버튼 숨기기</translation> +<translation id="2562213287271514629">오래된 <ph name="FLASH_PLUGIN_NAME" />을(를) 일반 <ph name="FLASH_PLUGIN_NAME" />(으)로 사용하도록 허용</translation> <translation id="2562339630163277285">순간 검색결과를 제공하는 데 사용되는 검색엔진의 URL을 지정합니다. URL에는 <ph name="SEARCH_TERM_MARKER" /> 문자열이 포함되어야 하며 이 문자열은 검색 시 사용자가 지금까지 입력한 내용으로 대체됩니다. 이 정책은 선택사항입니다. 설정하지 않으면 순간 검색결과가 제공되지 않습니다. @@ -1627,6 +1631,7 @@ <translation id="2593762551209145088">세이프 브라우징이 활성화되지 않습니다.</translation> <translation id="26023406105317310">Kerberos 계정 구성</translation> <translation id="2604182581880595781">네트워크 파일 공유 관련 정책을 구성합니다.</translation> +<translation id="2608039968712973520">사용자에게 오래된 <ph name="FLASH_PLUGIN_NAME" />의 실행 허가 요청</translation> <translation id="2608535066974278204">다시 실행 창의 길이를 지정하는 기간(분)입니다.</translation> <translation id="2608887839902987727">종속 포털 인증에서 프록시 설정을 무시하지 못하도록 차단</translation> <translation id="2608985885792348429">기본 클립보드 설정</translation> @@ -1678,6 +1683,7 @@ 이 정책은 M77에서 삭제되었습니다. 로그인 화면에 적용되는 정책입니다. 사용자 세션에 적용되는 <ph name="SITE_PER_PROCESS_POLICY_NAME" /> 정책도 확인하세요. 두 정책을 같은 값으로 설정하는 것이 좋습니다. 값이 일치하지 않을 경우 사용자 세션을 입력할 때 지연이 발생할 수 있으며 사용자 정책에서 지정된 값이 적용됩니다. </translation> +<translation id="2697717608663878828">TLS Encrypted ClientHello 실험 사용</translation> <translation id="2702023190395322609">미디어 추천 사용 설정</translation> <translation id="270582584528242502">사용자가 종료하려고 할 때 경고 대화상자 표시 안함</translation> <translation id="2706708761587205154">PIN이 있을 때만 인쇄 허용</translation> @@ -2274,6 +2280,7 @@ <translation id="3255762580838224124">이 정책을 설정하면 정책 값을 변경한 후 처음 연결할 때와 재부팅할 때마다 지정된 방향으로 각 화면이 회전합니다. 사용자는 로그인한 후 설정 페이지를 통해 화면 회전을 변경할 수 있으나, 다음 재부팅 시 원래 설정으로 다시 변경됩니다. 이 정책은 기본 및 보조 화면에 적용됩니다. 설정하지 않으면 기본값은 0도이며 사용자가 자유롭게 변경할 수 있습니다. 이 경우 다시 시작할 때 기본값이 재적용되지 않습니다.</translation> +<translation id="3258380413685430793">모든 <ph name="FLASH_PLUGIN_NAME" /> 콘텐츠 실행</translation> <translation id="325883417142483505">정책을 설정하면 엔터프라이즈 로그인 URL(HTTP 및 HTTPS 프로토콜만 해당) 목록이 설정됩니다. 비밀번호 보호 서비스는 이러한 URL에서 비밀번호의 솔트 처리된 해시를 캡처하여 비밀번호 재사용 감지에 사용합니다. <ph name="PRODUCT_NAME" />이 비밀번호의 솔트 처리된 해시를 제대로 캡처하려면 로그인 페이지가 https://www.chromium.org/developers/design-documents/create-amazing-password-forms에 설명된 가이드라인을 준수해야 합니다. 설정을 사용 중지하거나 설정하지 않으면 비밀번호 보호 서비스가 https://accounts.google.com에서만 비밀번호의 솔트 처리된 해시를 캡처합니다. @@ -2338,6 +2345,7 @@ 참고: 프로세스 완화 정책(https://chromium.googlesource.com/chromium/src/+/HEAD/docs/design/sandbox.md#Process-mitigation-policies)에 관해 자세히 알아보세요.</translation> <translation id="3339271789059866414">시스템 프록시 서비스 이용 가능 여부 및 시스템 서비스에 대한 프록시 사용자 인증 정보를 구성합니다. 정책이 설정되지 않은 경우 시스템 프록시 서비스를 사용할 수 없습니다.</translation> +<translation id="334231891933432876">계정이 미승인 상태가 되는 즉시 사용자 로그아웃</translation> <translation id="3348799281602260763">사용 설정하면 WebRTC 동종 연결이 지원 중단된 버전의 TLS/DTLS (DTLS 1.0, TLS 1.0, TLS 1.1) 프로토콜로 다운그레이드될 수 있습니다. 이 정책이 사용 중지되거나 설정되지 않으면 이러한 TLS/DTLS 버전은 @@ -2380,6 +2388,7 @@ 정책을 설정하지 않으면 0밀리초가 제한 시간으로 사용됩니다. <ph name="DEVICE_LOCAL_ACCOUNT_AUTO_LOGIN_ID_POLICY_NAME" /> 정책이 설정되어 있지 않으면 이 정책이 적용되지 않습니다.</translation> +<translation id="3397883909301547525"><ph name="PRODUCT_OS_NAME" /> 런처에 추천 앱 표시 안함</translation> <translation id="3399859571630358395">빠른 페어링(빠른 블루투스 페어링)이 사용 중지되도록 강제 적용</translation> <translation id="341285788698114069">이 정책은 Windows에서 오디오 프로세서의 우선순위를 제어합니다. 정책을 사용하면 오디오 프로세스가 일반적인 우선순위 이상으로 실행됩니다. @@ -2459,6 +2468,7 @@ 기능의 사용 가능 여부는 관련된 사용자 정책에 따라 추가로 달라집니다.</translation> <translation id="3495602011142234826">True로 설정된 경우 이 확장 프로그램에서 기업용으로 지정된 모든 키를 임의의 데이터에 서명하는 데 사용할 수 있습니다. False로 설정된 경우 확장 프로그램이 이러한 키에 액세스할 수 없으며, 사용자가 권한을 부여하지도 못합니다. 예외적으로 동일한 확장 프로그램에서 해당 키를 생성한 경우 1회에 한해 확장 프로그램에서 이러한 키에 액세스할 수 있습니다.</translation> <translation id="3496296378755072552">비밀번호 관리자</translation> +<translation id="3496761649331792755">북마크바 사용</translation> <translation id="3498109920669229084">정책을 설정하면 차단 목록의 대상이 아닌 확장 프로그램이 지정됩니다. 차단 목록의 <ph name="ALL_EXTENSIONS" /> 값은 모든 확장 프로그램이 차단되며 사용자는 허용 목록에 있는 확장 프로그램만 설치할 수 있다는 의미입니다. @@ -3298,6 +3308,7 @@ <translation id="449423975179525290"><ph name="PLUGIN_VM_NAME" /> 관련 정책을 설정합니다.</translation> <translation id="449784980858429908">사이트에 모든 직렬 포트에 연결할 권한을 자동으로 부여합니다.</translation> <translation id="450080746522343150">모든 다운로드를 차단합니다.</translation> +<translation id="45036050223225148">TLS Encrypted ClientHello 실험 사용 중지</translation> <translation id="4508728400492074981">First-Party Sets 기능 정책을 제어합니다.</translation> <translation id="4510923771103268849">사용자는 Crostini 컨테이너에 대한 루트 액세스 권한을 가질 수 있음</translation> <translation id="4512407512989846472">지정된 URL의 클립보드 복사 차단 허용</translation> @@ -3334,6 +3345,7 @@ 이 정책을 설정하지 않으면 사용자가 시스템에 설치된 모든 플러그인을 사용 중지할 수 있습니다.</translation> <translation id="4549405078915181477">웹사이트에 대한 Screen Time(기기 사용 시간) 사용 설정</translation> <translation id="4554651132977135445">사용자 정책 루프백 처리 모드</translation> +<translation id="4554991346503872538">번역 안 함</translation> <translation id="4555850956567117258">사용자에 대한 원격 인증을 사용합니다.</translation> <translation id="4557134566541205630">기본 검색 공급자 새 탭 페이지 URL</translation> <translation id="4558166110367609724">서비스 약관을 자동으로 건너뛰고 브라우저 로드</translation> @@ -3780,6 +3792,7 @@ <translation id="5109383437323376357">변형 사용 가능 여부 결정</translation> <translation id="5124368997194894978">AC(교류 전원)로 부팅 사용</translation> <translation id="5130213897914754028">사이트에서 SharedArrayBuffers를 사용하지 못하도록 차단</translation> +<translation id="5130935469849337738">항상 번역</translation> <translation id="5141670636904227950">로그인 화면에서 기본 화면 돋보기 유형을 사용하도록 설정</translation> <translation id="5142301680741828703"><ph name="PRODUCT_FRAME_NAME" />에서 다음 URL 패턴을 항상 렌더링</translation> <translation id="5143258831402123447">chrome://history/journeys에서 탐색 여정이 표시되지 않습니다.</translation> @@ -3912,6 +3925,7 @@ 계정을 대상으로 정책을 <ph name="POLICY_VALUE_PRIMARY_ACCOUNT_SIGNIN" />으로 설정하면 관리 계정이 기본 계정으로 로그인하는 데만 사용될 수 있습니다. 보조 계정으로 로그인하는 데 사용될 수 없습니다.</translation> <translation id="523505283826916779">접근성 설정</translation> +<translation id="5238275681097851753">특정 <ph name="FLASH_PLUGIN_NAME" /> 콘텐츠 차단 허용</translation> <translation id="5238976843489093540">빠른 페어링(빠른 블루투스 페어링)이 사용 설정되도록 강제 적용</translation> <translation id="52393120393725840">정책을 사용 설정하면 사용자가 다음에 사이트에 로그인할 때 비밀번호를 제공하도록 <ph name="PRODUCT_NAME" />에서 비밀번호를 기억합니다. @@ -3978,6 +3992,7 @@ 정책을 설정하지 않으면 사용자가 등록한 <ph name="PRODUCT_OS_NAME" />에서 게임을 플레이할 수 없지만 다른 상황에서는 플레이할 수 있습니다.</translation> <translation id="529457411593078576">첫 실행 중 CCT에 서비스 약관 사용 설정</translation> +<translation id="5297948043665200363">계정이 미승인 상태가 된 후에도 사용자가 로그인 상태를 유지하도록 허용</translation> <translation id="5298949392804966105">관리 계정에 제한사항이 없습니다.</translation> <translation id="530134925949808452">사용 할당량이 갱신되는 현지 시간입니다.</translation> <translation id="5303080953475303561">정책을 설정하면 빠른 잠금 해제를 위해 잠금 화면에서 비밀번호를 요청하는 빈도를 제어할 수 있습니다. 선택한 값을 통해 지정된 기간 이전에 마지막 비밀번호 입력이 이루어진 경우 잠금 화면이 표시되었을 때 빠른 잠금 해제를 사용할 수 없습니다. 사용자가 이 시간이 지날 때까지 잠금 화면에 머무르면 다음번에 잘못된 코드를 입력하거나 잠금 화면으로 다시 이동했을 때(둘 중 먼저 발생한 상황에 적용됨) 비밀번호를 입력해야 합니다. @@ -4587,6 +4602,13 @@ <ph name="MS_WIN_NAME" /> 또는 <ph name="MAC_OS_NAME" />에서는 <ph name="PRINT_PDF_AS_IMAGE_AVAILABILITY_POLICY_NAME" />도 사용 설정되어 있을 경우에만 이 정책이 효과가 있습니다.</translation> <translation id="5932767795525445337">이 정책은 Android 앱을 고정하는 데에도 사용할 수 있습니다.</translation> +<translation id="5936193585187054065">Encrypted ClientHello(ECH)는 ClientHello의 민감한 필드를 암호화하고 개인 정보 보호를 개선하기 위한 TLS의 확장 프로그램입니다. + + 정책을 구성하지 않거나 사용으로 설정하면 <ph name="PRODUCT_NAME" />에서 ECH의 기본 출시 프로세스를 따릅니다. 사용 중지하면 <ph name="PRODUCT_NAME" />에서 ECH를 사용하지 않습니다. + + 사용 설정된 경우 서버 지원, HTTPS DNS 레코드 사용 가능 여부 또는 출시 상태에 따라 <ph name="PRODUCT_NAME" />에서 ECH를 사용하거나 사용하지 않을 수 있습니다. + + ECH는 발전 중인 프로토콜이므로 <ph name="PRODUCT_NAME" /> 구현은 변경될 수 있습니다. 따라서 이 정책은 초기 실험 구현을 제어하기 위한 임시 조치입니다. 프로토콜이 확정되면 최종적인 제어 기능으로 대체됩니다.</translation> <translation id="5939656968921014919">분리된 앱 개발자 모드를 사용 중지합니다.</translation> <translation id="5945312246863177268">사용자가 휴대전화 허브 알림을 클릭하여 Eche 애플리케이션을 실행하도록 허용하지 않습니다.</translation> <translation id="5946082169633555022">베타 채널</translation> @@ -5191,6 +5213,7 @@ 이 정책은 기업 관리자가 관리 <ph name="PRODUCT_OS_NAME" /> 기기에 연결하지 못하도록 차단하지 않습니다. 정책이 사용 설정되거나, 비어 있거나, 설정되지 않은 경우 아무런 영향을 미치지 않습니다.</translation> +<translation id="6583249367505445969">북마크바 사용 중지</translation> <translation id="6584541828182430328">전체 화면 알림 표시 사용 중지</translation> <translation id="6593350713192882944">빠른 답변 사용 설정</translation> <translation id="6594372503585248865">연결이 활성화된 경우 원격 호스트 데스크톱에서 연결 관련 UI를 사용 설정</translation> @@ -5668,6 +5691,7 @@ <translation id="7040229947030068419">예시:</translation> <translation id="7044883996351280650">Android 백업 및 복원 서비스 제어</translation> <translation id="7047495632846973438">디스플레이 캡처 권한 정책을 확인할지 아니면 건너뛸지 결정합니다.</translation> +<translation id="7055022222176591388">오래된 <ph name="FLASH_PLUGIN_NAME" /> 차단</translation> <translation id="7066292150801784098">원격 지원 세션에서 원격 사용자가 관리자 창과 상호작용하지 못하도록 차단</translation> <translation id="706669471845501145">사이트에서 데스크톱 알림을 표시하도록 허용</translation> <translation id="70681795425744184">CRD가 원격 호스트에서 프록시된 WebAuthn API 요청을 실행하도록 허용하지 않습니다.</translation> @@ -6803,9 +6827,6 @@ <translation id="8295496526151576383">이 정책을 사용하면 허용된 확장 프로그램이 인쇄 작업 전송에 <ph name="PRINTING_API" /> 함수 <ph name="SUBMIT_JOB_FUNCTION" />을(를) 사용할 경우 인쇄 작업 확인 대화상자를 건너뛰게 할 수 있습니다. 확장 프로그램이 목록에 없거나 목록이 설정되지 않은 경우 <ph name="SUBMIT_JOB_FUNCTION" /> 함수가 호출될 때마다 인쇄 작업 확인 대화상자가 사용자에게 표시됩니다.</translation> -<translation id="829641334878002866">대기 중인 업데이트를 적용하기 위해 <ph name="PRODUCT_OS_NAME" /> 기기가 다시 시작되어야 한다는 첫 번째 알림과 <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" /> 정책에서 지정된 기간 종료 시점 사이의 기간을 밀리초 단위로 설정할 수 있습니다. - - 설정되지 않으면 <ph name="PRODUCT_OS_NAME" /> 기기에 기본 기간인 259,200,000밀리초(3일)가 사용됩니다.</translation> <translation id="829703642501504476">정책을 True로 설정하면 <ph name="PRODUCT_NAME" />에서 브라우저에 내장된 대체 오류 페이지(예: '페이지를 찾을 수 없습니다')를 사용합니다. 정책을 False로 설정하면 <ph name="PRODUCT_NAME" />에서 대체 오류 페이지를 사용하지 않습니다. 정책을 설정하면 사용자가 변경할 수 없습니다. 설정하지 않으면 정책이 사용 설정되지만 사용자가 이 설정을 변경할 수 있습니다.</translation> @@ -7496,6 +7517,7 @@ 이 정책이 설정되지 않았거나 값이 빠른 픽스 빌드로 매핑되지 않는 경우 기기가 빠른 픽스 빌드로 업데이트되지 않습니다. 기기에서 이미 빠른 픽스 빌드가 실행되고 있고 정책이 더 이상 설정되지 않거나 정책 값이 더 이상 빠른 픽스 빌드로 매핑되지 않는 경우 업데이트가 다른 정책에 의해 차단되지 않으면 기기가 일반 빌드로 업데이트됩니다.</translation> <translation id="9051019223077908578">로그인 화면에서 설치된 앱 및 확장 프로그램 목록 구성</translation> +<translation id="9053841574218808519">항상 최신 플러그인 실행</translation> <translation id="9055866143096316150">화면 wake lock 요청을 시스템 wake lock 요청으로 강등</translation> <translation id="9057444687284972605">사이트에서 인증서를 요청하는 경우 SAML 절차를 호스팅하는 프레임의 로그인 화면에서 클라이언트 인증서가 자동으로 선택되는 사이트를 지정하는 URL 패턴 목록을 지정하도록 합니다. 예를 들어 SAML IdP에 제시될 기기 수준 인증서를 구성하는 데 사용할 수 있습니다.
diff --git a/components/policy/resources/policy_templates_nl.xtb b/components/policy/resources/policy_templates_nl.xtb index fb3bf37..422f2ce 100644 --- a/components/policy/resources/policy_templates_nl.xtb +++ b/components/policy/resources/policy_templates_nl.xtb
@@ -13,6 +13,7 @@ Als de waarde van het beleid geen geldig domein is, wordt het beleid niet toegepast.</translation> <translation id="1004590217607585595">Instellingen voor beheer van web-apps</translation> <translation id="1006218396155867129">Gebruikers met externe toegang niet toestaan om bestanden over te dragen naar en vanaf de externe host</translation> +<translation id="1007149936182752368">Bewerken van bookmarks uitzetten</translation> <translation id="1010151305531217567">De rechtermuisknop instellen als de primaire muisknop</translation> <translation id="1011266755572744012">Hiermee specificeer je het maximum aantal vellen dat de gebruiker mag afdrukken voor één afdruktaak. @@ -75,6 +76,7 @@ Ga naar https://support.google.com/chrome/a?p=Supported_directory_variables voor een lijst met variabelen die je kunt gebruiken. Als je deze instelling niet instelt, wordt de standaard profieldirectory gebruikt.</translation> +<translation id="1059069692400941670">Import van standaardzoekmachine bij eerste uitvoering uitzetten</translation> <translation id="1062011392452772310">Externe bevestiging van apparaat aanzetten</translation> <translation id="1062407476771304334">Vervangen</translation> <translation id="1069489575852947981">Als je het beleid toepast of niet instelt, wordt een lokaal account op het apparaat ingesteld voor automatisch inloggen zonder vertraging. <ph name="PRODUCT_OS_NAME" /> behoudt de sneltoets Ctrl+Alt+S waarmee automatisch inloggen wordt omzeild en het inlogscherm wordt getoond. @@ -93,6 +95,7 @@ <translation id="1082802595100075771">Gebruikers laten kiezen of ze een anonieme Google-service willen gebruiken voor automatische beschrijvingen van niet-gelabelde afbeeldingen</translation> <translation id="1087437665304381368">Met dit beleid wordt alleen de ontwikkelaarsmodus van <ph name="PRODUCT_OS_NAME" /> bepaald. Als je de toegang tot de ontwikkelaarsopties van Android wilt blokkeren, moet je het beleid <ph name="DEVELOPER_TOOLS_DISABLED_POLICY_NAME" /> instellen.</translation> <translation id="1087707496788636333">De Chrome Enterprise-beleidslijst wordt verplaatst. Update je bookmarks naar <ph name="POLICY_DOCUMENTATION_URL" />.</translation> +<translation id="1089150222292592899">Gebruikersnaam automatisch invullen op SAML IdP-pagina</translation> <translation id="1091765729282771296">Sites toestaan om gebruikers toegang te vragen tot een HID-apparaat</translation> <translation id="1095209545735032039">De Serial API op deze sites blokkeren</translation> <translation id="1096105751829466145">Standaardzoekprovider</translation> @@ -1860,6 +1863,7 @@ Als je het beleid niet toepast, staan updates voor componenten uit. Bepaalde componenten zijn wel uitgesloten van dit beleid. Updates voor componenten worden niet uitgezet als deze geen uitvoerbare code bevatten en essentieel zijn voor de beveiliging van de browser. Voorbeelden van dergelijke componenten zijn Certificate Revocation Lists en subresource-filters.</translation> +<translation id="2939335382784544151">Import van browsegeschiedenis bij eerste uitvoering aanzetten</translation> <translation id="2940127076681735544">Als je dit beleid instelt op een geldige URL, downloadt <ph name="PRODUCT_NAME" /> de lijst met sites van die URL en worden de regels toegepast alsof ze zijn ingesteld met het <ph name="SITELIST_POLICY_NAME" />-beleid. Als je dit beleid niet instelt (of instelt op een ongeldige URL), gebruikt <ph name="PRODUCT_NAME" /> dit beleid niet als een bron van regels die overschakeling naar een andere browser regelen. @@ -2292,6 +2296,7 @@ Als je het beleid niet instelt, kiezen gebruikers de afbeelding voor de achtergrond van het bureaublad en het inlogscherm.</translation> <translation id="3315324240256767419">De functie voor ghostvenster aanzetten.</translation> +<translation id="3323819750604111729">Import van bookmarks bij eerste uitvoering aanzetten</translation> <translation id="332771718998993005">De naam bepalen die wordt geadverteerd als een bestemming van <ph name="PRODUCT_NAME" />. Als dit beleid is ingesteld op een niet-lege tekenreeks, wordt die tekenreeks gebruikt als de naam van de <ph name="PRODUCT_NAME" />-bestemming. Anders wordt de apparaatnaam gebruikt voor de bestemmingsnaam. Als dit beleid niet is ingesteld, is de naam van de bestemming de apparaatnaam en kan de eigenaar van het apparaat (of een gebruiker in het domein dat het apparaat beheert) deze naam wijzigen. De naam mag maximaal 24 tekens lang zijn.</translation> @@ -2767,6 +2772,7 @@ Als je het beleid instelt op 2, worden advertenties geblokkeerd op alle sites met opdringerige advertenties.</translation> <translation id="3877517141460819966">Geïntegreerde modus voor authenticatie met twee factoren</translation> <translation id="3879208481373875102">Lijst met afgedwongen geïnstalleerde web-apps instellen</translation> +<translation id="3879700444818346084">Import van opgeslagen wachtwoorden bij eerste uitvoering uitzetten</translation> <translation id="388237772682176890">Dit beleid is beëindigd in M53 en is verwijderd in M54, omdat de ondersteuning voor SPDY/3.1 is verwijderd. Hiermee wordt het gebruik van het SPDY-protocol in <ph name="PRODUCT_NAME" /> uitgezet. @@ -3034,6 +3040,7 @@ In kiosksessies is er geen respijtperiode en zijn er geen meldingen over opnieuw opstarten. </translation> <translation id="4187576366596772431">De WebHID API op deze sites blokkeren</translation> +<translation id="4190316993598857632">Bewerken van bookmarks aanzetten</translation> <translation id="4192388905594723944">URL voor het valideren van verificatietoken voor client voor externe toegang</translation> <translation id="4203055629055264833">Als je dit beleid toepast of niet instelt, kunnen gebruikers de meest recente resultatenpagina van de standaard zoekmachine in een zijvenster tonen door een icoon in de werkbalk aan/uit te zetten. @@ -3726,6 +3733,7 @@ <translation id="5105313908130842249">Vertraging van schermvergrendeling wanneer op de batterij wordt gewerkt</translation> <translation id="5108031557082757679">Zakelijke apparaatprinters staan uit</translation> <translation id="5109383437323376357">De beschikbaarheid van varianten bepalen</translation> +<translation id="5120168808610189805">Import van homepage bij eerste uitvoering aanzetten</translation> <translation id="5124368997194894978">Opstarten bij netstroom (wisselstroom) aanzetten</translation> <translation id="5130213897914754028">Voorkomen dat sites SharedArrayBuffers gebruiken</translation> <translation id="5130935469849337738">Altijd een vertaling aanbieden</translation> @@ -4398,6 +4406,7 @@ Dit gedrag wordt niet geactiveerd als Safe Browsing is uitgezet (door het beleid of door de gebruiker). Gebruik het beleid <ph name="SAFE_BROWSING_ENABLED_POLICY_NAME" /> of <ph name="SAFE_BROWSING_PROTETION_LEVEL_POLICY_NAME" /> om Safe Browsing verplicht aan te zetten.</translation> <translation id="5835312413892670446">Instellingen voor Screenshot</translation> <translation id="5836064773277134605">Het UDP-poortbereik beperken dat voor de host voor externe toegang wordt gebruikt</translation> +<translation id="583627479140113555">Import van opgeslagen wachtwoorden bij eerste uitvoering aanzetten</translation> <translation id="5837898601525273156">Als <ph name="DEVICE_ADVANCED_BATTERY_CHARGE_MODE_DAY_CONFIG_POLICY_NAME" /> is ingesteld en je <ph name="DEVICE_ADVANCED_BATTERY_CHARGE_MODE_ENABLED_POLICY_NAME" /> aanzet, blijft het stroombeheerbeleid voor de geavanceerde batterijoplaadmodus aan (als het apparaat dit ondersteunt). Deze modus gebruikt buiten werktijden een standaard oplaadalgoritme en andere technieken waarmee gebruikers de batterijprestaties kunnen maximaliseren. Tijdens werktijden wordt snelladen gebruikt. Hiermee wordt de batterij sneller opgeladen. Geef de tijd op wanneer het systeem elke dag het meest wordt gebruikt met een begintijd en de duur. Als je het beleid niet toepast of niet instelt, blijft de geavanceerde batterijoplaadmodus uit. @@ -4711,6 +4720,13 @@ Voer Chrome-apps in op basis van ID, zoals pjkljhegncpnkpknbcohdijeoejaedia; Android-apps op basis van pakketnaam, zoals com.google.android.gm; en web-apps op basis van de URL die wordt gebruikt in <ph name="WEB_APP_INSTALL_FORCE_LIST_POLICY_NAME" />, zoals https://google.com/maps. Als je het beleid niet instelt, kunnen gebruikers de lijst met vastgezette apps in de Launcher wijzigen.</translation> +<translation id="6183409603139321084"><ph name="PRODUCT_OS_NAME" /> kan proberen het gebruikersnaamveld op een SAML IdP-pagina automatisch in te vullen tijdens online verificatie op het inlogscherm en het vergrendelscherm. + + Het gebruikt het e-mailadres van de gebruiker dat is gekoppeld aan het <ph name="PRODUCT_OS_NAME" />-profiel. Zet deze instelling dus uit als gebruikers waarschijnlijk verschillende e-mailadressen gebruiken op een SAML IdP-pagina. + + De tekenreeks die via dit beleid wordt ontvangen, wordt gebruikt als URL-parameternaam op een IdP-pagina met het e-mailadres van de gebruiker als waarde. + + De serverzijde wordt verwacht verantwoordelijk te zijn voor de toewijzing tussen identiteitsproviders en de URL-parameters die ze ondersteunen.</translation> <translation id="6190367314942602985">Gegevens over de identiteit van gebruikers rapporteren</translation> <translation id="6191963383731098056">Met dit beleid kunnen beheerders de kleur voor het thema van <ph name="PRODUCT_NAME" /> instellen. Je moet een geldige hexadecimale kleur opgeven in de vorm van een tekenreeks met de indeling #RRGGBB. @@ -5235,6 +5251,7 @@ Geef een <ph name="SUBJECT_PUBLIC_KEY_INFO" />-hash op door de naam van het hash-algoritme, een slash en de Base64-codering van het betreffende toegepaste hash-algoritme te koppelen aan de <ph name="SUBJECT_PUBLIC_KEY_INFO" /> met DER-codering van het opgegeven certificaat. Een indeling met Base64-codering komt overeen met die van een SPKI-vingerafdruk. Het enige herkende hash-algoritme is sha256. Andere algoritmen worden genegeerd. Als je het beleid niet instelt, betekent dit dat als certificaten die openbaar moeten worden gemaakt via Certificaattransparantie niet openbaar worden gemaakt, de betreffende certificaten niet door <ph name="PRODUCT_NAME" /> worden vertrouwd.</translation> +<translation id="6703381779632216549">Import van standaardzoekmachine bij eerste uitvoering aanzetten</translation> <translation id="6704445641918520643">Lazy loading van WebUI voor inloggen aanzetten.</translation> <translation id="6704515759227307131">Dit beleid is beëindigd en is vervangen door AdvancedProtectionAllowed. @@ -6228,6 +6245,7 @@ <translation id="77379430721695807">Als je het beleid instelt, specificeer je de lijst met URL's waarvan de patronen worden vergeleken met de beveiligingsoorsprong van de aanvragende URL. Bij een overeenkomst wordt zonder prompt toegang verleend tot apparaten voor video-opnamen. Ga naar https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns voor gedetailleerde informatie over geldige <ph name="URL_LABEL" />-patronen.</translation> +<translation id="7740644123648617252">Import van formuliergegevens voor automatisch invullen bij eerste uitvoering aanzetten</translation> <translation id="7744253761377202223">Percentage voor schermhelderheid als er op netvoeding wordt gewerkt</translation> <translation id="7747447585227954402">Toestaan dat apparaten een <ph name="PLUGIN_VM_NAME" /> gebruiken op <ph name="PRODUCT_OS_NAME" /></translation> <translation id="7749024457938190837">Extensies die het bevestigingsdialoogvenster mogen overslaan als ze afdruktaken sturen via chrome.printing API</translation> @@ -6385,6 +6403,7 @@ <translation id="7925224837072026018">Als je het beleid instelt, geef je toegang tot zakelijke sleutels tot extensies of Android-apps. Sleutels zijn alleen voor zakelijk gebruik bedoeld als ze via een beheerd account worden aangemaakt met de chrome.enterprise.platformKeys API. Gebruikers kunnen geen toegang toestaan of intrekken tot zakelijke sleutels naar of van extensies of Android-apps. Een extensie of Android-app kan standaard geen sleutel gebruiken die is bedoeld voor zakelijk gebruik. Dit staat gelijk aan het instellen van allowCorporateKeyUsage op False voor die extensie of Android-app. Alleen als allowCorporateKeyUsage voor een extensie of Android-app is ingesteld op True kan deze elke platformsleutel gebruiken die is gemarkeerd voor zakelijk gebruik om willekeurige gegevens te ondertekenen. Geef deze toestemming alleen als je er zeker van bent dat de extensie of de Android-app de toegang tot de sleutel voldoende beveiligt tegen aanvallers.</translation> +<translation id="793188693675675950">Import van homepage bij eerste uitvoering uitzetten</translation> <translation id="7933141401888114454">Aanmaak van bewaakte gebruikers aanzetten</translation> <translation id="793473937901685727">Certificaatbeschikbaarheid instellen voor ARC-apps</translation> <translation id="7936302526928951356">De tekenreeks voor User-agent zet de hoofdversie niet vast.</translation> @@ -6731,9 +6750,6 @@ <translation id="8295496526151576383">Dit beleid specificeert de extensies die het bevestigingsdialoogvenster voor afdruktaken mogen overslaan als ze de <ph name="PRINTING_API" />-functie <ph name="SUBMIT_JOB_FUNCTION" /> gebruiken om een afdruktaak te sturen. Als een extensie niet in de lijst staat of de lijst niet is ingesteld, krijgt de gebruiker het bevestigingsdialoogvenster voor afdruktaken te zien voor elke <ph name="SUBMIT_JOB_FUNCTION" />-functieaanroep.</translation> -<translation id="829641334878002866">Hiermee kun je de periode in milliseconden instellen tussen de eerste melding dat een <ph name="PRODUCT_OS_NAME" />-apparaat opnieuw moet worden opgestart om een update in behandeling uit te voeren en het einde van de periode zoals vermeld in het <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />-beleid. - - Als dit beleid niet is ingesteld, wordt de standaardperiode van 259.200.000 milliseconden (drie dagen) gebruikt voor <ph name="PRODUCT_OS_NAME" />-apparaten.</translation> <translation id="829703642501504476">Als je het beleid instelt op True, gebruikt <ph name="PRODUCT_NAME" /> alternatieve foutpagina's die zijn ingebouwd (zoals 'Pagina niet gevonden'). Als je het beleid instelt op False, gebruikt <ph name="PRODUCT_NAME" /> nooit alternatieve foutpagina's. Als je het beleid instelt, kunnen gebruikers het niet wijzigen. Als je het beleid niet instelt, is het toegepast maar kunnen gebruikers deze instelling wijzigen.</translation> @@ -7039,6 +7055,7 @@ Vanaf <ph name="PRODUCT_NAME" /> versie 92 wordt dit beleid ook ondersteund in de stand zonder interface. Opmerking: Het blokkeren van interne chrome://* URL's kan tot onverwachte fouten leiden.</translation> +<translation id="8619748440665904084">Import van formuliergegevens voor automatisch invullen bij eerste uitvoering uitzetten</translation> <translation id="8623672932476443039">Als je het beleid toepast, hebben gebruikers toegang tot de ontwikkelaarsmodus voor geïsoleerde apps. Als je het beleid niet toepast, hebben gebruikers geen toegang tot deze mogelijkheden. Als je dit beleid niet instelt, geldt de standaardwaarde 'niet toegestaan' voor beheerde zakelijke gebruikers op Chrome OS en 'toegestaan' voor alle andere gebruikers en besturingssystemen.</translation> @@ -7085,6 +7102,7 @@ Als je het beleid niet toepast of niet instelt, kan de host voor externe toegang aan elke lokale gebruiker worden gekoppeld.</translation> <translation id="867708016260789630">Afdwingen dat de beperkte modus van YouTube minimaal is ingesteld op Gematigd</translation> <translation id="8677853537025397834">De WebHID API toestaan op deze sites</translation> +<translation id="8685018726115727387">Import van browsegeschiedenis bij eerste uitvoering uitzetten</translation> <translation id="8685024486845674965">Waarschuwing voor wachtwoordbeveiliging wordt geactiveerd bij hergebruik van een wachtwoord</translation> <translation id="8685680544554917389">Als je het beleid instelt op True, wordt media automatisch afgespeeld door <ph name="PRODUCT_NAME" />. Als je het beleid instelt op False, wordt media niet automatisch afgespeeld door <ph name="PRODUCT_NAME" />. @@ -7453,6 +7471,7 @@ Als je het beleid niet toepast, registreren of rapporteren ingeschreven apparaten geen tijden van activiteit.</translation> <translation id="9077227880520270584">Timer voor automatisch inloggen op lokaal account op apparaat</translation> +<translation id="9079531125758468956">Import van bookmarks bij eerste uitvoering uitzetten</translation> <translation id="9084985621503260744">Specificeer of videoactiviteit invloed heeft op stroombeheer</translation> <translation id="9087434639296483430">Inlog-/uitloggebeurtenissen van gebruikers op ingeschreven apparaten rapporteren, waaronder mislukte logins.
diff --git a/components/policy/resources/policy_templates_pt-BR.xtb b/components/policy/resources/policy_templates_pt-BR.xtb index f9c1261..8837be2d 100644 --- a/components/policy/resources/policy_templates_pt-BR.xtb +++ b/components/policy/resources/policy_templates_pt-BR.xtb
@@ -619,7 +619,7 @@ Se a política não for definida, todos os recursos do <ph name="PRODUCT_OS_NAME" /> ficarão ativados por padrão, e o usuário poderá usar qualquer um deles. - Observação: no momento, o recurso de digitalização está desativado por padrão por uma sinalização de recurso. Se o usuário ativá-lo pela sinalização, o recurso ainda pode estar desativado por esta política.</translation> + Observação: no momento, o recurso de digitalização está desativado por padrão por uma flag de recurso. Se o usuário ativá-lo pela sinalização, o recurso ainda pode estar desativado por esta política.</translation> <translation id="1645793986494086629">Esquema:</translation> <translation id="1647558381546345298">Definir a política configura o tamanho do cache usado pelo <ph name="PRODUCT_NAME" /> para armazenar arquivos de mídia em cache no disco, independentemente de o usuário ter especificado ou não a sinalização "--media-cache-size". O valor especificado na política não é um limite rígido, mas sim uma sugestão para o sistema de armazenamento em cache. Valores abaixo de alguns megabytes serão arredondados para cima. @@ -1396,7 +1396,7 @@ Observe que as origens isoladas por esta política não poderão criar scripts de outras origens no mesmo site, ação que é possível quando dois documentos do mesmo site modificam os valores de document.domain para que sejam correspondentes. Os administradores precisam confirmar se esse comportamento incomum não está sendo usado em uma origem antes de isolá-la. - Se a política for desativada, toda forma de isolamento de sites deixará de funcionar, inclusive em sites confidenciais e nas versões de teste de IsolateOriginsAndroid, SitePerProcessAndroid e outros modos de isolamento. Os usuários ainda poderão ativar IsolateOrigins manualmente com a sinalização de linha de comando. + Se a política for desativada, toda forma de isolamento de sites deixará de funcionar, inclusive em sites confidenciais e nas versões de teste de IsolateOriginsAndroid, SitePerProcessAndroid e outros modos de isolamento. Os usuários ainda poderão ativar IsolateOrigins manualmente com a flag de linha de comando. Se a política não for definida, o usuário poderá mudar essa configuração. @@ -2363,7 +2363,7 @@ Acesse https://support.google.com/chrome/a?p=Supported_directory_variables para ver uma lista das variáveis que podem ser usadas. - Se esta política for deixada sem definição, o caminho padrão do perfil será usado, e o usuário poderá substituí-lo pela sinalização de linha de comando "--user-data-dir".</translation> + Se esta política for deixada sem definição, o caminho padrão do perfil será usado, e o usuário poderá substituí-lo pela flag de linha de comando "--user-data-dir".</translation> <translation id="3381968327636295719">Usar o navegador de host por padrão</translation> <translation id="3387211681524224831">Se a política for definida como "Ativada" o histórico de navegação não será salvo, a sincronização de guias será desativada e os usuários não poderão mudar essa configuração. @@ -2409,7 +2409,7 @@ Esta configuração é útil para clientes corporativos que estão usando soluções de SSO incompatíveis com o novo fluxo de login in-line. Se você ativar esta configuração, o antigo fluxo de login baseado na Web será usado. - Se você desativar ou não definir esta configuração, o novo fluxo de login in-line será usado por padrão. Os usuários podem ativar o antigo fluxo de login baseado na Web com a sinalização de linha de comando --enable-web-based-signin. + Se você desativar ou não definir esta configuração, o novo fluxo de login in-line será usado por padrão. Os usuários podem ativar o antigo fluxo de login baseado na Web com a flag de linha de comando --enable-web-based-signin. A configuração experimental será removida no futuro, quando o login in-line for compatível com todos os fluxos de login SSO.</translation> <translation id="3435796032110614169">Permite a exclusão do histórico de trabalhos de impressão</translation> @@ -5640,7 +5640,7 @@ <translation id="7032813174556919004">Desativar DNS sobre HTTPS</translation> <translation id="7033778618670823541">Se a política for definida, será possível especificar uma lista de origens (URLs) ou padrões de nome de host (como *.example.com) aos quais as restrições de segurança de origens inseguras não serão aplicadas. As organizações podem especificar origens para aplicativos legados que não possam implantar TLS ou configurar um servidor de preparo para desenvolvimento da Web interno. Dessa forma, os desenvolvedores podem testar recursos que necessitam de contextos seguros sem precisar implantar o TLS no servidor de preparo. Essa política também impede que origens sejam marcadas como "Não seguras" na barra de endereço. - A definição de uma lista de URLs nesta política tem o mesmo efeito que configurar a sinalização de linha de comando --unsafely-treat-insecure-origin-as-secure para uma lista dos mesmos URLs separados por vírgulas. A política modificará a sinalização de linha de comando e UnsafelyTreatInsecureOriginAsSecure, se estiver presente. + A definição de uma lista de URLs nesta política tem o mesmo efeito que configurar a flag de linha de comando --unsafely-treat-insecure-origin-as-secure para uma lista dos mesmos URLs separados por vírgulas. A política modificará a flag de linha de comando e UnsafelyTreatInsecureOriginAsSecure, se estiver presente. Para ver mais informações sobre contextos seguros, consulte "Secure Contexts" (https://www.w3.org/TR/secure-contexts) (em inglês).</translation> <translation id="703672323011778742">Esta política foi suspensa na versão M88. O Flash não é mais compatível com o Chrome. Se a política for definida como 1, você poderá definir se todos os sites poderão executar automaticamente o plug-in <ph name="FLASH_PLUGIN_NAME" />. Se ela for definida como 2, esse plug-in será negado em todos os sites. O "Clique para ver" permite que o plug-in <ph name="FLASH_PLUGIN_NAME" /> seja executado, mas os usuários precisam clicar no marcador para iniciar a execução. @@ -6728,7 +6728,7 @@ O objetivo é permitir que as organizações autorizem origens para aplicativos legados que não implantam TLS ou que elas configurem um servidor de preparo para o desenvolvimento da Web interno, de modo que os desenvolvedores possam testar recursos que exigem contextos seguros sem precisar implantar TLS no servidor de preparo. Esta política também vai impedir que a origem seja rotulada como "Não segura" na omnibox. - Definir uma lista de URLs nesta política tem o mesmo efeito que definir a sinalização de linha de comando "--unsafely-treat-insecure-origin-as-secure" para uma lista com os mesmos URLs separados por vírgula. Se a política for definida, ela vai substituir a sinalização de linha de comando. + Definir uma lista de URLs nesta política tem o mesmo efeito que definir a flag de linha de comando "--unsafely-treat-insecure-origin-as-secure" para uma lista com os mesmos URLs separados por vírgula. Se a política for definida, ela vai substituir a flag de linha de comando. Esta política foi descontinuada na versão M69 para implementar a OverrideSecurityRestrictionsOnInsecureOrigin. Se as duas políticas estiverem presentes, a OverrideSecurityRestrictionsOnInsecureOrigin substituirá esta. @@ -6791,9 +6791,6 @@ <translation id="8295496526151576383">Esta política especifica as extensões com permissão para pular a caixa de diálogo de confirmação do trabalho de impressão quando elas usarem a função <ph name="SUBMIT_JOB_FUNCTION" /> da <ph name="PRINTING_API" /> para enviar um trabalho de impressão. Se uma extensão não estiver na lista, ou a lista não estiver definida, a caixa de diálogo de confirmação do trabalho de impressão será mostrada ao usuário para cada chamada de função <ph name="SUBMIT_JOB_FUNCTION" />.</translation> -<translation id="829641334878002866">Permite definir o período, em milissegundos, entre a primeira notificação de que o dispositivo <ph name="PRODUCT_OS_NAME" /> precisa ser reiniciado para aplicar uma atualização pendente e o fim do período especificado pela política <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />. - - Se esta política não for definida, o período padrão de 259.200.000 milissegundos (três dias) será usado para dispositivos <ph name="PRODUCT_OS_NAME" />.</translation> <translation id="829703642501504476">Se a política for definida como verdadeira, o <ph name="PRODUCT_NAME" /> usará páginas de erro alternativas integradas no navegador, como "Página não encontrada". Se a política for definida como falsa, o <ph name="PRODUCT_NAME" /> nunca usará páginas de erro alternativas. Se você definir a política, os usuários não poderão mudá-la. Se ela não for definida, ficará ativa, mas os usuários poderão mudá-la.</translation>
diff --git a/components/policy/resources/policy_templates_ru.xtb b/components/policy/resources/policy_templates_ru.xtb index 509454e..fe039042 100644 --- a/components/policy/resources/policy_templates_ru.xtb +++ b/components/policy/resources/policy_templates_ru.xtb
@@ -13,6 +13,7 @@ Если в правиле указан несуществующий домен, оно не будет применяться.</translation> <translation id="1004590217607585595">Настройки управления веб-приложениями</translation> <translation id="1006218396155867129">Запретить пользователям с удаленным доступом переносить файлы с хоста и обратно</translation> +<translation id="1007149936182752368">Запретить изменение закладок</translation> <translation id="1010151305531217567">Сделать правую кнопку мыши основной</translation> <translation id="1011266755572744012">Позволяет указать максимальное количество листов для одного задания печати. @@ -75,6 +76,7 @@ Список поддерживаемых переменных приведен здесь: https://support.google.com/chrome/a?p=Supported_directory_variables. Если правило не настроено, будет выбран каталог профиля по умолчанию.</translation> +<translation id="1059069692400941670">Запретить импорт поисковой системы по умолчанию при первом запуске</translation> <translation id="1062011392452772310">Включает удаленную проверку устройства</translation> <translation id="1062407476771304334">Заменить</translation> <translation id="1069489575852947981">Если правило включено или не настроено, то вход в локальный аккаунт устройства выполняется автоматически без задержки. Нажав сочетание клавиш Ctrl + Alt + S в <ph name="PRODUCT_OS_NAME" />, пользователь может отменить автоматический вход и открыть экран для входа в аккаунт вручную. @@ -93,6 +95,7 @@ <translation id="1082802595100075771">Разрешить пользователям автоматически получать описания для изображений с помощью сервиса Google</translation> <translation id="1087437665304381368">Определяет, есть ли у пользователей доступ к режиму разработчика в <ph name="PRODUCT_OS_NAME" />. Чтобы запретить доступ к параметрам для разработчиков Android, настройте правило <ph name="DEVELOPER_TOOLS_DISABLED_POLICY_NAME" />.</translation> <translation id="1087707496788636333">Список правил Chrome Enterprise переехал! Теперь он находится здесь: <ph name="POLICY_DOCUMENTATION_URL" />.</translation> +<translation id="1089150222292592899">Автоматически указывать имя пользователя на странице поставщика идентификационной информации SAML</translation> <translation id="1091765729282771296">Разрешить сайтам запрашивать доступ к HID-устройствам</translation> <translation id="1095209545735032039">Блокировка Serial API на указанных сайтах</translation> <translation id="1096105751829466145">Поисковая система по умолчанию</translation> @@ -1883,6 +1886,7 @@ Если правило отключено, компоненты обновляться не будут. Исключение составляют компоненты, которые не содержат исполняемый код и отвечают за безопасность браузера. Примеры таких компонентов: списки отзыва сертификатов и фильтры подресурсов.</translation> +<translation id="2939335382784544151">Разрешить импорт истории браузера при первом запуске</translation> <translation id="2940127076681735544">Если задан действительный URL, <ph name="PRODUCT_NAME" /> скачивает список относящихся к этому URL сайтов и применяет элементы списка так же, как и при использовании правила <ph name="SITELIST_POLICY_NAME" />. Если задан недействительный URL или правило не настроено, <ph name="PRODUCT_NAME" /> не использует его как источник данных о порядке переключения между браузерами. @@ -2316,6 +2320,7 @@ Если правило не настроено, пользователи самостоятельно выбирают обои для рабочего стола и экрана входа.</translation> <translation id="3315324240256767419">Включить окна в режиме конфиденциальности</translation> +<translation id="3323819750604111729">Разрешить импорт закладок при первом запуске</translation> <translation id="332771718998993005">Определяет название ресивера <ph name="PRODUCT_NAME" />. Значение, указанное в правиле, служит названием ресивера <ph name="PRODUCT_NAME" />. Если оно не задано или правило не настроено, название ресивера соответствует названию устройства. Менять его может владелец (или пользователь домена, в котором управляют устройством). Максимальная длина названия – 24 символа.</translation> @@ -2792,6 +2797,7 @@ Если выбрано значение "2", навязчивая реклама на сайтах будет заблокирована.</translation> <translation id="3877517141460819966">Встроенный режим двухэтапной аутентификации</translation> <translation id="3879208481373875102">Настройка списка принудительно устанавливаемых веб-приложений</translation> +<translation id="3879700444818346084">Запретить импорт сохраненных паролей при первом запуске</translation> <translation id="388237772682176890">Это правило перестало поддерживаться в M53 и было удалено в M54 вследствие отключения поддержки SPDY/3.1. Запрещает использование протокола SPDY в <ph name="PRODUCT_NAME" />. @@ -3069,6 +3075,7 @@ Для сеансов в режиме киоска отсрочка и уведомления о перезагрузке не предусмотрены. </translation> <translation id="4187576366596772431">Блокировать WebHID API на этих сайтах</translation> +<translation id="4190316993598857632">Разрешить изменение закладок</translation> <translation id="4192388905594723944">URL проверки токена аутентификации для клиента удаленного доступа</translation> <translation id="4203055629055264833">Если правило включено или не настроено, пользователи могут с помощью переключателя на панели инструментов активировать боковое окно с последними результатами из поисковой системы по умолчанию. @@ -3761,6 +3768,7 @@ <translation id="5105313908130842249">Задержка блокировки экрана при работе от батареи</translation> <translation id="5108031557082757679">Принтеры, недоступные на устройствах компании</translation> <translation id="5109383437323376357">Определение наличия вариантов</translation> +<translation id="5120168808610189805">Разрешить импорт адреса домашней страницы при первом запуске</translation> <translation id="5124368997194894978">Настройка загрузки при подаче переменного тока.</translation> <translation id="5130213897914754028">Запретить сайтам использовать SharedArrayBuffers</translation> <translation id="5141670636904227950">Настройка типа экранной лупы, отображаемой на экране входа по умолчанию</translation> @@ -4439,6 +4447,7 @@ Функция "Безопасный просмотр" может быть отключена как с помощью правила, так и самим пользователем. В таком случае действие запускаться не будет. Чтобы принудительно включить Безопасный просмотр, используйте правило <ph name="SAFE_BROWSING_ENABLED_POLICY_NAME" /> или <ph name="SAFE_BROWSING_PROTETION_LEVEL_POLICY_NAME" />.</translation> <translation id="5835312413892670446">Настройки записи экрана</translation> <translation id="5836064773277134605">Ограничить диапазон портов UDP, используемых хостами удаленного доступа</translation> +<translation id="583627479140113555">Разрешить импорт сохраненных паролей при первом запуске</translation> <translation id="5837898601525273156">Если задано правило <ph name="DEVICE_ADVANCED_BATTERY_CHARGE_MODE_DAY_CONFIG_POLICY_NAME" />, при включенном правиле <ph name="DEVICE_ADVANCED_BATTERY_CHARGE_MODE_ENABLED_POLICY_NAME" /> применяется расширенный режим зарядки батареи, если он поддерживается на устройстве. В этом режиме система применяет стандартный алгоритм зарядки и другие технологии, чтобы сохранить заряд батареи в нерабочие часы. При работе на устройстве используется быстрая зарядка. Для каждого дня недели указывается начало и продолжительность периода, в течение которого система будет использоваться больше всего. Если правило отключено или не настроено, расширенный режим зарядки батареи использоваться не будет. @@ -4755,6 +4764,13 @@ Для приложений Chrome необходимо указать идентификатор, например pjkljhegncpnkpknbcohdijeoejaedia, а для приложений Android – название пакета, например com.google.android.gm. Веб-приложения обозначаются с помощью URL, используемого в правиле <ph name="WEB_APP_INSTALL_FORCE_LIST_POLICY_NAME" />, например https://google.com/maps. Если правило не настроено, пользователи смогут изменять список приложений, закрепленных на панели запуска.</translation> +<translation id="6183409603139321084"><ph name="PRODUCT_OS_NAME" /> может автоматически указывать имя пользователя на странице поставщика идентификационной информации SAML во время аутентификации на экране входа и заблокированном экране. + + Для этого будет использован электронный адрес, связанный с профилем пользователя в <ph name="PRODUCT_OS_NAME" />. Этот параметр нужно отключить, если на странице поставщика идентификационной информации SAML планируется вводить другие электронные адреса. + + Полученная от правила строка будет использована в качестве имени параметра URL на странице поставщика, а электронный адрес – в качестве значения. + + Сервер должен сопоставлять данные от поставщиков идентификационной информации и поддерживаемые параметры URL.</translation> <translation id="6190367314942602985">Сообщать данные, идентифицирующие пользователя</translation> <translation id="6191963383731098056">С помощью этого правила администраторы могут задавать цвет темы <ph name="PRODUCT_NAME" />. Введенная строка должна быть допустимым шестнадцатеричным кодом цвета в формате #RRGGBB. @@ -5296,6 +5312,7 @@ Чтобы задать хеш <ph name="SUBJECT_PUBLIC_KEY_INFO" />, следует объединить название алгоритма хеширования, символ "/" и представленный в кодировке Base64 результат применения алгоритма хеширования к DER-представлению <ph name="SUBJECT_PUBLIC_KEY_INFO" /> нужного сертификата. Кодировка SPKI Fingerprint основана на формате Base64. Единственный алгоритм хеширования, поддерживаемый на текущий момент, – sha256. Если правило не настроено, то <ph name="PRODUCT_NAME" /> будет считать ненадежными любые сертификаты, не прошедшие проверку безопасности.</translation> +<translation id="6703381779632216549">Разрешить импорт поисковой системы по умолчанию при первом запуске</translation> <translation id="6704445641918520643">Включить загрузку отложенного входа WebUI</translation> <translation id="6704515759227307131">Это правило устарело и было заменено правилом AdvancedProtectionAllowed. @@ -6288,6 +6305,7 @@ <translation id="77379430721695807">Если правило задано, значит вы указали список URL, шаблоны которых сверяются с запрашивающим URL. В случае соответствия доступ записывающим видеоустройствам предоставляется без запроса. Подробную информацию о том, какие шаблоны <ph name="URL_LABEL" /> можно использовать, вы найдете на странице https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation> +<translation id="7740644123648617252">Разрешить импорт данных для автозаполнения форм при первом запуске</translation> <translation id="7744253761377202223">Уровень яркости экрана в процентах при работе от сети.</translation> <translation id="7747447585227954402">Разрешить устройствам использовать правило <ph name="PLUGIN_VM_NAME" /> в <ph name="PRODUCT_OS_NAME" /></translation> <translation id="7749024457938190837">Расширения, которые могут пропускать подтверждение печати при использовании API chrome.printing.</translation> @@ -6445,6 +6463,7 @@ <translation id="7925224837072026018">Если правило включено, приложения для Android и расширения получают доступ к корпоративным ключам. Для использования в организации подходят только ключи, сгенерированные в управляемом аккаунте с помощью chrome.enterprise.platformKeys API. Пользователи не могут предоставлять или запрещать приложениям для Android и расширениям доступ к таким ключам. По умолчанию у приложений для Android и расширений нет доступа к корпоративным ключам. Это эквивалентно указанию значения False в параметре allowCorporateKeyUsage для этого приложения или расширения. Приложение Android или расширение может использовать корпоративные ключи для подписи произвольных данных только в том случае, если для него в параметре allowCorporateKeyUsage указано значение True. Предоставляйте это разрешение только расширениям и приложениям Android, в которых ключи защищены от действий злоумышленников.</translation> +<translation id="793188693675675950">Запретить импорт адреса домашней страницы при первом запуске</translation> <translation id="7933141401888114454">Включает поддержку контролируемых профилей</translation> <translation id="793473937901685727">Настроить доступ к сертификатам для приложений ARC</translation> <translation id="7936302526928951356">Не фиксировать номер основной версии в строке агента пользователя</translation> @@ -6787,9 +6806,6 @@ <translation id="8295496526151576383">Определяет возможность расширений пропускать подтверждение печати при использовании функции <ph name="SUBMIT_JOB_FUNCTION" /> из <ph name="PRINTING_API" /> для отправки задания печати. Если расширение не находится в этом списке или список не настроен, окно подтверждения показывается при каждом вызове функции <ph name="SUBMIT_JOB_FUNCTION" />.</translation> -<translation id="829641334878002866">Позволяет задать период (в миллисекундах) с первого уведомления о том, что устройство с <ph name="PRODUCT_OS_NAME" /> нужно перезагрузить для установки обновления, до окончания периода, заданного правилом <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />. - - Если правило не настроено, для устройств с <ph name="PRODUCT_OS_NAME" /> используется период по умолчанию – 259 200 000 миллисекунд (три дня).</translation> <translation id="829703642501504476">Если задано значение True, используются встроенные в <ph name="PRODUCT_NAME" /> дополнительные страницы с сообщениями об ошибках (такие как "Страница не найдена"). Если указано значение False, в <ph name="PRODUCT_NAME" /> никогда не используются такие страницы. Если вы настроите это правило, пользователи не смогут его изменить. Если правило не настроено, оно действует, но пользователи могут его изменить.</translation> @@ -7106,6 +7122,7 @@ Начиная с <ph name="PRODUCT_NAME" /> версии 92 это правило также поддерживается в режиме консольного браузера. Обратите внимание, что блокировать внутренние URL с префиксом chrome://* не рекомендуется: это может привести к непредвиденным ошибкам.</translation> +<translation id="8619748440665904084">Запретить импорт данных для автозаполнения форм при первом запуске</translation> <translation id="8623672932476443039">Если правило включено, пользователям доступен режим разработчика изолированных приложений. Если правило отключено, этот режим недоступен. Если правило не настроено, по умолчанию доступ отключен для корпоративных аккаунтов в Chrome OS и включен для остальных пользователей и операционных систем.</translation> @@ -7152,6 +7169,7 @@ Если правило отключено или не настроено, хост удаленного доступа может быть связан с любым локальным пользователем.</translation> <translation id="867708016260789630">Включить обязательное использование Безопасного режима для YouTube на уровне не ниже умеренного</translation> <translation id="8677853537025397834">Разрешить WebHID API на этих сайтах</translation> +<translation id="8685018726115727387">Запретить импорт истории браузера при первом запуске</translation> <translation id="8685024486845674965">Предупреждение от защиты паролем срабатывает при повторном использовании пароля</translation> <translation id="8685680544554917389">Если задано значение True, в <ph name="PRODUCT_NAME" /> медиафайлы воспроизводятся автоматически. Если указано значение False, автовоспроизведение в <ph name="PRODUCT_NAME" /> отключено. @@ -7522,6 +7540,7 @@ Если правило выключено, эти устройства не собирают и не отправляют такие данные.</translation> <translation id="9077227880520270584">Таймер автоматического входа в локальный аккаунт</translation> +<translation id="9079531125758468956">Запретить импорт закладок при первом запуске</translation> <translation id="9084985621503260744">Определяет, влияет ли воспроизведение видео на режим энергопотребления</translation> <translation id="9087434639296483430">Позволяет настроить отправку информации о событиях входа в аккаунт и выхода из него на зарегистрированных устройствах, в том числе о неуспешных попытках входа.
diff --git a/components/policy/resources/policy_templates_th.xtb b/components/policy/resources/policy_templates_th.xtb index 44018db..86f2329 100644 --- a/components/policy/resources/policy_templates_th.xtb +++ b/components/policy/resources/policy_templates_th.xtb
@@ -13,6 +13,7 @@ หากค่าของนโยบายนี้ไม่ใช่โดเมนที่ถูกต้อง ระบบจะไม่นำนโยบายนี้ไปใช้</translation> <translation id="1004590217607585595">การตั้งค่าการจัดการเว็บแอป</translation> <translation id="1006218396155867129">ปิดไม่ให้ผู้ใช้ที่เข้าถึงจากระยะไกลโอนไฟล์ไปยังและจากโฮสต์ระยะไกล</translation> +<translation id="1007149936182752368">ปิดใช้การแก้ไขบุ๊กมาร์ก</translation> <translation id="1010151305531217567">สลับปุ่มหลักของเมาส์ไปเป็นปุ่มด้านขวา</translation> <translation id="1011266755572744012">ระบุจำนวนแผ่นงานสูงสุดที่อนุญาตให้พิมพ์สำหรับงานพิมพ์ 1 งาน @@ -75,6 +76,7 @@ ดูรายการตัวแปรที่ใช้ได้ได้ที่ https://support.google.com/chrome/a?p=Supported_directory_variables หากไม่ได้กำหนดการตั้งค่านี้ ระบบจะใช้ไดเรกทอรีโปรไฟล์ที่เป็นค่าเริ่มต้น</translation> +<translation id="1059069692400941670">ปิดใช้การนำเข้าเครื่องมือค้นหาเริ่มต้นเมื่อเรียกใช้ครั้งแรก</translation> <translation id="1062011392452772310">เปิดใช้งานการยืนยันระยะไกลสำหรับอุปกรณ์</translation> <translation id="1062407476771304334">แทนที่</translation> <translation id="1069489575852947981">การตั้งค่านโยบายเป็น "เปิดใช้" หรือไม่ได้ตั้งค่าหมายความว่า ระบบจะตั้งค่าบัญชีในอุปกรณ์ให้ลงชื่อเข้าใช้โดยอัตโนมัติด้วยความล่าช้าเป็น 0 <ph name="PRODUCT_OS_NAME" /> จะดำเนินการตามแป้นพิมพ์ลัด Ctrl+Alt+S เพื่อข้ามการลงชื่อเข้าใช้โดยอัตโนมัติ และจะแสดงหน้าจอลงชื่อเข้าใช้ @@ -93,6 +95,7 @@ <translation id="1082802595100075771">ให้ผู้ใช้เลือกที่จะใช้บริการของ Google แบบไม่ระบุตัวตนเพื่อให้คำอธิบายอัตโนมัติสำหรับรูปภาพที่ไม่มีป้ายกำกับ</translation> <translation id="1087437665304381368">นโยบายนี้ควบคุมโหมดนักพัฒนาซอฟต์แวร์ของ <ph name="PRODUCT_OS_NAME" /> เท่านั้น หากคุณต้องการป้องกันการเข้าถึงตัวเลือกสำหรับนักพัฒนาแอป Android ก็จะต้องตั้งค่านโยบาย <ph name="DEVELOPER_TOOLS_DISABLED_POLICY_NAME" /></translation> <translation id="1087707496788636333">เรากำลังย้ายรายการนโยบายของ Chrome Enterprise โปรดอัปเดตบุ๊กมาร์กเป็น <ph name="POLICY_DOCUMENTATION_URL" /></translation> +<translation id="1089150222292592899">ป้อนชื่อผู้ใช้อัตโนมัติในหน้า SAML IdP</translation> <translation id="1091765729282771296">อนุญาตให้เว็บไซต์ขอให้ผู้ใช้ให้สิทธิ์เข้าถึงอุปกรณ์ HID</translation> <translation id="1095209545735032039">บล็อก Serial API ในเว็บไซต์เหล่านี้</translation> <translation id="1096105751829466145">ผู้ให้บริการการค้นหาเริ่มต้น</translation> @@ -1861,6 +1864,7 @@ หากตั้งค่าเป็นปิดใช้งาน การอัปเดตสำหรับคอมโพเนนต์จะปิดใช้งาน อย่างไรก็ตาม จะมีบางคอมโพเนนต์ที่ได้รับการยกเว้นจากนโยบายนี้ กล่าวคือระบบจะไม่ปิดใช้การอัปเดตคอมโพเนนต์ที่ไม่มีโค้ดปฏิบัติการและมีความสำคัญต่อการรักษาความปลอดภัยของเบราว์เซอร์ ตัวอย่างของคอมโพเนนต์ดังกล่าว ได้แก่ รายการยกเลิกใบรับรองและตัวกรองทรัพยากรย่อย</translation> +<translation id="2939335382784544151">เปิดใช้การนำเข้าประวัติการท่องเว็บเมื่อเรียกใช้ครั้งแรก</translation> <translation id="2940127076681735544">การตั้งค่านโยบายนี้เป็น URL ที่ถูกต้องจะทำให้ <ph name="PRODUCT_NAME" /> ดาวน์โหลดรายการเว็บไซต์จาก URL นั้นและใช้กฎเหมือนกับว่าได้รับการกำหนดค่าด้วยนโยบาย <ph name="SITELIST_POLICY_NAME" /> การไม่ได้ตั้งค่านโยบาย (หรือตั้งค่าเป็น URL ที่ไม่ถูกต้อง) หมายความว่า <ph name="PRODUCT_NAME" /> จะไม่ใช้นโยบายนี้เป็นที่มาของกฎสำหรับการเปลี่ยนเบราว์เซอร์ @@ -2293,6 +2297,7 @@ หากไม่ได้ตั้งค่า ผู้ใช้จะเป็นผู้เลือกรูปภาพสำหรับพื้นหลังของเดสก์ท็อปและหน้าจอลงชื่อเข้าใช้</translation> <translation id="3315324240256767419">เปิดใช้ฟีเจอร์หน้าต่างเรียกดูแบบส่วนตัว</translation> +<translation id="3323819750604111729">เปิดใช้การนำเข้าบุ๊กมาร์กเมื่อเรียกใช้ครั้งแรก</translation> <translation id="332771718998993005">กำหนดชื่อที่โฆษณาเป็นปลายทางของ <ph name="PRODUCT_NAME" /> หากตั้งค่านโยบายนี้เป็นสตริงที่ไม่ว่างเปล่า ระบบจะใช้สตริงนั้นเป็นชื่อปลายทางของ <ph name="PRODUCT_NAME" /> มิเช่นนั้นชื่อปลายทางจะเป็นชื่ออุปกรณ์ หากไม่ตั้งค่านโยบายนี้ ชื่อปลายทางจะเป็นชื่ออุปกรณ์ และเจ้าของอุปกรณ์ (หรือผู้ใช้จากโดเมนที่จัดการอุปกรณ์) จะได้รับอนุญาตให้เปลี่ยนชื่อ ชื่อต้องมีความยาวไม่เกิน 24 อักขระ</translation> @@ -2767,6 +2772,7 @@ การตั้งค่านโยบายเป็น 2 จะบล็อกโฆษณาในเว็บไซต์ซึ่งมีโฆษณาที่แทรก</translation> <translation id="3877517141460819966">โหมดการตรวจสอบสิทธิ์จากปัจจัยที่สองที่ผสานรวม</translation> <translation id="3879208481373875102">กำหนดค่ารายการเว็บแอปที่บังคับติดตั้งแล้ว</translation> +<translation id="3879700444818346084">ปิดใช้การนำเข้ารหัสผ่านที่บันทึกไว้เมื่อเรียกใช้ครั้งแรก</translation> <translation id="388237772682176890">นโยบายนี้เลิกใช้งานใน M53 และนำออกจาก M54 เนื่องจากไม่มีการสนับสนุน SPDY/3.1 อีกต่อไป ปิดใช้โปรโตคอล SPDY ใน <ph name="PRODUCT_NAME" /> @@ -3034,6 +3040,7 @@ ส่วนในเซสชันคีออสก์จะไม่มีระยะเวลาผ่อนผันและไม่มีการแจ้งเตือนเกี่ยวกับการรีบูต </translation> <translation id="4187576366596772431">บล็อก WebHID API ในเว็บไซต์เหล่านี้</translation> +<translation id="4190316993598857632">เปิดใช้การแก้ไขบุ๊กมาร์ก</translation> <translation id="4192388905594723944">URL สำหรับตรวจสอบความถูกต้องโทเค็นการตรวจสอบสิทธิ์ไคลเอ็นต์การเข้าถึงระยะไกล</translation> <translation id="4203055629055264833">การตั้งค่านโยบายเป็น "เปิดใช้" หรือไม่ตั้งค่านโยบายหมายความว่าผู้ใช้สามารถแสดงหน้าผลการค้นหาล่าสุดของเครื่องมือค้นหาเริ่มต้นในแผงด้านข้างผ่านการเปิด/ปิดไอคอนในแถบเครื่องมือ @@ -3725,6 +3732,7 @@ <translation id="5105313908130842249">ระยะหน่วงเวลาการล็อกหน้าจอเมื่อทำงานโดยใช้พลังงานแบตเตอรี่</translation> <translation id="5108031557082757679">เครื่องพิมพ์สำหรับอุปกรณ์ขององค์กรที่มีการปิดใช้</translation> <translation id="5109383437323376357">กำหนดความพร้อมใช้งานของรูปแบบต่างๆ</translation> +<translation id="5120168808610189805">เปิดใช้การนำเข้าหน้าแรกเมื่อเรียกใช้ครั้งแรก</translation> <translation id="5124368997194894978">เปิดใช้การบูตด้วย AC (ไฟฟ้ากระแสสลับ)</translation> <translation id="5130213897914754028">ป้องกันไม่ให้เว็บไซต์ต่างๆ ใช้ SharedArrayBuffers</translation> <translation id="5130935469849337738">เสนอการแปลทุกครั้ง</translation> @@ -4395,6 +4403,7 @@ ลักษณะการทำงานนี้จะไม่ทริกเกอร์ในกรณีที่ (นโยบายหรือผู้ใช้) ปิดใช้ Google Safe Browsing หากต้องการบังคับให้ Google Safe Browsing เปิดใช้งาน ให้ใช้นโยบาย <ph name="SAFE_BROWSING_ENABLED_POLICY_NAME" /> หรือนโยบาย <ph name="SAFE_BROWSING_PROTETION_LEVEL_POLICY_NAME" /></translation> <translation id="5835312413892670446">การตั้งค่าการจับภาพหน้าจอ</translation> <translation id="5836064773277134605">จำกัดช่วงพอร์ต UDP ที่ใช้โดยโฮสต์การเข้าถึงระยะไกล</translation> +<translation id="583627479140113555">เปิดใช้การนำเข้ารหัสผ่านที่บันทึกไว้เมื่อเรียกใช้ครั้งแรก</translation> <translation id="5837898601525273156">หากตั้งค่า <ph name="DEVICE_ADVANCED_BATTERY_CHARGE_MODE_DAY_CONFIG_POLICY_NAME" /> ไว้ การตั้งค่า <ph name="DEVICE_ADVANCED_BATTERY_CHARGE_MODE_ENABLED_POLICY_NAME" /> เป็น "เปิดใช้" จะทำให้นโยบายการจัดการพลังงานของโหมดการชาร์จแบตเตอรี่ขั้นสูงเปิดอยู่เสมอ (หากอุปกรณ์รองรับ) หากใช้อัลกอริทึมการชาร์จมาตรฐานและเทคนิคอื่นๆ นอกเวลาทำงาน โหมดนี้จะอนุญาตให้ผู้ใช้เพิ่มประสิทธิภาพของแบตเตอรี่ได้สูงสุด ในเวลาทำงาน ระบบจะใช้การชาร์จด่วน ซึ่งช่วยให้ชาร์จแบตเตอรี่ได้เร็วขึ้น ระบุเวลาที่มีการใช้ระบบมากที่สุดในแต่ละวันด้วยเวลาเริ่มต้นและระยะเวลา การตั้งค่านโยบายเป็น "ปิดใช้" หรือไม่ตั้งค่าจะทำให้โหมดการชาร์จแบตเตอรี่ขั้นสูงปิดอยู่เสมอ @@ -4708,6 +4717,13 @@ ระบุแอป Chrome ได้จากรหัส เช่น pjkljhegncpnkpknbcohdijeoejaedia ระบุแอป Android ได้จากชื่อแพ็กเกจ เช่น com.google.android.gm และระบุเว็บแอปได้จาก URL ที่ใช้ใน <ph name="WEB_APP_INSTALL_FORCE_LIST_POLICY_NAME" /> เช่น https://google.com/maps การไม่ตั้งค่านโยบายนี้จะให้ผู้ใช้เปลี่ยนแปลงรายการแอปที่ปักหมุดไว้ใน Launcher ได้</translation> +<translation id="6183409603139321084">"<ph name="PRODUCT_OS_NAME" />" สามารถลองป้อนข้อความอัตโนมัติในช่องชื่อผู้ใช้บนหน้า SAML IdP ระหว่างการตรวจสอบสิทธิ์แบบออนไลน์ในหน้าจอลงชื่อเข้าใช้และหน้าจอล็อก + + โดยจะใช้อีเมลของผู้ใช้ที่เชื่อมโยงกับโปรไฟล์ "<ph name="PRODUCT_OS_NAME" />" จึงควรปิดใช้การตั้งค่านี้หากผู้ใช้ต้องการใช้อีเมลอื่นในหน้า SAML IdP + + ระบบจะใช้สตริงที่ได้รับผ่านนโยบายนี้เป็นชื่อพารามิเตอร์ของ URL ในหน้า IdP โดยมีอีเมลของผู้ใช้เป็นค่า + + ส่วนฝั่งเซิร์ฟเวอร์มีหน้าที่รับผิดชอบในการแมประหว่างผู้ให้บริการข้อมูลประจำตัวกับพารามิเตอร์ของ URL ที่รองรับ</translation> <translation id="6190367314942602985">รายงานข้อมูลประจำตัวของผู้ใช้</translation> <translation id="6191963383731098056">นโยบายนี้ให้ผู้ดูแลระบบกำหนดค่าสีธีมของ <ph name="PRODUCT_NAME" /> สตริงอินพุตควรเป็นสตริงสีแบบเลขฐานสิบหกที่ถูกต้องซึ่งมีรูปแบบ "#RRGGBB" @@ -5235,6 +5251,7 @@ ระบุ <ph name="SUBJECT_PUBLIC_KEY_INFO" /> ได้จากการต่อชื่ออัลกอริทึมของแฮช เครื่องหมายทับ และการเข้ารหัส Base64 ของอัลกอริทึมของแฮชนั้นนำไปใช้กับ <ph name="SUBJECT_PUBLIC_KEY_INFO" /> ที่เข้ารหัส DER ของใบรับรองที่ระบุ การเข้ารหัส Base64 นี้เป็นรูปแบบเดียวกับลายนิ้วมือ SPKI ระบบรู้จักอัลกอริทึมของแฮชเพียงรายการเดียวนั่นคือ sha256 และจะไม่สนใจอัลกอริทึมของแฮชอื่นๆ การไม่ตั้งค่านโยบายนี้หมายความว่าหากไม่มีการเปิดเผยความโปร่งใสของใบรับรองตามที่ใบรับรองกำหนด <ph name="PRODUCT_NAME" /> ก็จะไม่เชื่อถือใบรับรองนั้น</translation> +<translation id="6703381779632216549">เปิดใช้การนำเข้าเครื่องมือค้นหาเริ่มต้นเมื่อเรียกใช้ครั้งแรก</translation> <translation id="6704445641918520643">เปิดใช้การโหลด Login WebUI แบบ Lazy Loading</translation> <translation id="6704515759227307131">เราเลิกใช้งานนโยบายนี้แล้วและเปลี่ยนมาใช้ AdvancedProtectionAllowed @@ -6228,6 +6245,7 @@ <translation id="77379430721695807">การตั้งค่านโยบายนี้เป็นการระบุรายการ URL ที่จะมีการจับคู่รูปแบบกับต้นทางการรักษาความปลอดภัยของ URL ที่ขอ หากรูปแบบตรงกัน ระบบจะให้สิทธิ์เข้าถึงอุปกรณ์จับภาพวิดีโอโดยไม่แสดงข้อความแจ้ง ดูข้อมูลโดยละเอียดเกี่ยวกับรูปแบบ <ph name="URL_LABEL" /> ที่ถูกต้องได้ที่ https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns</translation> +<translation id="7740644123648617252">เปิดใช้การนำเข้าข้อมูลแบบฟอร์มที่ป้อนอัตโนมัติเมื่อเรียกใช้ครั้งแรก</translation> <translation id="7744253761377202223">เปอร์เซ็นต์ความสว่างของหน้าจอขณะที่เครื่องทำงานโดยเสียบปลั๊ก</translation> <translation id="7747447585227954402">อนุญาตให้อุปกรณ์ใช้ <ph name="PLUGIN_VM_NAME" /> ใน <ph name="PRODUCT_OS_NAME" /></translation> <translation id="7749024457938190837">ส่วนขยายที่ได้รับอนุญาตให้ข้ามกล่องโต้ตอบการยืนยันเมื่อส่งงานพิมพ์ผ่าน chrome.printing API</translation> @@ -6385,6 +6403,7 @@ <translation id="7925224837072026018">การตั้งค่านโยบายจะให้สิทธิ์เข้าถึงคีย์ขององค์กรแก่ส่วนขยายหรือแอปพลิเคชัน Android คีย์มีไว้สำหรับการใช้งานขององค์กรเฉพาะในกรณีที่สร้างขึ้นโดยใช้ chrome.enterprise.platformKeys API ในบัญชีที่มีการจัดการ ผู้ใช้จะให้สิทธิ์เข้าถึงคีย์ขององค์กรแก่ส่วนขยายหรือแอปพลิเคชัน Android หรือถอนสิทธิ์เข้าถึงคีย์ขององค์กรจากส่วนขยายหรือแอปพลิเคชัน Android ไม่ได้ โดยค่าเริ่มต้น ส่วนขยายหรือแอปพลิเคชัน Android จะใช้คีย์ที่กำหนดไว้สำหรับการใช้งานขององค์กรไม่ได้ ซึ่งเทียบเท่ากับการตั้งค่า allowCorporateKeyUsage เป็น "เท็จ" สำหรับส่วนขยายหรือแอปพลิเคชัน Android นั้น ส่วนขยายหรือแอปพลิเคชัน Android จะใช้คีย์ของแพลตฟอร์มที่มีการทำเครื่องหมายไว้สำหรับการใช้งานขององค์กรเพื่อลงนามข้อมูลที่กำหนดเองได้เฉพาะในกรณีที่มีการตั้งค่า allowCorporateKeyUsage เป็น "จริง" สำหรับส่วนขยายหรือแอปพลิเคชัน Android ดังกล่าว ควรมอบสิทธิ์นี้ต่อเมื่อมั่นใจว่าส่วนขยายหรือแอปพลิเคชัน Android มีการป้องกันการเข้าถึงคีย์จากผู้โจมตีเท่านั้น</translation> +<translation id="793188693675675950">ปิดใช้การนำเข้าหน้าแรกเมื่อเรียกใช้ครั้งแรก</translation> <translation id="7933141401888114454">เปิดใช้งานการสร้างผู้ใช้ภายใต้การควบคุมดูแล</translation> <translation id="793473937901685727">ตั้งค่าความพร้อมใช้งานของใบรับรองสำหรับแอป ARC</translation> <translation id="7936302526928951356">สตริง User-Agent จะไม่หยุดเวอร์ชันหลัก</translation> @@ -6726,9 +6745,6 @@ <translation id="8295496526151576383">นโยบายนี้ระบุส่วนขยายที่อนุญาตให้ข้ามกล่องโต้ตอบการยืนยันงานพิมพ์เมื่อส่วนขยายนั้นใช้ฟังก์ชัน <ph name="SUBMIT_JOB_FUNCTION" /> ของ <ph name="PRINTING_API" /> เพื่อส่งงานพิมพ์ หากส่วนขยายใดไม่อยู่ในรายการหรือไม่ได้ตั้งค่ารายการไว้ ระบบจะแสดงกล่องโต้ตอบการยืนยันงานพิมพ์ให้ผู้ใช้เห็นทุกครั้งที่มีการเรียกใช้ฟังก์ชัน <ph name="SUBMIT_JOB_FUNCTION" /></translation> -<translation id="829641334878002866">อนุญาตให้คุณกำหนดระยะเวลาเป็นมิลลิวินาทีระหว่างการแจ้งเตือนแรกที่บอกว่าต้องรีสตาร์ทอุปกรณ์ <ph name="PRODUCT_OS_NAME" /> เพื่อใช้อัปเดตที่รอดำเนินการ กับจุดสิ้นสุดระยะเวลาที่ระบุโดยนโยบาย <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" /> - - หากไม่ได้ตั้งค่า ระบบจะใช้ระยะเวลาเริ่มต้น 259,200,000 มิลลิวินาที (3 วัน) สำหรับอุปกรณ์ <ph name="PRODUCT_OS_NAME" /></translation> <translation id="829703642501504476">การตั้งค่านโยบายเป็น "จริง" หมายความว่า <ph name="PRODUCT_NAME" /> จะใช้หน้าแสดงข้อผิดพลาดทางเลือกซึ่งมีอยู่ในเบราว์เซอร์ (เช่น "ไม่พบหน้าเว็บ") การตั้งค่านโยบายเป็น "เท็จ" หมายความว่า <ph name="PRODUCT_NAME" /> จะไม่ใช้หน้าแสดงข้อผิดพลาดทางเลือกเลย หากคุณตั้งค่านโยบายนี้ ผู้ใช้จะเปลี่ยนไม่ได้ หากไม่ได้ตั้งค่า นโยบายจะเปิดอยู่ แต่ผู้ใช้เปลี่ยนการตั้งค่านี้ได้</translation> @@ -7038,6 +7054,7 @@ มีการรองรับนโยบายนี้ในโหมดไม่มีส่วนหัวด้วยใน <ph name="PRODUCT_NAME" /> เวอร์ชัน 92 เป็นต้นไป หมายเหตุ: การบล็อก chrome://* ซึ่งเป็น URL ภายในอาจทำให้เกิดข้อผิดพลาดที่ไม่คาดคิด</translation> +<translation id="8619748440665904084">ปิดใช้การนำเข้าข้อมูลแบบฟอร์มที่ป้อนอัตโนมัติเมื่อเรียกใช้ครั้งแรก</translation> <translation id="8623672932476443039">การตั้งค่านโยบายเป็น "เปิดใช้" จะทำให้ผู้ใช้เข้าถึงโหมดนักพัฒนาซอฟต์แวร์สำหรับแอปที่แยกไว้ได้ การตั้งค่านโยบายเป็น "ปิดใช้" หมายความว่าผู้ใช้จะไม่สามารถเข้าถึงโหมดดังกล่าว หากไม่ได้ตั้งค่านโยบายนี้ ระบบจะไม่อนุญาตให้ใช้ค่าเริ่มต้นกับผู้ใช้ที่มีการจัดการโดยองค์กรใน Chrome OS แต่อนุญาตให้ใช้กับผู้ใช้และระบบปฏิบัติการอื่นๆ ทั้งหมด</translation> @@ -7084,6 +7101,7 @@ การตั้งค่านโยบายเป็น "ปิดใช้" หรือไม่ตั้งค่าจะทำให้โฮสต์การเข้าถึงระยะไกลเชื่อมโยงกับผู้ใช้เครือข่ายภายในรายใดก็ได้</translation> <translation id="867708016260789630">บังคับใช้โหมดที่จำกัดปานกลางเป็นอย่างน้อยใน YouTube</translation> <translation id="8677853537025397834">อนุญาต WebHID API ในเว็บไซต์เหล่านี้</translation> +<translation id="8685018726115727387">ปิดใช้การนำเข้าประวัติการท่องเว็บเมื่อเรียกใช้ครั้งแรก</translation> <translation id="8685024486845674965">เรียกใช้การแจ้งเตือนการป้องกันด้วยรหัสผ่านเมื่อมีการใช้รหัสผ่านซ้ำ</translation> <translation id="8685680544554917389">การตั้งค่านโยบายเป็น "จริง" อนุญาตให้ <ph name="PRODUCT_NAME" /> เล่นสื่ออัตโนมัติ การตั้งค่านโยบายเป็น "เท็จ" ห้ามไม่ให้ <ph name="PRODUCT_NAME" /> เล่นสื่ออัตโนมัติ @@ -7450,6 +7468,7 @@ การตั้งค่านโยบายเป็น "ปิดใช้" จะทำให้อุปกรณ์ที่ลงทะเบียนไว้ไม่บันทึกหรือรายงานจำนวนครั้งของกิจกรรม</translation> <translation id="9077227880520270584">ตัวจับเวลาการเข้าสู่ระบบอัตโนมัติไปยังบัญชีภายในอุปกรณ์</translation> +<translation id="9079531125758468956">ปิดใช้การนำเข้าบุ๊กมาร์กเมื่อเรียกใช้ครั้งแรก</translation> <translation id="9084985621503260744">ระบุว่ากิจกรรมวิดีโอมีผลต่อการจัดการพลังงานหรือไม่</translation> <translation id="9087434639296483430">รายงานเหตุการณ์การเข้าสู่ระบบ/ออกจากระบบของผู้ใช้ในอุปกรณ์ที่ลงทะเบียนไว้ รวมถึงการเข้าสู่ระบบไม่สำเร็จ
diff --git a/components/policy/resources/policy_templates_tr.xtb b/components/policy/resources/policy_templates_tr.xtb index 41e4989e..b21cd68 100644 --- a/components/policy/resources/policy_templates_tr.xtb +++ b/components/policy/resources/policy_templates_tr.xtb
@@ -1084,6 +1084,7 @@ Politika etkinleştirilirse veya ayarlanmadan bırakılırsa Bil bakalım tanımı etkinleştirilir. Politika devre dışı bırakılırsa Bil bakalım tanımı devre dışı bırakılır.</translation> <translation id="209586405398070749">Mevcut ürün kanalı</translation> +<translation id="2096932573113293941">Yetkilendirme gerektiren eklentileri çalıştırmak için kullanıcıdan izin iste</translation> <translation id="2098658257603918882">Kullanım ve kilitlenme ile ilgili verilerin raporlanmasını etkinleştir</translation> <translation id="2104418465060359056">Uzantı ve Eklenti bilgilerini bildirme</translation> <translation id="2106627642643925514">Varsayılan PIN ile yazdırma modunu geçersiz kılar. Mod kullanılamıyorsa bu politika yoksayılır.</translation> @@ -1213,6 +1214,7 @@ <translation id="2223393221350938149">Hiçbir sitenin JavaScript JIT çalıştırmasına izin verme</translation> <translation id="2223582957891074498">Politikayı True (Doğru) değerine ayarlamak, klavye kısayolları veya uzantı API'leriyle ekran görüntüsü alınmasına izin vermez. Politikayı False (Yanlış) değerine ayarlamak, ekran görüntüsü alınmasına izin verir.</translation> <translation id="2223598546285729819">Varsayılan bildirim ayarı</translation> +<translation id="222673035924187991">TLS Encrypted ClientHello'yu etkinleştir</translation> <translation id="2231726854197443389">Bu politika, kullanıcıların Yalnızca HTTPS Modunu Ayarlar'da etkinleştirip etkinleştiremeyeceğini kontrol eder. Yalnızca HTTPS Modu, tüm gezinmeleri HTTPS'ye yükseltir. Bu ayar belirtilmezse veya izin verildi olarak seçilirse kullanıcılar Yalnızca HTTPS Modunu etkinleştirebilir. Bu ayar izin verilmedi olarak seçilirse kullanıcılar Yalnızca HTTPS Modunu etkinleştiremez. @@ -1333,6 +1335,7 @@ <translation id="2349117476121456297">Politikayı True (Doğru) değerine ayarlamak, klavyenin en üst sırasındaki tuşların işlev tuşu komutları olarak davranmasını sağlar. Arama tuşuna basmak, bunların davranışını tekrar medya tuşu olarak değiştirir. False (Yanlış) değerine ayarlanırsa veya ayarlanmazsa klavye varsayılan olarak medya tuşu komutları oluşturur. Arama tuşuna basmak, bunları işlev tuşu olarak değiştirir.</translation> +<translation id="2354439478396602136"><ph name="PRODUCT_OS_NAME" /> başlatıcıda uygulama önerileri göster</translation> <translation id="2355876547176311490">Uzaktan erişim ana makinesi tarafından geçiş sunucuları kullanılmasını devre dışı bırak</translation> <translation id="2358176879566587521">Bu politika kullanımdan kaldırılmıştır. <ph name="PRODUCT_NAME" /> ürününün bu versiyonuyla uyumlu değildir. Daha fazla bilgiyi https://support.google.com/chrome/a/answer/7643500 adresinde bulabilirsiniz</translation> <translation id="2362469626417133796">Yeniden başlatma zaman aralığı</translation> @@ -1559,6 +1562,7 @@ Kullanıcılar, yer işaretlerinin yerleştirildiği klasörleri değiştiremezler (ancak yer işareti çubuğunda gizleyebilirler). Yönetilen yer işaretlerinin varsayılan klasör ismi "Yönetilen Yer İşaretleri"dir fakat politikaya değere istenilen klasör adı yazılan "<ph name="TOPLEVEL_NAME" />" isminde tek bir anahtara sahip yeni bir alt sözlük ekleyerek değiştirilebilir. Yönetilen yer işaretleri kullanıcı hesabıyla senkronize edilmez ve uzantılar bunların üzerinde değişiklik yapamaz.</translation> <translation id="2552966063069741410">Saat dilimi</translation> <translation id="2555244983262829274">Araç çubuğundan Ana sayfa düğmesini gizle</translation> +<translation id="2562213287271514629">Eski <ph name="FLASH_PLUGIN_NAME" /> eklentisinin normal <ph name="FLASH_PLUGIN_NAME" /> olarak kullanılmasına izin ver</translation> <translation id="2562339630163277285">Anında arama sonuçları sağlamak için kullanılan arama motorunun URL'sini belirtir. URL, <ph name="SEARCH_TERM_MARKER" /> dizesini içermelidir. Sorgu sırasında, kullanıcının girdiği metin bu dizenin yerini alır. Bu politika isteğe bağlıdır. Ayarlanmazsa, herhangi bir arama sonucu sağlanmaz. @@ -1603,6 +1607,7 @@ <translation id="2593762551209145088">Güvenli Tarama hiçbir zaman etkin değil.</translation> <translation id="26023406105317310">Kerberos hesaplarını yapılandır</translation> <translation id="2604182581880595781">Ağ Üzerinde Dosya Paylaşımı ile ilgili politikaları yapılandırın.</translation> +<translation id="2608039968712973520">Eski <ph name="FLASH_PLUGIN_NAME" /> eklentisini çalıştırmak için kullanıcıdan izin iste</translation> <translation id="2608535066974278204">Yeniden başlatma zaman aralığının uzunluğunu belirten zaman dilimi (dakika).</translation> <translation id="2608887839902987727">Giriş portalı kimlik doğrulamasının, proxy ayarlarını yoksaymasını engelle</translation> <translation id="2608985885792348429">Varsayılan pano ayarı</translation> @@ -1654,6 +1659,7 @@ Bu politika M77'de kaldırıldı. Bu politika, oturum açma ekranı için geçerlidir. Lütfen kullanıcı oturumu için geçerli olan <ph name="SITE_PER_PROCESS_POLICY_NAME" /> politikasına da bakın. Her iki politikanın da aynı değere ayarlanması önerilir. Değerlerin eşleşmemesi durumunda, kullanıcı oturumuna giriş sırasında kullanıcı politikası tarafından belirtilen değer uygulanırken gecikme yaşanabilir. </translation> +<translation id="2697717608663878828">TLS Encrypted ClientHello denemesini etkinleştir</translation> <translation id="2702023190395322609">Medya Önerilerini Etkinleştir</translation> <translation id="270582584528242502">Çıkmaya çalışan kullanıcılara uyarı iletişimi gösterme</translation> <translation id="2706708761587205154">Yalnızca PIN ile yazdırmaya izin ver</translation> @@ -2248,6 +2254,7 @@ <translation id="3255762580838224124">Bu politikanın ayarlanması, her ekranın her yeniden başlatmada ve politika değeri değiştikten sonraki ilk bağlantısında belirtilen yöne döndürülmesini sağlar. Kullanıcılar oturum açtıktan sonra ayarlar sayfasında ekran döndürmeyi değiştirebilir, ancak ayar bir sonraki yeniden başlatmada eski haline döner. Bu politika, birincil ve ikincil ekranlar için geçerlidir. Politika ayarlanmazsa varsayılan değer 0 derece olur ve kullanıcılar bu değeri istedikleri gibi değiştirebilir. Bu durumda, varsayılan değer yeniden başlatma sırasında tekrar uygulanmaz.</translation> +<translation id="3258380413685430793"><ph name="FLASH_PLUGIN_NAME" /> içeriklerinin tamamını çalıştır</translation> <translation id="325883417142483505">Politika ayarlanırsa kurumsal giriş URL'lerinin listesi ayarlanır (yalnızca HTTP ve HTTPS protokolleri). Şifre koruma hizmeti, bu URL'lerdeki şifrelerin rastgele oluşturulmuş karma değerlerini yakalayıp şifre yeniden kullanımı algılaması için kullanır. <ph name="PRODUCT_NAME" /> ürününün rastgele oluşturulmuş karma değerleri doğru bir şekilde yakalayabilmesi için oturum açma sayfalarınızın https://www.chromium.org/developers/design-documents/create-amazing-password-forms adresinde belirtilen yönergelere uygun olduğundan emin olun. Bu ayar devre dışı bırakılır veya ayarlanmazsa şifre koruma hizmeti yalnızca https://accounts.google.com adresindeki şifrelerin rastgele oluşturulmuş karma değerlerini yakalar. @@ -2316,6 +2323,7 @@ Not: İşlem çözüm politikaları hakkında daha fazla bilgi edinin (https://chromium.googlesource.com/chromium/src/+/HEAD/docs/design/sandbox.md#Process-mitigation-policies).</translation> <translation id="3339271789059866414">System-proxy hizmetinin kullanılabilirliğini ve sistem hizmetleri için proxy kimlik bilgilerini yapılandırır. Politika ayarlanmazsa System-proxy hizmeti kullanılamaz.</translation> +<translation id="334231891933432876">Hesabının kimlik doğrulaması geçersiz hale gelir gelmez kullanıcının oturumunu kapat</translation> <translation id="3348799281602260763">Politika etkinleştirilirse WebRTC eş bağlantıları, TLS/DTLS (DTLS 1.0, TLS 1.0, TLS 1.1) protokollerinin eski sürümlerine geçebilir. Bu politika devre dışı bırakılır veya ayarlanmazsa bu TLS/DTLS sürümleri devre dışı bırakılır. @@ -2355,6 +2363,7 @@ Politika ayarlanmadan bırakılırsa zaman aşımı olarak 0 milisaniye kullanılır. <ph name="DEVICE_LOCAL_ACCOUNT_AUTO_LOGIN_ID_POLICY_NAME" /> politikası ayarlanmazsa bu politikanın hiçbir etkisi olmaz.</translation> +<translation id="3397883909301547525"><ph name="PRODUCT_OS_NAME" /> başlatıcıda uygulama önerileri gösterme</translation> <translation id="3399859571630358395">Hızlı Eşleme'yi (hızlı Bluetooth eşleme) devre dışı bırakmaya zorla.</translation> <translation id="341285788698114069">Bu politika, Windows üzerinde ses işleminin önceliğini kontrol eder. Bu politika etkinleştirilirse ses işlemi, normal üstü öncelikli çalışır. @@ -2433,6 +2442,7 @@ Bu işlevin kullanılabilirliği, ek olarak ilgili kullanıcı politikasına da bağlıdır.</translation> <translation id="3495602011142234826">Doğru değerine ayarlanırsa bu uzantı rastgele veri imzalamak amacıyla şirket kullanımı için tasarlanmış tüm anahtarları kullanabilir. Yanlış değerine ayarlanırsa bu tür anahtarlara erişemez, kullanıcı da böyle bir izin veremez. İstisna olarak da anahtarı oluşturan uzantı aynı olduğunda bu uzantı, anahtara tam olarak bir kez erişebilir.</translation> <translation id="3496296378755072552">Şifre yöneticisi</translation> +<translation id="3496761649331792755">Yer işareti çubuğunu etkinleştir</translation> <translation id="3498109920669229084">Politikayı ayarlamak, engellenenler listesine alınmayacak uzantıları belirtir. Engellenenler listesi değerinin <ph name="ALL_EXTENSIONS" /> olması, tüm uzantıların engellendiği ve kullanıcıların yalnızca izin verilenler listesindeki uzantıları yükleyebileceği anlamına gelir. @@ -3270,6 +3280,7 @@ <translation id="449423975179525290"><ph name="PLUGIN_VM_NAME" /> ile ilgili politikaları yapılandırır.</translation> <translation id="449784980858429908">Sitelere, tüm seri bağlantı noktalarına bağlanmak için otomatik olarak izin ver.</translation> <translation id="450080746522343150">Tüm indirmeleri engelle.</translation> +<translation id="45036050223225148">TLS Encrypted ClientHello denemesini devre dışı bırak</translation> <translation id="4508728400492074981">First-Party Sets özelliğiyle ilgili politikaları kontrol eder.</translation> <translation id="4510923771103268849">Kullanıcının, Crostini kapsayıcılarına root erişimi olmasına izin verilir</translation> <translation id="4512407512989846472">Belirli URL'lerden panoya kopyalama işleminin engellenmesine izin verir</translation> @@ -3306,6 +3317,7 @@ Bu politika ayarlanmadan bırakılırsa kullanıcı sistemde yüklü herhangi bir eklentiyi devre dışı bırakabilir.</translation> <translation id="4549405078915181477">Web siteleri için ekran süresini etkinleştir</translation> <translation id="4554651132977135445">Kullanıcı politikası geri döngü işleme modu</translation> +<translation id="4554991346503872538">Asla çeviri önerme</translation> <translation id="4555850956567117258">Kullanıcı için uzaktan doğrulamayı etkinleştir</translation> <translation id="4557134566541205630">Varsayılan arama sağlayıcısı yeni sekme sayfası URL'si</translation> <translation id="4558166110367609724">Otomatik olarak Hizmet Şartları'nı atlayıp tarayıcıyı yükler.</translation> @@ -3750,6 +3762,7 @@ <translation id="5109383437323376357">Varyasyonların kullanılabilirliğini belirleme</translation> <translation id="5124368997194894978">AC'de (alternatif akım) başlat özeliğini etkinleştir</translation> <translation id="5130213897914754028">Sitelerin SharedArrayBuffers kullanmasını engelle</translation> +<translation id="5130935469849337738">Her zaman çeviri öner</translation> <translation id="5141670636904227950">Giriş ekranında varsayılan ekran büyüteci türünü etkin olarak ayarla</translation> <translation id="5142301680741828703"><ph name="PRODUCT_FRAME_NAME" /> içinde aşağıdaki URL kalıplarını her zaman oluştur</translation> <translation id="5143258831402123447">Arama yolculukları chrome://history/journeys adresinde görülemez.</translation> @@ -3882,6 +3895,7 @@ Bu politika bir hesapta <ph name="POLICY_VALUE_PRIMARY_ACCOUNT_SIGNIN" /> değerine ayarlanırsa o hesabın yalnızca birincil hesap olarak oturum açmasına izin verilir. Hesabın ikincil hesap olarak oturum açmasına izin verilmez.</translation> <translation id="523505283826916779">Erişilebilirlik ayarları</translation> +<translation id="5238275681097851753">Belirli <ph name="FLASH_PLUGIN_NAME" /> içeriklerinin engellenmesine izin ver</translation> <translation id="5238976843489093540">Hızlı Eşleme'yi (hızlı Bluetooth eşleme) etkinleştirmeye zorla.</translation> <translation id="52393120393725840">Politika, Etkin değerine ayarlanırsa kullanıcılar, <ph name="PRODUCT_NAME" /> ürününün, şifreleri hatırlayıp bir sitede tekrar oturum açtıklarında şifreleri sunmasını sağlayabilirler. @@ -3948,6 +3962,7 @@ Poltikanının ayarlanmadan bırakılması, kullanıcıların oyunu kayıtlı <ph name="PRODUCT_OS_NAME" /> ürününde oynayamayacakları, ancak diğer durumlarda oynayabilecekleri anlamına gelir.</translation> <translation id="529457411593078576">CCT için ilk çalıştırma sırasında Hizmet Şartları'nı etkinleştirme</translation> +<translation id="5297948043665200363">Hesabının kimlik doğrulaması geçersiz hale geldikten sonra kullanıcının oturumunun açık kalmasına izin ver</translation> <translation id="5298949392804966105">Yönetilen hesaplarda kısıtlama yok</translation> <translation id="530134925949808452">Kullanım kotasının yerel saatle günün hangi saatinde yenileneceği.</translation> <translation id="5303080953475303561">Politikanın ayarlanması, hızlı kilit açma için kilit ekranında ne sıklıkta şifre isteneceğini kontrol eder. Kilit ekranı her görüntülendiğinde, son şifre girişi, seçilen değer tarafından belirtilen zaman aralığından önce yapılmışsa hızlı kilit açma kullanılamaz. Kullanıcı bu süreden daha uzun bir zaman kilit ekranında kalırsa yanlış kod girdiğinde veya kilit ekranına tekrar girdiğinde (hangisi önce olursa) şifre sorulur. @@ -4540,6 +4555,13 @@ Bu politika, <ph name="MS_WIN_NAME" /> veya <ph name="MAC_OS_NAME" /> üzerinde yalnızca <ph name="PRINT_PDF_AS_IMAGE_AVAILABILITY_POLICY_NAME" /> politikasının da etkin olduğu durumlarda geçerli olur.</translation> <translation id="5932767795525445337">Bu politika, Android uygulamalarını sabitlemek için de kullanılabilir.</translation> +<translation id="5936193585187054065">Encrypted ClientHello (ECH), ClientHello'un hassas alanlarını şifrelemek ve gizliliği iyileştirmek için kullanılan bir TLS uzantısıdır. + + Bu politika yapılandırılmazsa veya etkin değerine ayarlanırsa <ph name="PRODUCT_NAME" />, ECH için varsayılan kullanıma sunma işlemini uygular. Politika, devre dışı değerine ayarlanırsa <ph name="PRODUCT_NAME" />, ECH'yi etkinleştirmez. + + Bu özellik etkinleştirildiğinde sunucu desteğine, HTTPS DNS kaydının kullanılabilirliğine veya kullanıma sunma durumuna bağlı olarak <ph name="PRODUCT_NAME" />, ECH'yi kullanabilir veya kullanmayabilir. + + ECH, sürekli gelişen bir protokol olduğu için <ph name="PRODUCT_NAME" /> hizmetinin uygulama sürecinde değişiklikler yapılabilir. Dolayısıyla bu politika ilk deneysel uygulama sürecini kontrol etmek için kullanıma sunulmuş geçici bir önlemdir. Protokol kesinleştiğinde politika da son kontrollere göre değiştirilecektir.</translation> <translation id="5939656968921014919">Erişime kapalı uygulamalar için geliştirici modunu devre dışı bırak</translation> <translation id="5945312246863177268">Kullanıcıların Eche uygulamasını başlatmak için Telefon Merkezi bildirimini tıklamasına izin vermez.</translation> <translation id="5946082169633555022">Beta kanalı</translation> @@ -5156,6 +5178,7 @@ Bu politika, kurumsal yöneticilerin yönetilen <ph name="PRODUCT_OS_NAME" /> cihazlara bağlanmasını engellemez. Etkinleştirilir, boş bırakılır veya ayarlanmazsa bu politikanın hiçbir etkisi olmaz.</translation> +<translation id="6583249367505445969">Yer işareti çubuğunu devre dışı bırak</translation> <translation id="6584541828182430328">Tam ekran uyarısının gösterilmesini devre dışı bırak</translation> <translation id="6593350713192882944">Bil bakalım'ı etkinleştir</translation> <translation id="6594372503585248865">Bağlantı etkin olduğunda uzak ana makine masaüstünde bağlantıyla ilgili kullanıcı arayüzünü etkinleştir</translation> @@ -5633,6 +5656,7 @@ <translation id="7040229947030068419">Örnek değer:</translation> <translation id="7044883996351280650">Android yedekleme ve geri yükleme hizmetini kontrol etme</translation> <translation id="7047495632846973438">Görüntü yakalama izinleri politikasının kontrol edilip edilmediğini veya atlanıp atlanmadığını belirtir.</translation> +<translation id="7055022222176591388">Eski <ph name="FLASH_PLUGIN_NAME" /> eklentisine izin verme</translation> <translation id="7066292150801784098">Uzaktan destek oturumlarında yükseltilmiş pencerelerle uzaktan kullanıcı etkileşimini devre dışı bırak</translation> <translation id="706669471845501145">Sitelerin masaüstü bildirimi göstermesine izin ver</translation> <translation id="70681795425744184">CRD'nin uzak bir ana makineden proxy kullanılarak gelen WebAuthn API isteklerini yürütmesine izin verme.</translation> @@ -6769,9 +6793,6 @@ <translation id="8295496526151576383">Bu politika, bir yazdırma işini göndermek için <ph name="PRINTING_API" /> işlevi <ph name="SUBMIT_JOB_FUNCTION" /> kullandığında hangi uzantılara onay iletişim kutusunu atlama izni verildiğini belirtir. Bir uzantı listede yoksa veya liste ayarlanmamışsa her <ph name="SUBMIT_JOB_FUNCTION" /> işlev çağrısı için kullanıcıya yazdırma işi onay iletişim kutusu gösterilir.</translation> -<translation id="829641334878002866">Beklemedeki bir güncellemenin uygulanması için bir <ph name="PRODUCT_OS_NAME" /> cihazın yeniden başlatılması gerektiğini belirten ilk bildirim ile <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" /> politikası tarafından belirtilen süre sonu arasındaki zamanı milisaniye cinsinden ayarlamanıza olanak tanır. - - Bu politika ayarlanmazsa <ph name="PRODUCT_OS_NAME" /> cihazlarda varsayılan süre olan 259200000 milisaniye (üç gün) kullanılır.</translation> <translation id="829703642501504476">Politika True (Doğru) değerine ayarlandığında <ph name="PRODUCT_NAME" /> tarayıcıya gömülü alternatif hata sayfalarını kullanır (ör. "sayfa bulunamadı"). Politika False (Yanlış) değerine ayarlanırsa <ph name="PRODUCT_NAME" /> alternatif hata sayfalarını kullanmaz. Bu politikayı ayarlarsanız kullanıcılar değiştiremez. Ayarlanmazsa politika açık kalır fakat kullanıcılar bu ayarı değiştirebilir.</translation> @@ -7448,6 +7469,7 @@ Bu politika ayarlanmazsa veya değeri bir Hızlı Düzeltme Derlemesi ile eşlenmezse cihaz, bir Hızlı Düzeltme Derlemesi'ne güncellenmez. Cihaz zaten bir Hızlı Düzeltme Derlemesi çalıştırıyorsa ve politika artık ayarlı değilse veya değeri, artık bir Hızlı Düzeltme Derlemesi ile eşlenmiyorsa cihaz, güncellemenin başka bir politika tarafından engellenmemesi durumunda normal bir derlemeye güncellenir.</translation> <translation id="9051019223077908578">Giriş ekranında, yüklü uygulama ve uzantıların listesini yapılandır</translation> +<translation id="9053841574218808519">Eski olmayan eklentileri her zaman çalıştır</translation> <translation id="9055866143096316150">Ekran uyanık kalma kilidi isteklerini, sistem uyanık kalma kilidi isteklerine düşür</translation> <translation id="9057444687284972605">URL kalıpları listesi belirtmenize olanak tanır. Bu liste, site sertifika isteğinde bulunursa SAML akışını barındıran çerçevedeki oturum açma ekranında bir istemci sertifikasının otomatik olarak seçileceği sitelerin belirtildiği bir listedir. SAML IdP'ye sunulması amacıyla cihaz genelinde bir sertifikanın yapılandırılması buna örnek olarak gösterilebilir.
diff --git a/components/policy/resources/policy_templates_uk.xtb b/components/policy/resources/policy_templates_uk.xtb index e3563d2de..ac353e9 100644 --- a/components/policy/resources/policy_templates_uk.xtb +++ b/components/policy/resources/policy_templates_uk.xtb
@@ -1107,6 +1107,7 @@ Якщо правило ввімкнути або не налаштувати, визначення у швидких відповідях буде ввімкнено. Якщо його вимкнути, цю функцію буде вимкнено.</translation> <translation id="209586405398070749">Стабільна версія</translation> +<translation id="2096932573113293941">Запитувати в користувача дозвіл на запуск плагінів, які потребують авторизації</translation> <translation id="2098658257603918882">Увімкнути звіти про використання та дані, пов’язані з аварійним завершенням роботи</translation> <translation id="2104418465060359056">Повідомляти дані розширень і плагінів</translation> <translation id="2106627642643925514">Замінює режим друку з PIN-кодом за умовчанням. Якщо такий режим недоступний, це правило ігнорується.</translation> @@ -1236,6 +1237,7 @@ <translation id="2223393221350938149">Заборонити всім сайтам запускати JIT-компілятор JavaScript</translation> <translation id="2223582957891074498">Якщо для цього правила вибрано значення True, знімки екрана не можна буде робити за допомогою комбінацій клавіш або API розширення. Якщо для нього вибрано значення False, знімки екрана будуть дозволені.</translation> <translation id="2223598546285729819">Налаштування сповіщень за умовчанням</translation> +<translation id="222673035924187991">Увімкнути розширення Encrypted ClientHello для TLS</translation> <translation id="2231726854197443389">Це правило дає змогу вибрати, чи можуть користувачі вмикати режим "Лише HTTPS" у налаштуваннях. У цьому режимі весь трафік переходить на HTTPS. Якщо це правило не налаштувати або ввімкнути, користувачі зможуть вмикати режим "Лише HTTPS". Якщо правило вимкнути, користувачі не зможуть цього робити. @@ -1356,6 +1358,7 @@ <translation id="2349117476121456297">Якщо для цього правила вибрано значення True, клавіші у верхньому ряді клавіатури за умовчанням працюватимуть як функціональні. Якщо натиснути клавішу пошуку, вони знову працюватимуть як медіа-клавіші. Якщо для цього правила вибрано значення False або воно не налаштовано, медіа-клавіші клавіатури збережуть свою функціональність за умовчанням. Якщо натиснути клавішу пошуку, вони стануть функціональними.</translation> +<translation id="2354439478396602136">Показувати рекомендації додатків на панелі запуску <ph name="PRODUCT_OS_NAME" /></translation> <translation id="2355876547176311490">Вимкнути використання серверів ретрансляції хостом віддаленого доступу</translation> <translation id="2358176879566587521">Це правило видалено. Воно несумісне з цією версією <ph name="PRODUCT_NAME" />. Докладніше читайте на сторінці https://support.google.com/chrome/a/answer/7643500</translation> <translation id="2362469626417133796">Інтервал для перезапуску</translation> @@ -1582,6 +1585,7 @@ Користувачі не можуть змінювати папки, у яких розміщено закладки, але можуть ховати їх із панелі закладок. За умовчанням папка для керованих закладок має назву "Керовані закладки", але її можна змінити, додавши в правило новий підсловник із єдиним ключем <ph name="TOPLEVEL_NAME" />, де вказується потрібна назва папки. Керовані закладки не синхронізуються з обліковим записом користувача та не змінюються розширеннями.</translation> <translation id="2552966063069741410">Часовий пояс</translation> <translation id="2555244983262829274">Приховати кнопку головного екрана з панелі інструментів</translation> +<translation id="2562213287271514629">Дозволити використовувати застарілу версію плагіна <ph name="FLASH_PLUGIN_NAME" /> як звичайний плагін <ph name="FLASH_PLUGIN_NAME" /></translation> <translation id="2562339630163277285">Указує URL-адресу пошукової системи, яка використовується для відображення миттєвих результатів. URL-адреса має містити рядок <ph name="SEARCH_TERM_MARKER" />, який замінюється введеним користувачем текстом під час надсилання запиту. Це правило необов’язкове. Якщо його не встановлено, миттєві результати пошуку не відображаються. @@ -1626,6 +1630,7 @@ <translation id="2593762551209145088">Безпечний перегляд завжди вимкнено.</translation> <translation id="26023406105317310">Налаштувати облікові записи Kerberos</translation> <translation id="2604182581880595781">Налаштовує правила, пов’язані зі спільними мережевими файлами.</translation> +<translation id="2608039968712973520">Запитувати в користувача дозвіл на запуск застарілої версії плагіна <ph name="FLASH_PLUGIN_NAME" /></translation> <translation id="2608535066974278204">Період часу (у хвилинах), який указує тривалість інтервалу для перезапуску.</translation> <translation id="2608887839902987727">Заборонити ігнорувати налаштування проксі-сервера для автентифікації адаптивного порталу</translation> <translation id="2608985885792348429">Налаштування буфера обміну за умовчанням</translation> @@ -1677,6 +1682,7 @@ Це правило вилучено у версії M77. Воно діє для екрана входу. Також перегляньте правило <ph name="SITE_PER_PROCESS_POLICY_NAME" />, яке застосовується до сеансу користувача. Радимо вибрати для обох правил однакове значення. Інакше сеанс користувача може починатись із затримкою, оскільки застосовуватиметься значення, указане в правилах для користувачів. </translation> +<translation id="2697717608663878828">Увімкнути експеримент Encrypted ClientHello для TLS</translation> <translation id="2702023190395322609">Увімкнути рекомендації медіа</translation> <translation id="270582584528242502">Не показувати вікно з попередженням, коли користувач намагається закрити веб-переглядач</translation> <translation id="2706708761587205154">Дозволити друк лише з PIN-кодом</translation> @@ -2272,6 +2278,7 @@ <translation id="3255762580838224124">Якщо налаштувати це правило, на всіх дисплеях застосовуватиметься вказана орієнтація після кожного перезапуску, а також коли дисплеї підключатимуть уперше після зміни значень цього правила. Увійшовши в обліковий запис, користувачі можуть змінити орієнтацію дисплея на сторінці налаштувань, але після наступного перезапуску відновлюватиметься прописане в правилі значення. Це правило застосовується до основних і додаткових дисплеїв. Якщо його не налаштовано, діє значення за умовчанням – 0 градусів, але користувачі можуть змінити його. У такому випадку значення за умовчанням не відновлюватиметься після перезапуску.</translation> +<translation id="3258380413685430793">Відтворювати весь контент <ph name="FLASH_PLUGIN_NAME" /></translation> <translation id="325883417142483505">За допомогою цього правила можна визначити список URL-адрес для входу підприємства (лише для протоколів HTTP та HTTPS). На вибраних сторінках сервіс захисту паролів зберігатиме модифіковані хеші паролів, щоб виявляти їх повторне введення. Щоб веб-переглядач <ph name="PRODUCT_NAME" /> правильно зберігав модифіковані хеші паролів, переконайтеся, що сторінки входу відповідають правилам на сайті https://www.chromium.org/developers/design-documents/create-amazing-password-forms. Якщо цей параметр вимкнено або не налаштовано, сервіс захисту паролів зберігає модифіковані хеші паролів лише зі сторінки https://accounts.google.com. @@ -2340,6 +2347,7 @@ Примітка. Докладніше про правила щодо зменшення ризиків можна прочитати на сторінці https://chromium.googlesource.com/chromium/src/+/HEAD/docs/design/sandbox.md#Process-mitigation-policies.</translation> <translation id="3339271789059866414">Налаштовує доступність сервісу "Проксі системи" й облікові дані проксі для сервісів системи. Якщо це правило не налаштовано, сервіс "Проксі системи" буде недоступний.</translation> +<translation id="334231891933432876">Виконувати для користувача примусовий вихід з облікового запису, коли автентифікація стає недійсною</translation> <translation id="3348799281602260763">Якщо це правило ввімкнено, однорангові мережі WebRTC можуть повернутися до застарілих версій протоколів TLS/DTLS (DTLS 1.0, TLS 1.0 і TLS 1.1). Якщо це правило вимкнено або не налаштовано, ці версії TLS/DTLS буде @@ -2382,6 +2390,7 @@ Якщо це правило не налаштовано, час очікування – 0 мілісекунд. Якщо правило <ph name="DEVICE_LOCAL_ACCOUNT_AUTO_LOGIN_ID_POLICY_NAME" /> не налаштовано, це правило не діє.</translation> +<translation id="3397883909301547525">Не показувати рекомендації додатків на панелі запуску <ph name="PRODUCT_OS_NAME" /></translation> <translation id="3399859571630358395">Примусово вимкнути функцію "Швидка пара" (швидке підключення через Bluetooth)</translation> <translation id="341285788698114069">Це правило керує пріоритетом обробки аудіо у Windows. Якщо його ввімкнути, аудіо оброблятиметься з пріоритетом, вищим за звичайний. @@ -2460,6 +2469,7 @@ Доступність цього правила додатково залежить від відповідного правила для користувачів.</translation> <translation id="3495602011142234826">Якщо вибрати значення true, це розширення може підписувати довільні дані за допомогою всіх ключів, призначених для корпоративного використання. Якщо вибрати значення false, воно не має доступу до таких ключів, а користувач не може надати відповідний дозвіл. Як виняток, розширення може отримати доступ до ключа тільки один раз, за умови, що це ж розширення створило його.</translation> <translation id="3496296378755072552">Диспетчер паролів</translation> +<translation id="3496761649331792755">Увімкнути панель закладок</translation> <translation id="3498109920669229084">Налаштування цього правила визначають, які розширення не потрапляють у чорний список. Значення "<ph name="ALL_EXTENSIONS" />" у чорному списку вказує на те, що всі розширення заборонені й користувачі можуть встановлювати лише ті, які є в білому списку. @@ -3195,6 +3205,7 @@ <translation id="4372704773119750918">Не дозволяти корпоративному користувачу бути частиною мультипрофілю (основним чи другорядним користувачем)</translation> <translation id="4377599627073874279">Дозволяти всім сайтам показувати всі зображення</translation> <translation id="437791893267799639">Правило не налаштовано. Заборонити перенесення даних і ARC</translation> +<translation id="4380159792986204036">Дозволити веб-додатку – терміналу відкривати кілька вікон веб-переглядача на будь-якому екрані</translation> <translation id="4381227367939912539">Вимкнути гру з динозавром</translation> <translation id="4382413175336720282">Перевірки URL-адрес у реальному часі вимкнено.</translation> <translation id="4387741272680827493">За допомогою цього правила можна вказати список імен хостів, які зможуть обходити перетворення протоколу запитів з HTTP на HTTPS за вимогами попереднього завантаження HSTS. @@ -3297,6 +3308,7 @@ <translation id="449423975179525290">Налаштовує правила, пов’язані з <ph name="PLUGIN_VM_NAME" />.</translation> <translation id="449784980858429908">Автоматично дозволяти сайтам підключатися до всіх послідовних портів</translation> <translation id="450080746522343150">Блокувати всі завантаження.</translation> +<translation id="45036050223225148">Вимкнути експериментальне розширення Encrypted ClientHello для TLS</translation> <translation id="4508728400492074981">Керує правилами для функції First-Party Sets.</translation> <translation id="4510923771103268849">Користувач може отримувати доступ до контейнерів Crostini на кореневому рівні</translation> <translation id="4512407512989846472">Дозволяє блокувати копіювання в буфер обміну за вказаними URL-адресами</translation> @@ -3333,6 +3345,7 @@ Якщо це правило не налаштовано, користувач може вимикати будь-який плагін, установлений у системі.</translation> <translation id="4549405078915181477">Увімкнути функцію "Час використання пристрою" для веб-сайтів</translation> <translation id="4554651132977135445">Режим обробки зациклення політики користувача</translation> +<translation id="4554991346503872538">Ніколи не пропонувати переклад</translation> <translation id="4555850956567117258">Вмикає віддалене підтвердження даних для користувача</translation> <translation id="4557134566541205630">URL-адреса сторінки нової вкладки пошукової системи за умовчанням</translation> <translation id="4558166110367609724">Автоматично пропускає Умови використання та завантажує веб-переглядач.</translation> @@ -3702,6 +3715,9 @@ Докладніше про дійсні шаблони URL-адрес можна дізнатися на сторінці https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. <ph name="WILDCARD_VALUE" /> – недопустиме значення для цього правила.</translation> <translation id="4978533099939732984">Завжди показувати сповіщення про те, що на диску замало пам'яті</translation> +<translation id="4979714585847741269">Якщо ввімкнути це правило, веб-додаток – термінал зможе відкривати нове вікно веб-переглядача на тому самому або іншому екрані. Щоб відкрити нове вікно, веб-додаток має викликати функцію JavaScript <ph name="OPEN_NEW_WINDOW_JS" />. + + Якщо вимкнути або не налаштувати це правило, веб-додаток – термінал зможе використовувати лише основне вікно веб-переглядача й не зможе відкривати нове. Виклики функцій JavaScript для відкривання нового вікна ігноруватимуться.</translation> <translation id="4980635395568992380">Тип даних:</translation> <translation id="4983201894483989687">Дозволити запущені плагіни, які є застарілими</translation> <translation id="4986560318567565414">Шлях до Chrome для переходу з альтернативного веб-переглядача.</translation> @@ -3774,6 +3790,7 @@ <translation id="5109383437323376357">Визначати наявність варіантів</translation> <translation id="5124368997194894978">Дозволити запуск під час підключення змінного струму</translation> <translation id="5130213897914754028">Заборонити сайтам використовувати правило SharedArrayBuffers</translation> +<translation id="5130935469849337738">Завжди пропонувати переклад</translation> <translation id="5141670636904227950">Установити тип лупи за умовчанням, яка вмикається на екрані входу</translation> <translation id="5142301680741828703">Завжди відтворювати перелічені шаблони URL-адрес у <ph name="PRODUCT_FRAME_NAME" /></translation> <translation id="5143258831402123447">Сеанси не будуть видимі на сторінці chrome://history/journeys.</translation> @@ -3906,6 +3923,7 @@ Якщо вибрати для правила значення <ph name="POLICY_VALUE_PRIMARY_ACCOUNT_SIGNIN" /> в обліковому записі, під час входу цей обліковий запис можна буде використовувати лише як основний, а роль додаткового буде заборонено.</translation> <translation id="523505283826916779">Налаштування доступності</translation> +<translation id="5238275681097851753">Дозволити блокувати частину контенту <ph name="FLASH_PLUGIN_NAME" /></translation> <translation id="5238976843489093540">Примусово ввімкнути функцію "Швидка пара" (швидке підключення через Bluetooth)</translation> <translation id="52393120393725840">Якщо це правило ввімкнено, <ph name="PRODUCT_NAME" /> запам'ятовуватиме паролі користувачів і надаватиме їх під час наступного входу на сайті. @@ -3972,6 +3990,7 @@ Якщо це правило не налаштовано, користувачі не зможуть грати в гру на зареєстрованих пристроях з <ph name="PRODUCT_OS_NAME" />, але матимуть таку можливість за інших умов.</translation> <translation id="529457411593078576">Увімкнути відображення Умов використання під час першого запуску спеціальної вкладки Chrome</translation> +<translation id="5297948043665200363">Дозволити користувачу залишатися в обліковому записі, коли автентифікація стає недійсною</translation> <translation id="5298949392804966105">Обмежень для керованих облікових записів немає</translation> <translation id="530134925949808452">Час дня (місцевий), коли поновлюється квота на використання.</translation> <translation id="5303080953475303561">Це правило визначає, як часто на заблокованому екрані потрібно вводити пароль, щоб надалі користуватися режимом швидкого розблокування. Якщо екран заблоковано й користувач востаннє вводив пароль давніше, ніж указано в цьому правилі, швидке розблокування буде недоступне. У цьому випадку користувачу потрібно буде ввести пароль, коли він знову перейде до заблокованого екрана чи введе неправильний код (залежно від того, що станеться швидше). @@ -4580,6 +4599,13 @@ У <ph name="MS_WIN_NAME" /> чи <ph name="MAC_OS_NAME" /> це правило діє лише тоді, коли також увімкнено <ph name="PRINT_PDF_AS_IMAGE_AVAILABILITY_POLICY_NAME" />.</translation> <translation id="5932767795525445337">За допомогою цього правила також можна закріпляти додатки Android.</translation> +<translation id="5936193585187054065">Encrypted ClientHello (ECH) – це розширення для TLS, яке шифрує поля повідомлення ClientHello з чутливими даними, а також покращує конфіденційність. + + Якщо це правило не налаштовано або ввімкнено, <ph name="PRODUCT_NAME" /> використовуватиме для ECH процес випуску за умовчанням. Якщо правило вимкнено, <ph name="PRODUCT_NAME" /> не вмикатиме ECH. + + Якщо цю функцію ввімкнено, <ph name="PRODUCT_NAME" /> може використовувати ECH залежно від того, чи підтримує сервер це розширення, доступності запису DNS HTTPS або статусу випуску. + + Робота над протоколом ECH продовжується, тому спосіб його реалізації в <ph name="PRODUCT_NAME" /> може змінитися. Це правило є тимчасовим рішенням, яке контролює реалізацію початкової експериментальної версії. Коли протокол буде готовий, це правило замінять кінцеві налаштування.</translation> <translation id="5939656968921014919">Вимкнути режим розробника ізольованих додатків</translation> <translation id="5945312246863177268">Заборонити користувачам натискати сповіщення, згенероване функцією "Керування телефоном", щоб запускати додаток Eche.</translation> <translation id="5946082169633555022">Бета-версія</translation> @@ -5194,6 +5220,7 @@ Воно не забороняє корпоративним адміністраторам підключатися до керованих пристроїв з <ph name="PRODUCT_OS_NAME" />. Правило не діє, якщо його ввімкнути, не налаштувати або задати для нього пусте значення.</translation> +<translation id="6583249367505445969">Вимкнути панель закладок</translation> <translation id="6584541828182430328">Вимкнути сповіщення про повноекранний режим</translation> <translation id="6593350713192882944">Увімкнути швидкі відповіді</translation> <translation id="6594372503585248865">Увімкнути показ пов’язаного з підключенням інтерфейсу на робочому столі під час активного віддаленого підключення до нього</translation> @@ -5671,6 +5698,7 @@ <translation id="7040229947030068419">Приклад значення:</translation> <translation id="7044883996351280650">Контролює сервіс резервного копіювання та відновлення Android</translation> <translation id="7047495632846973438">Визначає, чи правило щодо дозволів на захоплення екранів вибрано чи пропущено.</translation> +<translation id="7055022222176591388">Заборонити застарілу версію плагіна <ph name="FLASH_PLUGIN_NAME" /></translation> <translation id="7066292150801784098">Заборонити віддаленим користувачам взаємодіяти з вікнами на робочому столі під час сеансів віддаленої допомоги</translation> <translation id="706669471845501145">Дозволяти сайтам показувати сповіщення на робочому столі</translation> <translation id="70681795425744184">Заборонити Віддаленому керуванню Chrome виконувати запити до WebAuthn API, надіслані через проксі-сервер із віддаленого хосту.</translation> @@ -6167,6 +6195,7 @@ Зверніть увагу, що це правило залежить від того, чи стек підтвердження сертифіката операційної системи дозволяє підписи SHA-1. Якщо з оновленням ОС зміниться спосіб обробки сертифікатів SHA-1 операційною системою, це правило може перестати діяти. Окрім того, це правило діє тимчасово, щоб підприємства мали більше часу на зміну алгоритму SHA-1. Правило перестане діяти приблизно 1 січня 2019 року. Якщо це правило не налаштовано або має значення "false", <ph name="PRODUCT_NAME" /> дотримується оголошеного графіку припинення дії SHA-1.</translation> +<translation id="7577082478271919056">Дозволити веб-додатку – терміналу відкривати нове вікно веб-переглядача</translation> <translation id="7578142001795552218">Це правило надає функції "Швидкі відповіді" доступ до вибраного контенту й дозволяє надсилати інформацію на сервер, щоб отримувати результати конвертування одиниць. Якщо правило ввімкнути або не налаштувати, конвертування одиниць у швидких відповідях буде ввімкнено. @@ -6800,9 +6829,6 @@ <translation id="8295496526151576383">Це правило визначає розширення, яким дозволено пропускати вікно підтвердження завдання друку, якщо для його надсилання використовується функція <ph name="PRINTING_API" /> <ph name="SUBMIT_JOB_FUNCTION" />. Якщо розширення немає в списку або список не створено, вікно підтвердження завдання друку показуватиметься під час кожного виклику функції <ph name="SUBMIT_JOB_FUNCTION" />.</translation> -<translation id="829641334878002866">Дає змогу вказати період часу (у мілісекундах) між появою першого сповіщення із запитом перезапустити <ph name="PRODUCT_OS_NAME" />, щоб установити оновлення, і кінцем періоду, зазначеного в правилі <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />. - - Якщо час не налаштовано, для пристроїв із <ph name="PRODUCT_OS_NAME" /> використовується період за умовчанням – 259 200 000 мілісекунд.</translation> <translation id="829703642501504476">Якщо для цього правила вибрано значення True, <ph name="PRODUCT_NAME" /> використовуватиме вбудовані альтернативні сторінки з повідомленням про помилку (наприклад, "Сторінку не знайдено"). Якщо для нього вибрано значення False, <ph name="PRODUCT_NAME" /> ніколи не використовуватиме альтернативні сторінки з повідомленням про помилку. Якщо це правило налаштовано, користувачі не зможуть змінювати його. Якщо це правило не налаштовано, воно буде ввімкненим, але користувачі зможуть змінювати його.</translation> @@ -7495,6 +7521,7 @@ Якщо це правило не налаштовано або його значення не зіставляється зі складанням Quick Fix, то пристрій не буде оновлено. Якщо на пристрої вже встановлено складання Quick Fix, а правило більше не налаштовано або його значення не зіставляється зі складанням Quick Fix, пристрій буде оновлено до звичайного складання за умови, що оновлення не блокується іншим правилом.</translation> <translation id="9051019223077908578">Налаштувати список установлених додатків і розширень на екрані входу</translation> +<translation id="9053841574218808519">Завжди запускати актуальні плагіни</translation> <translation id="9055866143096316150">Запитувати блокування переходу в режим сну не для екрана, а для системи</translation> <translation id="9057444687284972605">Дозволяє вказати список шаблонів URL-адрес сайтів, для яких сертифікат клієнта автоматично вибирається на екрані входу у фреймі з процесом SAML (якщо сайт надсилає запит на сертифікат). Наприклад, можна налаштувати сертифікат для всіх пристроїв, який надається постачальнику ідентифікатора SAML. @@ -7667,6 +7694,7 @@ Примітка: блокування внутрішніх URL-адрес "chrome://*" може призвести до неочікуваних помилок.</translation> <translation id="957778406002650056">URL-адреса, з якої можна завантажити образ <ph name="PLUGIN_VM_NAME" />.</translation> +<translation id="958285142322823422">Заборонити веб-додатку – терміналу відкривати нове вікно веб-переглядача</translation> <translation id="958577147847681221">Контролює, чи <ph name="PRODUCT_OS_NAME" /> дозволяє створювати нові облікові записи користувачів. Якщо для правила вибрати значення false, входити зможуть лише користувачі, указані в правилі <ph name="DEVICE_USER_ALLOWLIST_POLICY_NAME" />.
diff --git a/components/policy/resources/policy_templates_vi.xtb b/components/policy/resources/policy_templates_vi.xtb index 6db42de..157b0ee 100644 --- a/components/policy/resources/policy_templates_vi.xtb +++ b/components/policy/resources/policy_templates_vi.xtb
@@ -13,6 +13,7 @@ Nếu giá trị của chính sách không phải là một miền hợp lệ, thì chính sách sẽ không áp dụng.</translation> <translation id="1004590217607585595">Cài đặt quản lý ứng dụng web</translation> <translation id="1006218396155867129">Không cho phép người dùng truy cập từ xa chuyển và nhận tệp qua máy chủ từ xa</translation> +<translation id="1007149936182752368">Tắt chính sách chỉnh sửa dấu trang</translation> <translation id="1010151305531217567">Chuyển nút chuột chính thành nút phải</translation> <translation id="1011266755572744012">Chỉ định số trang tính tối đa mà người dùng được phép in cho một lệnh in. @@ -75,6 +76,7 @@ Hãy truy cập vào https://support.google.com/chrome/a?p=Supported_directory_variables để xem danh sách các biến có thể dùng. Nếu bạn không đặt chính sách này, thì trình duyệt sẽ sử dụng thư mục hồ sơ mặc định.</translation> +<translation id="1059069692400941670">Tắt chính sách nhập công cụ tìm kiếm mặc định trong lần chạy đầu tiên</translation> <translation id="1062011392452772310">Cho phép chứng thực từ xa cho thiết bị</translation> <translation id="1062407476771304334">Thay thế</translation> <translation id="1069489575852947981">Nếu bạn đặt thành Bật hoặc không đặt chính sách này, thì hệ thống sẽ thiết lập phiên tự động đăng nhập có độ trễ bằng 0 cho tài khoản trên thiết bị. <ph name="PRODUCT_OS_NAME" /> dùng phím tắt Ctrl+Alt+S để bỏ qua phiên tự động đăng nhập và hiển thị màn hình đăng nhập. @@ -93,6 +95,7 @@ <translation id="1082802595100075771">Cho phép người dùng chọn sử dụng một dịch vụ ẩn danh của Google để cung cấp nội dung mô tả tự động cho những hình ảnh chưa gắn nhãn</translation> <translation id="1087437665304381368">Chính sách này chỉ kiểm soát chế độ nhà phát triển của <ph name="PRODUCT_OS_NAME" />. Nếu muốn ngăn khả năng truy cập vào Tùy chọn của nhà phát triển Android, bạn cần đặt chính sách <ph name="DEVELOPER_TOOLS_DISABLED_POLICY_NAME" />.</translation> <translation id="1087707496788636333">Danh sách chính sách của Chrome Enterprise sẽ chuyển sang vị trí mới! Vui lòng cập nhật dấu trang của bạn thành <ph name="POLICY_DOCUMENTATION_URL" />.</translation> +<translation id="1089150222292592899">Tự động điền tên người dùng trên trang SAML IdP</translation> <translation id="1091765729282771296">Cho phép các trang web yêu cầu người dùng cấp quyền truy cập vào thiết bị HID</translation> <translation id="1095209545735032039">Chặn API nối tiếp trên các trang web này</translation> <translation id="1096105751829466145">Nhà cung cấp dịch vụ tìm kiếm mặc định</translation> @@ -1902,6 +1905,7 @@ Nếu bạn tắt chính sách này thì các bản cập nhật cho những thành phần đó sẽ bị vô hiệu hoá. Tuy nhiên, chính sách này không áp dụng cho một số thành phần: các bản cập nhật cho thành phần bất kỳ không chứa mã thực thi và quan trọng đối với tính bảo mật của trình duyệt sẽ không bị vô hiệu hoá. Các danh sách thu hồi chứng chỉ và bộ lọc tài nguyên phụ là một số ví dụ cho loại thành phần nêu trên.</translation> +<translation id="2939335382784544151">Bật chính sách nhập nhật ký duyệt web trong lần chạy đầu tiên</translation> <translation id="2940127076681735544">Nếu bạn đặt chính sách này thành một URL hợp lệ, thì <ph name="PRODUCT_NAME" /> sẽ tải danh sách trang web xuống từ URL đó, rồi áp dụng các quy tắc như thể các quy tắc đó được định cấu hình bằng chính sách <ph name="SITELIST_POLICY_NAME" />. Nếu bạn không đặt chính sách này (hoặc đặt thành một URL không hợp lệ), thì <ph name="PRODUCT_NAME" /> sẽ không dùng chính sách này làm nguồn của các quy tắc chuyển đổi trình duyệt. @@ -2338,6 +2342,7 @@ Nếu bạn không đặt chính sách này, thì người dùng sẽ được chọn hình nền cho màn hình đăng nhập và máy tính.</translation> <translation id="3315324240256767419">Bật tính năng cửa sổ ảo.</translation> +<translation id="3323819750604111729">Bật chính sách nhập dấu trang trong lần chạy đầu tiên</translation> <translation id="332771718998993005">Xác định tên được quảng cáo là đích <ph name="PRODUCT_NAME" />. Nếu bạn đặt chính sách này thành một chuỗi không phải là chuỗi trống, thì chuỗi đó sẽ được sử dụng làm tên của đích <ph name="PRODUCT_NAME" />. Nếu không, tên đích sẽ là tên thiết bị. Nếu bạn không đặt chính sách này, thì tên đích sẽ là tên thiết bị và chủ sở hữu thiết bị (hoặc người dùng từ miền quản lý thiết bị) sẽ được phép thay đổi tên đó. Tên có độ dài tối đa là 24 ký tự.</translation> @@ -2818,6 +2823,7 @@ Việc đặt chính sách thành 2 sẽ chặn quảng cáo xâm nhập trên các trang web.</translation> <translation id="3877517141460819966">Chế độ xác thực hai yếu tố tích hợp</translation> <translation id="3879208481373875102">Định cấu hình danh sách Ứng dụng web buộc cài đặt</translation> +<translation id="3879700444818346084">Tắt chính sách nhập mật khẩu đã lưu trong lần chạy đầu tiên</translation> <translation id="388237772682176890">Chính sách này không được dùng trong M53 nữa và bị xóa trong M54, vì hỗ trợ của SPDY/3.1 đã bị xóa. Không cho phép sử dụng giao thức SPDY trong <ph name="PRODUCT_NAME" />. @@ -3087,6 +3093,7 @@ Trong các phiên kiosk, sẽ không có thời gian gia hạn và không có thông báo về việc khởi động lại. </translation> <translation id="4187576366596772431">Chặn API WebHID trên các trang web này</translation> +<translation id="4190316993598857632">Bật chính sách chỉnh sửa dấu trang</translation> <translation id="4192388905594723944">URL để xác thực mã thông báo xác thực ứng dụng truy cập từ xa</translation> <translation id="4203055629055264833">Nếu bạn đặt chính sách này thành Bật hoặc không đặt, thì người dùng có thể đưa trang kết quả mới đây nhất của công cụ tìm kiếm mặc định vào một bảng điều khiển bên bằng cách bật/tắt một biểu tượng trong thanh công cụ. @@ -3785,6 +3792,7 @@ <translation id="5105313908130842249">Độ trễ khóa màn hình khi chạy trên nguồn pin</translation> <translation id="5108031557082757679">Đã tắt máy in kết nối với thiết bị dành cho doanh nghiệp</translation> <translation id="5109383437323376357">Xác định tình trạng có sẵn của biến</translation> +<translation id="5120168808610189805">Bật chính sách nhập trang chủ trong lần chạy đầu tiên</translation> <translation id="5124368997194894978">Bật tính năng khởi động trên AC (dòng điện xoay chiều)</translation> <translation id="5130213897914754028">Ngăn các trang web sử dụng SharedArrayBuffers</translation> <translation id="5130935469849337738">Luôn cung cấp bản dịch</translation> @@ -4469,6 +4477,7 @@ Hoạt động kiểm tra nói trên sẽ không bắt đầu nếu tính năng Duyệt web an toàn bị tắt (theo chính sách hoặc do người dùng). Để buộc bật tính năng Duyệt web an toàn, hãy dùng chính sách <ph name="SAFE_BROWSING_ENABLED_POLICY_NAME" /> hoặc chính sách <ph name="SAFE_BROWSING_PROTETION_LEVEL_POLICY_NAME" />.</translation> <translation id="5835312413892670446">Chế độ cài đặt chụp ảnh màn hình</translation> <translation id="5836064773277134605">Hạn chế phạm vi cổng UDP được máy chủ truy cập từ xa sử dụng</translation> +<translation id="583627479140113555">Bật chính sách nhập mật khẩu đã lưu trong lần chạy đầu tiên</translation> <translation id="5837898601525273156">Nếu bạn đặt <ph name="DEVICE_ADVANCED_BATTERY_CHARGE_MODE_DAY_CONFIG_POLICY_NAME" /> thì việc đặt <ph name="DEVICE_ADVANCED_BATTERY_CHARGE_MODE_ENABLED_POLICY_NAME" /> thành Bật sẽ luôn bật chính sách quản lý nguồn điện của chế độ sạc pin nâng cao (nếu được hỗ trợ trên thiết bị). Khi sử dụng một thuật toán sạc chuẩn và các kỹ thuật khác ngoài giờ làm việc, chế độ này cho phép người dùng tăng tối đa độ bền của pin. Trong giờ làm việc, hệ thống sử dụng chế độ sạc nhanh nên quá trình sạc pin sẽ nhanh hơn. Hãy chỉ định thời gian mà hệ thống được sử dụng nhiều nhất trong ngày theo thời gian bắt đầu và lượng thời gian. Nếu bạn đặt thành Tắt hoặc không đặt chính sách này, chế độ sạc pin nâng cao sẽ luôn tắt. @@ -4781,6 +4790,13 @@ Hãy chỉ định ứng dụng Chrome theo mã nhận dạng của ứng dụng, chẳng hạn như pjkljhegncpnkpknbcohdijeoejaedia; ứng dụng Android theo tên gói, chẳng hạn như com.google.android.gm; và ứng dụng web theo URL dùng trong <ph name="WEB_APP_INSTALL_FORCE_LIST_POLICY_NAME" />, chẳng hạn như https://google.com/maps. Nếu bạn không đặt chính sách này, thì người dùng có thể thay đổi danh sách ứng dụng được ghim trong trình chạy.</translation> +<translation id="6183409603139321084"><ph name="PRODUCT_OS_NAME" /> có thể cố gắng tự động điền vào trường tên người dùng trên trang SAML IdP trong quá trình xác thực trực tuyến trên màn hình đăng nhập và màn hình khoá. + + Chế độ cài đặt này sẽ sử dụng địa chỉ email được liên kết với hồ sơ <ph name="PRODUCT_OS_NAME" /> của người dùng. Do đó, bạn nên tắt chế độ này nếu dự kiến rằng người dùng sẽ sử dụng nhiều địa chỉ email trên trang SAML IdP. + + Chuỗi nhận được qua chính sách này sẽ được dùng làm tên tham số URL trên trang IdP và địa chỉ email của người dùng sẽ được sử dụng làm một giá trị. + + Theo dự kiến, phía máy chủ sẽ chịu trách nhiệm về việc liên kết giữa Nhà cung cấp danh tính và tham số URL mà Nhà cung cấp danh tính hỗ trợ.</translation> <translation id="6190367314942602985">Báo cáo thông tin nhận dạng người dùng</translation> <translation id="6191963383731098056">Chính sách này cho phép quản trị viên định cấu hình màu cho giao diện của <ph name="PRODUCT_NAME" />. Chuỗi đầu vào sẽ phải là một chuỗi màu hợp lệ theo hệ thập lục phân khớp với định dạng "#RRGGBB". @@ -5311,6 +5327,7 @@ Hãy chỉ định hàm băm <ph name="SUBJECT_PUBLIC_KEY_INFO" /> bằng cách liên kết tên thuật toán hàm băm, một dấu gạch chéo và phương thức mã hóa Base64 của thuật toán hàm băm đó, áp dụng cho <ph name="SUBJECT_PUBLIC_KEY_INFO" /> được mã hóa theo DER (Quy tắc mã hóa phân biệt) của chứng chỉ đã chỉ định. Định dạng mã hóa Base64 trùng khớp với định dạng của Vân tay số SPKI. Thuật toán hàm băm duy nhất mà hệ thống nhận dạng được là sha256. Các thuật toán hàm băm khác đều bị bỏ qua. Không đặt chính sách này đồng nghĩa với việc nếu bạn không tiết lộ những chứng chỉ buộc phải tiết lộ thông qua Tính minh bạch của chứng chỉ, thì <ph name="PRODUCT_NAME" /> sẽ không tin cậy những chứng chỉ đó.</translation> +<translation id="6703381779632216549">Bật chính sách nhập công cụ tìm kiếm mặc định trong lần chạy đầu tiên</translation> <translation id="6704445641918520643">Bật chế độ tải Lazy Login WebUI.</translation> <translation id="6704515759227307131">Chính sách này không còn dùng nữa và đã được thay thế bằng AdvancedProtectionAllowed. @@ -6306,6 +6323,7 @@ <translation id="77379430721695807">Nếu đặt chính sách này, bạn có thể chỉ định danh sách các mẫu URL sẽ được so khớp với nguồn bảo mật của URL yêu cầu. Nếu khớp, URL này sẽ có quyền truy cập vào thiết bị quay video mà không cần nhắc người dùng Để biết thông tin chi tiết về mẫu <ph name="URL_LABEL" /> hợp lệ, vui lòng xem tại https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation> +<translation id="7740644123648617252">Bật chính sách nhập dữ liệu từ biểu mẫu tự động điền trong lần chạy đầu tiên</translation> <translation id="7744253761377202223">Tỷ lệ phần trăm độ sáng màn hình khi chạy bằng nguồn điện AC</translation> <translation id="7747447585227954402">Cho phép thiết bị sử dụng một <ph name="PLUGIN_VM_NAME" /> trên <ph name="PRODUCT_OS_NAME" /></translation> <translation id="7749024457938190837">Những tiện ích được phép bỏ qua hộp thoại xác nhận khi gửi lệnh in qua API chrome.printing</translation> @@ -6463,6 +6481,7 @@ <translation id="7925224837072026018">Khi bạn đặt chính sách này, hệ thống sẽ cấp cho các tiện ích hoặc ứng dụng Android quyền truy cập vào khóa công ty. Khóa được chỉ định để chỉ sử dụng trong công ty nếu được tạo bằng API chrome.enterprise.platformKeys trong một tài khoản được quản lý. Người dùng không thể cấp hay thu hồi quyền truy cập vào khóa công ty đối với các tiện ích hoặc ứng dụng Android. Theo mặc định, một tiện ích hoặc ứng dụng Android không thể dùng khóa được chỉ định để sử dụng trong công ty, điều này tương đương với việc đặt allowCorporateKeyUsage thành Tắt cho tiện ích/ứng dụng đó. Chỉ khi bạn đặt allowCorporateKeyUsage thành Bật cho một tiện ích hoặc ứng dụng Android, thì tiện ích/ứng dụng đó mới có thể dùng khóa nền tảng được đánh dấu để sử dụng trong công ty nhằm ký dữ liệu tùy ý. Chỉ cấp quyền này nếu bạn tin tưởng rằng tiện ích hoặc ứng dụng Android sẽ ngăn những kẻ tấn công truy cập vào khóa.</translation> +<translation id="793188693675675950">Tắt chính sách nhập trang chủ trong lần chạy đầu tiên</translation> <translation id="7933141401888114454">Cho phép tạo người dùng được giám sát</translation> <translation id="793473937901685727">Đặt mức độ khả dụng của chứng chỉ cho ứng dụng ARC</translation> <translation id="7936302526928951356">Chuỗi User-Agent sẽ không làm phiên bản lớn dừng lại.</translation> @@ -6810,9 +6829,6 @@ <translation id="8295496526151576383">Chính sách này chỉ định các tiện ích được phép bỏ qua hộp thoại xác nhận lệnh in khi dùng hàm <ph name="SUBMIT_JOB_FUNCTION" /> của <ph name="PRINTING_API" /> để gửi lệnh in. Nếu một tiện ích không có trong danh sách này hoặc danh sách này chưa được đặt, thì hộp thoại xác nhận lệnh in sẽ hiển thị với người dùng đối với mọi lệnh gọi hàm <ph name="SUBMIT_JOB_FUNCTION" />.</translation> -<translation id="829641334878002866">Cho phép bạn đặt khoảng thời gian tính bằng mili giây, từ lúc nhận được thông báo đầu tiên cho biết phải khởi động lại thiết bị <ph name="PRODUCT_OS_NAME" /> để áp dụng một bản cập nhật đang chờ xử lý đến lúc kết thúc khoảng thời gian được chỉ định trong chính sách <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />. - - Nếu bạn không đặt chính sách này, thì khoảng thời gian mặc định là 259200000 mili giây (3 ngày) sẽ được dùng cho các thiết bị <ph name="PRODUCT_OS_NAME" />.</translation> <translation id="829703642501504476">Nếu bạn đặt chính sách này thành True, thì <ph name="PRODUCT_NAME" /> sẽ sử dụng các trang thông báo lỗi thay thế tích hợp (chẳng hạn như "không tìm thấy trang"). Nếu bạn đặt chính sách này thành False, thì <ph name="PRODUCT_NAME" /> sẽ không bao giờ sử dụng các trang thông báo lỗi thay thế. Nếu bạn đặt chính sách này, thì người dùng sẽ không thể thay đổi được. Nếu bạn không đặt chính sách này, thì chính sách sẽ bật nhưng người dùng có thể thay đổi tùy chọn cài đặt này.</translation> @@ -7131,6 +7147,7 @@ Từ <ph name="PRODUCT_NAME" /> phiên bản 92, chính sách này cũng được hỗ trợ ở chế độ không có giao diện người dùng. Lưu ý: Việc chặn các URL chrome://* nội bộ có thể dẫn đến lỗi không mong muốn.</translation> +<translation id="8619748440665904084">Tắt chính sách nhập dữ liệu từ biểu mẫu tự động điền trong lần chạy đầu tiên</translation> <translation id="8623672932476443039">Thao tác thiết lập chính sách này thành Bật sẽ cho phép người dùng truy cập Chế độ nhà phát triển cho các ứng dụng tách biệt. Nếu bạn thiết lập chính sách này thành Tắt, người dùng sẽ không truy cập được những tính năng này. Nếu bạn không thiết lập chính sách này, tất cả người dùng và hệ điều hành đều được phép sử dụng chế độ mặc định, trừ những người dùng do doanh nghiệp quản lý trên ChromeOS.</translation> @@ -7177,6 +7194,7 @@ Nếu bạn đặt thành Tắt hoặc không đặt chính sách này, thì máy chủ truy cập từ xa có thể được liên kết với bất kỳ người dùng nào trên máy.</translation> <translation id="867708016260789630">Buộc Chế độ hạn chế trên YouTube tối thiểu ở mức Trung bình</translation> <translation id="8677853537025397834">Cho phép API WebHID trên những trang web này</translation> +<translation id="8685018726115727387">Tắt chính sách nhập nhật ký duyệt web trong lần chạy đầu tiên</translation> <translation id="8685024486845674965">Cảnh báo bảo vệ mật khẩu được kích hoạt bằng cách sử dụng lại mật khẩu</translation> <translation id="8685680544554917389">Nếu bạn đặt chính sách này thành True, thì <ph name="PRODUCT_NAME" /> có thể tự động phát nội dung nghe nhìn. Nếu bạn đặt chính sách này thành False, thì <ph name="PRODUCT_NAME" /> sẽ không tự động phát nội dung nghe nhìn. @@ -7548,6 +7566,7 @@ Nếu bạn đặt chính sách này thành Tắt, thiết bị đã đăng ký sẽ không ghi hoặc báo cáo thời gian hoạt động.</translation> <translation id="9077227880520270584">Hẹn giờ tự động đăng nhập vào tài khoản trên thiết bị</translation> +<translation id="9079531125758468956">Tắt chính sách nhập dấu trang trong lần chạy đầu tiên</translation> <translation id="9084985621503260744">Chỉ định xem hoạt động video có ảnh hưởng đến việc quản lý nguồn không</translation> <translation id="9087434639296483430">Báo cáo cho người dùng về các lần đăng nhập/đăng xuất trên các thiết bị đã đăng ký, bao gồm cả các lần đăng nhập không thành công.
diff --git a/components/policy/resources/policy_templates_zh-CN.xtb b/components/policy/resources/policy_templates_zh-CN.xtb index dd15230..06f8f3ea 100644 --- a/components/policy/resources/policy_templates_zh-CN.xtb +++ b/components/policy/resources/policy_templates_zh-CN.xtb
@@ -3130,6 +3130,7 @@ <translation id="4372704773119750918">不允许企业用户成为多用户配置的用户(一级或二级)</translation> <translation id="4377599627073874279">允许所有网站显示所有图片</translation> <translation id="437791893267799639">政策未设置,禁止数据迁移和 ARC</translation> +<translation id="4380159792986204036">允许 Web 自助服务终端在任意屏幕上打开多个浏览器窗口</translation> <translation id="4381227367939912539">禁止玩恐龙复活节彩蛋游戏</translation> <translation id="4382413175336720282">已停用实时网址检查功能。</translation> <translation id="4387741272680827493">通过设置此政策,您可以指定一系列可绕过预加载的 HSTS 升级(从 HTTP 升级到 HTTPS)的主机名。 @@ -3636,6 +3637,9 @@ 如需详细了解有效网址格式,请访问 https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns。<ph name="WILDCARD_VALUE" /> 不是此政策可接受的值。</translation> <translation id="4978533099939732984">一律显示磁盘空间不足警告</translation> +<translation id="4979714585847741269">如果此政策已启用,自助服务终端 Web 应用可再打开一个浏览器窗口,而且该窗口既可位于同一屏幕上,也可位于另一屏幕上。若要打开一个新窗口,Web 应用应调用 JavaScript 函数 <ph name="OPEN_NEW_WINDOW_JS" />。 + + 如果此政策已停用或未设置,自助服务终端 Web 应用只能使用主浏览器窗口,无法打开一个新窗口。对任何用于打开新窗口的 JavaScript 函数的调用都会被忽略。</translation> <translation id="4980635395568992380">数据类型:</translation> <translation id="4983201894483989687">允许运行过期的插件</translation> <translation id="4986560318567565414">控制用于从替代浏览器切换至 Chrome 的路径。</translation> @@ -6065,6 +6069,7 @@ 请注意,此政策取决于操作系统证书验证堆栈是否允许 SHA-1 签名。如果操作系统更新更改了操作系统处理 SHA-1 证书的方式,则此政策可能不再有效。此外,此政策仅用作临时解决方法,旨在为企业提供更多时间来弃用 SHA-1。系统将于 2019 年 1 月 1 日(或左右)取消此政策。 如果此政策未设置或设置为 false,则 <ph name="PRODUCT_NAME" /> 会遵循公开发布的 SHA-1 停用时间表。</translation> +<translation id="7577082478271919056">允许自助服务终端 Web 应用再打开一个浏览器窗口</translation> <translation id="7578142001795552218">此政策旨在授权快速解答功能访问所选内容并将相关信息发送给服务器,以获得单位换算结果。 如果此政策已启用或未设置,系统将启用快速解答单位换算功能。 @@ -6695,9 +6700,6 @@ <translation id="8295496526151576383">此政策旨在以列表形式指定:哪些扩展程序能够在使用 <ph name="PRINTING_API" /> 函数 <ph name="SUBMIT_JOB_FUNCTION" /> 发送打印任务时跳过打印任务确认对话框。 如果此列表不含任何扩展程序,或者未设置此列表,系统将针对每次 <ph name="SUBMIT_JOB_FUNCTION" /> 函数调用向用户显示打印任务确认对话框。</translation> -<translation id="829641334878002866">您可以设置一个时间段(以毫秒为单位),从而指定第一条通知(提示用户必须重启 <ph name="PRODUCT_OS_NAME" />设备以安装更新)的发出时间应与 <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" /> 政策所设时间段的结束时间相隔多久。 - - 如果未做设置,系统将会在 <ph name="PRODUCT_OS_NAME" />设备上使用默认时间段,即 259200000 毫秒(3 天)。</translation> <translation id="829703642501504476">如果此政策设为 True,<ph name="PRODUCT_NAME" /> 会使用内置的备用错误页面(例如“找不到网页”)。如果此政策设为 False,<ph name="PRODUCT_NAME" /> 将一律不使用备用错误页面。 如果您设置了此政策,用户便无法更改它。如果您未设置此政策,系统会开启它,但用户可以更改此设置。</translation> @@ -7546,6 +7548,7 @@ 注意:屏蔽内部 chrome://* 网址可能会导致意外的错误。</translation> <translation id="957778406002650056">可供下载相应 <ph name="PLUGIN_VM_NAME" /> 图片的网址。</translation> +<translation id="958285142322823422">禁止自助服务终端 Web 应用再打开一个浏览器窗口</translation> <translation id="958577147847681221">控制 <ph name="PRODUCT_OS_NAME" />是否允许创建新的用户帐号。 如果此政策设为 false,只有 <ph name="DEVICE_USER_ALLOWLIST_POLICY_NAME" /> 中列出的用户才能登录。
diff --git a/components/policy/resources/policy_templates_zh-TW.xtb b/components/policy/resources/policy_templates_zh-TW.xtb index bc122bc..0938f74c 100644 --- a/components/policy/resources/policy_templates_zh-TW.xtb +++ b/components/policy/resources/policy_templates_zh-TW.xtb
@@ -6502,6 +6502,21 @@ 如果啟用或不設定這項政策,網站可以檢查使用者是否已有已儲存的付款方式。</translation> <translation id="8118665053362250806">設定媒體磁碟快取大小</translation> <translation id="8124468781472887384">裝置印表機設定存取權政策。</translation> +<translation id="8128020091920875372">你可以透過這項政策指定要以無訊息方式 (使用者無需操作) 安裝的應用程式和擴充功能清單,使用者無法解除安裝或停用這些應用程式和擴充功能。系統會直接授予 enterprise.deviceAttributes 和 enterprise.platformKeys 擴充功能 API 等權限 (非強制安裝的應用程式和擴充功能無法取得這 2 個 API 的權限)。 + + 如果不設定這項政策,系統不會自動安裝任何應用程式或擴充功能,且使用者可以在 <ph name="PRODUCT_NAME" /> 中解除安裝任何應用程式或擴充功能。 + + 這項政策會取代 <ph name="EXTENSION_INSTALL_BLOCKLIST_POLICY_NAME" /> 政策。如果從這份清單中移除先前強制安裝的應用程式或擴充功能,<ph name="PRODUCT_NAME" /> 會自動將該應用程式或擴充功能解除安裝。 + + 在 <ph name="MS_WIN_NAME" /> 執行個體上,執行個體必須加入 <ph name="MS_AD_NAME" /> 網域、在 Windows 10 專業版上執行,或是已註冊 Chrome 瀏覽器雲端管理服務,系統才能強制安裝來自 Chrome 線上應用程式商店以外的應用程式和擴充功能。 + + 在 <ph name="MAC_OS_NAME" /> 執行個體上,執行個體必須透過行動裝置管理 (MDM) 進行管理或透過 MCX 加入網域,系統才能強制安裝並非來自 Chrome 線上應用程式商店的應用程式和擴充功能。 + + 使用者可透過開發人員工具變更任何擴充功能的原始碼,但可能會導致擴充功能無法正常運作。如有疑慮,請設定 <ph name="DEVELOPER_TOOLS_DISABLED_POLICY_NAME" /> 政策。 + + 這項政策的每個清單項目都是一行字串,其中包含以分號 (;) 區隔的擴充功能 ID 和「更新」網址 (選用)。擴充功能 ID 為 32 個字母的字串,你可以在開發人員模式下前往 chrome://extensions 等位置查看這類字串。「更新」網址 (如有指定) 應指向更新資訊清單 XML 文件 ( https://developer.chrome.com/extensions/autoupdate )。根據預設,系統會使用 Chrome 線上應用程式商店的更新網址。這項政策設定的「更新」網址僅適用於初次安裝,後續的擴充功能更新將使用擴充功能資訊清單中的更新網址。 + + 注意:這項政策不適用於無痕模式。請前往以下頁面,閱讀有關代管擴充功能的資訊:https://developer.chrome.com/extensions/hosting。</translation> <translation id="8128192446158421884">可套用 AutoOpenFileTypes 的網址</translation> <translation id="8131046602440880289">允許在使用隨選朗讀時使用加強型網路文字轉語音功能</translation> <translation id="8133152694354699657">如果將這項政策設為 True 或不設定,使用者將可使用「輕觸搜尋」功能,並且可以啟用或停用這項功能。 @@ -6698,9 +6713,6 @@ <translation id="8295496526151576383">這項政策可指定哪些擴充功能在使用 <ph name="PRINTING_API" /> 函式 <ph name="SUBMIT_JOB_FUNCTION" /> 傳送列印工作時,可以略過列印工作確認對話方塊。 如果清單中未包含任何擴充功能,或是未設定清單,則使用者每次使用 <ph name="SUBMIT_JOB_FUNCTION" /> 函式呼叫時,系統都會顯示列印工作確認對話方塊。</translation> -<translation id="829641334878002866">這項政策可讓你設定以下作業的時間範圍 (以毫秒為單位):從系統第一次通知使用者重新啟動 <ph name="PRODUCT_OS_NAME" />裝置以套用待處理的更新開始,到 <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" /> 政策指定的結束時間為止。 - - 如果不設定這項政策,<ph name="PRODUCT_OS_NAME" />裝置會使用 259200000 毫秒 (三天) 做為預設時間範圍。</translation> <translation id="829703642501504476">如果將這項政策設為 True,<ph name="PRODUCT_NAME" /> 會使用內建的替代錯誤頁面 (例如「找不到網頁」)。如果將這項政策設為 False,<ph name="PRODUCT_NAME" /> 一律不會使用替代錯誤頁面。 如果設定這項政策,使用者將無法變更。如果未設定,系統會啟用這項政策,但使用者可以變更這項設定。</translation>
diff --git a/components/services/font/font_service_app.cc b/components/services/font/font_service_app.cc index 17346643..a4e4dc87 100644 --- a/components/services/font/font_service_app.cc +++ b/components/services/font/font_service_app.cc
@@ -259,6 +259,7 @@ std::move(callback).Run(nullptr); } +#if BUILDFLAG(ENABLE_PDF) void FontServiceApp::MatchFontWithFallback( const std::string& family, bool is_bold, @@ -268,7 +269,6 @@ MatchFontWithFallbackCallback callback) { TRACE_EVENT0("fonts", "FontServiceApp::MatchFontWithFallback"); -#if BUILDFLAG(ENABLE_PDF) base::File matched_font_file; int font_file_descriptor = MatchFontFaceWithFallback( family, is_bold, is_italic, charset, fallbackFamilyType); @@ -276,10 +276,8 @@ if (!matched_font_file.IsValid()) matched_font_file = base::File(); std::move(callback).Run(std::move(matched_font_file)); -#else - NOTREACHED(); -#endif } +#endif // BUILDFLAG(ENABLE_PDF) size_t FontServiceApp::FindOrAddPath(const base::FilePath& path) { TRACE_EVENT1("fonts", "FontServiceApp::FindOrAddPath", "path",
diff --git a/components/services/font/font_service_app.h b/components/services/font/font_service_app.h index 2b2aac7..50f1e48 100644 --- a/components/services/font/font_service_app.h +++ b/components/services/font/font_service_app.h
@@ -13,6 +13,7 @@ #include "base/files/file_path.h" #include "components/services/font/public/mojom/font_service.mojom.h" #include "mojo/public/cpp/bindings/receiver_set.h" +#include "pdf/buildflags.h" #include "third_party/skia/include/core/SkFontStyle.h" namespace font_service { @@ -49,12 +50,15 @@ void MatchFontByPostscriptNameOrFullFontName( const std::string& family, MatchFontByPostscriptNameOrFullFontNameCallback callback) override; +#if BUILDFLAG(ENABLE_PDF) void MatchFontWithFallback(const std::string& family, bool is_bold, bool is_italic, uint32_t charset, uint32_t fallbackFamilyType, MatchFontWithFallbackCallback callback) override; +#endif // BUILDFLAG(ENABLE_PDF) + size_t FindOrAddPath(const base::FilePath& path); mojo::ReceiverSet<mojom::FontService> receivers_;
diff --git a/components/services/font/public/cpp/BUILD.gn b/components/services/font/public/cpp/BUILD.gn index 259f116..02efe68 100644 --- a/components/services/font/public/cpp/BUILD.gn +++ b/components/services/font/public/cpp/BUILD.gn
@@ -17,6 +17,7 @@ "//components/services/font/public/mojom", "//mojo/public/cpp/bindings", "//mojo/public/cpp/system", + "//pdf:buildflags", "//skia", ] }
diff --git a/components/services/font/public/cpp/font_loader.cc b/components/services/font/public/cpp/font_loader.cc index 4be7f11..b7e2834 100644 --- a/components/services/font/public/cpp/font_loader.cc +++ b/components/services/font/public/cpp/font_loader.cc
@@ -10,6 +10,7 @@ #include "base/memory/ref_counted.h" #include "base/trace_event/trace_event.h" #include "components/services/font/public/cpp/font_service_thread.h" +#include "pdf/buildflags.h" namespace font_service { @@ -98,6 +99,7 @@ std::move(postscript_name_or_full_font_name), out_identity); } +#if BUILDFLAG(ENABLE_PDF) void FontLoader::MatchFontWithFallback(std::string family, bool is_bold, bool is_italic, @@ -107,6 +109,7 @@ thread_->MatchFontWithFallback(std::move(family), is_bold, is_italic, charset, fallback_family_type, out_font_file_handle); } +#endif // BUILDFLAG(ENABLE_PDF) void FontLoader::OnMappedFontFileDestroyed(internal::MappedFontFile* f) { TRACE_EVENT1("fonts", "FontLoader::OnMappedFontFileDestroyed", "identity",
diff --git a/components/services/font/public/cpp/font_loader.h b/components/services/font/public/cpp/font_loader.h index 3496a95..4744a28 100644 --- a/components/services/font/public/cpp/font_loader.h +++ b/components/services/font/public/cpp/font_loader.h
@@ -12,6 +12,7 @@ #include "components/services/font/public/cpp/mapped_font_file.h" #include "components/services/font/public/mojom/font_service.mojom.h" #include "mojo/public/cpp/bindings/pending_remote.h" +#include "pdf/buildflags.h" #include "third_party/skia/include/core/SkStream.h" #include "third_party/skia/include/core/SkTypeface.h" #include "third_party/skia/include/ports/SkFontConfigInterface.h" @@ -73,6 +74,7 @@ std::string postscript_name_or_full_font_name, mojom::FontIdentityPtr* out_identity); +#if BUILDFLAG(ENABLE_PDF) // Out parameter out_font_file_handle should always be an opened file handle // to a matched or default font file. out_font_file_handle is a default // initialized base::File on error. @@ -82,6 +84,7 @@ uint32_t charset, uint32_t fallbackFamilyType, base::File* out_font_file_handle); +#endif // BUILDFLAG(ENABLE_PDF) private: // internal::MappedFontFile::Observer:
diff --git a/components/services/font/public/cpp/font_service_thread.cc b/components/services/font/public/cpp/font_service_thread.cc index 85d8956e..38ad3047 100644 --- a/components/services/font/public/cpp/font_service_thread.cc +++ b/components/services/font/public/cpp/font_service_thread.cc
@@ -11,6 +11,7 @@ #include "base/synchronization/waitable_event.h" #include "base/task/thread_pool.h" #include "components/services/font/public/cpp/mapped_font_file.h" +#include "pdf/buildflags.h" namespace font_service { namespace internal { @@ -110,6 +111,7 @@ return out_valid; } +#if BUILDFLAG(ENABLE_PDF) void FontServiceThread::MatchFontWithFallback( std::string family, bool is_bold, @@ -126,6 +128,7 @@ charset, fallback_family_type, out_font_file_handle)); done_event.Wait(); } +#endif // BUILDFLAG(ENABLE_PDF) scoped_refptr<MappedFontFile> FontServiceThread::OpenStream( const SkFontConfigInterface::FontIdentity& identity) { @@ -367,6 +370,7 @@ done_event->Signal(); } +#if BUILDFLAG(ENABLE_PDF) void FontServiceThread::MatchFontWithFallbackImpl( base::WaitableEvent* done_event, std::string family, @@ -400,6 +404,7 @@ *out_font_file_handle = std::move(file); done_event->Signal(); } +#endif // BUILDFLAG(ENABLE_PDF) void FontServiceThread::OnFontServiceDisconnected() { std::set<base::WaitableEvent*> events;
diff --git a/components/services/font/public/cpp/font_service_thread.h b/components/services/font/public/cpp/font_service_thread.h index 2aba478..e7f2639a 100644 --- a/components/services/font/public/cpp/font_service_thread.h +++ b/components/services/font/public/cpp/font_service_thread.h
@@ -14,6 +14,7 @@ #include "components/services/font/public/mojom/font_service.mojom.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/remote.h" +#include "pdf/buildflags.h" #include "third_party/skia/include/core/SkStream.h" #include "third_party/skia/include/core/SkTypeface.h" #include "third_party/skia/include/ports/SkFontConfigInterface.h" @@ -69,12 +70,15 @@ bool MatchFontByPostscriptNameOrFullFontName( std::string postscript_name_or_full_font_name, mojom::FontIdentityPtr* out_identity); + +#if BUILDFLAG(ENABLE_PDF) void MatchFontWithFallback(std::string family, bool is_bold, bool is_italic, uint32_t charset, uint32_t fallbackFamilyType, base::File* out_font_file_handle); +#endif // BUILDFLAG(ENABLE_PDF) private: friend class base::RefCountedThreadSafe<FontServiceThread>; @@ -162,6 +166,7 @@ mojom::FontIdentityPtr* out_font_identity, mojom::FontIdentityPtr font_identity); +#if BUILDFLAG(ENABLE_PDF) void MatchFontWithFallbackImpl(base::WaitableEvent* done_event, std::string family, bool is_bold, @@ -172,6 +177,7 @@ void OnMatchFontWithFallbackComplete(base::WaitableEvent* done_event, base::File* out_font_file_handle, base::File file); +#endif // BUILDFLAG(ENABLE_PDF) // Connection to |font_service_| has gone away. Called on the background // thread.
diff --git a/components/services/font/public/mojom/BUILD.gn b/components/services/font/public/mojom/BUILD.gn index d6c3ea1..aa6ee51c 100644 --- a/components/services/font/public/mojom/BUILD.gn +++ b/components/services/font/public/mojom/BUILD.gn
@@ -3,9 +3,16 @@ # found in the LICENSE file. import("//mojo/public/tools/bindings/mojom.gni") +import("//pdf/features.gni") mojom("mojom") { sources = [ "font_service.mojom" ] public_deps = [ "//mojo/public/mojom/base" ] + + enabled_features = [] + + if (enable_pdf) { + enabled_features += [ "enable_pdf" ] + } }
diff --git a/components/services/font/public/mojom/font_service.mojom b/components/services/font/public/mojom/font_service.mojom index 242d1913..503dd342 100644 --- a/components/services/font/public/mojom/font_service.mojom +++ b/components/services/font/public/mojom/font_service.mojom
@@ -91,6 +91,7 @@ (FontIdentity? identity); // PDF-specific font call to match a font family and charset. + [EnableIf=enable_pdf] MatchFontWithFallback(string family, bool is_bold, bool is_italic, uint32 charset, uint32 fallback_family_type) => (mojo_base.mojom.ReadOnlyFile? font_file_handle);
diff --git a/components/strings/components_strings_as.xtb b/components/strings/components_strings_as.xtb index 4523df2..d7335252 100644 --- a/components/strings/components_strings_as.xtb +++ b/components/strings/components_strings_as.xtb
@@ -1463,6 +1463,7 @@ <translation id="4969341057194253438">ৰেকৰ্ডিং মচক</translation> <translation id="4973922308112707173">ওপৰৰ অংশত দুবাৰ পাঞ্চ কৰক</translation> <translation id="4976702386844183910">শেষবাৰে <ph name="DATE" /> তাৰিখে চাইছে</translation> +<translation id="498323057460789381">স্কীমা সত্যাপন সম্পৰ্কীয় আসোঁৱাহ: <ph name="ERROR" /></translation> <translation id="4984088539114770594">মাইক্র’ফ’ন ব্যৱহাৰ কৰিবনে?</translation> <translation id="4984339528288761049">Prc5 (লেফাফা)</translation> <translation id="4989163558385430922">সকলো চাওক</translation>
diff --git a/components/strings/components_strings_az.xtb b/components/strings/components_strings_az.xtb index b7fc9c1..98e0069d 100644 --- a/components/strings/components_strings_az.xtb +++ b/components/strings/components_strings_az.xtb
@@ -2728,6 +2728,7 @@ <translation id="8508648098325802031">Axtarış işarəsi</translation> <translation id="8511402995811232419">Kukiləri idarə edin</translation> <translation id="851353418319061866">Dəqiqliyin Yoxlanması</translation> +<translation id="8513580896341796021">Endirmə başladı. Ona baxmaq üçün |<ph name="ACCELERATOR" />| seçiminə basın.</translation> <translation id="8519753333133776369">Administratorunuz tərəfindən icazə verilən HID cihazı</translation> <translation id="8522552481199248698">Chrome Google Hesabınızı qorumağa və parolu dəyişməyə kömək edə bilər.</translation> <translation id="8530813470445476232">Baxış tarixçəsi, kukilər, keş və daha çoxunu Chrome ayarlarında təmizləyin</translation>
diff --git a/components/strings/components_strings_da.xtb b/components/strings/components_strings_da.xtb index 693df48..3f2a0be 100644 --- a/components/strings/components_strings_da.xtb +++ b/components/strings/components_strings_da.xtb
@@ -1467,6 +1467,7 @@ <translation id="4969341057194253438">Slet optagelse</translation> <translation id="4973922308112707173">To huller øverst</translation> <translation id="4976702386844183910">Senest besøgt <ph name="DATE" /></translation> +<translation id="498323057460789381">Skemavalideringsfejl: <ph name="ERROR" /></translation> <translation id="4984088539114770594">Vil du bruge mikrofonen?</translation> <translation id="4984339528288761049">Prc5 (Envelope)</translation> <translation id="4989163558385430922">Se alle</translation>
diff --git a/components/strings/components_strings_el.xtb b/components/strings/components_strings_el.xtb index 6ae266b..088426c9 100644 --- a/components/strings/components_strings_el.xtb +++ b/components/strings/components_strings_el.xtb
@@ -1470,6 +1470,7 @@ <translation id="4969341057194253438">Διαγραφή εγγραφής</translation> <translation id="4973922308112707173">Διπλό τρύπημα στο επάνω μέρος</translation> <translation id="4976702386844183910">Τελευταία επίσκεψη <ph name="DATE" /></translation> +<translation id="498323057460789381">Σφάλμα επικύρωσης σχήματος: <ph name="ERROR" /></translation> <translation id="4984088539114770594">Χρήση μικροφώνου;</translation> <translation id="4984339528288761049">Prc5 (Φάκελος)</translation> <translation id="4989163558385430922">Εμφάνιση όλων</translation>
diff --git a/components/strings/components_strings_en-GB.xtb b/components/strings/components_strings_en-GB.xtb index d9c337a..a3a590b7 100644 --- a/components/strings/components_strings_en-GB.xtb +++ b/components/strings/components_strings_en-GB.xtb
@@ -1467,6 +1467,7 @@ <translation id="4969341057194253438">Delete recording</translation> <translation id="4973922308112707173">Dual punch top</translation> <translation id="4976702386844183910">Last visited <ph name="DATE" /></translation> +<translation id="498323057460789381">Schema validation error: <ph name="ERROR" /></translation> <translation id="4984088539114770594">Use microphone?</translation> <translation id="4984339528288761049">Prc5 (Envelope)</translation> <translation id="4989163558385430922">See all</translation> @@ -2260,6 +2261,7 @@ <translation id="7238585580608191973">SHA-256 fingerprint</translation> <translation id="7240120331469437312">Certificate Subject Alternative Name</translation> <translation id="7243010569062352439"><ph name="PASSWORDS" />; <ph name="SIGNIN_DATA" /></translation> +<translation id="7244465398154211886">{NUM_MATCHES,plural, =1{# match}other{# matches}}</translation> <translation id="724691107663265825">The site ahead contains malware</translation> <translation id="724975217298816891">Enter the expiry date and CVC for <ph name="CREDIT_CARD" /> to update your card details. Once you've confirmed, your card details will be shared with this site.</translation> <translation id="7251437084390964440">The network configuration doesn't comply to the ONC standard. Parts of the configuration may not be imported. @@ -2731,6 +2733,7 @@ <translation id="8508648098325802031">Search icon</translation> <translation id="8511402995811232419">Manage cookies</translation> <translation id="851353418319061866">Accuracy check</translation> +<translation id="8513580896341796021">Download started. To see it, press |<ph name="ACCELERATOR" />|.</translation> <translation id="8519753333133776369">HID device allowed by your administrator</translation> <translation id="8522552481199248698">Chrome can help you protect your Google account and change your password.</translation> <translation id="8530813470445476232">Clear your browsing history, cookies, cache and more in Chrome settings</translation>
diff --git a/components/strings/components_strings_fil.xtb b/components/strings/components_strings_fil.xtb index 600a416a..d99cb128 100644 --- a/components/strings/components_strings_fil.xtb +++ b/components/strings/components_strings_fil.xtb
@@ -1467,6 +1467,7 @@ <translation id="4969341057194253438">I-delete ang recording</translation> <translation id="4973922308112707173">Dual punch top</translation> <translation id="4976702386844183910">Huling binisita noong <ph name="DATE" /></translation> +<translation id="498323057460789381">Error sa pag-validate ng schema: <ph name="ERROR" /></translation> <translation id="4984088539114770594">Gamitin ang mikropono?</translation> <translation id="4984339528288761049">Prc5 (Envelope)</translation> <translation id="4989163558385430922">Tingnan lahat</translation>
diff --git a/components/strings/components_strings_hu.xtb b/components/strings/components_strings_hu.xtb index 8667ae4..28508b6a 100644 --- a/components/strings/components_strings_hu.xtb +++ b/components/strings/components_strings_hu.xtb
@@ -2730,6 +2730,7 @@ <translation id="8508648098325802031">Keresés ikon</translation> <translation id="8511402995811232419">Cookie-k kezelése</translation> <translation id="851353418319061866">Pontosság ellenőrzése</translation> +<translation id="8513580896341796021">A letöltés megkezdődött. A megtekintéséhez nyomja meg a következő gombot: |<ph name="ACCELERATOR" />|.</translation> <translation id="8519753333133776369">Rendszergazda által engedélyezett HID-eszköz</translation> <translation id="8522552481199248698">A Chrome segíthet a Google-fiók védelmében és a jelszó módosításában.</translation> <translation id="8530813470445476232">A böngészési előzmények, a cookie-k, a gyorsítótár és egyebek törlése a Chrome-beállítások között</translation>
diff --git a/components/strings/components_strings_iw.xtb b/components/strings/components_strings_iw.xtb index 295358e..e05899d 100644 --- a/components/strings/components_strings_iw.xtb +++ b/components/strings/components_strings_iw.xtb
@@ -1059,6 +1059,7 @@ <translation id="3807873520724684969">תוכן מזיק נחסם.</translation> <translation id="3810973564298564668">ניהול</translation> <translation id="3816482573645936981">ערך (הוחלף)</translation> +<translation id="3823402221513322552">הדפדפן שלך מנוהל על ידי <ph name="BROWSER_DOMAIN" /> והפרופיל שלך מנוהל על ידי <ph name="PROFILE_DOMAIN" /></translation> <translation id="382518646247711829">אם עשית שימוש בשרת Proxy...</translation> <translation id="3826050100957962900">כניסה של צד שלישי</translation> <translation id="3827112369919217609">מוחלט</translation> @@ -1560,6 +1561,7 @@ <translation id="5179510805599951267">לא ב<ph name="ORIGINAL_LANGUAGE" />? דיווח על שגיאה זו</translation> <translation id="518639307526414276">מזון וציוד לחיות מחמד</translation> <translation id="5190835502935405962">סרגל הסימניות</translation> +<translation id="5191315092027169558">הפרופיל שלך מנוהל על ידי <ph name="DOMAIN" /></translation> <translation id="51918995459521422"><ph name="ORIGIN" /> רוצה להוריד מספר קבצים</translation> <translation id="519422657042045905">ההערה לא זמינה</translation> <translation id="5201306358585911203">דף מוטמע בדף הזה אומר</translation> @@ -2764,6 +2766,7 @@ <translation id="8623885649813806493">אין סיסמאות תואמות. יש להציג את כל הסיסמאות השמורות.</translation> <translation id="8624354461147303341">לקבלת הנחות</translation> <translation id="8625384913736129811">שמירת כרטיס זה במכשיר הנוכחי</translation> +<translation id="8637577059508742477">הפרופיל והדפדפן שלך מנוהלים על ידי <ph name="DOMAIN" /></translation> <translation id="865032292777205197">חיישני תנועה</translation> <translation id="8663226718884576429">סיכום הזמנה, <ph name="TOTAL_LABEL" />, פרטים נוספים</translation> <translation id="8666678546361132282">אנגלית</translation>
diff --git a/components/strings/components_strings_mk.xtb b/components/strings/components_strings_mk.xtb index f0c7475..2a5e06b 100644 --- a/components/strings/components_strings_mk.xtb +++ b/components/strings/components_strings_mk.xtb
@@ -1467,6 +1467,7 @@ <translation id="4969341057194253438">Избриши ја снимката</translation> <translation id="4973922308112707173">Две дупки горе</translation> <translation id="4976702386844183910">Последно посетено на <ph name="DATE" /></translation> +<translation id="498323057460789381">Грешка при потврда на шема: <ph name="ERROR" /></translation> <translation id="4984088539114770594">Да се користи микрофонот?</translation> <translation id="4984339528288761049">Prc5 (плик)</translation> <translation id="4989163558385430922">Прикажи ги сите</translation>
diff --git a/components/strings/components_strings_mn.xtb b/components/strings/components_strings_mn.xtb index bbbbb586..7f5cb9d 100644 --- a/components/strings/components_strings_mn.xtb +++ b/components/strings/components_strings_mn.xtb
@@ -1468,6 +1468,7 @@ <translation id="4969341057194253438">Бичлэгийг устгах</translation> <translation id="4973922308112707173">Дээд буланд хоёр нүх цоолох</translation> <translation id="4976702386844183910">Хамгийн сүүлд <ph name="DATE" />-д зочилсон</translation> +<translation id="498323057460789381">Схемийн баталгаажуулалтын алдаа: <ph name="ERROR" /></translation> <translation id="4984088539114770594">Микрофон ашиглах уу?</translation> <translation id="4984339528288761049">Prc5 (Дугтуй)</translation> <translation id="4989163558385430922">Бүгдийг харах</translation>
diff --git a/components/strings/components_strings_ms.xtb b/components/strings/components_strings_ms.xtb index 3addaeb0..1eeeb3d 100644 --- a/components/strings/components_strings_ms.xtb +++ b/components/strings/components_strings_ms.xtb
@@ -1468,6 +1468,7 @@ <translation id="4969341057194253438">Padamkan rakaman</translation> <translation id="4973922308112707173">Dua tebukan atas</translation> <translation id="4976702386844183910">Terakhir dilawati <ph name="DATE" /></translation> +<translation id="498323057460789381">Ralat pengesahan skema: <ph name="ERROR" /></translation> <translation id="4984088539114770594">Gunakan mikrofon?</translation> <translation id="4984339528288761049">Prc5 (Sampul Surat)</translation> <translation id="4989163558385430922">Lihat semua</translation>
diff --git a/components/strings/components_strings_my.xtb b/components/strings/components_strings_my.xtb index 12710a5..86ce7f3 100644 --- a/components/strings/components_strings_my.xtb +++ b/components/strings/components_strings_my.xtb
@@ -2734,6 +2734,7 @@ <translation id="8508648098325802031">ရှာဖွေမှု သင်္ကေတ</translation> <translation id="8511402995811232419">ကွတ်ကီးများ စီမံရန်</translation> <translation id="851353418319061866">တိကျမှု စစ်ဆေးခြင်း</translation> +<translation id="8513580896341796021">ဒေါင်းလုဒ် စတင်ပါပြီ။ ၎င်းကိုကြည့်ရန် |<ph name="ACCELERATOR" />| ကိုနှိပ်ပါ။</translation> <translation id="8519753333133776369">HID စက်ကို သင့်စီမံခန့်ခွဲသူက ခွင့်ပြုထားသည်</translation> <translation id="8522552481199248698">Chrome က သင်၏ Google အကောင့်ကို ကာကွယ်ရန်နှင့် စကားဝှက်ပြောင်းရန် ကူညီနိုင်ပါသည်။</translation> <translation id="8530813470445476232">Chrome ဆက်တင်များတွင် ကြည့်ရှုခြင်းမှတ်တမ်း၊ ကွတ်ကီးများ၊ ကက်ရှ်နှင့် အခြားအရာများကို ရှင်းပါ</translation>
diff --git a/components/strings/components_strings_nl.xtb b/components/strings/components_strings_nl.xtb index 1ca0943c..fb7ef853 100644 --- a/components/strings/components_strings_nl.xtb +++ b/components/strings/components_strings_nl.xtb
@@ -1462,6 +1462,7 @@ <translation id="4969341057194253438">Opname verwijderen</translation> <translation id="4973922308112707173">Twee perforaties boven</translation> <translation id="4976702386844183910">Laatst bezocht: <ph name="DATE" /></translation> +<translation id="498323057460789381">Schemavalidatiefout: <ph name="ERROR" /></translation> <translation id="4984088539114770594">Microfoon gebruiken?</translation> <translation id="4984339528288761049">Prc5 (envelop)</translation> <translation id="4989163558385430922">Alles bekijken</translation>
diff --git a/components/strings/components_strings_no.xtb b/components/strings/components_strings_no.xtb index d27a1c3..53f035b 100644 --- a/components/strings/components_strings_no.xtb +++ b/components/strings/components_strings_no.xtb
@@ -1467,6 +1467,7 @@ <translation id="4969341057194253438">Slett opptak</translation> <translation id="4973922308112707173">To hull topp</translation> <translation id="4976702386844183910">Sist besøkt <ph name="DATE" /></translation> +<translation id="498323057460789381">Feil ved validering av oppsett: <ph name="ERROR" /></translation> <translation id="4984088539114770594">Vil du bruke mikrofonen?</translation> <translation id="4984339528288761049">Prc5 (konvolutt)</translation> <translation id="4989163558385430922">Se alle</translation>
diff --git a/components/strings/components_strings_pa.xtb b/components/strings/components_strings_pa.xtb index caf1977fd..2c689e02 100644 --- a/components/strings/components_strings_pa.xtb +++ b/components/strings/components_strings_pa.xtb
@@ -1464,6 +1464,7 @@ <translation id="4969341057194253438">ਰਿਕਾਰਡਿੰਗ ਨੂੰ ਮਿਟਾਓ</translation> <translation id="4973922308112707173">ਉੱਪਰ ਦੋ ਮੋਰੀਆਂ</translation> <translation id="4976702386844183910">ਪਿਛਲੀ ਵਾਰ <ph name="DATE" /> ਨੂੰ ਦੇਖੀ ਗਈ</translation> +<translation id="498323057460789381">ਸਕੀਮਾ ਪ੍ਰਮਾਣੀਕਰਨ ਗੜਬੜ: <ph name="ERROR" /></translation> <translation id="4984088539114770594">ਕੀ ਮਾਈਕ੍ਰੋਫ਼ੋਨ ਵਰਤਣਾ ਹੈ?</translation> <translation id="4984339528288761049">Prc5 (ਲਿਫ਼ਾਫ਼ਾ)</translation> <translation id="4989163558385430922">ਸਭ ਦੇਖੋ</translation>
diff --git a/components/strings/components_strings_pl.xtb b/components/strings/components_strings_pl.xtb index faebc907..ac7cbfe 100644 --- a/components/strings/components_strings_pl.xtb +++ b/components/strings/components_strings_pl.xtb
@@ -2732,6 +2732,7 @@ <translation id="8508648098325802031">Ikona wyszukiwania</translation> <translation id="8511402995811232419">Zarządzaj plikami cookie</translation> <translation id="851353418319061866">Sprawdzenie dokładności</translation> +<translation id="8513580896341796021">Rozpoczęto pobieranie. Aby zobaczyć pobrane pliki, naciśnij |<ph name="ACCELERATOR" />|.</translation> <translation id="8519753333133776369">Urządzenie HID dozwolone przez administratora</translation> <translation id="8522552481199248698">Chrome może Ci pomóc w zabezpieczeniu Twojego konta Google i zmianie hasła.</translation> <translation id="8530813470445476232">Wyczyść historię przeglądania, pliki cookie, pamięć podręczną i inne dane w ustawieniach Chrome</translation>
diff --git a/components/strings/components_strings_ro.xtb b/components/strings/components_strings_ro.xtb index ee4e163..a20cfb3 100644 --- a/components/strings/components_strings_ro.xtb +++ b/components/strings/components_strings_ro.xtb
@@ -1467,6 +1467,7 @@ <translation id="4969341057194253438">Șterge înregistrarea</translation> <translation id="4973922308112707173">Perforare dublă în partea de sus</translation> <translation id="4976702386844183910">Accesat ultima dată pe <ph name="DATE" /></translation> +<translation id="498323057460789381">Eroare de validare a schemei: <ph name="ERROR" /></translation> <translation id="4984088539114770594">Folosești microfonul?</translation> <translation id="4984339528288761049">Prc5 (Plic)</translation> <translation id="4989163558385430922">Afișează-le pe toate</translation>
diff --git a/components/strings/components_strings_sk.xtb b/components/strings/components_strings_sk.xtb index 48250af..97d17c1 100644 --- a/components/strings/components_strings_sk.xtb +++ b/components/strings/components_strings_sk.xtb
@@ -1463,6 +1463,7 @@ <translation id="4969341057194253438">Odstrániť nahrávku</translation> <translation id="4973922308112707173">Dve dierky hore</translation> <translation id="4976702386844183910">Naposledy navštívené <ph name="DATE" /></translation> +<translation id="498323057460789381">Chyba overenia schémy: <ph name="ERROR" /></translation> <translation id="4984088539114770594">Chcete používať mikrofón?</translation> <translation id="4984339528288761049">Prc5 (obálka)</translation> <translation id="4989163558385430922">Zobraziť všetko</translation>
diff --git a/components/strings/components_strings_sr-Latn.xtb b/components/strings/components_strings_sr-Latn.xtb index a93b8a8..4ed541f 100644 --- a/components/strings/components_strings_sr-Latn.xtb +++ b/components/strings/components_strings_sr-Latn.xtb
@@ -1467,6 +1467,7 @@ <translation id="4969341057194253438">Izbriši snimak</translation> <translation id="4973922308112707173">Dvostruko bušenje na vrhu</translation> <translation id="4976702386844183910">Poslednja poseta: <ph name="DATE" /></translation> +<translation id="498323057460789381">Greška pri validaciji šeme: <ph name="ERROR" /></translation> <translation id="4984088539114770594">Dozvolićete korišćenje mikrofona?</translation> <translation id="4984339528288761049">Prc5 (koverat)</translation> <translation id="4989163558385430922">Prikaži sve</translation>
diff --git a/components/strings/components_strings_sr.xtb b/components/strings/components_strings_sr.xtb index c92b9fd..263b147 100644 --- a/components/strings/components_strings_sr.xtb +++ b/components/strings/components_strings_sr.xtb
@@ -1467,6 +1467,7 @@ <translation id="4969341057194253438">Избриши снимак</translation> <translation id="4973922308112707173">Двоструко бушење на врху</translation> <translation id="4976702386844183910">Последња посета: <ph name="DATE" /></translation> +<translation id="498323057460789381">Грешка при валидацији шеме: <ph name="ERROR" /></translation> <translation id="4984088539114770594">Дозволићете коришћење микрофона?</translation> <translation id="4984339528288761049">Prc5 (коверат)</translation> <translation id="4989163558385430922">Прикажи све</translation>
diff --git a/components/strings/components_strings_te.xtb b/components/strings/components_strings_te.xtb index c77d33c..1c7f1d2 100644 --- a/components/strings/components_strings_te.xtb +++ b/components/strings/components_strings_te.xtb
@@ -1469,6 +1469,7 @@ <translation id="4969341057194253438">రికార్డింగ్ను తొలగించండి</translation> <translation id="4973922308112707173">ఎగువ భాగంలో రెండు రంధ్రాలు</translation> <translation id="4976702386844183910"><ph name="DATE" />న చివరగా సందర్శించారు</translation> +<translation id="498323057460789381">స్కీమా ప్రామాణీకరణ ఎర్రర్: <ph name="ERROR" /></translation> <translation id="4984088539114770594">మైక్రోఫోన్ను ఉపయోగించాలా?</translation> <translation id="4984339528288761049">Prc5 (ఎన్వలప్)</translation> <translation id="4989163558385430922">అన్నీ చూడండి</translation>
diff --git a/components/strings/components_strings_th.xtb b/components/strings/components_strings_th.xtb index ba44b39c..5a355c5 100644 --- a/components/strings/components_strings_th.xtb +++ b/components/strings/components_strings_th.xtb
@@ -1466,6 +1466,7 @@ <translation id="4969341057194253438">ลบการบันทึก</translation> <translation id="4973922308112707173">เจาะรูด้านบน 2 รู</translation> <translation id="4976702386844183910">เข้าชมล่าสุด <ph name="DATE" /></translation> +<translation id="498323057460789381">ข้อผิดพลาดในการตรวจสอบความถูกต้องของสคีมา: <ph name="ERROR" /></translation> <translation id="4984088539114770594">ใช้ไมโครโฟนไหม</translation> <translation id="4984339528288761049">Prc5 (ซองจดหมาย)</translation> <translation id="4989163558385430922">ดูทั้งหมด</translation>
diff --git a/components/strings/components_strings_vi.xtb b/components/strings/components_strings_vi.xtb index 6798201..8637827 100644 --- a/components/strings/components_strings_vi.xtb +++ b/components/strings/components_strings_vi.xtb
@@ -1467,6 +1467,7 @@ <translation id="4969341057194253438">Xóa bản ghi</translation> <translation id="4973922308112707173">Đục 2 lỗ trên cùng</translation> <translation id="4976702386844183910">Lần truy cập gần đây nhất: <ph name="DATE" /></translation> +<translation id="498323057460789381">Lỗi xác thực giản đồ: <ph name="ERROR" /></translation> <translation id="4984088539114770594">Sử dụng micrô?</translation> <translation id="4984339528288761049">Prc5 (Phong bì)</translation> <translation id="4989163558385430922">Xem tất cả</translation>
diff --git a/components/strings/components_strings_zh-HK.xtb b/components/strings/components_strings_zh-HK.xtb index 84019dc..d7a74f94 100644 --- a/components/strings/components_strings_zh-HK.xtb +++ b/components/strings/components_strings_zh-HK.xtb
@@ -2730,6 +2730,7 @@ <translation id="8508648098325802031">搜尋圖示</translation> <translation id="8511402995811232419">管理 Cookie</translation> <translation id="851353418319061866">精確度檢查</translation> +<translation id="8513580896341796021">開始下載。如要查看,請按 |<ph name="ACCELERATOR" />|。</translation> <translation id="8519753333133776369">管理員允許使用的 HID 裝置</translation> <translation id="8522552481199248698">Chrome 可助您保護 Google 帳戶並變更密碼。</translation> <translation id="8530813470445476232">清除您的瀏覽記錄、Cookie、快取以及其他 Chrome 設定</translation>
diff --git a/components/strings/components_strings_zh-TW.xtb b/components/strings/components_strings_zh-TW.xtb index 81c8118..a0c4b7c 100644 --- a/components/strings/components_strings_zh-TW.xtb +++ b/components/strings/components_strings_zh-TW.xtb
@@ -2731,6 +2731,7 @@ <translation id="8508648098325802031">搜尋圖示</translation> <translation id="8511402995811232419">管理 Cookie</translation> <translation id="851353418319061866">正確性檢查</translation> +<translation id="8513580896341796021">開始下載。如要查看,請按 |<ph name="ACCELERATOR" />|。</translation> <translation id="8519753333133776369">管理員允許使用的 HID 裝置</translation> <translation id="8522552481199248698">Chrome 可協助你保護 Google 帳戶並變更密碼。</translation> <translation id="8530813470445476232">清除瀏覽記錄、Cookie、快取以及其他 Chrome 設定</translation>
diff --git a/components/stylus_handwriting/android/java/src/org/chromium/components/stylus_handwriting/AndroidStylusWritingHandler.java b/components/stylus_handwriting/android/java/src/org/chromium/components/stylus_handwriting/AndroidStylusWritingHandler.java index 6a68d5c..33423703 100644 --- a/components/stylus_handwriting/android/java/src/org/chromium/components/stylus_handwriting/AndroidStylusWritingHandler.java +++ b/components/stylus_handwriting/android/java/src/org/chromium/components/stylus_handwriting/AndroidStylusWritingHandler.java
@@ -103,9 +103,12 @@ public void onWindowFocusChanged(Context context, boolean hasFocus) {} @Override - public boolean isStylusWritingEnabled() { - // We're only going to be attached to a WebContents if we are enabled, so we can always - // return true here. + public boolean canShowSoftKeyboard() { + // TODO(mahesh.ma): We can return false here when Android stylus writing service has widget + // toolbar that can allow editing commands like add space, backspace, perform editor actions + // like next, prev, search, go etc, or an option to show/hide keyboard. Until then it is + // better to allow showing soft keyboard for above operations. It can be noted that Platform + // Edit text behaviour is also to show soft keyboard during stylus writing in Android T. return true; }
diff --git a/components/stylus_handwriting/android/java/src/org/chromium/components/stylus_handwriting/DirectWritingTrigger.java b/components/stylus_handwriting/android/java/src/org/chromium/components/stylus_handwriting/DirectWritingTrigger.java index 6860d00b..3ffc8c45 100644 --- a/components/stylus_handwriting/android/java/src/org/chromium/components/stylus_handwriting/DirectWritingTrigger.java +++ b/components/stylus_handwriting/android/java/src/org/chromium/components/stylus_handwriting/DirectWritingTrigger.java
@@ -118,8 +118,12 @@ } @Override - public boolean isStylusWritingEnabled() { - return mDwServiceEnabled; + public boolean canShowSoftKeyboard() { + // We avoid showing soft keyboard during direct writing as there is widget toolbar provided + // by the service that allows options like add space, backspace, show/hide keyboard, and to + // perform editor actions like next, prev, search, go, etc. It can be noted that Platform + // Edit Text also does not show keyboard during direct writing. + return false; } private void updateDWServiceStatus(Context context) {
diff --git a/components/sync/protocol/web_app_specifics.proto b/components/sync/protocol/web_app_specifics.proto index ec1deae..e48bd35 100644 --- a/components/sync/protocol/web_app_specifics.proto +++ b/components/sync/protocol/web_app_specifics.proto
@@ -49,6 +49,7 @@ // FULLSCREEN is never serialized. // WINDOW_CONTROLS_OVERLAY is never serialized. TABBED = 6; + // BORDERLESS is never serialized. } optional string start_url = 1;
diff --git a/components/sync_device_info/device_info_prefs.cc b/components/sync_device_info/device_info_prefs.cc index 3194c04..1d00737 100644 --- a/components/sync_device_info/device_info_prefs.cc +++ b/components/sync_device_info/device_info_prefs.cc
@@ -39,7 +39,7 @@ if (!dict.is_dict()) { return false; } - const std::string* v_cache_guid = dict.FindStringKey(kCacheGuidKey); + const std::string* v_cache_guid = dict.GetDict().FindString(kCacheGuidKey); return v_cache_guid && *v_cache_guid == cache_guid; } @@ -61,9 +61,8 @@ bool DeviceInfoPrefs::IsRecentLocalCacheGuid( const std::string& cache_guid) const { - base::Value::ConstListView recent_local_cache_guids = - pref_service_->GetList(kDeviceInfoRecentGUIDsWithTimestamps) - ->GetListDeprecated(); + const base::Value::List& recent_local_cache_guids = + pref_service_->GetValueList(kDeviceInfoRecentGUIDsWithTimestamps); for (const auto& v : recent_local_cache_guids) { if (MatchesGuidInDictionary(v, cache_guid)) { @@ -77,44 +76,42 @@ void DeviceInfoPrefs::AddLocalCacheGuid(const std::string& cache_guid) { ListPrefUpdate update_cache_guids(pref_service_, kDeviceInfoRecentGUIDsWithTimestamps); + base::Value::List& update_list = update_cache_guids->GetList(); - for (auto it = update_cache_guids->GetListDeprecated().begin(); - it != update_cache_guids->GetListDeprecated().end(); it++) { + for (auto it = update_list.begin(); it != update_list.end(); it++) { if (MatchesGuidInDictionary(*it, cache_guid)) { // Remove it from the list, to be reinserted below, in the first // position. - update_cache_guids->EraseListIter(it); + update_list.erase(it); break; } } - base::Value new_entry(base::Value::Type::DICTIONARY); - new_entry.SetKey(kCacheGuidKey, base::Value(cache_guid)); - new_entry.SetKey( - kTimestampKey, - base::Value(clock_->Now().ToDeltaSinceWindowsEpoch().InDays())); + base::Value::Dict new_entry; + new_entry.Set(kCacheGuidKey, cache_guid); + new_entry.Set(kTimestampKey, + clock_->Now().ToDeltaSinceWindowsEpoch().InDays()); - update_cache_guids->Insert(update_cache_guids->GetListDeprecated().begin(), - std::move(new_entry)); + update_list.Insert(update_list.begin(), base::Value(std::move(new_entry))); - while (update_cache_guids->GetListDeprecated().size() > - kMaxLocalCacheGuidsStored) { - update_cache_guids->EraseListIter( - update_cache_guids->GetListDeprecated().end() - 1); + if (update_list.size() > kMaxLocalCacheGuidsStored) { + update_list.erase(update_list.begin() + kMaxLocalCacheGuidsStored, + update_list.end()); } } void DeviceInfoPrefs::GarbageCollectExpiredCacheGuids() { ListPrefUpdate update_cache_guids(pref_service_, kDeviceInfoRecentGUIDsWithTimestamps); - update_cache_guids->EraseListValueIf([this](const auto& dict) { + update_cache_guids->GetList().EraseIf([this](const auto& dict) { // Avoid crashes if the preference contains corrupt entries that are not // dictionaries, and meanwhile clean up these corrupt entries. if (!dict.is_dict()) { return true; } - absl::optional<int> days_since_epoch = dict.FindIntKey(kTimestampKey); + absl::optional<int> days_since_epoch = + dict.GetDict().FindInt(kTimestampKey); // Avoid crashes if the dictionary contains no timestamp and meanwhile clean // up these corrupt entries.
diff --git a/components/sync_device_info/device_info_prefs_unittest.cc b/components/sync_device_info/device_info_prefs_unittest.cc index 94495b2a..af7f8821 100644 --- a/components/sync_device_info/device_info_prefs_unittest.cc +++ b/components/sync_device_info/device_info_prefs_unittest.cc
@@ -58,18 +58,18 @@ // which is a string instead of a dictionary. ListPrefUpdate cache_guids_update(&pref_service_, kDeviceInfoRecentGUIDsWithTimestamps); - cache_guids_update->Insert(cache_guids_update->GetListDeprecated().begin(), - base::Value("corrupt_string_entry")); + base::Value::List& update_list = cache_guids_update->GetList(); + update_list.Insert(update_list.begin(), base::Value("corrupt_string_entry")); // Add another corrupt entry: in this case the entry is a dictionary, but it // contains no timestamp. - cache_guids_update->Insert(cache_guids_update->GetListDeprecated().begin(), - base::Value(base::Value::Type::DICTIONARY)); + update_list.Insert(update_list.begin(), + base::Value(base::Value::Type::DICTIONARY)); // The end result is the list contains three entries among which one is valid. - ASSERT_EQ(3u, pref_service_.GetList(kDeviceInfoRecentGUIDsWithTimestamps) - ->GetListDeprecated() - .size()); + ASSERT_EQ( + 3u, + pref_service_.GetValueList(kDeviceInfoRecentGUIDsWithTimestamps).size()); ASSERT_TRUE(device_info_prefs_.IsRecentLocalCacheGuid("guid1")); // Garbage collection should clean up the corrupt entries. @@ -77,9 +77,9 @@ ASSERT_TRUE(device_info_prefs_.IsRecentLocalCacheGuid("guid1")); // |guid1| should be the only entry in the list. - EXPECT_EQ(1u, pref_service_.GetList(kDeviceInfoRecentGUIDsWithTimestamps) - ->GetListDeprecated() - .size()); + EXPECT_EQ( + 1u, + pref_service_.GetValueList(kDeviceInfoRecentGUIDsWithTimestamps).size()); } TEST_F(DeviceInfoPrefsTest, ShouldTruncateAfterMaximumNumberOfGuids) {
diff --git a/components/webapps/browser/installable/installable_manager.cc b/components/webapps/browser/installable/installable_manager.cc index 4eda3fbf..18c92ab6 100644 --- a/components/webapps/browser/installable/installable_manager.cc +++ b/components/webapps/browser/installable/installable_manager.cc
@@ -897,9 +897,13 @@ int ideal_size_in_px = url.sizes.empty() ? kMinimumScreenshotSizeInPx : std::max(url.sizes[0].width(), url.sizes[0].height()); + // Do not pass in a maximum icon size so that screenshots larger than + // kMaximumScreenshotSizeInPx are not downscaled to the maximum size by + // `ManifestIconDownloader::Download`. Screenshots with size larger than + // kMaximumScreenshotSizeInPx get filtered out by OnScreenshotFetched. bool can_download = content::ManifestIconDownloader::Download( GetWebContents(), url.src, ideal_size_in_px, kMinimumScreenshotSizeInPx, - kMaximumScreenshotSizeInPx, + /*maximum_icon_size_in_px=*/0, base::BindOnce(&InstallableManager::OnScreenshotFetched, weak_factory_.GetWeakPtr(), url.src), /*square_only=*/false);
diff --git a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc index 2ba9611..3b50b14 100644 --- a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc +++ b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
@@ -3397,6 +3397,12 @@ RunRegressionTest(FILE_PATH_LITERAL("add-click-ignored-changed.html")); } +IN_PROC_BROWSER_TEST_P(DumpAccessibilityTreeTest, + AriaHiddenNegativeTabindexIgnoredInTree) { + RunRegressionTest( + FILE_PATH_LITERAL("aria-hidden-negative-tabindex-ignored-in-tree.html")); +} + IN_PROC_BROWSER_TEST_P(DumpAccessibilityTreeTest, AriaHiddenTabindexChange) { RunRegressionTest(FILE_PATH_LITERAL("aria-hidden-tabindex-change.html")); }
diff --git a/content/browser/webid/fedcm_metrics.cc b/content/browser/webid/fedcm_metrics.cc index 8256f302..d218fd0 100644 --- a/content/browser/webid/fedcm_metrics.cc +++ b/content/browser/webid/fedcm_metrics.cc
@@ -12,16 +12,20 @@ namespace content { -FedCmMetrics::FedCmMetrics(const GURL& provider, ukm::SourceId page_source_id) +FedCmMetrics::FedCmMetrics(const GURL& provider, + ukm::SourceId page_source_id, + int session_id) : page_source_id_(page_source_id), provider_source_id_(ukm::UkmRecorder::GetSourceIdForWebIdentityFromScope( base::PassKey<FedCmMetrics>(), - provider)) {} + provider)), + session_id_(session_id) {} void FedCmMetrics::RecordShowAccountsDialogTime(base::TimeDelta duration) { auto RecordUkm = [&](auto& ukm_builder) { ukm_builder.SetTiming_ShowAccountsDialog( ukm::GetExponentialBucketMinForUserTiming(duration.InMilliseconds())); + ukm_builder.SetFedCmSessionID(session_id_); ukm_builder.Record(ukm::UkmRecorder::Get()); }; ukm::builders::Blink_FedCm fedcm_builder(page_source_id_); @@ -36,6 +40,7 @@ auto RecordUkm = [&](auto& ukm_builder) { ukm_builder.SetTiming_ContinueOnDialog( ukm::GetExponentialBucketMinForUserTiming(duration.InMilliseconds())); + ukm_builder.SetFedCmSessionID(session_id_); ukm_builder.Record(ukm::UkmRecorder::Get()); }; ukm::builders::Blink_FedCm fedcm_builder(page_source_id_); @@ -51,6 +56,7 @@ auto RecordUkm = [&](auto& ukm_builder) { ukm_builder.SetTiming_CancelOnDialog( ukm::GetExponentialBucketMinForUserTiming(duration.InMilliseconds())); + ukm_builder.SetFedCmSessionID(session_id_); ukm_builder.Record(ukm::UkmRecorder::Get()); }; ukm::builders::Blink_FedCm fedcm_builder(page_source_id_); @@ -78,6 +84,7 @@ token_response_time.InMilliseconds())) .SetTiming_TurnaroundTime(ukm::GetExponentialBucketMinForUserTiming( turnaround_time.InMilliseconds())); + ukm_builder.SetFedCmSessionID(session_id_); ukm_builder.Record(ukm::UkmRecorder::Get()); }; ukm::builders::Blink_FedCm fedcm_builder(page_source_id_); @@ -105,6 +112,7 @@ auto RecordUkm = [&](auto& ukm_builder) { ukm_builder.SetStatus_RequestIdToken(static_cast<int>(status)); + ukm_builder.SetFedCmSessionID(session_id_); ukm_builder.Record(ukm::UkmRecorder::Get()); }; ukm::builders::Blink_FedCm fedcm_builder(page_source_id_); @@ -120,6 +128,7 @@ FedCmSignInStateMatchStatus status) { auto RecordUkm = [&](auto& ukm_builder) { ukm_builder.SetStatus_SignInStateMatch(static_cast<int>(status)); + ukm_builder.SetFedCmSessionID(session_id_); ukm_builder.Record(ukm::UkmRecorder::Get()); }; ukm::builders::Blink_FedCmIdp fedcm_idp_builder(provider_source_id_);
diff --git a/content/browser/webid/fedcm_metrics.h b/content/browser/webid/fedcm_metrics.h index c7ea1954..a3a809b 100644 --- a/content/browser/webid/fedcm_metrics.h +++ b/content/browser/webid/fedcm_metrics.h
@@ -68,7 +68,9 @@ class FedCmMetrics { public: - FedCmMetrics(const GURL& provider, const ukm::SourceId page_source_id); + FedCmMetrics(const GURL& provider, + const ukm::SourceId page_source_id, + int session_id); ~FedCmMetrics() = default; @@ -103,6 +105,7 @@ // Records whether user sign-in states between IDP and browser match. void RecordSignInStateMatchStatus(FedCmSignInStateMatchStatus status); + private: // The page's SourceId. Used to log the UKM event Blink.FedCm. ukm::SourceId page_source_id_; @@ -112,6 +115,11 @@ // Whether a RequestTokenStatus has been recorded. bool request_token_status_recorded_{false}; + + // The session ID associated to the FedCM call for which this object is + // recording metrics. Each FedCM call gets a random integer session id, which + // helps group UKM events by the session id. + int session_id_; }; // The following are UMA-only recordings, hence do not need to be in the
diff --git a/content/browser/webid/federated_auth_request_impl.cc b/content/browser/webid/federated_auth_request_impl.cc index 5deaf589..b095af4 100644 --- a/content/browser/webid/federated_auth_request_impl.cc +++ b/content/browser/webid/federated_auth_request_impl.cc
@@ -4,6 +4,8 @@ #include "content/browser/webid/federated_auth_request_impl.h" +#include <random> + #include "base/callback.h" #include "base/command_line.h" #include "base/rand_util.h" @@ -275,8 +277,13 @@ auth_request_callback_ = std::move(callback); provider_ = provider; + // Generate a random int for the FedCM call, to be used by the UKM events. + std::random_device dev; + std::mt19937 rng(dev()); + std::uniform_int_distribution<std::mt19937::result_type> uniform_dist( + 1, 1 << 30); fedcm_metrics_ = std::make_unique<FedCmMetrics>( - provider_, render_frame_host().GetPageUkmSourceId()); + provider_, render_frame_host().GetPageUkmSourceId(), uniform_dist(rng)); client_id_ = client_id; nonce_ = nonce; prefer_auto_sign_in_ = prefer_auto_sign_in && IsFedCmAutoSigninEnabled();
diff --git a/content/browser/webid/federated_auth_request_impl_unittest.cc b/content/browser/webid/federated_auth_request_impl_unittest.cc index 92bae86e..920925c 100644 --- a/content/browser/webid/federated_auth_request_impl_unittest.cc +++ b/content/browser/webid/federated_auth_request_impl_unittest.cc
@@ -808,6 +808,28 @@ SUCCEED(); } + void CheckAllFedCmSessionIDs() { + absl::optional<int> session_id; + auto CheckUKMSessionID = [&](const auto& ukm_entries) { + ASSERT_FALSE(ukm_entries.empty()); + for (const auto* const entry : ukm_entries) { + const auto* const metric = + ukm_recorder()->GetEntryMetric(entry, "FedCmSessionID"); + EXPECT_TRUE(metric) + << "All UKM events should have the SessionID metric"; + if (!session_id.has_value()) { + session_id = *metric; + } else { + ASSERT_EQ(*metric, *session_id) + << "All UKM events should have the same SessionID"; + } + } + }; + CheckUKMSessionID(ukm_recorder()->GetEntriesByName(FedCmEntry::kEntryName)); + CheckUKMSessionID( + ukm_recorder()->GetEntriesByName(FedCmIdpEntry::kEntryName)); + } + protected: mojo::Remote<blink::mojom::FederatedAuthRequest> request_remote_; raw_ptr<FederatedAuthRequestImpl> federated_auth_request_impl_; @@ -1302,6 +1324,7 @@ ExpectNoTimingUKM("Timing.CancelOnDialog"); ExpectRequestTokenStatusUKM(TokenStatus::kSuccess); + CheckAllFedCmSessionIDs(); } // Test that request fails if account picker is explicitly dismissed. @@ -1360,6 +1383,7 @@ ExpectNoTimingUKM("Timing.TurnaroundTime"); ExpectRequestTokenStatusUKM(TokenStatus::kNotSelectAccount); + CheckAllFedCmSessionIDs(); } // Test that request is not completed if user ignores the UI. @@ -1470,6 +1494,7 @@ TokenStatus::kThirdPartyCookiesBlocked, 1); ExpectRequestTokenStatusUKM(TokenStatus::kThirdPartyCookiesBlocked); + CheckAllFedCmSessionIDs(); } TEST_F(BasicFederatedAuthRequestImplTest, MetricsForFeatureIsDisabled) { @@ -1485,6 +1510,7 @@ histogram_tester_.ExpectUniqueSample("Blink.FedCm.Status.RequestIdToken", TokenStatus::kDisabledInFlags, 1); ExpectRequestTokenStatusUKM(TokenStatus::kDisabledInFlags); + CheckAllFedCmSessionIDs(); } TEST_F(BasicFederatedAuthRequestImplTest, @@ -1508,6 +1534,7 @@ histogram_tester_.ExpectUniqueSample("Blink.FedCm.Status.RequestIdToken", TokenStatus::kDisabledInFlags, 1); ExpectRequestTokenStatusUKM(TokenStatus::kDisabledInFlags); + CheckAllFedCmSessionIDs(); } TEST_F(BasicFederatedAuthRequestImplTest, @@ -1531,6 +1558,7 @@ histogram_tester_.ExpectUniqueSample("Blink.FedCm.Status.RequestIdToken", TokenStatus::kDisabledInFlags, 1); ExpectRequestTokenStatusUKM(TokenStatus::kDisabledInFlags); + CheckAllFedCmSessionIDs(); } // Test that sign-in states match if IDP claims that user is signed in and @@ -1561,6 +1589,7 @@ histogram_tester_.ExpectUniqueSample("Blink.FedCm.Status.SignInStateMatch", SignInStateMatchStatus::kMatch, 1); ExpectSignInStateMatchStatusUKM(SignInStateMatchStatus::kMatch); + CheckAllFedCmSessionIDs(); } // Test that sign-in states match if IDP claims that user is not signed in and @@ -1587,6 +1616,7 @@ histogram_tester_.ExpectUniqueSample("Blink.FedCm.Status.SignInStateMatch", SignInStateMatchStatus::kMatch, 1); ExpectSignInStateMatchStatusUKM(SignInStateMatchStatus::kMatch); + CheckAllFedCmSessionIDs(); } // Test that sign-in states mismatch if IDP claims that user is signed in but @@ -1617,6 +1647,7 @@ "Blink.FedCm.Status.SignInStateMatch", SignInStateMatchStatus::kIdpClaimedSignIn, 1); ExpectSignInStateMatchStatusUKM(SignInStateMatchStatus::kIdpClaimedSignIn); + CheckAllFedCmSessionIDs(); } // Test that sign-in states mismatch if IDP claims that user is not signed in @@ -1644,6 +1675,7 @@ SignInStateMatchStatus::kBrowserObservedSignIn, 1); ExpectSignInStateMatchStatusUKM( SignInStateMatchStatus::kBrowserObservedSignIn); + CheckAllFedCmSessionIDs(); } // Test that embargo is requested if the @@ -1803,6 +1835,7 @@ ExpectNoTimingUKM("Timing.TurnaroundTime"); ExpectRequestTokenStatusUKM(TokenStatus::kDisabledInSettings); + CheckAllFedCmSessionIDs(); } // Test that disclosure text is shown for first time user.
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/ImeAdapterImpl.java b/content/public/android/java/src/org/chromium/content/browser/input/ImeAdapterImpl.java index 5d38ba4..8fe06a6c 100644 --- a/content/public/android/java/src/org/chromium/content/browser/input/ImeAdapterImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/input/ImeAdapterImpl.java
@@ -577,7 +577,7 @@ // Block showing soft keyboard during stylus handwriting. int lastToolType = mWebContents.getEventForwarder().getLastToolType(); if (mWebContents.getStylusWritingHandler() != null - && mWebContents.getStylusWritingHandler().isStylusWritingEnabled() + && !mWebContents.getStylusWritingHandler().canShowSoftKeyboard() && (lastToolType == MotionEvent.TOOL_TYPE_STYLUS || lastToolType == MotionEvent.TOOL_TYPE_ERASER) && mTextInputType != TextInputType.PASSWORD
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/StylusWritingHandler.java b/content/public/android/java/src/org/chromium/content_public/browser/StylusWritingHandler.java index d8e517f8..975892c8 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/StylusWritingHandler.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/StylusWritingHandler.java
@@ -19,9 +19,9 @@ */ public interface StylusWritingHandler { /** - * @return true if stylus writing feature is enabled. + * @return true if soft keyboard can be shown during stylus writing. */ - boolean isStylusWritingEnabled(); + boolean canShowSoftKeyboard(); /** * Requests to start stylus writing for input field in web page.
diff --git a/content/public/browser/web_contents.h b/content/public/browser/web_contents.h index 5c710de..f07dd54 100644 --- a/content/public/browser/web_contents.h +++ b/content/public/browser/web_contents.h
@@ -1095,10 +1095,9 @@ // be called with the bitmaps received from the renderer. // If |is_favicon| is true, the cookies are not sent and not accepted during // download. - // Bitmaps with pixel sizes larger than |max_bitmap_size| are filtered out - // from the bitmap results. If there are no bitmap results <= - // |max_bitmap_size|, the smallest bitmap is resized to |max_bitmap_size| and - // is the only result. A |max_bitmap_size| of 0 means unlimited. + // If there are no bitmap results <= |max_bitmap_size|, the smallest bitmap + // is resized to |max_bitmap_size| and is the only result. + // A |max_bitmap_size| of 0 means unlimited. // For vector images, |preferred_size| will serve as a viewport into which // the image will be rendered. This would usually be the dimensions of the // rectangle where the bitmap will be rendered. If |preferred_size| is empty,
diff --git a/content/renderer/accessibility/ax_tree_distiller.cc b/content/renderer/accessibility/ax_tree_distiller.cc index e431650..7a89986 100644 --- a/content/renderer/accessibility/ax_tree_distiller.cc +++ b/content/renderer/accessibility/ax_tree_distiller.cc
@@ -6,6 +6,7 @@ #include <memory> #include <queue> +#include <utility> #include <vector> #include "base/containers/contains.h" @@ -116,15 +117,11 @@ AXTreeDistiller::~AXTreeDistiller() = default; -void AXTreeDistiller::Distill() { +void AXTreeDistiller::Distill( + mojom::Frame::SnapshotAndDistillAXTreeCallback callback) { + callback_ = std::move(callback); SnapshotAXTree(); DistillAXTree(); - - // TODO(https://crbug.com/1278249): Move the call to a proper place. -#if BUILDFLAG(ENABLE_SCREEN_AI_SERVICE) - if (features::IsReadAnythingWithScreen2xEnabled()) - ScheduleScreen2xRun(); -#endif } void AXTreeDistiller::SnapshotAXTree() { @@ -145,26 +142,46 @@ } void AXTreeDistiller::DistillAXTree() { - // If content_node_ids_ is already cached, do nothing. - if (content_node_ids_) + // If content_node_ids_ is already cached, finish and run the callback. + if (content_node_ids_) { + RunCallback(); return; - content_node_ids_ = std::make_unique<std::vector<ui::AXNodeID>>(); + } + // If Read Anything with Screen 2x is enabled, kick off Screen 2x run, which + // distills the AXTree in the utility process using ML. +#if BUILDFLAG(ENABLE_SCREEN_AI_SERVICE) + if (features::IsReadAnythingWithScreen2xEnabled()) { + ScheduleScreen2xRun(); + return; + } +#endif + + // Otherwise, distill the AXTree in process using the rules-based algorithm. + content_node_ids_ = std::make_unique<std::vector<ui::AXNodeID>>(); DCHECK(snapshot_); ui::AXTree tree; - bool success = tree.Unserialize(*snapshot_); - if (!success) - return; + // Unserialize the snapshot. Failure to unserialize doesn't result in a crash: + // we control both ends of the serialization-unserialization so any failures + // are programming error. + if (!tree.Unserialize(*snapshot_)) + NOTREACHED() << tree.error(); const ui::AXNode* article_node = GetArticleNode(tree.root()); // If this page does not have an article node, this means it is not // distillable. if (!article_node) { is_distillable_ = false; + RunCallback(); return; } AddContentNodesToVector(article_node, content_node_ids_.get()); + RunCallback(); +} + +void AXTreeDistiller::RunCallback() { + std::move(callback_).Run(*snapshot_.get(), *content_node_ids_.get()); } #if BUILDFLAG(ENABLE_SCREEN_AI_SERVICE) @@ -178,9 +195,11 @@ void AXTreeDistiller::ProcessScreen2xResult( const std::vector<ui::AXNodeID>& content_node_ids) { - // TODO(https://crbug.com/1278249): Use |content_node_ids|. + content_node_ids_ = + std::make_unique<std::vector<ui::AXNodeID>>(content_node_ids); + // TODO(https://crbug.com/1278249): Set |is_distillable_|. + RunCallback(); } - #endif } // namespace content
diff --git a/content/renderer/accessibility/ax_tree_distiller.h b/content/renderer/accessibility/ax_tree_distiller.h index 99fab111..a569bbb7 100644 --- a/content/renderer/accessibility/ax_tree_distiller.h +++ b/content/renderer/accessibility/ax_tree_distiller.h
@@ -10,6 +10,7 @@ #include "components/services/screen_ai/buildflags/buildflags.h" #include "content/common/content_export.h" +#include "content/common/frame.mojom.h" #include "ui/accessibility/ax_node_id_forward.h" #include "ui/accessibility/ax_tree_update_forward.h" @@ -27,7 +28,12 @@ // AXTreeDistiller // // A class that creates and stores a distilled AXTree for a particular render -// frame. +// frame. The main API is AXTreeDistiller::Distill(), which stores the passed- +// in callback and kicks off the distillation. Once a distilled AXTree is +// ready, the callback is called. +// When |IsReadAnythingWithScreen2xEnabled()|, the distillation is performed +// by the Screen2x ML model in the utility process. Otherwise, distillation is +// done using rules defined in this file. // class CONTENT_EXPORT AXTreeDistiller { public: @@ -36,31 +42,50 @@ AXTreeDistiller(const AXTreeDistiller&) = delete; AXTreeDistiller& operator=(const AXTreeDistiller&) = delete; - void Distill(); - - ui::AXTreeUpdate* GetSnapshot() { return snapshot_.get(); } - std::vector<ui::AXNodeID>* GetContentNodeIDs() { - return content_node_ids_.get(); - } - bool IsDistillable() { return is_distillable_; } + // Snapshot and distill an AXTree on this render frame. Saves callback as + // |callback_|. + void Distill(mojom::Frame::SnapshotAndDistillAXTreeCallback callback); private: - // Takes a snapshot of an accessibility tree and caches it as |snapshot_|. + // Does nothing if |snapshot_| is already defined. Otherwise, takes a snapshot + // of the accessibility tree for |render_frame_| and caches it as |snapshot_|. void SnapshotAXTree(); - // Distills |snapshot_| by identifying main content nodes and caching their - // IDs as |content_node_ids_|. + // If |content_node_ids_| is already defined, notifies the handler that the + // AXTree has already been distilled. Otherwise, distills |snapshot_| by + // identifying main content nodes and caching their IDs as + // |content_node_ids_|. When |IsReadAnythingWithScreen2xEnabled|, this + // process is done in the utility process by Screen2x. Otherwise, it is done + // by a rules-based algorithm in this process. void DistillAXTree(); + // Run the callback, notifying the caller that an AXTree has been distilled. + // This function is called asynchronously when the AXTree is distilled by + // Screen2x and synchronously otherwise. It passes |snapshot_| and + // |content_node_ids_| to |callback_.Run()|, which is defined in the browser + // process. + void RunCallback(); + RenderFrameImpl* render_frame_; std::unique_ptr<ui::AXTreeUpdate> snapshot_; std::unique_ptr<std::vector<ui::AXNodeID>> content_node_ids_; bool is_distillable_ = true; + // A function defined in the browser process and passed across the render + // frame to AXTreeDistiller. + mojom::Frame::SnapshotAndDistillAXTreeCallback callback_; + #if BUILDFLAG(ENABLE_SCREEN_AI_SERVICE) + // Passes |snapshot_| to the Screen2x ML model, which identifes the main + // content nodes and calls |ProcessScreen2xResult()| on completion. void ScheduleScreen2xRun(); + + // Called by the Screen2x service from the utility process. Caches + // |content_node_ids| as |content_node_ids_|. void ProcessScreen2xResult(const std::vector<ui::AXNodeID>& content_node_ids); + // The remote of the Screen2x main content extractor. The receiver lives in + // the utility process. mojo::Remote<screen_ai::mojom::Screen2xMainContentExtractor> main_content_extractor_;
diff --git a/content/renderer/accessibility/ax_tree_distiller_browsertest.cc b/content/renderer/accessibility/ax_tree_distiller_browsertest.cc index 43ceae4..109bd3f2 100644 --- a/content/renderer/accessibility/ax_tree_distiller_browsertest.cc +++ b/content/renderer/accessibility/ax_tree_distiller_browsertest.cc
@@ -6,7 +6,9 @@ #include <memory> #include <string> +#include <vector> +#include "base/bind.h" #include "content/public/test/render_view_test.h" #include "content/renderer/render_frame_impl.h" #include "ui/accessibility/ax_node.h" @@ -21,42 +23,46 @@ AXTreeDistillerTestBase& operator=(const AXTreeDistillerTestBase&) = delete; ~AXTreeDistillerTestBase() override = default; - void DistillPage(const char* html) { + void DistillPage(const char* html, + const std::vector<std::string>& expected_node_contents) { + expected_node_contents_ = expected_node_contents; LoadHTML(html); RenderFrameImpl* render_frame_impl = RenderFrameImpl::FromWebFrame(GetMainFrame()); distiller_ = std::make_unique<AXTreeDistiller>(render_frame_impl); - distiller_->Distill(); + distiller_->Distill(base::BindOnce( + &AXTreeDistillerTestBase::OnAXTreeDistilled, base::Unretained(this))); } - void CheckNodeContents(const std::vector<std::string>& node_contents) { - // AXTree snapshot from distiller should unserialize successfully. + void OnAXTreeDistilled(const ui::AXTreeUpdate& snapshot, + const std::vector<int32_t>& content_node_ids) { + // AXTree snapshot should unserialize successfully. ui::AXTree tree; - EXPECT_TRUE(tree.Unserialize(*(distiller_->GetSnapshot()))); + EXPECT_TRUE(tree.Unserialize(snapshot)); - // Content node IDs list from distiller should be the same length as - // |node_contents| passed in. - auto* content_node_ids = distiller_->GetContentNodeIDs(); - EXPECT_EQ(content_node_ids->size(), node_contents.size()); + // Content node IDs list should be the same length as + // |expected_node_contents_|. + EXPECT_EQ(content_node_ids.size(), expected_node_contents_.size()); // Iterate through each content node ID from distiller and check that the - // text value equals the passed-in string from |node_contents|. - for (size_t i = 0; i < content_node_ids->size(); i++) { - ui::AXNode* node = tree.GetFromId(content_node_ids->at(i)); + // text value equals the passed-in string from |expected_node_contents_|. + for (size_t i = 0; i < content_node_ids.size(); i++) { + ui::AXNode* node = tree.GetFromId(content_node_ids[i]); EXPECT_TRUE(node); EXPECT_TRUE(node->GetTextContentLengthUTF8()); - EXPECT_EQ(node->GetTextContentUTF8(), node_contents[i]); + EXPECT_EQ(node->GetTextContentUTF8(), expected_node_contents_[i]); } } private: std::unique_ptr<AXTreeDistiller> distiller_; + std::vector<std::string> expected_node_contents_; }; struct TestCase { const char* test_name; const char* html; - std::vector<std::string> node_contents; + std::vector<std::string> expected_node_contents; }; class AXTreeDistillerTest : public AXTreeDistillerTestBase, @@ -163,8 +169,7 @@ TEST_P(AXTreeDistillerTest, DistillsWebPage) { TestCase param = GetParam(); - DistillPage(param.html); - CheckNodeContents(param.node_contents); + DistillPage(param.html, param.expected_node_contents); } INSTANTIATE_TEST_SUITE_P(/* prefix */,
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc index b05ef49..49bc1c40 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc
@@ -2183,9 +2183,7 @@ SnapshotAndDistillAXTreeCallback callback) { if (!ax_tree_distiller_) ax_tree_distiller_ = std::make_unique<AXTreeDistiller>(this); - ax_tree_distiller_->Distill(); - std::move(callback).Run(*ax_tree_distiller_->GetSnapshot(), - *ax_tree_distiller_->GetContentNodeIDs()); + ax_tree_distiller_->Distill(std::move(callback)); } void RenderFrameImpl::GetSerializedHtmlWithLocalLinks(
diff --git a/content/test/data/accessibility/aria/aria-set-counts-with-hidden-items-expected-blink.txt b/content/test/data/accessibility/aria/aria-set-counts-with-hidden-items-expected-blink.txt index a737d3e7..5efec2c 100644 --- a/content/test/data/accessibility/aria/aria-set-counts-with-hidden-items-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-set-counts-with-hidden-items-expected-blink.txt
@@ -8,7 +8,7 @@ ++++++++listBoxOption name='Item 2' setSize=4 posInSet=2 selected=false ++++++++++staticText name='Item 2' ++++++++++++inlineTextBox name='Item 2' -++++++++listBoxOption invisible name='Hidden' setSize=4 posInSet=4 selected=false +++++++++listBoxOption ignored invisible name='Hidden' setSize=4 posInSet=4 selected=false ++++++++++staticText ignored invisible name='Hidden' ++++++++listBoxOption name='Item 3' setSize=4 posInSet=3 selected=false ++++++++++staticText name='Item 3' @@ -23,7 +23,7 @@ ++++++++listBoxOption name='Item 2' setSize=5 posInSet=2 selected=false ++++++++++staticText name='Item 2' ++++++++++++inlineTextBox name='Item 2' -++++++++listBoxOption invisible name='Hidden' selected=false +++++++++listBoxOption ignored invisible name='Hidden' selected=false ++++++++++staticText ignored invisible name='Hidden' ++++++++listBoxOption name='Item 3' setSize=5 posInSet=3 selected=false ++++++++++staticText name='Item 3' @@ -33,4 +33,4 @@ ++++++++++++inlineTextBox name='Item 4' ++++++++listBoxOption name='Item 5' setSize=5 posInSet=5 selected=false ++++++++++staticText name='Item 5' -++++++++++++inlineTextBox name='Item 5' \ No newline at end of file +++++++++++++inlineTextBox name='Item 5'
diff --git a/content/test/data/accessibility/event/tabindex-added-on-aria-hidden.html b/content/test/data/accessibility/event/tabindex-added-on-aria-hidden.html index 262938ec..dabc9c0 100644 --- a/content/test/data/accessibility/event/tabindex-added-on-aria-hidden.html +++ b/content/test/data/accessibility/event/tabindex-added-on-aria-hidden.html
@@ -4,7 +4,7 @@ <div id="d" aria-hidden="true"></div> <script> function go() { - document.querySelector('#d').tabIndex = -1; + document.querySelector('#d').tabIndex = 0; } </script> </body>
diff --git a/content/test/data/accessibility/event/tabindex-removed-on-aria-hidden.html b/content/test/data/accessibility/event/tabindex-removed-on-aria-hidden.html index e47a979..07bae39 100644 --- a/content/test/data/accessibility/event/tabindex-removed-on-aria-hidden.html +++ b/content/test/data/accessibility/event/tabindex-removed-on-aria-hidden.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <html> <body> -<div id="d" tabindex="-1" aria-hidden="true"></div> +<div id="d" tabindex="0" aria-hidden="true"></div> <script> function go() { document.querySelector('#d').removeAttribute('tabindex');
diff --git a/content/test/data/accessibility/html/combobox-item-visibility-expected-blink.txt b/content/test/data/accessibility/html/combobox-item-visibility-expected-blink.txt index f65e9fb..17d24b1 100644 --- a/content/test/data/accessibility/html/combobox-item-visibility-expected-blink.txt +++ b/content/test/data/accessibility/html/combobox-item-visibility-expected-blink.txt
@@ -1,8 +1,8 @@ rootWebArea ++genericContainer ignored ++++genericContainer -++++++popUpButton collapsed setSize=2 -++++++++menuListPopup invisible setSize=2 -++++++++++menuListOption setSize=2 posInSet=1 selected=true +++++++popUpButton collapsed setSize=1 +++++++++menuListPopup invisible setSize=1 +++++++++++menuListOption setSize=1 posInSet=1 selected=true ++++++++++menuListOption ignored invisible selected=false -++++++++++menuListOption invisible setSize=2 posInSet=2 selected=false +++++++++++menuListOption ignored invisible selected=false
diff --git a/content/test/data/accessibility/html/iframe-aria-hidden.html b/content/test/data/accessibility/html/iframe-aria-hidden.html index e0f6af8..1152990 100644 --- a/content/test/data/accessibility/html/iframe-aria-hidden.html +++ b/content/test/data/accessibility/html/iframe-aria-hidden.html
@@ -1,7 +1,7 @@ <!-- @WIN-ALLOW:ia2_hypertext=* --> -<iframe tabindex="-1" aria-hidden="true" src="frame/empty.html" +<iframe tabindex="0" aria-hidden="true" src="frame/empty.html" style="position: absolute; width: 9em; height: 9em; top: -99em;"> </iframe> <!-- Use a unique @src for code that ensures all iframes are loaded -->
diff --git a/content/test/data/accessibility/regression/aria-hidden-negative-tabindex-ignored-in-tree-expected-blink.txt b/content/test/data/accessibility/regression/aria-hidden-negative-tabindex-ignored-in-tree-expected-blink.txt new file mode 100644 index 0000000..e63a0ff --- /dev/null +++ b/content/test/data/accessibility/regression/aria-hidden-negative-tabindex-ignored-in-tree-expected-blink.txt
@@ -0,0 +1,5 @@ +rootWebArea +++genericContainer ignored +++++genericContainer +++++++button ignored invisible name='Test' +++++++++staticText ignored invisible name='Test'
diff --git a/content/test/data/accessibility/regression/aria-hidden-negative-tabindex-ignored-in-tree.html b/content/test/data/accessibility/regression/aria-hidden-negative-tabindex-ignored-in-tree.html new file mode 100644 index 0000000..4487ca1 --- /dev/null +++ b/content/test/data/accessibility/regression/aria-hidden-negative-tabindex-ignored-in-tree.html
@@ -0,0 +1,2 @@ +<!DOCTYPE HTML> +<button aria-hidden="true" tabindex="-1">Test</button>
diff --git a/content/test/data/accessibility/regression/aria-hidden-tabindex-change.html b/content/test/data/accessibility/regression/aria-hidden-tabindex-change.html index 31c2b39..13ece61 100644 --- a/content/test/data/accessibility/regression/aria-hidden-tabindex-change.html +++ b/content/test/data/accessibility/regression/aria-hidden-tabindex-change.html
@@ -10,7 +10,7 @@ <script> document.addEventListener('DOMContentLoaded', () => { setTimeout(() => { - document.querySelector('[role=button]').tabIndex = -1; + document.querySelector('[role=button]').tabIndex = 0; document.title = 'done'; }, 50); });
diff --git a/content/test/gpu/flake_suppressor/common_typing.py b/content/test/gpu/flake_suppressor/common_typing.py index 740060e..5ac579c 100644 --- a/content/test/gpu/flake_suppressor/common_typing.py +++ b/content/test/gpu/flake_suppressor/common_typing.py
@@ -3,9 +3,9 @@ # found in the LICENSE file. """Module for shared/commonly used type hinting.""" -import typing +from typing import Any, Dict, List, Tuple -TagTupleType = typing.Tuple[str, ...] +TagTupleType = Tuple[str, ...] # Sample: # { @@ -15,9 +15,9 @@ # }, # }, # } -TagsToUrlsType = typing.Dict[TagTupleType, typing.List[str]] -TestToTagsType = typing.Dict[str, TagsToUrlsType] -AggregatedResultsType = typing.Dict[str, TestToTagsType] +TagsToUrlsType = Dict[TagTupleType, List[str]] +TestToTagsType = Dict[str, TagsToUrlsType] +AggregatedResultsType = Dict[str, TestToTagsType] # Sample: # { @@ -25,8 +25,8 @@ # test_name (str): result_count (int) # } # } -TestToResultCountType = typing.Dict[str, int] -ResultCountType = typing.Dict[TagTupleType, TestToResultCountType] +TestToResultCountType = Dict[str, int] +ResultCountType = Dict[TagTupleType, TestToResultCountType] -SingleQueryResultType = typing.Dict[str, typing.Any] -QueryJsonType = typing.List[SingleQueryResultType] +SingleQueryResultType = Dict[str, Any] +QueryJsonType = List[SingleQueryResultType]
diff --git a/content/test/gpu/flake_suppressor/data_types.py b/content/test/gpu/flake_suppressor/data_types.py index dd36e8b..41f1035 100644 --- a/content/test/gpu/flake_suppressor/data_types.py +++ b/content/test/gpu/flake_suppressor/data_types.py
@@ -3,7 +3,7 @@ # found in the LICENSE file. """Module for custom data types.""" -import typing +from typing import Any from flake_suppressor import common_typing as ct @@ -43,7 +43,7 @@ self.tags = tags self.build_id = build_id - def __eq__(self, other: typing.Any) -> bool: + def __eq__(self, other: Any) -> bool: return (isinstance(other, Result) and self.suite == other.suite and self.test == other.test and self.tags == other.tags and self.build_id == other.build_id)
diff --git a/content/test/gpu/flake_suppressor/expectations.py b/content/test/gpu/flake_suppressor/expectations.py index 0d75d74..f7a3e66d 100644 --- a/content/test/gpu/flake_suppressor/expectations.py +++ b/content/test/gpu/flake_suppressor/expectations.py
@@ -8,7 +8,7 @@ import os import posixpath import re -import typing +from typing import Dict, List, Set, Tuple, Union import urllib.request import gpu_path_util @@ -36,9 +36,9 @@ TAG_GROUP_REGEX = re.compile(r'# tags: \[([^\]]*)\]', re.MULTILINE | re.DOTALL) -TestToUrlsType = typing.Dict[str, typing.List[str]] -SuiteToTestsType = typing.Dict[str, TestToUrlsType] -TagOrderedAggregateResultType = typing.Dict[ct.TagTupleType, SuiteToTestsType] +TestToUrlsType = Dict[str, List[str]] +SuiteToTestsType = Dict[str, TestToUrlsType] +TagOrderedAggregateResultType = Dict[ct.TagTupleType, SuiteToTestsType] # pylint: disable=too-many-locals @@ -143,7 +143,7 @@ def FindFailuresInSameTest(result_map: ct.AggregatedResultsType, target_suite: str, target_test: str, target_typ_tags: ct.TagTupleType - ) -> typing.List[typing.Tuple[ct.TagTupleType, int]]: + ) -> List[Tuple[ct.TagTupleType, int]]: """Finds all other failures that occurred in the given test. Ignores the failures for the test on the same configuration. @@ -173,7 +173,7 @@ def FindFailuresInSameConfig( typ_tag_ordered_result_map: TagOrderedAggregateResultType, target_suite: str, target_test: str, - target_typ_tags: ct.TagTupleType) -> typing.List[typing.Tuple[str, int]]: + target_typ_tags: ct.TagTupleType) -> List[Tuple[str, int]]: """Finds all other failures that occurred on the given configuration. Ignores the failures for the given test on the given configuration. @@ -235,7 +235,7 @@ def PromptUserForExpectationAction( -) -> typing.Union[typing.Tuple[str, str], typing.Tuple[None, None]]: +) -> Union[Tuple[str, str], Tuple[None, None]]: """Prompts the user on what to do to handle a failure. Returns: @@ -414,7 +414,7 @@ def FindBestInsertionLineForExpectation(typ_tags: ct.TagTupleType, expectation_file: str - ) -> typing.Tuple[int, typing.Set[str]]: + ) -> Tuple[int, Set[str]]: """Finds the best place to insert an expectation when grouping by tags. Args: @@ -448,7 +448,7 @@ return best_insertion_line, best_matching_tags -def GetExpectationFilesFromOrigin() -> typing.Dict[str, str]: +def GetExpectationFilesFromOrigin() -> Dict[str, str]: """Gets expectation file contents from origin/main. Returns: @@ -480,7 +480,7 @@ return origin_file_contents -def GetExpectationFilesFromLocalCheckout() -> typing.Dict[str, str]: +def GetExpectationFilesFromLocalCheckout() -> Dict[str, str]: """Gets expectaiton file contents from the local checkout. Returns:
diff --git a/content/test/gpu/flake_suppressor/expectations_unittest.py b/content/test/gpu/flake_suppressor/expectations_unittest.py index a4f30cb..333a4dd 100755 --- a/content/test/gpu/flake_suppressor/expectations_unittest.py +++ b/content/test/gpu/flake_suppressor/expectations_unittest.py
@@ -9,7 +9,7 @@ import os import sys import tempfile -import typing +from typing import Any import unittest import unittest.mock as mock import urllib.error @@ -634,7 +634,7 @@ def testNonOkStatusCodesSurfaced(self) -> None: """Tests that getting a non-200 status code back results in a failure.""" - def SideEffect(_: typing.Any) -> None: + def SideEffect(_: Any) -> None: raise urllib.error.HTTPError('url', 404, 'No exist :(', {}, None) self._get_mock.side_effect = SideEffect
diff --git a/content/test/gpu/flake_suppressor/result_output.py b/content/test/gpu/flake_suppressor/result_output.py index 8383a67..9e40380 100644 --- a/content/test/gpu/flake_suppressor/result_output.py +++ b/content/test/gpu/flake_suppressor/result_output.py
@@ -4,26 +4,26 @@ """Module for outputting results in a human-readable format.""" import tempfile -import typing +from typing import Dict, IO, List, Optional, Union from flake_suppressor import common_typing as ct -UrlListType = typing.List[str] -StringTagsToUrlsType = typing.Dict[str, UrlListType] -TestToStringTagsType = typing.Dict[str, StringTagsToUrlsType] -StringMapType = typing.Dict[str, TestToStringTagsType] +UrlListType = List[str] +StringTagsToUrlsType = Dict[str, UrlListType] +TestToStringTagsType = Dict[str, StringTagsToUrlsType] +StringMapType = Dict[str, TestToStringTagsType] -TestToUrlListType = typing.Dict[str, UrlListType] -SuiteToTestsType = typing.Dict[str, TestToUrlListType] -ConfigGroupedStringMapType = typing.Dict[str, SuiteToTestsType] +TestToUrlListType = Dict[str, UrlListType] +SuiteToTestsType = Dict[str, TestToUrlListType] +ConfigGroupedStringMapType = Dict[str, SuiteToTestsType] -NodeType = typing.Union[UrlListType, StringTagsToUrlsType, TestToStringTagsType, - StringMapType, TestToUrlListType, SuiteToTestsType, - ConfigGroupedStringMapType] +NodeType = Union[UrlListType, StringTagsToUrlsType, TestToStringTagsType, + StringMapType, TestToUrlListType, SuiteToTestsType, + ConfigGroupedStringMapType] def GenerateHtmlOutputFile(aggregated_results: ct.AggregatedResultsType, - outfile: typing.Optional[typing.IO] = None) -> None: + outfile: Optional[IO] = None) -> None: """Generates an HTML results file. Args: @@ -45,7 +45,7 @@ def _OutputMapToHtmlFile(string_map: StringMapType, result_header: str, - output_file: typing.IO) -> None: + output_file: IO) -> None: """Outputs a map to a file as a nested list. Args: @@ -60,7 +60,7 @@ output_file.write('</ul>\n') -def _RecursiveHtmlToFile(node: NodeType, output_file: typing.IO) -> None: +def _RecursiveHtmlToFile(node: NodeType, output_file: IO) -> None: """Recursively outputs a string map to an output file as HTML. Specifically, contents are output as an unordered list (<ul>).
diff --git a/content/test/gpu/flake_suppressor/results.py b/content/test/gpu/flake_suppressor/results.py index ce19f1b..a2e168f 100644 --- a/content/test/gpu/flake_suppressor/results.py +++ b/content/test/gpu/flake_suppressor/results.py
@@ -5,7 +5,7 @@ import collections import os -import typing +from typing import List, Tuple from flake_suppressor import common_typing as ct from flake_suppressor import data_types @@ -46,7 +46,7 @@ def _ConvertJsonResultsToResultObjects(results: ct.QueryJsonType - ) -> typing.List[data_types.Result]: + ) -> List[data_types.Result]: """Converts JSON BigQuery results to data_types.Result objects. Args: @@ -65,8 +65,8 @@ return object_results -def _FilterOutSuppressedResults(results: typing.List[data_types.Result] - ) -> typing.List[data_types.Result]: +def _FilterOutSuppressedResults(results: List[data_types.Result] + ) -> List[data_types.Result]: """Filters out results that have already been suppressed in the repo. Args: @@ -103,7 +103,6 @@ return kept_results -def GetTestSuiteAndNameFromResultDbName(result_db_name: str - ) -> typing.Tuple[str, str]: +def GetTestSuiteAndNameFromResultDbName(result_db_name: str) -> Tuple[str, str]: _, suite, __, test_name = result_db_name.split('.', 3) return suite, test_name
diff --git a/content/test/gpu/flake_suppressor/tag_utils.py b/content/test/gpu/flake_suppressor/tag_utils.py index 41559389..c4487b67 100644 --- a/content/test/gpu/flake_suppressor/tag_utils.py +++ b/content/test/gpu/flake_suppressor/tag_utils.py
@@ -3,7 +3,7 @@ # found in the LICENSE file. """Module for tag-related helper functions.""" -import typing +from typing import Iterable from flake_suppressor import common_typing as ct @@ -15,7 +15,7 @@ ]) -def RemoveMostIgnoredTags(tags: typing.Iterable[str]) -> ct.TagTupleType: +def RemoveMostIgnoredTags(tags: Iterable[str]) -> ct.TagTupleType: """Removes ignored tags from |tags| except temporarily kept ones. The temporarily kept ones can later be removed by @@ -41,8 +41,7 @@ return tuple(tags) -def RemoveTemporarilyKeptIgnoredTags(tags: typing.Iterable[str] - ) -> ct.TagTupleType: +def RemoveTemporarilyKeptIgnoredTags(tags: Iterable[str]) -> ct.TagTupleType: """Removes ignored tags that were temporarily kept. Args:
diff --git a/content/test/gpu/gpu_tests/common_typing.py b/content/test/gpu/gpu_tests/common_typing.py index 6667f12..612fe86 100644 --- a/content/test/gpu/gpu_tests/common_typing.py +++ b/content/test/gpu/gpu_tests/common_typing.py
@@ -4,14 +4,14 @@ """Helper module to store class-independent, common type hinting.""" import optparse -import typing +from typing import Any, Generator, Tuple from telemetry.internal.browser import tab from telemetry.internal.browser import browser TestArgs = list -GeneratedTest = typing.Tuple[str, str, TestArgs] -TestGenerator = typing.Generator[GeneratedTest, None, None] +GeneratedTest = Tuple[str, str, TestArgs] +TestGenerator = Generator[GeneratedTest, None, None] # Will hopefully eventually be replaced by argparses' equivalents once Telemetry # finally switches off optparse. @@ -20,6 +20,6 @@ # Telemetry screenshot type. Can be changed to union of specific types if/when # Telemetry exposes those types. -Screenshot = typing.Any +Screenshot = Any Tab = tab.Tab Browser = browser.Browser
diff --git a/content/test/gpu/gpu_tests/context_lost_integration_test.py b/content/test/gpu/gpu_tests/context_lost_integration_test.py index 2ec5696..8bab129d 100644 --- a/content/test/gpu/gpu_tests/context_lost_integration_test.py +++ b/content/test/gpu/gpu_tests/context_lost_integration_test.py
@@ -8,7 +8,7 @@ import os import sys import time -import typing +from typing import Any, List, Tuple import unittest from gpu_tests import common_browser_args as cba @@ -119,8 +119,7 @@ return 'context_lost' @classmethod - def GenerateBrowserArgs(cls, additional_args: typing.List[str] - ) -> typing.List[str]: + def GenerateBrowserArgs(cls, additional_args: List[str]) -> List[str]: """Adds default arguments to |additional_args|. See the parent class' method documentation for additional information. @@ -143,7 +142,7 @@ # Could not figure out how to prevent yapf from breaking the formatting # below. # yapf: disable - tests: typing.Tuple[str, str] = ( + tests: Tuple[str, str] = ( ('GpuCrash_GPUProcessCrashesExactlyOncePerVisitToAboutGpuCrash', 'gpu_process_crash.html'), ('ContextLost_WebGPUContextLostFromGPUProcessExit', @@ -717,7 +716,7 @@ self._RestartBrowser('must restart after tests that kill the GPU process') @classmethod - def ExpectationsFiles(cls) -> typing.List[str]: + def ExpectationsFiles(cls) -> List[str]: return [ os.path.join( os.path.dirname(os.path.abspath(__file__)), 'test_expectations', @@ -734,7 +733,7 @@ return False -def load_tests(loader: unittest.TestLoader, tests: typing.Any, - pattern: typing.Any) -> unittest.TestSuite: +def load_tests(loader: unittest.TestLoader, tests: Any, + pattern: Any) -> unittest.TestSuite: del loader, tests, pattern # Unused. return gpu_integration_test.LoadAllTestsInModule(sys.modules[__name__])
diff --git a/content/test/gpu/gpu_tests/expected_color_test.py b/content/test/gpu/gpu_tests/expected_color_test.py index 29f8caaf..b777c8c 100644 --- a/content/test/gpu/gpu_tests/expected_color_test.py +++ b/content/test/gpu/gpu_tests/expected_color_test.py
@@ -3,7 +3,7 @@ # found in the LICENSE file. import logging -import typing +from typing import Any, Dict, List from gpu_tests import common_typing as ct from gpu_tests import pixel_test_pages @@ -12,7 +12,7 @@ from telemetry.util import image_util from telemetry.util import rgba_color -ExpectedColorExpectation = typing.Dict[str, typing.Any] +ExpectedColorExpectation = Dict[str, Any] class ExpectedColorTest( @@ -29,8 +29,8 @@ raise NotImplementedError( 'RunActualGpuTest must be overridden in a subclass') - def GetGoldJsonKeys(self, page: pixel_test_pages.PixelTestPage - ) -> typing.Dict[str, str]: + def GetGoldJsonKeys(self, + page: pixel_test_pages.PixelTestPage) -> Dict[str, str]: keys = super().GetGoldJsonKeys(page) keys['expected_color_comment'] = ( 'This is an expected color test. Triaging in Gold will not affect test ' @@ -162,8 +162,8 @@ class ExpectedColorPixelTestPage(pixel_test_pages.PixelTestPage): """Extension of PixelTestPage with expected color information.""" - def __init__(self, expected_colors: typing.List[ExpectedColorExpectation], - *args, **kwargs): + def __init__(self, expected_colors: List[ExpectedColorExpectation], *args, + **kwargs): # The tolerance when comparing against the reference image. self.tolerance = kwargs.pop('tolerance', 2)
diff --git a/content/test/gpu/gpu_tests/gpu_helper.py b/content/test/gpu/gpu_tests/gpu_helper.py index 19018ae..5ba0a55e 100644 --- a/content/test/gpu/gpu_tests/gpu_helper.py +++ b/content/test/gpu/gpu_tests/gpu_helper.py
@@ -5,7 +5,7 @@ import os import re import sys -import typing +from typing import Dict, FrozenSet, List, Match, Optional, Tuple, Union import unittest.mock as mock from telemetry.internal.platform import gpu_info as tgi @@ -33,7 +33,7 @@ ] -def _ParseANGLEGpuVendorString(device_string: str) -> typing.Optional[str]: +def _ParseANGLEGpuVendorString(device_string: str) -> Optional[str]: if not device_string: return None # ANGLE's device (renderer) string is of the form: @@ -45,7 +45,7 @@ return None -def _GetANGLEGpuDeviceId(device_string: str) -> typing.Optional[str]: +def _GetANGLEGpuDeviceId(device_string: str) -> Optional[str]: if not device_string: return None # ANGLE's device (renderer) string is of the form: @@ -78,7 +78,7 @@ return 'unknown_gpu' -def GetGpuDeviceId(gpu_info: tgi.GPUInfo, index: int) -> typing.Union[int, str]: +def GetGpuDeviceId(gpu_info: tgi.GPUInfo, index: int) -> Union[int, str]: if gpu_info: primary_gpu = gpu_info.devices[index] if primary_gpu: @@ -88,7 +88,7 @@ return 0 -def GetGpuDriverVendor(gpu_info: tgi.GPUInfo) -> typing.Optional[str]: +def GetGpuDriverVendor(gpu_info: tgi.GPUInfo) -> Optional[str]: if gpu_info: primary_gpu = gpu_info.devices[0] if primary_gpu: @@ -96,7 +96,7 @@ return None -def GetGpuDriverVersion(gpu_info: tgi.GPUInfo) -> typing.Optional[str]: +def GetGpuDriverVersion(gpu_info: tgi.GPUInfo) -> Optional[str]: if gpu_info: primary_gpu = gpu_info.devices[0] if primary_gpu: @@ -145,8 +145,8 @@ return 'no_passthrough' -def GetSkiaRenderer(gpu_feature_status: typing.Dict[str, str], - extra_browser_args: typing.List[str]) -> str: +def GetSkiaRenderer(gpu_feature_status: Dict[str, str], + extra_browser_args: List[str]) -> str: # TODO(crbug.com/1343379): Remove skia-renderer-disabled tag once unittests # are updated to not produce it. retval = 'skia-renderer-disabled' @@ -165,7 +165,7 @@ return retval -def GetDisplayServer(browser_type: str) -> typing.Optional[str]: +def GetDisplayServer(browser_type: str) -> Optional[str]: # Browser types run on a remote device aren't Linux, but the host running # this code uses Linux, so return early to avoid erroneously reporting a # display server. @@ -178,7 +178,7 @@ return None -def GetOOPCanvasStatus(gpu_feature_status: typing.Dict[str, str]) -> str: +def GetOOPCanvasStatus(gpu_feature_status: Dict[str, str]) -> str: if gpu_feature_status and gpu_feature_status.get( 'canvas_oop_rasterization') == 'enabled_on': return 'oop-c' @@ -192,7 +192,7 @@ # TODO(rivr): Use GPU feature status for Dawn instead of command line. -def HasDawnSkiaRenderer(extra_browser_args: typing.List[str]) -> bool: +def HasDawnSkiaRenderer(extra_browser_args: List[str]) -> bool: if extra_browser_args: for arg in extra_browser_args: if arg.startswith('--enable-features') and 'SkiaDawn' in arg: @@ -200,12 +200,12 @@ return False -def HasGlSkiaRenderer(gpu_feature_status: typing.Dict[str, str]) -> bool: +def HasGlSkiaRenderer(gpu_feature_status: Dict[str, str]) -> bool: return (bool(gpu_feature_status) and gpu_feature_status.get('opengl') == 'enabled_on') -def HasVulkanSkiaRenderer(gpu_feature_status: typing.Dict[str, str]) -> bool: +def HasVulkanSkiaRenderer(gpu_feature_status: Dict[str, str]) -> bool: return (bool(gpu_feature_status) and gpu_feature_status.get('vulkan') == 'enabled_on') @@ -233,7 +233,7 @@ return args -def MatchDriverTag(tag: str) -> typing.Match[str]: +def MatchDriverTag(tag: str) -> Match[str]: return DRIVER_TAG_MATCHER.match(tag.lower()) @@ -244,12 +244,9 @@ def EvaluateVersionComparison(version: str, operation: str, ref_version: str, - os_name: typing.Optional[str] = None, - driver_vendor: typing.Optional[str] = None - ) -> bool: - def parse_version( - ver: str - ) -> typing.Union[typing.Tuple[int, str], typing.Tuple[None, None]]: + os_name: Optional[str] = None, + driver_vendor: Optional[str] = None) -> bool: + def parse_version(ver: str) -> Union[Tuple[int, str], Tuple[None, None]]: if ver.isdigit(): return int(ver), '' for i, digit in enumerate(ver): @@ -312,5 +309,5 @@ # pylint: enable=too-many-locals,too-many-branches -def ExpectationsDriverTags() -> typing.FrozenSet[str]: +def ExpectationsDriverTags() -> FrozenSet[str]: return EXPECTATIONS_DRIVER_TAGS
diff --git a/content/test/gpu/gpu_tests/gpu_integration_test.py b/content/test/gpu/gpu_tests/gpu_integration_test.py index 7ebafb5..e4d30f7 100644 --- a/content/test/gpu/gpu_tests/gpu_integration_test.py +++ b/content/test/gpu/gpu_tests/gpu_integration_test.py
@@ -7,7 +7,7 @@ import re import sys import types -import typing +from typing import Any, Dict, Generator, List, Optional, Set, Tuple, Type import unittest from telemetry.internal.results import artifact_compatibility_wrapper as acw @@ -36,8 +36,8 @@ # Hardware overlays are disabled in 26.20.100.8141 per crbug.com/1079393#c105 _UNSUPPORTED_WIN_INTEL_GPU_DRIVERS_WITH_NV12_OVERLAYS = ['5912-26.20.100.8141'] -TestTuple = typing.Tuple[str, ct.GeneratedTest] -TestTupleGenerator = typing.Generator[TestTuple, None, None] +TestTuple = Tuple[str, ct.GeneratedTest] +TestTupleGenerator = Generator[TestTuple, None, None] class GpuIntegrationTest( @@ -80,10 +80,9 @@ if self.artifacts is None: self.set_artifacts(None) - def set_artifacts( - self, - artifacts: typing.Optional[typing.Type[acw.ArtifactCompatibilityWrapper]] - ) -> None: + def set_artifacts(self, + artifacts: Optional[Type[acw.ArtifactCompatibilityWrapper]] + ) -> None: # Instead of using the default logging artifact implementation, use the # full logging one. This ensures we get debugging information if something # goes wrong before typ can set the actual artifact implementation, such @@ -122,8 +121,7 @@ help='The extra Intel device id with overlays') @classmethod - def GenerateBrowserArgs(cls, additional_args: typing.List[str] - ) -> typing.List[str]: + def GenerateBrowserArgs(cls, additional_args: List[str]) -> List[str]: """Generates the browser args to use for the next browser startup. Child classes are expected to override this and add any additional default @@ -144,8 +142,8 @@ return default_args + additional_args @classmethod - def CustomizeBrowserArgs( - cls, additional_args: typing.Optional[typing.List[str]] = None) -> None: + def CustomizeBrowserArgs(cls, + additional_args: Optional[List[str]] = None) -> None: """Customizes the browser's command line arguments for the next startup. NOTE that redefining this method in subclasses will NOT do what @@ -161,8 +159,7 @@ @classmethod def _GenerateAndSanitizeBrowserArgs( - cls, additional_args: typing.Optional[typing.List[str]] = None - ) -> typing.List[str]: + cls, additional_args: Optional[List[str]] = None) -> List[str]: """Generates browser arguments and sanitizes invalid arguments. Args: @@ -199,8 +196,7 @@ return browser_args @classmethod - def _SetBrowserArgsForNextStartup(cls, - browser_args: typing.List[str]) -> None: + def _SetBrowserArgsForNextStartup(cls, browser_args: List[str]) -> None: """Sets the browser arguments to use for the next browser startup. Args: @@ -222,7 +218,7 @@ @classmethod def RestartBrowserIfNecessaryWithArgs( cls, - additional_args: typing.Optional[typing.List[str]] = None, + additional_args: Optional[List[str]] = None, force_restart: bool = False) -> None: """Restarts the browser if it is determined to be necessary. @@ -245,8 +241,8 @@ cls.StartBrowser() @classmethod - def RestartBrowserWithArgs( - cls, additional_args: typing.Optional[typing.List[str]] = None) -> None: + def RestartBrowserWithArgs(cls, additional_args: Optional[List[str]] = None + ) -> None: cls.RestartBrowserIfNecessaryWithArgs(additional_args, force_restart=True) # The following is the rest of the framework for the GPU integration tests. @@ -423,7 +419,7 @@ self._HandlePass(test_name, expected_crashes, expected_results) def _HandleExpectedFailureOrFlake(self, test_name: str, - expected_crashes: typing.Dict[str, int], + expected_crashes: Dict[str, int], should_retry_on_failure: bool) -> None: """Helper method for handling a failure in an expected flaky/failing test""" # We don't check the return value here since we'll be raising the caught @@ -470,8 +466,8 @@ # propagate to the next test iteration. self._RestartBrowser('unexpected test failure') - def _HandlePass(self, test_name: str, expected_crashes: typing.Dict[str, int], - expected_results: typing.Set[str]) -> None: + def _HandlePass(self, test_name: str, expected_crashes: Dict[str, int], + expected_results: Set[str]) -> None: """Helper function for handling a passing test.""" # Fuchsia does not have minidump support, use system info to check # for crash count. @@ -540,8 +536,7 @@ return True return False - def _ClearExpectedCrashes(self, - expected_crashes: typing.Dict[str, int]) -> bool: + def _ClearExpectedCrashes(self, expected_crashes: Dict[str, int]) -> bool: """Clears any expected crash minidumps so they're not caught later. Args: @@ -577,7 +572,7 @@ return False # pylint: disable=no-self-use - def GetExpectedCrashes(self, args: ct.TestArgs) -> typing.Dict[str, int]: + def GetExpectedCrashes(self, args: ct.TestArgs) -> Dict[str, int]: """Returns which crashes, per process type, to expect for the current test. Should be overridden by child classes to actually return valid data if @@ -609,7 +604,7 @@ """ raise NotImplementedError - def GetOverlayBotConfig(self) -> typing.Dict[str, typing.Any]: + def GetOverlayBotConfig(self) -> Dict[str, Any]: """Returns expected bot config for DirectComposition and overlay support. This is only meaningful on Windows platform. @@ -668,7 +663,7 @@ config['nv12_overlay_support'] = 'SCALING' return config - def GetDx12VulkanBotConfig(self) -> typing.Dict[str, bool]: + def GetDx12VulkanBotConfig(self) -> Dict[str, bool]: """Returns expected bot config for DX12 and Vulkan support. This configuration is collected on Windows platform only. @@ -704,7 +699,7 @@ return config @classmethod - def GetPlatformTags(cls, browser: ct.Browser) -> typing.List[str]: + def GetPlatformTags(cls, browser: ct.Browser) -> List[str]: """This function will take a Browser instance as an argument. It will call the super classes implementation of GetPlatformTags() to get a list of tags. Then it will add the gpu vendor, gpu device id, @@ -791,7 +786,7 @@ return '/' @classmethod - def IgnoredTags(cls) -> typing.List[str]: + def IgnoredTags(cls) -> List[str]: return [ # We only ever use android-webview-instrumentation if we want to specify # that an expectation applies to Webview.
diff --git a/content/test/gpu/gpu_tests/gpu_integration_test_unittest.py b/content/test/gpu/gpu_tests/gpu_integration_test_unittest.py index 53727b4..3debcb5b 100644 --- a/content/test/gpu/gpu_tests/gpu_integration_test_unittest.py +++ b/content/test/gpu/gpu_tests/gpu_integration_test_unittest.py
@@ -10,6 +10,7 @@ import os import tempfile import typing +from typing import Dict, List, Optional, Set, Tuple, Type import unittest import unittest.mock as mock @@ -45,7 +46,7 @@ VENDOR_STRING_IMAGINATION = 'Imagination Technologies' DEVICE_STRING_SGX = 'PowerVR SGX 554' -GpuTestClassType = typing.Type[gpu_integration_test.GpuIntegrationTest] +GpuTestClassType = Type[gpu_integration_test.GpuIntegrationTest] def _GetSystemInfo( # pylint: disable=too-many-arguments @@ -79,8 +80,7 @@ def _GetTagsToTest(browser: fakes.FakeBrowser, - test_class: typing.Optional[GpuTestClassType] = None - ) -> typing.Set[str]: + test_class: Optional[GpuTestClassType] = None) -> Set[str]: browser = typing.cast(ct.Browser, browser) test_class = test_class or gpu_integration_test.GpuIntegrationTest tags = None @@ -93,7 +93,7 @@ def _GenerateNvidiaExampleTagsForTestClassAndArgs(test_class: GpuTestClassType, args: mock.MagicMock, is_asan: bool = False - ) -> typing.Set[str]: + ) -> Set[str]: tags = None with mock.patch.object( test_class, 'ExpectationsFiles', return_value=['exp.txt']): @@ -125,10 +125,9 @@ self._test_state = {} self._test_result = {} - def _RunGpuIntegrationTests( - self, - test_name: str, - extra_args: typing.Optional[typing.List[str]] = None) -> None: + def _RunGpuIntegrationTests(self, + test_name: str, + extra_args: Optional[List[str]] = None) -> None: extra_args = extra_args or [] unittest_config = chromium_config.ChromiumConfig( top_level_dir=gpu_path_util.GPU_DIR, @@ -179,8 +178,7 @@ def _TestTagGenerationForMockPlatform(self, test_class: GpuTestClassType, args: mock.MagicMock, - is_asan: bool = False - ) -> typing.Set[str]: + is_asan: bool = False) -> Set[str]: tag_set = _GenerateNvidiaExampleTagsForTestClassAndArgs( test_class, args, is_asan) self.assertTrue( @@ -520,9 +518,8 @@ self.assertEqual(set(actual_skips), set(test_args.skips)) -def _ExtractTestResults( - test_result: typing.Dict[str, typing.Any] -) -> typing.Tuple[typing.List[str], typing.List[str], typing.List[str]]: +def _ExtractTestResults(test_result: Dict[str, Dict] + ) -> Tuple[List[str], List[str], List[str]]: delimiter = test_result['path_delimiter'] failures = [] successes = []
diff --git a/content/test/gpu/gpu_tests/gpu_process_integration_test.py b/content/test/gpu/gpu_tests/gpu_process_integration_test.py index d5e1f49..15a455a 100644 --- a/content/test/gpu/gpu_tests/gpu_process_integration_test.py +++ b/content/test/gpu/gpu_tests/gpu_process_integration_test.py
@@ -6,7 +6,7 @@ import os import sys import time -import typing +from typing import Any, List, Optional, Tuple import unittest from devil.android.sdk import version_codes @@ -71,8 +71,7 @@ cls.SetStaticServerDirs([data_path]) @classmethod - def GenerateBrowserArgs(cls, additional_args: typing.List[str] - ) -> typing.List[str]: + def GenerateBrowserArgs(cls, additional_args: List[str]) -> List[str]: """Adds default arguments to |additional_args|. See the parent class' method documentation for additional information. @@ -102,7 +101,7 @@ # Also note that since functional_video.html refers to files in # ../media/ , the serving dir must be the common parent directory. - tests: typing.Tuple[str, str] = ( + tests = ( ('GpuProcess_canvas2d', 'gpu/functional_canvas_demo.html'), ('GpuProcess_css3d', 'gpu/functional_3d_css.html'), ('GpuProcess_webgl', 'gpu/functional_webgl.html'), @@ -186,9 +185,8 @@ self.fail('%s %s workarounds: %s' % (workaround_name, error_message, gpu_driver_bug_workarounds)) - def _ValidateDriverBugWorkarounds(self, - expected_workaround: typing.Optional[str], - unexpected_workaround: typing.Optional[str] + def _ValidateDriverBugWorkarounds(self, expected_workaround: Optional[str], + unexpected_workaround: Optional[str] ) -> None: if not expected_workaround and not unexpected_workaround: return @@ -209,7 +207,7 @@ return True def _CompareAndCaptureDriverBugWorkarounds( - self) -> typing.Tuple[typing.List[str], typing.Optional[str]]: + self) -> Tuple[List[str], Optional[str]]: tab = self.tab if not tab.EvaluateJavaScript('chrome.gpuBenchmarking.hasGpuProcess()'): self.fail('No GPU process detected') @@ -656,7 +654,7 @@ self._NavigateAndWait(test_path) @classmethod - def ExpectationsFiles(cls) -> typing.List[str]: + def ExpectationsFiles(cls) -> List[str]: return [ os.path.join( os.path.dirname(os.path.abspath(__file__)), 'test_expectations', @@ -664,7 +662,7 @@ ] -def load_tests(loader: unittest.TestLoader, tests: typing.Any, - pattern: typing.Any) -> unittest.TestSuite: +def load_tests(loader: unittest.TestLoader, tests: Any, + pattern: Any) -> unittest.TestSuite: del loader, tests, pattern # Unused. return gpu_integration_test.LoadAllTestsInModule(sys.modules[__name__])
diff --git a/content/test/gpu/gpu_tests/hardware_accelerated_feature_integration_test.py b/content/test/gpu/gpu_tests/hardware_accelerated_feature_integration_test.py index 3ea6994..9a1e37d 100644 --- a/content/test/gpu/gpu_tests/hardware_accelerated_feature_integration_test.py +++ b/content/test/gpu/gpu_tests/hardware_accelerated_feature_integration_test.py
@@ -6,7 +6,7 @@ import os import sys -import typing +from typing import Any, List import unittest from gpu_tests import common_typing as ct @@ -78,7 +78,7 @@ self.fail('%s not hardware accelerated' % feature) @classmethod - def ExpectationsFiles(cls) -> typing.List[str]: + def ExpectationsFiles(cls) -> List[str]: return [ os.path.join( os.path.dirname(os.path.abspath(__file__)), 'test_expectations', @@ -86,7 +86,7 @@ ] -def load_tests(loader: unittest.TestLoader, tests: typing.Any, - pattern: typing.Any) -> unittest.TestSuite: +def load_tests(loader: unittest.TestLoader, tests: Any, + pattern: Any) -> unittest.TestSuite: del loader, tests, pattern # Unused. return gpu_integration_test.LoadAllTestsInModule(sys.modules[__name__])
diff --git a/content/test/gpu/gpu_tests/info_collection_test.py b/content/test/gpu/gpu_tests/info_collection_test.py index fa51a7f..6beac5e 100644 --- a/content/test/gpu/gpu_tests/info_collection_test.py +++ b/content/test/gpu/gpu_tests/info_collection_test.py
@@ -4,7 +4,7 @@ import os import sys -import typing +from typing import Any, List, Optional, Union import unittest import six @@ -19,9 +19,9 @@ """Struct-like class for passing args to an InfoCollection test.""" def __init__(self, - expected_vendor_id_str: typing.Optional[str] = None, - expected_device_id_strs: typing.Optional[str] = None): - self.gpu: typing.Optional[gi.GPUInfo] = None + expected_vendor_id_str: Optional[str] = None, + expected_device_id_strs: Optional[str] = None): + self.gpu: Optional[gi.GPUInfo] = None self.expected_vendor_id_str = expected_vendor_id_str self.expected_device_id_strs = expected_device_id_strs @@ -156,7 +156,7 @@ self.assertIn('is_asan', gpu_info.aux_attributes) @staticmethod - def _ValueToStr(value: typing.Union[str, bool]) -> str: + def _ValueToStr(value: Union[str, bool]) -> str: if isinstance(value, six.string_types): return value if isinstance(value, bool): @@ -165,14 +165,14 @@ return False @classmethod - def ExpectationsFiles(cls) -> typing.List[str]: + def ExpectationsFiles(cls) -> List[str]: return [ os.path.join(os.path.dirname(os.path.abspath(__file__)), 'test_expectations', 'info_collection_expectations.txt') ] -def load_tests(loader: unittest.TestLoader, tests: typing.Any, - pattern: typing.Any) -> unittest.TestSuite: +def load_tests(loader: unittest.TestLoader, tests: Any, + pattern: Any) -> unittest.TestSuite: del loader, tests, pattern # Unused. return gpu_integration_test.LoadAllTestsInModule(sys.modules[__name__])
diff --git a/content/test/gpu/gpu_tests/ipg_utils.py b/content/test/gpu/gpu_tests/ipg_utils.py index f8bedac..298dd7a2 100644 --- a/content/test/gpu/gpu_tests/ipg_utils.py +++ b/content/test/gpu/gpu_tests/ipg_utils.py
@@ -24,12 +24,11 @@ import os import subprocess import sys -import typing +from typing import Any, Dict, List, Optional, Tuple, Union -SummaryType = typing.Dict[str, typing.Dict[str, float]] -ResultType = typing.Dict[str, typing.Any] -MetricType = typing.Dict[str, typing.Union[typing.List[str], typing. - List[float]]] +SummaryType = Dict[str, Dict[str, float]] +ResultType = Dict[str, Any] +MetricType = Dict[str, Union[List[str], List[float]]] def LocateIPG() -> str: @@ -47,7 +46,7 @@ def GenerateIPGLogFilename(log_prefix: str = 'PowerLog', - log_dir: typing.Optional[str] = None, + log_dir: Optional[str] = None, current_run: int = 1, total_runs: int = 1, timestamp: bool = False) -> str: @@ -64,7 +63,7 @@ def RunIPG(duration_in_s: int = 60, resolution_in_ms: int = 100, - logfile: typing.Optional[str] = None) -> None: + logfile: Optional[str] = None) -> None: intel_power_gadget_path = LocateIPG() command = ('"%s" -duration %d -resolution %d' % (intel_power_gadget_path, duration_in_s, resolution_in_ms)) @@ -84,7 +83,7 @@ logging.debug(output) -def AnalyzeIPGLogFile(logfile: typing.Optional[str] = None, +def AnalyzeIPGLogFile(logfile: Optional[str] = None, skip_in_sec: int = 0) -> ResultType: if not logfile: logfile = GenerateIPGLogFilename() @@ -128,13 +127,12 @@ return results -def ProcessResultsFromMultipleIPGRuns(logfiles: typing.List[str], +def ProcessResultsFromMultipleIPGRuns(logfiles: List[str], skip_in_seconds: int = 0, outliers: int = 0, - output_json: typing.Optional[str] = None + output_json: Optional[str] = None ) -> SummaryType: - def _ScrapeDataFromIPGLogFiles( - ) -> typing.Tuple[typing.Dict[str, ResultType], MetricType]: + def _ScrapeDataFromIPGLogFiles() -> Tuple[Dict[str, ResultType], MetricType]: """Scrapes data from IPG log files. Returns:
diff --git a/content/test/gpu/gpu_tests/maps_integration_test.py b/content/test/gpu/gpu_tests/maps_integration_test.py index 22ed75b..052ab4b 100644 --- a/content/test/gpu/gpu_tests/maps_integration_test.py +++ b/content/test/gpu/gpu_tests/maps_integration_test.py
@@ -6,7 +6,7 @@ import json import os import sys -import typing +from typing import Any, List, Tuple import unittest from gpu_tests import color_profile_manager @@ -128,7 +128,7 @@ self._ValidateScreenshotSamplesWithSkiaGold(tab, page, screenshot, dpr) @classmethod - def ExpectationsFiles(cls) -> typing.List[str]: + def ExpectationsFiles(cls) -> List[str]: return [ os.path.join( os.path.dirname(os.path.abspath(__file__)), 'test_expectations', @@ -136,7 +136,7 @@ ] -def _ReadPixelExpectations(expectations_file: str) -> typing.List[dict]: +def _ReadPixelExpectations(expectations_file: str) -> List[dict]: expectations_path = os.path.join(_DATA_PATH, expectations_file) with open(expectations_path, 'r') as f: json_contents = json.load(f) @@ -145,7 +145,7 @@ def _GetMapsPageForUrl( url: str, - expected_colors: typing.List[expected_color_test.ExpectedColorExpectation] + expected_colors: List[expected_color_test.ExpectedColorExpectation] ) -> expected_color_test.ExpectedColorPixelTestPage: page = expected_color_test.ExpectedColorPixelTestPage( url=url, @@ -158,8 +158,7 @@ return page -def _GetCropBoundaries(screenshot: ct.Screenshot - ) -> typing.Tuple[int, int, int, int]: +def _GetCropBoundaries(screenshot: ct.Screenshot) -> Tuple[int, int, int, int]: """Returns the boundaries to crop the screenshot to. Specifically, we look for the boundaries where the white background @@ -214,7 +213,7 @@ return x1, y1, x2, y2 -def load_tests(loader: unittest.TestLoader, tests: typing.Any, - pattern: typing.Any) -> unittest.TestSuite: +def load_tests(loader: unittest.TestLoader, tests: Any, + pattern: Any) -> unittest.TestSuite: del loader, tests, pattern # Unused. return gpu_integration_test.LoadAllTestsInModule(sys.modules[__name__])
diff --git a/content/test/gpu/gpu_tests/mediapipe_integration_test.py b/content/test/gpu/gpu_tests/mediapipe_integration_test.py index 9ff3eca..57ea3e2c 100644 --- a/content/test/gpu/gpu_tests/mediapipe_integration_test.py +++ b/content/test/gpu/gpu_tests/mediapipe_integration_test.py
@@ -6,7 +6,7 @@ import os import sys -import typing +from typing import Any, List import unittest from gpu_tests import common_browser_args as cba @@ -67,7 +67,7 @@ self.fail(errors) @classmethod - def ExpectationsFiles(cls) -> typing.List[str]: + def ExpectationsFiles(cls) -> List[str]: return [ os.path.join(os.path.dirname(os.path.abspath(__file__)), 'test_expectations', 'mediapipe_expectations.txt'), @@ -78,7 +78,7 @@ return '%s/_CLICK_ME_TO_RUN_%s_LOCALLY.html' % (entry, entry) -def load_tests(loader: unittest.TestLoader, tests: typing.Any, - pattern: typing.Any) -> unittest.TestSuite: +def load_tests(loader: unittest.TestLoader, tests: Any, + pattern: Any) -> unittest.TestSuite: del loader, tests, pattern # Unused. return gpu_integration_test.LoadAllTestsInModule(sys.modules[__name__])
diff --git a/content/test/gpu/gpu_tests/noop_sleep_integration_test.py b/content/test/gpu/gpu_tests/noop_sleep_integration_test.py index f5efccd..227374a 100644 --- a/content/test/gpu/gpu_tests/noop_sleep_integration_test.py +++ b/content/test/gpu/gpu_tests/noop_sleep_integration_test.py
@@ -6,7 +6,7 @@ import sys import time -import typing +from typing import Any import unittest from gpu_tests import common_typing as ct @@ -54,7 +54,7 @@ time.sleep(180) -def load_tests(loader: unittest.TestLoader, tests: typing.Any, - pattern: typing.Any) -> unittest.TestSuite: +def load_tests(loader: unittest.TestLoader, tests: Any, + pattern: Any) -> unittest.TestSuite: del loader, tests, pattern # Unused. return gpu_integration_test.LoadAllTestsInModule(sys.modules[__name__])
diff --git a/content/test/gpu/gpu_tests/pixel_integration_test.py b/content/test/gpu/gpu_tests/pixel_integration_test.py index 1abef0e0..fe099c5 100644 --- a/content/test/gpu/gpu_tests/pixel_integration_test.py +++ b/content/test/gpu/gpu_tests/pixel_integration_test.py
@@ -7,7 +7,7 @@ import posixpath import sys import time -import typing +from typing import Any, List import unittest from gpu_tests import common_typing as ct @@ -325,7 +325,7 @@ tab.EvaluateJavaScript('render()') @classmethod - def ExpectationsFiles(cls) -> typing.List[str]: + def ExpectationsFiles(cls) -> List[str]: return [ os.path.join( os.path.dirname(os.path.abspath(__file__)), 'test_expectations', @@ -337,7 +337,7 @@ return tab.EvaluateJavaScript('domAutomationController._messages') -def load_tests(loader: unittest.TestLoader, tests: typing.Any, - pattern: typing.Any) -> unittest.TestSuite: +def load_tests(loader: unittest.TestLoader, tests: Any, + pattern: Any) -> unittest.TestSuite: del loader, tests, pattern # Unused. return gpu_integration_test.LoadAllTestsInModule(sys.modules[__name__])
diff --git a/content/test/gpu/gpu_tests/pixel_test_pages.py b/content/test/gpu/gpu_tests/pixel_test_pages.py index 6ea139d1..f908d36 100644 --- a/content/test/gpu/gpu_tests/pixel_test_pages.py +++ b/content/test/gpu/gpu_tests/pixel_test_pages.py
@@ -9,7 +9,7 @@ import datetime import os -import typing +from typing import Dict, List, Optional from datetime import date @@ -48,7 +48,7 @@ edge_threshold=80, ignored_border_thickness=1) -BrowserArgType = typing.List[str] +BrowserArgType = List[str] class PixelTestPage(): @@ -60,17 +60,15 @@ self, url: str, name: str, - test_rect: typing.List[int], - browser_args: typing.Optional[BrowserArgType] = None, + test_rect: List[int], + browser_args: Optional[BrowserArgType] = None, gpu_process_disabled: bool = False, - optional_action: typing.Optional[str] = None, + optional_action: Optional[str] = None, restart_browser_after_test: bool = False, - other_args: typing.Optional[dict] = None, - grace_period_end: typing.Optional[datetime.date] = None, - expected_per_process_crashes: typing.Optional[ - typing.Dict[str, int]] = None, - matching_algorithm: typing.Optional[algo.SkiaGoldMatchingAlgorithm] = None - ): + other_args: Optional[dict] = None, + grace_period_end: Optional[datetime.date] = None, + expected_per_process_crashes: Optional[Dict[str, int]] = None, + matching_algorithm: Optional[algo.SkiaGoldMatchingAlgorithm] = None): super().__init__() self.url = url self.name = name @@ -127,26 +125,24 @@ self.test_rect, browser_args) -def CopyPagesWithNewBrowserArgsAndSuffix(pages: typing.List[PixelTestPage], +def CopyPagesWithNewBrowserArgsAndSuffix(pages: List[PixelTestPage], browser_args: BrowserArgType, - suffix: str - ) -> typing.List[PixelTestPage]: + suffix: str) -> List[PixelTestPage]: return [ p.CopyWithNewBrowserArgsAndSuffix(browser_args, suffix) for p in pages ] -def CopyPagesWithNewBrowserArgsAndPrefix(pages: typing.List[PixelTestPage], +def CopyPagesWithNewBrowserArgsAndPrefix(pages: List[PixelTestPage], browser_args: BrowserArgType, - prefix: str - ) -> typing.List[PixelTestPage]: + prefix: str) -> List[PixelTestPage]: return [ p.CopyWithNewBrowserArgsAndPrefix(browser_args, prefix) for p in pages ] def GetMediaStreamTestBrowserArgs(media_stream_source_relpath: str - ) -> typing.List[str]: + ) -> List[str]: return [ '--use-fake-device-for-media-stream', '--use-fake-ui-for-media-stream', '--use-file-for-fake-video-capture=' + @@ -156,7 +152,7 @@ class PixelTestPages(): @staticmethod - def DefaultPages(base_name: str) -> typing.List[PixelTestPage]: + def DefaultPages(base_name: str) -> List[PixelTestPage]: sw_compositing_args = [cba.DISABLE_GPU_COMPOSITING] browser_args_DXVA = [cba.DISABLE_FEATURES_D3D11_VIDEO_DECODER] @@ -529,7 +525,7 @@ # Pages that should be run with GPU rasterization enabled. @staticmethod - def GpuRasterizationPages(base_name: str) -> typing.List[PixelTestPage]: + def GpuRasterizationPages(base_name: str) -> List[PixelTestPage]: browser_args = [ cba.ENABLE_GPU_RASTERIZATION, cba.DISABLE_SOFTWARE_COMPOSITING_FALLBACK, @@ -555,7 +551,7 @@ # Pages that should be run with off-thread paint worklet flags. @staticmethod - def PaintWorkletPages(base_name: str) -> typing.List[PixelTestPage]: + def PaintWorkletPages(base_name: str) -> List[PixelTestPage]: browser_args = [ '--enable-blink-features=OffMainThreadCSSPaint', '--enable-gpu-rasterization' @@ -571,8 +567,7 @@ # Pages that should be run with experimental canvas features. @staticmethod - def ExperimentalCanvasFeaturesPages(base_name: str - ) -> typing.List[PixelTestPage]: + def ExperimentalCanvasFeaturesPages(base_name: str) -> List[PixelTestPage]: browser_args = [ cba.ENABLE_EXPERIMENTAL_WEB_PLATFORM_FEATURES, ] @@ -677,7 +672,7 @@ ] @staticmethod - def LowLatencyPages(base_name: str) -> typing.List[PixelTestPage]: + def LowLatencyPages(base_name: str) -> List[PixelTestPage]: unaccelerated_args = [ cba.DISABLE_ACCELERATED_2D_CANVAS, cba.DISABLE_GPU_COMPOSITING, @@ -717,7 +712,7 @@ # Only add these tests on platforms where SwiftShader is enabled. # Currently this is Windows and Linux. @staticmethod - def SwiftShaderPages(base_name: str) -> typing.List[PixelTestPage]: + def SwiftShaderPages(base_name: str) -> List[PixelTestPage]: browser_args = [cba.DISABLE_GPU] suffix = '_SwiftShader' return [ @@ -741,7 +736,7 @@ # Test rendering where GPU process is blocked. @staticmethod - def NoGpuProcessPages(base_name: str) -> typing.List[PixelTestPage]: + def NoGpuProcessPages(base_name: str) -> List[PixelTestPage]: browser_args = [cba.DISABLE_GPU, cba.DISABLE_SOFTWARE_RASTERIZER] suffix = '_NoGpuProcess' return [ @@ -762,7 +757,7 @@ # Pages that should be run with various macOS specific command line # arguments. @staticmethod - def MacSpecificPages(base_name: str) -> typing.List[PixelTestPage]: + def MacSpecificPages(base_name: str) -> List[PixelTestPage]: unaccelerated_2d_canvas_args = [cba.DISABLE_ACCELERATED_2D_CANVAS] non_chromium_image_args = ['--disable-webgl-image-chromium'] @@ -888,7 +883,7 @@ # Pages that should be run only on dual-GPU MacBook Pros (at the # present time, anyway). @staticmethod - def DualGPUMacSpecificPages(base_name: str) -> typing.List[PixelTestPage]: + def DualGPUMacSpecificPages(base_name: str) -> List[PixelTestPage]: return [ PixelTestPage('pixel_webgl_high_to_low_power.html', base_name + '_WebGLHighToLowPower', @@ -915,7 +910,7 @@ ] @staticmethod - def DirectCompositionPages(base_name: str) -> typing.List[PixelTestPage]: + def DirectCompositionPages(base_name: str) -> List[PixelTestPage]: browser_args = [ cba.ENABLE_DIRECT_COMPOSITION_VIDEO_OVERLAYS, # All bots are connected with a power source, however, we want to to @@ -1125,7 +1120,7 @@ ] @staticmethod - def VideoFromCanvasPages(base_name: str) -> typing.List[PixelTestPage]: + def VideoFromCanvasPages(base_name: str) -> List[PixelTestPage]: # Tests for <video> element rendering results of <canvas> capture. # It's important for video conference software. @@ -1166,7 +1161,7 @@ ] @staticmethod - def HdrTestPages(base_name: str) -> typing.List[PixelTestPage]: + def HdrTestPages(base_name: str) -> List[PixelTestPage]: return [ PixelTestPage( 'pixel_canvas2d.html', @@ -1181,7 +1176,7 @@ ] @staticmethod - def ForceFullDamagePages(base_name: str) -> typing.List[PixelTestPage]: + def ForceFullDamagePages(base_name: str) -> List[PixelTestPage]: return [ PixelTestPage( 'wait_for_compositing.html',
diff --git a/content/test/gpu/gpu_tests/power_measurement_integration_test.py b/content/test/gpu/gpu_tests/power_measurement_integration_test.py index 3633e26..b0e727f 100644 --- a/content/test/gpu/gpu_tests/power_measurement_integration_test.py +++ b/content/test/gpu/gpu_tests/power_measurement_integration_test.py
@@ -28,7 +28,7 @@ import posixpath import sys import time -import typing +from typing import Any, List import unittest from gpu_tests import common_browser_args as cba @@ -391,8 +391,7 @@ getattr(self, prefixed_test_func_name)(test_path, test_params) @classmethod - def GenerateBrowserArgs(cls, additional_args: typing.List[str] - ) -> typing.List[str]: + def GenerateBrowserArgs(cls, additional_args: List[str]) -> List[str]: """Adds default arguments to |additional_args|. See the parent class' method documentation for additional information. @@ -546,7 +545,7 @@ logging.info('Summary: %s', str(summary)) @classmethod - def ExpectationsFiles(cls) -> typing.List[str]: + def ExpectationsFiles(cls) -> List[str]: return [ os.path.join( os.path.dirname(os.path.abspath(__file__)), 'test_expectations', @@ -554,7 +553,7 @@ ] -def load_tests(loader: unittest.TestLoader, tests: typing.Any, - pattern: typing.Any) -> unittest.TestSuite: +def load_tests(loader: unittest.TestLoader, tests: Any, + pattern: Any) -> unittest.TestSuite: del loader, tests, pattern # Unused. return gpu_integration_test.LoadAllTestsInModule(sys.modules[__name__])
diff --git a/content/test/gpu/gpu_tests/screenshot_sync_integration_test.py b/content/test/gpu/gpu_tests/screenshot_sync_integration_test.py index a9e063f..29048e74 100644 --- a/content/test/gpu/gpu_tests/screenshot_sync_integration_test.py +++ b/content/test/gpu/gpu_tests/screenshot_sync_integration_test.py
@@ -8,7 +8,7 @@ import os import random import sys -import typing +from typing import Any, List import unittest from gpu_tests import color_profile_manager @@ -69,8 +69,7 @@ cls.SetStaticServerDirs([gpu_path_util.GPU_DATA_DIR]) @classmethod - def GenerateBrowserArgs(cls, additional_args: typing.List[str] - ) -> typing.List[str]: + def GenerateBrowserArgs(cls, additional_args: List[str]) -> List[str]: """Adds default arguments to |additional_args|. See the parent class' method documentation for additional information. @@ -158,7 +157,7 @@ self._CheckScreenshot() @classmethod - def ExpectationsFiles(cls) -> typing.List[str]: + def ExpectationsFiles(cls) -> List[str]: return [ os.path.join( os.path.dirname(os.path.abspath(__file__)), 'test_expectations', @@ -166,7 +165,7 @@ ] -def load_tests(loader: unittest.TestLoader, tests: typing.Any, - pattern: typing.Any) -> unittest.TestSuite: +def load_tests(loader: unittest.TestLoader, tests: Any, + pattern: Any) -> unittest.TestSuite: del loader, tests, pattern # Unused. return gpu_integration_test.LoadAllTestsInModule(sys.modules[__name__])
diff --git a/content/test/gpu/gpu_tests/skia_gold/gpu_skia_gold_properties.py b/content/test/gpu/gpu_tests/skia_gold/gpu_skia_gold_properties.py index ea0d660..e8fe616 100644 --- a/content/test/gpu/gpu_tests/skia_gold/gpu_skia_gold_properties.py +++ b/content/test/gpu/gpu_tests/skia_gold/gpu_skia_gold_properties.py
@@ -5,7 +5,7 @@ import subprocess import sys -import typing +from typing import Optional import gpu_path_util @@ -14,7 +14,7 @@ class GpuSkiaGoldProperties(skia_gold_properties.SkiaGoldProperties): @staticmethod - def _GetGitOriginMainHeadSha1() -> typing.Optional[str]: + def _GetGitOriginMainHeadSha1() -> Optional[str]: try: return subprocess.check_output( ['git', 'rev-parse', 'origin/main'],
diff --git a/content/test/gpu/gpu_tests/skia_gold_integration_test_base.py b/content/test/gpu/gpu_tests/skia_gold_integration_test_base.py index 3a81943..033af94 100644 --- a/content/test/gpu/gpu_tests/skia_gold_integration_test_base.py +++ b/content/test/gpu/gpu_tests/skia_gold_integration_test_base.py
@@ -9,7 +9,7 @@ import shutil import sys import tempfile -import typing +from typing import Any, Dict, List, Optional import unittest from gpu_tests import color_profile_manager @@ -40,15 +40,15 @@ class _ImageParameters(): def __init__(self): # Parameters for cloud storage reference images. - self.vendor_id: typing.Optional[int] = None - self.device_id: typing.Optional[int] = None - self.vendor_string: typing.Optional[str] = None - self.device_string: typing.Optional[str] = None + self.vendor_id: Optional[int] = None + self.device_id: Optional[int] = None + self.vendor_string: Optional[str] = None + self.device_string: Optional[str] = None self.msaa: bool = False - self.model_name: typing.Optional[str] = None - self.driver_version: typing.Optional[str] = None - self.driver_vendor: typing.Optional[str] = None - self.display_server: typing.Optional[str] = None + self.model_name: Optional[str] = None + self.driver_version: Optional[str] = None + self.driver_vendor: Optional[str] = None + self.display_server: Optional[str] = None class SkiaGoldIntegrationTestBase(gpu_integration_test.GpuIntegrationTest): @@ -104,8 +104,7 @@ return cls._skia_gold_session_manager @classmethod - def GenerateBrowserArgs(cls, additional_args: typing.List[str] - ) -> typing.List[str]: + def GenerateBrowserArgs(cls, additional_args: List[str]) -> List[str]: """Adds default arguments to |additional_args|. See the parent class' method documentation for additional information. @@ -266,7 +265,7 @@ def _UploadBitmapToCloudStorage(cls, bucket: str, name: str, - bitmap: typing.Any, + bitmap: Any, public: bool = False) -> None: # This sequence of steps works on all platforms to write a temporary # PNG to disk, following the pattern in bitmap_unittest.py. The key to @@ -300,8 +299,8 @@ image_name = re.sub(r'(\.|/|-)', '_', image_name) return image_name - def GetGoldJsonKeys(self, page: pixel_test_pages.PixelTestPage - ) -> typing.Dict[str, str]: + def GetGoldJsonKeys(self, + page: pixel_test_pages.PixelTestPage) -> Dict[str, str]: """Get all the JSON metadata that will be passed to golctl.""" img_params = self.GetImageParameters(page) # The frequently changing last part of the ANGLE driver version (revision of @@ -467,11 +466,11 @@ return hex(int(num)) -def _ToHexOrNone(num: typing.Optional[str]) -> str: +def _ToHexOrNone(num: Optional[str]) -> str: return 'None' if num is None else _ToHex(num) -def _ToNonEmptyStrOrNone(val: typing.Optional[str]) -> str: +def _ToNonEmptyStrOrNone(val: Optional[str]) -> str: return 'None' if val == '' else str(val) @@ -547,7 +546,7 @@ logging.error('Diff image: %s', diff_file or failure_message) -def load_tests(loader: unittest.TestLoader, tests: typing.Any, - pattern: typing.Any) -> unittest.TestSuite: +def load_tests(loader: unittest.TestLoader, tests: Any, + pattern: Any) -> unittest.TestSuite: del loader, tests, pattern # Unused. return gpu_integration_test.LoadAllTestsInModule(sys.modules[__name__])
diff --git a/content/test/gpu/gpu_tests/skia_gold_matching_algorithms.py b/content/test/gpu/gpu_tests/skia_gold_matching_algorithms.py index e684c94..9e048c7 100644 --- a/content/test/gpu/gpu_tests/skia_gold_matching_algorithms.py +++ b/content/test/gpu/gpu_tests/skia_gold_matching_algorithms.py
@@ -3,7 +3,7 @@ # found in the LICENSE file. """Classes related to the possible matching algorithms for Skia Gold.""" -import typing +from typing import List, Union class Parameters(): @@ -36,7 +36,7 @@ ALGORITHM_KEY = 'image_matching_algorithm' """Abstract base class for all algorithms.""" - def GetCmdline(self) -> typing.List[str]: + def GetCmdline(self) -> List[str]: """Gets command line parameters for the algorithm. Returns: @@ -56,7 +56,7 @@ class ExactMatchingAlgorithm(SkiaGoldMatchingAlgorithm): """Class for the default exact matching algorithm in Gold.""" - def GetCmdline(self) -> typing.List[str]: + def GetCmdline(self) -> List[str]: return [] def Name(self) -> str: @@ -78,7 +78,7 @@ self._pixel_delta_threshold = pixel_delta_threshold self._ignored_border_thickness = ignored_border_thickness - def GetCmdline(self) -> typing.List[str]: + def GetCmdline(self) -> List[str]: retval = super().GetCmdline() retval.extend( _GenerateOptionalKey(Parameters.MAX_DIFFERENT_PIXELS, @@ -116,7 +116,7 @@ 'matching.') self._edge_threshold = edge_threshold - def GetCmdline(self) -> typing.List[str]: + def GetCmdline(self) -> List[str]: retval = super().GetCmdline() retval.extend( _GenerateOptionalKey(Parameters.EDGE_THRESHOLD, self._edge_threshold)) @@ -126,6 +126,5 @@ return 'sobel' -def _GenerateOptionalKey(key: str, - value: typing.Union[int, str]) -> typing.List[str]: +def _GenerateOptionalKey(key: str, value: Union[int, str]) -> List[str]: return ['--add-test-optional-key', '%s:%s' % (key, value)]
diff --git a/content/test/gpu/gpu_tests/test_expectations_unittest.py b/content/test/gpu/gpu_tests/test_expectations_unittest.py index 3d4fafe..2da46fb 100644 --- a/content/test/gpu/gpu_tests/test_expectations_unittest.py +++ b/content/test/gpu/gpu_tests/test_expectations_unittest.py
@@ -7,7 +7,7 @@ import os import re import sys -import typing +from typing import List, Optional, Set, Type import unittest import unittest.mock as mock @@ -106,7 +106,7 @@ return True -def _MapGpuDevicesToVendors(tag_sets: typing.List[typing.Set[str]]) -> None: +def _MapGpuDevicesToVendors(tag_sets: List[Set[str]]) -> None: for tag_set in tag_sets: if any(gpu in tag_set for gpu in GPU_CONDITIONS): _map_specific_to_generic.update({ @@ -173,7 +173,7 @@ and t2 != _map_specific_to_generic.get(t1, t1)) -def _ExtractUnitTestTestExpectations(file_name: str) -> typing.List[str]: +def _ExtractUnitTestTestExpectations(file_name: str) -> List[str]: file_name = os.path.join( os.path.dirname(os.path.abspath(__file__)), '..', 'unittest_data', 'test_expectations', file_name) @@ -201,9 +201,9 @@ def CheckTestExpectationsAreForExistingTests( unittest_testcase: unittest.TestCase, - test_class: typing.Type[gpu_integration_test.GpuIntegrationTest], + test_class: Type[gpu_integration_test.GpuIntegrationTest], mock_options: mock.MagicMock, - test_names: typing.Optional[typing.List[str]] = None) -> None: + test_names: Optional[List[str]] = None) -> None: test_names = test_names or [ args[0] for args in test_class.GenerateGpuTests(mock_options) ] @@ -232,8 +232,7 @@ return test_expectations.check_test_expectations_patterns_for_conflicts() -def _FindTestCases( -) -> typing.List[typing.Type[gpu_integration_test.GpuIntegrationTest]]: +def _FindTestCases() -> List[Type[gpu_integration_test.GpuIntegrationTest]]: test_cases = [] for start_dir in gpu_project_config.CONFIG.start_dirs: # Note we deliberately only scan the integration tests as a
diff --git a/content/test/gpu/gpu_tests/trace_integration_test.py b/content/test/gpu/gpu_tests/trace_integration_test.py index 8df1f31..ac82d715 100644 --- a/content/test/gpu/gpu_tests/trace_integration_test.py +++ b/content/test/gpu/gpu_tests/trace_integration_test.py
@@ -6,7 +6,7 @@ import os import posixpath import sys -import typing +from typing import Any, Dict, Iterator, List import unittest from gpu_tests import common_browser_args as cba @@ -118,9 +118,8 @@ """Struct-like object for passing trace test arguments instead of dicts.""" def __init__( # pylint: disable=too-many-arguments - self, browser_args: typing.List[str], category: str, - test_harness_script: str, finish_js_condition: str, - success_eval_func: str, other_args: dict): + self, browser_args: List[str], category: str, test_harness_script: str, + finish_js_condition: str, success_eval_func: str, other_args: dict): self.browser_args = browser_args self.category = category self.test_harness_script = test_harness_script @@ -255,8 +254,7 @@ cls.SetStaticServerDirs(data_paths) @classmethod - def GenerateBrowserArgs(cls, additional_args: typing.List[str] - ) -> typing.List[str]: + def GenerateBrowserArgs(cls, additional_args: List[str]) -> List[str]: """Adds default arguments to |additional_args|. See the parent class' method documentation for additional information. @@ -269,7 +267,7 @@ ]) return default_args - def _GetAndAssertOverlayBotConfig(self) -> typing.Dict[str, str]: + def _GetAndAssertOverlayBotConfig(self) -> Dict[str, str]: overlay_bot_config = self.GetOverlayBotConfig() if overlay_bot_config is None: self.fail('Overlay bot config can not be determined') @@ -291,8 +289,8 @@ return str(presentation_mode) @staticmethod - def _SwapChainPresentationModeListToStr( - presentation_mode_list: typing.List[str]) -> str: + def _SwapChainPresentationModeListToStr(presentation_mode_list: List[str] + ) -> str: list_str = None for mode in presentation_mode_list: mode_str = TraceIntegrationTest._SwapChainPresentationModeToStr(mode) @@ -310,7 +308,7 @@ # The test success evaluation functions def _EvaluateSuccess_CheckGLCategory(self, category: str, - event_iterator: typing.Iterator, + event_iterator: Iterator, other_args: dict) -> None: del other_args # Unused in this particular success evaluation. for event in event_iterator: @@ -386,7 +384,7 @@ return expected def _EvaluateSuccess_CheckVideoPath(self, category: str, - event_iterator: typing.Iterator, + event_iterator: Iterator, other_args: dict) -> None: """Verifies Chrome goes down the code path as expected. @@ -431,7 +429,7 @@ 'Events with name %s were not found' % _SWAP_CHAIN_PRESENT_EVENT_NAME) def _EvaluateSuccess_CheckOverlayMode(self, category: str, - event_iterator: typing.Iterator, + event_iterator: Iterator, other_args: dict) -> None: """Verifies video frames are promoted to overlays when supported.""" os_name = self.browser.platform.GetOSName() @@ -480,7 +478,7 @@ ._SwapChainPresentationModeListToStr(presentation_mode_history)) def _EvaluateSuccess_CheckSwapChainPath(self, category: str, - event_iterator: typing.Iterator, + event_iterator: Iterator, other_args: dict) -> None: """Verifies that swap chains are used as expected for low latency canvas.""" os_name = self.browser.platform.GetOSName() @@ -515,7 +513,7 @@ _PRESENT_TO_SWAP_CHAIN_EVENT_NAME) def _EvaluateSuccess_CheckMainSwapChainPath(self, category: str, - event_iterator: typing.Iterator, + event_iterator: Iterator, other_args: dict) -> None: """Verified that Chrome's main swap chain is presented with full damage.""" os_name = self.browser.platform.GetOSName() @@ -553,7 +551,7 @@ 'full damage' if expect_full_damage else 'partial damage')) def _EvaluateSuccess_CheckWebGPUCanvasCapture(self, category: str, - event_iterator: typing.Iterator, + event_iterator: Iterator, other_args: dict) -> None: expected_one_copy = other_args.get('one_copy', False) found_one_copy_event = False @@ -578,7 +576,7 @@ _HTML_CANVAS_NOTIFY_LISTENERS_CANVAS_CHANGED_EVENT_NAME) @classmethod - def ExpectationsFiles(cls) -> typing.List[str]: + def ExpectationsFiles(cls) -> List[str]: return [ os.path.join( os.path.dirname(os.path.abspath(__file__)), 'test_expectations', @@ -596,7 +594,7 @@ self.presentation_mode = None # str -def load_tests(loader: unittest.TestLoader, tests: typing.Any, - pattern: typing.Any) -> unittest.TestSuite: +def load_tests(loader: unittest.TestLoader, tests: Any, + pattern: Any) -> unittest.TestSuite: del loader, tests, pattern # Unused. return gpu_integration_test.LoadAllTestsInModule(sys.modules[__name__])
diff --git a/content/test/gpu/gpu_tests/webcodecs_integration_test.py b/content/test/gpu/gpu_tests/webcodecs_integration_test.py index ba2e81d2..4e7f975 100644 --- a/content/test/gpu/gpu_tests/webcodecs_integration_test.py +++ b/content/test/gpu/gpu_tests/webcodecs_integration_test.py
@@ -6,7 +6,7 @@ import sys import json import itertools -import typing +from typing import Any, List import unittest import gpu_path_util @@ -196,14 +196,14 @@ cls.SetStaticServerDirs([html_path, data_path]) @classmethod - def ExpectationsFiles(cls) -> typing.List[str]: + def ExpectationsFiles(cls) -> List[str]: return [ os.path.join(os.path.dirname(os.path.abspath(__file__)), 'test_expectations', 'webcodecs_expectations.txt') ] -def load_tests(loader: unittest.TestLoader, tests: typing.Any, - pattern: typing.Any) -> unittest.TestSuite: +def load_tests(loader: unittest.TestLoader, tests: Any, + pattern: Any) -> unittest.TestSuite: del loader, tests, pattern # Unused. return gpu_integration_test.LoadAllTestsInModule(sys.modules[__name__])
diff --git a/content/test/gpu/gpu_tests/webgl_conformance_integration_test.py b/content/test/gpu/gpu_tests/webgl_conformance_integration_test.py index 0e4e9c6..07c6e9c61 100644 --- a/content/test/gpu/gpu_tests/webgl_conformance_integration_test.py +++ b/content/test/gpu/gpu_tests/webgl_conformance_integration_test.py
@@ -7,7 +7,7 @@ import os import re import sys -import typing +from typing import Any, List, Optional, Tuple import unittest from gpu_tests import common_browser_args as cba @@ -78,7 +78,7 @@ # cmp no longer exists in Python 3 -def cmp(a: typing.Any, b: typing.Any) -> int: +def cmp(a: Any, b: Any) -> int: return int(a > b) - int(a < b) @@ -187,7 +187,7 @@ ]) @classmethod - def _GetExtensionList(cls) -> typing.List[str]: + def _GetExtensionList(cls) -> List[str]: if cls._webgl_version == 1: return [ 'ANGLE_instanced_arrays', @@ -401,8 +401,7 @@ return timeout @classmethod - def GenerateBrowserArgs(cls, additional_args: typing.List[str] - ) -> typing.List[str]: + def GenerateBrowserArgs(cls, additional_args: List[str]) -> List[str]: """Adds default arguments to |additional_args|. See the parent class' method documentation for additional information. @@ -428,6 +427,12 @@ # Force-enable SharedArrayBuffer to be able to test its # support in WEBGL_multi_draw. '--enable-blink-features=SharedArrayBuffer', + # When running tests in parallel, windows can be treated as occluded if + # a newly opened window fully covers a previous one, which can cause + # issues in a few tests. This is practically only an issue on Windows + # since Linux/Mac stagger new windows, but pass in on all platforms + # since it could technically be hit on any platform. + '--disable-backgrounding-occluded-windows', ]) # Note that the overriding of the default --js-flags probably # won't interact well with RestartBrowserIfNecessaryWithArgs, but @@ -461,14 +466,7 @@ def SetUpProcess(cls) -> None: super(WebGLConformanceIntegrationTest, cls).SetUpProcess() cls.SetClassVariablesFromOptions(cls.child.context.finder_options) - cls.CustomizeBrowserArgs([ - # When running tests in parallel, windows can be treated as occluded if - # a newly opened window fully covers a previous one, which can cause - # issues in a few tests. This is practically only an issue on Windows - # since Linux/Mac stagger new windows, but pass in on all platforms - # since it could technically be hit on any platform. - '--disable-backgrounding-occluded-windows', - ]) + cls.CustomizeBrowserArgs([]) cls.StartBrowser() # By setting multiple server directories, the root of the server # implicitly becomes the common base directory, i.e., the Chromium @@ -492,10 +490,9 @@ @classmethod def _ParseTests(cls, path: str, version: str, webgl2_only: bool, - folder_min_version: typing.Optional[str]) -> typing.List[str]: - def _ParseTestNameAndVersions( - line: str - ) -> typing.Tuple[str, typing.Optional[str], typing.Optional[str]]: + folder_min_version: Optional[str]) -> List[str]: + def _ParseTestNameAndVersions(line: str + ) -> Tuple[str, Optional[str], Optional[str]]: """Parses any min/max versions and the test name on the given line. Args: @@ -564,7 +561,7 @@ return test_paths @classmethod - def GetPlatformTags(cls, browser: ct.Browser) -> typing.List[str]: + def GetPlatformTags(cls, browser: ct.Browser) -> List[str]: tags = super(WebGLConformanceIntegrationTest, cls).GetPlatformTags(browser) tags.append('webgl-version-%d' % cls._webgl_version) @@ -604,7 +601,7 @@ return tags @classmethod - def ExpectationsFiles(cls) -> typing.List[str]: + def ExpectationsFiles(cls) -> List[str]: assert cls._webgl_version == 1 or cls._webgl_version == 2 if cls._webgl_version == 1: file_name = 'webgl_conformance_expectations.txt' @@ -631,7 +628,7 @@ return conformance_harness_script + extension_harness_additional_script -def load_tests(loader: unittest.TestLoader, tests: typing.Any, - pattern: typing.Any) -> unittest.TestSuite: +def load_tests(loader: unittest.TestLoader, tests: Any, + pattern: Any) -> unittest.TestSuite: del loader, tests, pattern # Unused. return gpu_integration_test.LoadAllTestsInModule(sys.modules[__name__])
diff --git a/content/test/gpu/gpu_tests/webgpu_cts_integration_test.py b/content/test/gpu/gpu_tests/webgpu_cts_integration_test.py index c31925e..56a034f0 100644 --- a/content/test/gpu/gpu_tests/webgpu_cts_integration_test.py +++ b/content/test/gpu/gpu_tests/webgpu_cts_integration_test.py
@@ -11,7 +11,7 @@ import sys import tempfile import threading -import typing +from typing import Any, List import unittest import websockets # pylint:disable=import-error @@ -375,7 +375,7 @@ return int(timeout) @classmethod - def GetPlatformTags(cls, browser: ct.Browser) -> typing.List[str]: + def GetPlatformTags(cls, browser: ct.Browser) -> List[str]: tags = super(WebGpuCtsIntegrationTest, cls).GetPlatformTags(browser) if cls._enable_dawn_backend_validation: tags.append('dawn-backend-validation') @@ -393,7 +393,7 @@ return tags @classmethod - def ExpectationsFiles(cls) -> typing.List[str]: + def ExpectationsFiles(cls) -> List[str]: return [EXPECTATIONS_FILE] @@ -401,6 +401,6 @@ return 'worker_%s' % query if worker else query -def load_tests(_loader: unittest.TestLoader, _tests: typing.Any, - _pattern: typing.Any) -> unittest.TestSuite: +def load_tests(_loader: unittest.TestLoader, _tests: Any, + _pattern: Any) -> unittest.TestSuite: return gpu_integration_test.LoadAllTestsInModule(sys.modules[__name__])
diff --git a/docs/testing/writing_js_unit_tests.md b/docs/testing/writing_js_unit_tests.md index d0ae2c20..7c83afd 100644 --- a/docs/testing/writing_js_unit_tests.md +++ b/docs/testing/writing_js_unit_tests.md
@@ -357,9 +357,6 @@ Since these are relatively complex to use, it may help you to codesearch for examples. Here are some useful examples: -[oobe_webui_browsertest.js](https://cs.chromium.org/chromium/src/chrome/test/data/chromeos/oobe_webui_browsertest.js) - -makes the browser fullscreen before running the JS test. - [saml_password_attributes_test.unitjs](https://cs.chromium.org/chromium/src/chrome/browser/resources/gaia_auth_host/saml_password_attributes_test.unitjs) - loads an XML file into a JS global variable before running the JS test.
diff --git a/extensions/browser/api/system_display/system_display_api.cc b/extensions/browser/api/system_display/system_display_api.cc index 1436be1..cb772d6 100644 --- a/extensions/browser/api/system_display/system_display_api.cc +++ b/extensions/browser/api/system_display/system_display_api.cc
@@ -17,7 +17,7 @@ #include "extensions/common/api/system_display.h" #include "extensions/common/permissions/permissions_data.h" -#if BUILDFLAG(IS_CHROMEOS_ASH) +#if BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_CHROMEOS_LACROS) #include "extensions/common/manifest_handlers/kiosk_mode_info.h" #endif @@ -178,10 +178,7 @@ if (!ExtensionFunction::PreRunValidation(error)) return false; -#if !BUILDFLAG(IS_CHROMEOS_ASH) - *error = kCrosOnlyError; - return false; -#else +#if BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_CHROMEOS_LACROS) if (!ShouldRestrictToKioskAndWebUI()) return true; @@ -191,6 +188,9 @@ return true; *error = kKioskOnlyError; return false; +#else + *error = kCrosOnlyError; + return false; #endif }
diff --git a/extensions/renderer/api/automation/automation_internal_custom_bindings.cc b/extensions/renderer/api/automation/automation_internal_custom_bindings.cc index b8a49f3..06771c3 100644 --- a/extensions/renderer/api/automation/automation_internal_custom_bindings.cc +++ b/extensions/renderer/api/automation/automation_internal_custom_bindings.cc
@@ -2929,9 +2929,11 @@ bool clip_bounds) const { gfx::RectF bounds = local_bounds; + bool crossed_app_id = false; while (node) { - bounds = tree_wrapper->tree()->RelativeToTreeBounds(node, bounds, offscreen, - clip_bounds); + bounds = tree_wrapper->tree()->RelativeToTreeBounds( + node, bounds, offscreen, clip_bounds, + /* skip_container_offset = */ crossed_app_id); bool should_use_app_id = tree_wrapper->tree()->root() == node; AutomationAXTreeWrapper* previous_tree_wrapper = tree_wrapper; @@ -2942,6 +2944,7 @@ // This is a fallback for trees that are constructed using app ids. Do the // least possible expensive check here. + crossed_app_id = false; if (!parent_of_root && previous_tree_wrapper->GetParentTreeFromAnyAppID()) { // Since the tree has a valid child tree app id pointing to a valid tree, // walk the ancestry of |node| to find the specific app id and resolve to @@ -2958,6 +2961,7 @@ AutomationAXTreeWrapper::GetParentTreeNodeForAppID(app_id, this); tree_wrapper = AutomationAXTreeWrapper::GetParentTreeWrapperForAppID(app_id, this); + crossed_app_id = true; } }
diff --git a/extensions/renderer/api/automation/automation_internal_custom_bindings_unittests.cc b/extensions/renderer/api/automation/automation_internal_custom_bindings_unittests.cc index 41c2aa6..422138a 100644 --- a/extensions/renderer/api/automation/automation_internal_custom_bindings_unittests.cc +++ b/extensions/renderer/api/automation/automation_internal_custom_bindings_unittests.cc
@@ -389,9 +389,9 @@ ASSERT_TRUE(wrapper1_button); // The button in wrapper 1 is scaled by .5 (200 * .5). It's root is also - // scaled (100 * .5). In wrapper 0, it is offset by the tree's root bounds - // (100 + 50). - EXPECT_EQ(gfx::Rect(150, 150, 100, 100), + // scaled (100 * .5). In wrapper 0, it is *not* offset by the tree's root + // bounds. + EXPECT_EQ(gfx::Rect(50, 50, 100, 100), CallComputeGlobalNodeBounds(wrapper_1, wrapper1_button)); } @@ -478,15 +478,16 @@ ASSERT_TRUE(wrapper1_button); // The button in wrapper 1 is scaled by .5 (200 * .5). It's root is also - // scaled (100 * .5). In wrapper 0, it is offset by the tree's root bounds - // (100 + 50). - EXPECT_EQ(gfx::Rect(150, 150, 100, 100), + // scaled (100 * .5). In wrapper 0, it is *not* offset by the tree's root + // bounds. + EXPECT_EQ(gfx::Rect(50, 50, 100, 100), CallComputeGlobalNodeBounds(wrapper_1, wrapper1_button)); ui::AXNode* wrapper1_root = wrapper_1->tree()->GetFromId(1); ASSERT_TRUE(wrapper1_root); - // Similar to the button, but not scaled. + // Similar to the button, but not scaled. This does not cross an app id + // boundary, so is also offset by the parent tree's root (100 + 100). EXPECT_EQ(gfx::Rect(200, 200, 100, 100), CallComputeGlobalNodeBounds(wrapper_1, wrapper1_root)); }
diff --git a/extensions/renderer/resources/automation/automation_node.js b/extensions/renderer/resources/automation/automation_node.js index fd9931b..633d300 100644 --- a/extensions/renderer/resources/automation/automation_node.js +++ b/extensions/renderer/resources/automation/automation_node.js
@@ -2085,15 +2085,7 @@ if (appNode) { delete AutomationRootNodeImpl.actionRequestIDToCallback[requestID]; - const relativeWindow = appNode.parent; - if (!relativeWindow) { - return false; - } - - // The hit test needs to be relative to the container of the app node. - data.opt_args.x -= relativeWindow.location.left; - data.opt_args.y -= relativeWindow.location.top; - + // Repost the hit test on |appNode|. privates(appNode).impl.performAction_( data.actionType, data.opt_args, data.callback); return true;
diff --git a/extensions/shell/browser/shell_special_storage_policy.cc b/extensions/shell/browser/shell_special_storage_policy.cc index 659860b..26b9dc2 100644 --- a/extensions/shell/browser/shell_special_storage_policy.cc +++ b/extensions/shell/browser/shell_special_storage_policy.cc
@@ -4,9 +4,6 @@ #include "extensions/shell/browser/shell_special_storage_policy.h" -#include "base/bind.h" -#include "base/callback.h" - namespace extensions { ShellSpecialStoragePolicy::ShellSpecialStoragePolicy() { @@ -37,11 +34,6 @@ return false; } -network::DeleteCookiePredicate -ShellSpecialStoragePolicy::CreateDeleteCookieOnExitPredicate() { - return network::DeleteCookiePredicate(); -} - bool ShellSpecialStoragePolicy::HasIsolatedStorage(const GURL& origin) { return false; }
diff --git a/extensions/shell/browser/shell_special_storage_policy.h b/extensions/shell/browser/shell_special_storage_policy.h index f4800400..7a796ab 100644 --- a/extensions/shell/browser/shell_special_storage_policy.h +++ b/extensions/shell/browser/shell_special_storage_policy.h
@@ -5,7 +5,6 @@ #ifndef EXTENSIONS_SHELL_BROWSER_SHELL_SPECIAL_STORAGE_POLICY_H_ #define EXTENSIONS_SHELL_BROWSER_SHELL_SPECIAL_STORAGE_POLICY_H_ -#include "services/network/public/cpp/session_cookie_delete_predicate.h" #include "storage/browser/quota/special_storage_policy.h" namespace extensions { @@ -23,7 +22,6 @@ bool IsStorageSessionOnly(const GURL& origin) override; bool HasIsolatedStorage(const GURL& origin) override; bool HasSessionOnlyOrigins() override; - network::DeleteCookiePredicate CreateDeleteCookieOnExitPredicate() override; protected: ~ShellSpecialStoragePolicy() override;
diff --git a/infra/config/generated/luci/commit-queue.cfg b/infra/config/generated/luci/commit-queue.cfg index 7284000..03202ac 100644 --- a/infra/config/generated/luci/commit-queue.cfg +++ b/infra/config/generated/luci/commit-queue.cfg
@@ -4208,6 +4208,7 @@ ref_regexp_exclude: "refs/branch-heads/5005" ref_regexp_exclude: "refs/branch-heads/5060" ref_regexp_exclude: "refs/branch-heads/5112" + ref_regexp_exclude: "refs/branch-heads/5195" } } verifiers {
diff --git a/infra/config/generated/luci/luci-milo.cfg b/infra/config/generated/luci/luci-milo.cfg index 5464462..142f822 100644 --- a/infra/config/generated/luci/luci-milo.cfg +++ b/infra/config/generated/luci/luci-milo.cfg
@@ -864,6 +864,10 @@ url: "/p/chromium-m104/g/main/console" } links { + text: "m105" + url: "/p/chromium-m105/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -1615,6 +1619,10 @@ url: "/p/chromium-m104/g/main/console" } links { + text: "m105" + url: "/p/chromium-m105/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -2095,6 +2103,10 @@ url: "/p/chromium-m104/g/main/console" } links { + text: "m105" + url: "/p/chromium-m105/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -2445,6 +2457,10 @@ url: "/p/chromium-m104/g/main/console" } links { + text: "m105" + url: "/p/chromium-m105/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -3127,6 +3143,10 @@ url: "/p/chromium-m104/g/main/console" } links { + text: "m105" + url: "/p/chromium-m105/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -3458,6 +3478,10 @@ url: "/p/chromium-m104/g/main/console" } links { + text: "m105" + url: "/p/chromium-m105/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -4047,6 +4071,10 @@ url: "/p/chromium-m104/g/main/console" } links { + text: "m105" + url: "/p/chromium-m105/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -4456,6 +4484,10 @@ url: "/p/chromium-m104/g/main/console" } links { + text: "m105" + url: "/p/chromium-m105/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -4896,6 +4928,10 @@ url: "/p/chromium-m104/g/main/console" } links { + text: "m105" + url: "/p/chromium-m105/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -5334,6 +5370,10 @@ url: "/p/chromium-m104/g/main/console" } links { + text: "m105" + url: "/p/chromium-m105/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -5889,6 +5929,10 @@ url: "/p/chromium-m104/g/main/console" } links { + text: "m105" + url: "/p/chromium-m105/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -6354,6 +6398,10 @@ url: "/p/chromium-m104/g/main/console" } links { + text: "m105" + url: "/p/chromium-m105/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -6721,6 +6769,10 @@ url: "/p/chromium-m104/g/main/console" } links { + text: "m105" + url: "/p/chromium-m105/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -7081,6 +7133,10 @@ url: "/p/chromium-m104/g/main/console" } links { + text: "m105" + url: "/p/chromium-m105/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -7565,6 +7621,10 @@ url: "/p/chromium-m104/g/main/console" } links { + text: "m105" + url: "/p/chromium-m105/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -8445,6 +8505,10 @@ url: "/p/chromium-m104/g/main/console" } links { + text: "m105" + url: "/p/chromium-m105/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -8867,6 +8931,10 @@ url: "/p/chromium-m104/g/main/console" } links { + text: "m105" + url: "/p/chromium-m105/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -9263,6 +9331,10 @@ url: "/p/chromium-m104/g/main/console" } links { + text: "m105" + url: "/p/chromium-m105/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -9654,6 +9726,10 @@ url: "/p/chromium-m104/g/main/console" } links { + text: "m105" + url: "/p/chromium-m105/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -10298,6 +10374,10 @@ url: "/p/chromium-m104/g/main/console" } links { + text: "m105" + url: "/p/chromium-m105/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -10703,6 +10783,10 @@ url: "/p/chromium-m104/g/main/console" } links { + text: "m105" + url: "/p/chromium-m105/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -11123,6 +11207,10 @@ url: "/p/chromium-m104/g/main/console" } links { + text: "m105" + url: "/p/chromium-m105/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -11568,6 +11656,10 @@ url: "/p/chromium-m104/g/main/console" } links { + text: "m105" + url: "/p/chromium-m105/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -11923,6 +12015,10 @@ url: "/p/chromium-m104/g/main/console" } links { + text: "m105" + url: "/p/chromium-m105/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -12368,6 +12464,10 @@ url: "/p/chromium-m104/g/main/console" } links { + text: "m105" + url: "/p/chromium-m105/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -12714,6 +12814,10 @@ url: "/p/chromium-m104/g/main/console" } links { + text: "m105" + url: "/p/chromium-m105/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -13084,6 +13188,10 @@ url: "/p/chromium-m104/g/main/console" } links { + text: "m105" + url: "/p/chromium-m105/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -13549,6 +13657,10 @@ url: "/p/chromium-m104/g/main/console" } links { + text: "m105" + url: "/p/chromium-m105/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -13914,6 +14026,10 @@ url: "/p/chromium-m104/g/main/console" } links { + text: "m105" + url: "/p/chromium-m105/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -14320,6 +14436,10 @@ url: "/p/chromium-m104/g/main/console" } links { + text: "m105" + url: "/p/chromium-m105/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -14705,6 +14825,10 @@ url: "/p/chromium-m104/g/main/console" } links { + text: "m105" + url: "/p/chromium-m105/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -15101,6 +15225,10 @@ url: "/p/chromium-m104/g/main/console" } links { + text: "m105" + url: "/p/chromium-m105/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -15430,6 +15558,10 @@ url: "/p/chromium-m104/g/main/console" } links { + text: "m105" + url: "/p/chromium-m105/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console" @@ -15773,6 +15905,10 @@ url: "/p/chromium-m104/g/main/console" } links { + text: "m105" + url: "/p/chromium-m105/g/main/console" + } + links { text: "trunk" url: "/p/chromium/g/main/console" alt: "Trunk (ToT) console"
diff --git a/infra/config/generated/luci/realms.cfg b/infra/config/generated/luci/realms.cfg index 69c6ad1..b376a1f1 100644 --- a/infra/config/generated/luci/realms.cfg +++ b/infra/config/generated/luci/realms.cfg
@@ -357,6 +357,7 @@ principals: "project:chromium-m102" principals: "project:chromium-m103" principals: "project:chromium-m104" + principals: "project:chromium-m105" principals: "project:chromium-m96" principals: "project:chromium-m97" principals: "user:chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" @@ -409,6 +410,7 @@ principals: "project:chromium-m102" principals: "project:chromium-m103" principals: "project:chromium-m104" + principals: "project:chromium-m105" principals: "project:chromium-m96" principals: "project:chromium-m97" principals: "user:chromium-orchestrator@chops-service-accounts.iam.gserviceaccount.com"
diff --git a/infra/config/milestones.json b/infra/config/milestones.json index d0ca6a6..4c77587 100644 --- a/infra/config/milestones.json +++ b/infra/config/milestones.json
@@ -28,5 +28,10 @@ "name": "m104", "project": "chromium-m104", "ref": "refs/branch-heads/5112" + }, + "105": { + "name": "m105", + "project": "chromium-m105", + "ref": "refs/branch-heads/5195" } }
diff --git a/ios/chrome/app/main_controller.mm b/ios/chrome/app/main_controller.mm index f081039..6061e563 100644 --- a/ios/chrome/app/main_controller.mm +++ b/ios/chrome/app/main_controller.mm
@@ -272,13 +272,9 @@ @interface MainController () <PrefObserverDelegate, BlockingSceneCommands> { IBOutlet UIWindow* _window; - // Weak; owned by the ApplicationContext. - ios::ChromeBrowserStateManager* _browserStateManager; - // The object that drives the Chrome startup/shutdown logic. std::unique_ptr<IOSChromeMain> _chromeMain; - // True if the current session began from a cold start. False if the app has // entered the background at least once since start up. BOOL _isColdStart; @@ -447,6 +443,18 @@ _chromeMain = [ChromeMainStarter startChromeMain]; + // Remove the extra browser states as Chrome iOS is single profile in M48+. + ChromeBrowserStateRemovalController::GetInstance() + ->RemoveBrowserStatesIfNecessary(); + + ChromeBrowserState* chromeBrowserState = GetApplicationContext() + ->GetChromeBrowserStateManager() + ->GetLastUsedBrowserState(); + + // Initialize and set the main browser state. + [self initializeBrowserState:chromeBrowserState]; + self.appState.mainBrowserState = chromeBrowserState; + // Initialize the provider UI global state. ios::provider::InitializeUI(); @@ -501,14 +509,15 @@ RegisterComponentsForUpdate(); - // Remove the extra browser states as Chrome iOS is single profile in M48+. - ChromeBrowserStateRemovalController::GetInstance() - ->RemoveBrowserStatesIfNecessary(); - - _browserStateManager = - GetApplicationContext()->GetChromeBrowserStateManager(); - ChromeBrowserState* chromeBrowserState = - _browserStateManager->GetLastUsedBrowserState(); +#if !defined(NDEBUG) + // Legacy code used GetLastUsedBrowserState() in this method. We changed it to + // use self.appState.mainBrowserState instead. The DCHECK ensures that + // invariant holds true. + ChromeBrowserState* chromeBrowserState = GetApplicationContext() + ->GetChromeBrowserStateManager() + ->GetLastUsedBrowserState(); + DCHECK_EQ(chromeBrowserState, self.appState.mainBrowserState); +#endif // !defined(NDEBUG) // The CrashRestoreHelper must clean up the old browser state information. // `self.restoreHelper` must be kept alive until the BVC receives the @@ -517,8 +526,9 @@ if (isPostCrashLaunch) { NSSet<NSString*>* sessions = [[PreviousSessionInfo sharedInstance] connectedSceneSessionsIDs]; - needRestoration = [CrashRestoreHelper moveAsideSessions:sessions - forBrowserState:chromeBrowserState]; + needRestoration = + [CrashRestoreHelper moveAsideSessions:sessions + forBrowserState:self.appState.mainBrowserState]; } if (!base::ios::IsMultipleScenesSupported()) { NSSet<NSString*>* previousSessions = @@ -528,10 +538,6 @@ } [[PreviousSessionInfo sharedInstance] resetConnectedSceneSessionIDs]; - // Initialize and set the main browser state. - [self initializeBrowserState:chromeBrowserState]; - self.appState.mainBrowserState = chromeBrowserState; - if (base::FeatureList::IsEnabled(breadcrumbs::kLogBreadcrumbs)) { [self startLoggingBreadcrumbs]; } @@ -548,7 +554,8 @@ // Send "Chrome Opened" event to the feature_engagement::Tracker on cold // start. - feature_engagement::TrackerFactory::GetForBrowserState(chromeBrowserState) + feature_engagement::TrackerFactory::GetForBrowserState( + self.appState.mainBrowserState) ->NotifyEvent(feature_engagement::events::kChromeOpened); _spotlightManager = [SpotlightManager
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_af.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_af.xtb index 7762fb3..15227ed 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_af.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_af.xtb
@@ -79,7 +79,6 @@ 1. Maak Instellings oop 2. Tik op Verstekblaaierprogram 3. Kies Chromium.</translation> -<translation id="6183442264225539303">Meld by hierdie werf en Chromium aan. Jy kan sinkronisering later aanskakel.</translation> <translation id="6268381023930128611">Meld by Chromium af?</translation> <translation id="632825460376924298">Laat Chromium-aanmelding toe</translation> <translation id="6337530241089703714">Kies of jy jou Chromium-data van hierdie toestel wil verwyder, of dit wil hou</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_am.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_am.xtb index 8f065e43..9d0215a6 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_am.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_am.xtb
@@ -78,7 +78,6 @@ 1. ቅንብሮችን ይክፈቱ 2. ነባሪ የአሳሽ መተግበሪያን መታ ያድርጉ 3. Chromiumን ይምረጡ።</translation> -<translation id="6183442264225539303">ወደዚህ ጣቢያ እና Chromium በመለያ ይግቡ። በኋላ ስምረትን ማብራት ይችላሉ።</translation> <translation id="6268381023930128611">ከChromium ተዘግቶ ይውጣ?</translation> <translation id="632825460376924298">የChromium በመለያ መግባትን ይፍቀዱ</translation> <translation id="6337530241089703714">የChromium ውሂብዎን ከዚህ መሣሪያ ይጸዳ ወይም ይቆይ እንደሆነ ይምረጡ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ar.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ar.xtb index f20bd48..6caccbd 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ar.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ar.xtb
@@ -79,7 +79,6 @@ 1. افتح Settings (الإعدادات). 2. انقر على Default Browser App (تطبيق المتصفِّح التلقائي). 3. اختَر Chromium.</translation> -<translation id="6183442264225539303">سجِّل الدخول إلى هذا الموقع الإلكتروني وإلى Chromium. يمكنك تفعيل المزامنة لاحقًا.</translation> <translation id="6268381023930128611">هل تريد الخروج من Chromium؟</translation> <translation id="632825460376924298">السماح بتسجيل الدخول إلى Chromium</translation> <translation id="6337530241089703714">اختيار ما إذا كنت تريد محو بيانات Chromium المخزَّنة على هذا الجهاز أو الاحتفاظ بها</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_as.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_as.xtb index 23e7feb..266d2866 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_as.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_as.xtb
@@ -79,7 +79,6 @@ ১) ছেটিং খোলক ২) ডিফ’ল্ট ব্ৰাউজাৰ এপত টিপক ৩) Chromium বাছনি কৰক।</translation> -<translation id="6183442264225539303">এই ছাইটটো আৰু Chromiumত ছাইন ইন কৰক। পাছত আপুনি ছিংক অন কৰিব পাৰে।</translation> <translation id="6268381023930128611">Chromiumৰ পৰা ছাইন আউট কৰিবনে?</translation> <translation id="632825460376924298">Chromiumত ছাইন ইন কৰাৰ অনুমতি দিয়ক</translation> <translation id="6337530241089703714">এই ডিভাইচটোৰ পৰা আপোনাৰ Chromiumৰ ডেটা মচিবনে ৰাখিব সেয়া বাছনি কৰক</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_az.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_az.xtb index 157b5bc..9947962 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_az.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_az.xtb
@@ -79,7 +79,6 @@ 1. Ayarları açın 2. Defolt Brauzer Tətbiqinə toxunun 3. Chromium seçin.</translation> -<translation id="6183442264225539303">Bu sayta və Chromium'a daxil olun. Sinxronlaşdırmanı daha sonra aktiv edə bilərsiniz.</translation> <translation id="6268381023930128611">Chromium'dan çıxılsın?</translation> <translation id="632825460376924298">Chromium girişinə icazə verin</translation> <translation id="6337530241089703714">Chromium datanızınız bu cihazdan silinməsi və ya saxlanmasını seçin</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_be.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_be.xtb index 9d9e2c6..97f8543 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_be.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_be.xtb
@@ -79,7 +79,6 @@ 1. Адкрыйце Settings. 2. Націсніце Default Browser App. 3. Выберыце Chromium.</translation> -<translation id="6183442264225539303">Выканайце ўваход на сайт і ў Chromium. Сінхранізацыю можна ўключыць пазней.</translation> <translation id="6268381023930128611">Выйсці з уліковага запісу ў браўзеры Chromium?</translation> <translation id="632825460376924298">Дазволіць уваход у Chromium</translation> <translation id="6337530241089703714">Выберыце, выдаліць даныя Chromium з гэтай прылады ці захаваць іх</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_bg.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_bg.xtb index c3e0bb4..77872ec 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_bg.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_bg.xtb
@@ -79,7 +79,6 @@ 1. Отворете настройките. 2. Докоснете „Стандартно прилож. за браузър“. 3. Изберете Chromium.</translation> -<translation id="6183442264225539303">Влезте в профила си в този сайт и в Chromium. Можете да включите синхронизирането по-късно.</translation> <translation id="6268381023930128611">Искате ли да излезете от Chromium?</translation> <translation id="632825460376924298">Разрешаване на влизането в Chromium</translation> <translation id="6337530241089703714">Изберете дали данните ви в Chromium да бъдат изчистени от това устройство, или запазени</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_bn.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_bn.xtb index b53470ba..815c519a 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_bn.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_bn.xtb
@@ -79,7 +79,6 @@ ১. সেটিংস খুলুন ২. 'ডিফল্ট ব্রাউজার অ্যাপ' বিকল্পে ট্যাপ করুন ৩. Chromium বেছে নিন।</translation> -<translation id="6183442264225539303">এই সাইট ও Chromium-এ সাইন-ইন করুন। আপনি সিঙ্ক করার সুবিধা পরে চালু করতে পারেন।</translation> <translation id="6268381023930128611">Chromium থেকে সাইন-আউট করবেন?</translation> <translation id="632825460376924298">Chromium-এ সাইন-ইন করার অনুমতি দিন</translation> <translation id="6337530241089703714">এই ডিভাইস থেকে আপনার Chromium ডেটা মুছবেন না রাখবেন তা বেছে নিন</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_bs.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_bs.xtb index 2380ee1..3d422ed6 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_bs.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_bs.xtb
@@ -79,7 +79,6 @@ 1. Otvorite Postavke 2. Dodirnite Zadana aplikacija preglednika 3. Odaberite Chromium.</translation> -<translation id="6183442264225539303">Prijavite se na ovu web lokaciju i u Chromium. Sinhronizaciju možete uključiti kasnije.</translation> <translation id="6268381023930128611">Odjaviti se iz Chromiuma?</translation> <translation id="632825460376924298">Omogućite prijavu pomoću Chromiuma</translation> <translation id="6337530241089703714">Odaberite želite li obrisati podatke Chromiuma s ovog uređaja ili ih želite zadržati</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ca.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ca.xtb index 0448c5a..6ae12a29 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ca.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ca.xtb
@@ -79,7 +79,6 @@ 1. Obre Configuració. 2. Toca Aplicació de navegador predeterminada. 3. Selecciona Chromium.</translation> -<translation id="6183442264225539303">Inicia la sessió en aquest lloc web i a Chromium. Pots activar la sincronització més endavant.</translation> <translation id="6268381023930128611">Voleu tancar la sessió de Chromium?</translation> <translation id="632825460376924298">Permet l'inici de sessió a Chromium</translation> <translation id="6337530241089703714">Tria si vols esborrar les teves dades de Chromium d'aquest dispositiu o si vols conservar-les</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_cs.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_cs.xtb index d82b863..bd42b8f 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_cs.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_cs.xtb
@@ -78,7 +78,6 @@ 1. Otevřete nastavení. 2. Klepněte na Výchozí prohlížeč. 3. Vyberte Chromium.</translation> -<translation id="6183442264225539303">Přihlaste se na tento web a do prohlížeče Chromium. Synchronizaci můžete zapnout později.</translation> <translation id="6268381023930128611">Odhlásit se z prohlížeče Chromium?</translation> <translation id="632825460376924298">Povolit přihlášení do Chromia</translation> <translation id="6337530241089703714">Zvolte, zda z tohoto zařízení chcete vymazat data prohlížeče Chromium, nebo je ponechat</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_cy.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_cy.xtb index 519bf4c..4d827e3 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_cy.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_cy.xtb
@@ -79,7 +79,6 @@ 1. Agorwch y gosodiadau 2. Tapiwch Ap Pori Diofyn 3. Dewiswch Chromium.</translation> -<translation id="6183442264225539303">Mewngofnodi i'r wefan hon a Chromium. Gallwch droi cysoni ymlaen yn nes ymlaen.</translation> <translation id="6268381023930128611">Allgofnodi o Chromium?</translation> <translation id="632825460376924298">Caniatáu Mewngofnodi i Chromium</translation> <translation id="6337530241089703714">Dewiswch a ddylid clirio eich data Chromium o'r ddyfais hon neu eu cadw</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_da.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_da.xtb index c9818db2..95b17bf 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_da.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_da.xtb
@@ -79,7 +79,6 @@ 1. Åbn Indstillinger 2. Tryk på Standardbrowserapp 3. Vælg Chromium.</translation> -<translation id="6183442264225539303">Log ind på dette website og Chromium. Du kan aktivere synkronisering senere.</translation> <translation id="6268381023930128611">Vil du logge ud af Chromium?</translation> <translation id="632825460376924298">Tillad login via Chromium</translation> <translation id="6337530241089703714">Vælg, om du vil rydde dine Chromium-data fra denne enhed eller beholde dem</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_de.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_de.xtb index 3e7d8f1..bf9b9ca 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_de.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_de.xtb
@@ -78,7 +78,6 @@ 1. Öffne die Einstellungen 2. Tippe auf „Standard-Browser-App“ 3. Wähle Chromium aus.</translation> -<translation id="6183442264225539303">Melde dich bei dieser Website und in Chromium an. Du kannst die Synchronisierung später aktivieren.</translation> <translation id="6268381023930128611">Von Chromium abmelden?</translation> <translation id="632825460376924298">Anmeldung in Chromium zulassen</translation> <translation id="6337530241089703714">Möchtest du deine Chromium-Daten von diesem Gerät löschen oder sie behalten?</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_el.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_el.xtb index 39ea11d..d383f42 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_el.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_el.xtb
@@ -79,7 +79,6 @@ 1. Ανοίξτε τις Ρυθμίσεις. 2. Πατήστε Προεπιλεγμένη εφαρμογή προγράμματος περιήγησης. 3. Επιλέξτε το Chromium.</translation> -<translation id="6183442264225539303">Συνδεθείτε σε αυτόν τον ιστότοπο και το Chromium. Μπορείτε να ενεργοποιήσετε τον συγχρονισμό αργότερα.</translation> <translation id="6268381023930128611">Θέλετε να αποσυνδεθείτε από το Chromium;</translation> <translation id="632825460376924298">Να επιτρέπεται η σύνδεση στο Chromium</translation> <translation id="6337530241089703714">Επιλέξτε εάν θέλετε να διαγράψετε ή να διατηρήσετε τα δεδομένα σας Chromium σε αυτήν τη συσκευή</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_en-GB.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_en-GB.xtb index e9a6d6a..a83d6870 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_en-GB.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_en-GB.xtb
@@ -79,7 +79,6 @@ 1. Open settings 2. Tap the default browser app 3. Select Chromium.</translation> -<translation id="6183442264225539303">Sign in to this site and Chromium. You can turn on sync later.</translation> <translation id="6268381023930128611">Sign out of Chromium?</translation> <translation id="632825460376924298">Allow Chromium Sign-in</translation> <translation id="6337530241089703714">Choose whether to clear your Chromium data from this device or keep it</translation> @@ -121,6 +120,7 @@ <translation id="8586442755830160949">Copyright <ph name="YEAR" /> The Chromium Authors. All rights reserved.</translation> <translation id="865600487977764604">Keeps you safe on Chromium and may be used to improve your security in other Google apps when you are signed in.</translation> <translation id="8663480472502753423">Keep Chromium up to date</translation> +<translation id="8685813584220679697">Sign in to this site and Chromium.</translation> <translation id="8747378496147986285">When on: <ph name="BEGIN_INDENT" /> • Help make Chromium better for people who use it the way that you do.<ph name="END_INDENT" />
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_es-419.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_es-419.xtb index 86c1337..890a236 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_es-419.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_es-419.xtb
@@ -79,7 +79,6 @@ 1. Abre Ajustes. 2. Presiona App de navegador predeterminada 3. Selecciona Chromium.</translation> -<translation id="6183442264225539303">Accede a este sitio y Chromium. Puedes activar la sincronización más tarde.</translation> <translation id="6268381023930128611">¿Salir de Chromium?</translation> <translation id="632825460376924298">Permitir el acceso a Chromium</translation> <translation id="6337530241089703714">Decidir si quieres borrar o conservar los datos de Chromium que tienes almacenados en este dispositivo</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_es.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_es.xtb index 193da81..3727651 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_es.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_es.xtb
@@ -79,7 +79,6 @@ 1. Abre Configuración 2. Toca Aplicación de navegador predeterminada 3. Selecciona Chromium.</translation> -<translation id="6183442264225539303">Inicia sesión en este sitio y en Chromium. Puedes activar la sincronización más tarde.</translation> <translation id="6268381023930128611">¿Cerrar sesión en Chromium?</translation> <translation id="632825460376924298">Permitir el inicio de sesión en Chromium</translation> <translation id="6337530241089703714">Elige si quieres borrar o conservar tus datos de Chromium en este dispositivo</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_et.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_et.xtb index c5ccb790..f689b518 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_et.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_et.xtb
@@ -79,7 +79,6 @@ 1. Avage menüü Seaded. 2. Puudutage valikut Vaikebrauserirakendus. 3. Valige Chromium.</translation> -<translation id="6183442264225539303">Logige sellele saidile ja Chromiumisse sisse. Sünkroonimise saate hiljem sisse lülitada.</translation> <translation id="6268381023930128611">Kas logida Chromiumist välja?</translation> <translation id="632825460376924298">Luba Chromiumisse sisselogimine</translation> <translation id="6337530241089703714">Valige, kas soovite oma Chromiumi andmed sellest seadmest kustutada või need säilitada</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_eu.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_eu.xtb index d5d277ac..1acb1cf 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_eu.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_eu.xtb
@@ -79,7 +79,6 @@ 1. Ireki Ezarpenak. 2. Sakatu Arakatzaile lehenetsia. 3. Hautatu Chromium.</translation> -<translation id="6183442264225539303">Hasi saioa webgune honetan eta Chromium-en. Geroago aktiba dezakezu sinkronizazioa.</translation> <translation id="6268381023930128611">Chromium-eko saioa amaitu?</translation> <translation id="632825460376924298">Eman Chromium-en saioa hasteko baimena</translation> <translation id="6337530241089703714">Erabaki Chromium-eko datuak garbitu nahi dituzun ala ez gailu honetatik</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_fa.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_fa.xtb index 3c02d26c..605b295 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_fa.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_fa.xtb
@@ -79,7 +79,6 @@ ۱. «تنظیمات» را باز کنید ۲. روی «برنامه مرورگر پیشفرض» ضربه بزنید ۳. Chromium را انتخاب کنید.</translation> -<translation id="6183442264225539303">به سیستم این سایت و Chromium وارد شوید. میتوانید بعداً همگامسازی را روشن کنید.</translation> <translation id="6268381023930128611">از Chromium خارج میشوید؟</translation> <translation id="632825460376924298">مجاز کردن ورود به سیستم Chromium</translation> <translation id="6337530241089703714">انتخاب کنید دادههای Chromium شما از این دستگاه پاک شود یا نگه داشته شود</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_fi.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_fi.xtb index 827e80b5..6e4e309 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_fi.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_fi.xtb
@@ -79,7 +79,6 @@ 1. Avaa asetukset 2. Valitse Oletusselain 3. Valitse Chromium.</translation> -<translation id="6183442264225539303">Kirjaudu tälle sivustolle ja Chromiumiin. Voit laittaa synkronoinnin päälle myöhemmin.</translation> <translation id="6268381023930128611">Kirjaudutaanko ulos?</translation> <translation id="632825460376924298">Salli Chromium-kirjautuminen</translation> <translation id="6337530241089703714">Valitse, haluatko poistaa Chromium-datasi tältä laitteelta vai säilyttää sen</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_fil.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_fil.xtb index e961fc7..c94aeb4 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_fil.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_fil.xtb
@@ -79,7 +79,6 @@ 1. Buksan ang Settings 2. I-tap ang Default Browser App 3. Piliin ang Chromium.</translation> -<translation id="6183442264225539303">Mag-sign in sa site na ito at sa Chromium. Puwede mong i-on ang pag-sync sa ibang pagkakataon.</translation> <translation id="6268381023930128611">Mag-sign out sa Chromium?</translation> <translation id="632825460376924298">Payagan ang Pag-sign In sa Chromium</translation> <translation id="6337530241089703714">Piliin kung iki-clear ang iyong data sa Chromium sa device na ito o kung papanatilihin ito</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_fr-CA.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_fr-CA.xtb index 5a7e7cc..5cea6b2 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_fr-CA.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_fr-CA.xtb
@@ -79,7 +79,6 @@ 1. Ouvrez l'application Réglages. 2. Touchez Navigateur par défaut. 3. Sélectionnez Chromium.</translation> -<translation id="6183442264225539303">Connectez-vous à ce site et à Chromium. Vous pouvez activer la synchronisation plus tard.</translation> <translation id="6268381023930128611">Se déconnecter de Chromium?</translation> <translation id="632825460376924298">Autoriser la connexion dans Chromium</translation> <translation id="6337530241089703714">Voulez-vous effacer vos données Chrome de cet appareil ou les conserver?</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_fr.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_fr.xtb index 1e2f69aa..ca5c145 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_fr.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_fr.xtb
@@ -78,7 +78,6 @@ <translation id="6119647025869519954">Pour définir Chromium comme votre navigateur par défaut, procédez comme suit : 1. Accédez à "Réglages" Appuyez sur "Navigateur par défaut" 3. Sélectionnez "Chromium".</translation> -<translation id="6183442264225539303">Connectez-vous à ce site et à Chromium. Vous pourrez activer la synchronisation plus tard.</translation> <translation id="6268381023930128611">Se déconnecter de Chromium ?</translation> <translation id="632825460376924298">Autoriser la connexion à Chromium</translation> <translation id="6337530241089703714">Indiquez si vous voulez effacer ou garder les données Chromium de cet appareil</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_gl.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_gl.xtb index 92dcd31..9bb4b985 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_gl.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_gl.xtb
@@ -79,7 +79,6 @@ 1. Abre Configuración 2. Toca Aplicación de navegador predeterminada 3. Selecciona Chromium.</translation> -<translation id="6183442264225539303">Inicia sesión neste sitio e en Chromium. Podes activar a sincronización máis tarde.</translation> <translation id="6268381023930128611">Pechar sesión en Chromium?</translation> <translation id="632825460376924298">Permitir inicio de sesión en Chromium</translation> <translation id="6337530241089703714">Indicar se queres borrar ou conservar os teus datos de Chromium neste dispositivo</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_gu.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_gu.xtb index 94e4090..353eeab5 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_gu.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_gu.xtb
@@ -79,7 +79,6 @@ 1. સેટિંગ ખોલો 2. ડિફૉલ્ટ બ્રાઉઝર ઍપ પર ટૅપ કરો 3. Chromium પસંદ કરો.</translation> -<translation id="6183442264225539303">આ સાઇટ અને Chromiumમાં સાઇન ઇન કરો. તમે પછીથી તમારી સિંક કરવાની સુવિધા ચાલુ કરી શકો છો.</translation> <translation id="6268381023930128611">Chromiumમાંથી સાઇન આઉટ કરીએ?</translation> <translation id="632825460376924298">Chromiumમાં સાઇન-ઇનની મંજૂરી આપો</translation> <translation id="6337530241089703714">આ ડિવાઇસમાંથી તમારો Chromium ડેટા સાફ કરવો છે કે તેને જાળવી રાખવો છે તે પસંદ કરો</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_hi.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_hi.xtb index 682f3a12..ac9341bc 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_hi.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_hi.xtb
@@ -78,7 +78,6 @@ 1. Settings खोलें 2. डिफ़ॉल्ट ब्राउज़र ऐप्लिकेशन पर टैप करें 3. Chromium चुनें.</translation> -<translation id="6183442264225539303">इस साइट और Chromium में साइन इन करें. आप सिंक करने की सुविधा को बाद में चालू कर सकते हैं.</translation> <translation id="6268381023930128611">क्रोमियम से प्रस्थान करें?</translation> <translation id="632825460376924298">Chromium में साइन-इन करने की अनुमति दें</translation> <translation id="6337530241089703714">चुनें कि आप इस डिवाइस से अपना Chromium डेटा मिटाना चाहते हैं या सेव रखना चाहते हैं</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_hr.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_hr.xtb index a1400d6..a06a292 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_hr.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_hr.xtb
@@ -79,7 +79,6 @@ 1. Otvorite postavke. 2. Dodirnite opciju Zadana aplikacija preglednika. 3. Odaberite Chromium.</translation> -<translation id="6183442264225539303">Prijavite se na ovu web-lokaciju i Chromium. Sinkronizaciju možete uključiti kasnije.</translation> <translation id="6268381023930128611">Želite li se odjaviti iz Chromiuma?</translation> <translation id="632825460376924298">Dopusti prijavu u Chromium</translation> <translation id="6337530241089703714">Odaberite želite li podatke iz Chromiuma izbrisati s ovog uređaja ili ih zadržati</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_hu.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_hu.xtb index 44bb345..899c1ca 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_hu.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_hu.xtb
@@ -79,7 +79,6 @@ 1. Nyissa meg a Beállításokat. 2. Koppintson az Alapértelmezett böngésző lehetőségre. 3. Válassza ki a Chromium böngészőt.</translation> -<translation id="6183442264225539303">Jelentkezzen be erre a webhelyre és a Chromiumba. A szinkronizálást később is bekapcsolhatja.</translation> <translation id="6268381023930128611">Kijelentkezik a Chromiumból?</translation> <translation id="632825460376924298">Chromium-bejelentkezés engedélyezése</translation> <translation id="6337530241089703714">Döntse el, hogy törli-e a Chromium adatait erről az eszközről, vagy megtartja őket</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_hy.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_hy.xtb index d17ef6a..766e9b6 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_hy.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_hy.xtb
@@ -79,7 +79,6 @@ 1. Բացեք կարգավորումները։ 2. Հպեք «Դիտարկիչի կանխադրված հավելված»։ 3. Ընտրեք Chromium-ը։</translation> -<translation id="6183442264225539303">Մուտք գործեք այս կայք և Chromium։ Համաժամացումը կարող եք ավելի ուշ միացնել։</translation> <translation id="6268381023930128611">Դուրս գա՞լ Chromium-ից:</translation> <translation id="632825460376924298">Թույլատրել մուտքը Chromium-ում</translation> <translation id="6337530241089703714">Հեռացնե՞լ Chromium-ի տվյալներն այս սարքից</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_id.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_id.xtb index f278397..2f3eeef 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_id.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_id.xtb
@@ -79,7 +79,6 @@ 1. Buka Setelan 2. Ketuk Aplikasi Browser Default 3. Pilih Chromium.</translation> -<translation id="6183442264225539303">Login ke situs ini dan Chromium. Anda dapat mengaktifkan sinkronisasi nanti.</translation> <translation id="6268381023930128611">Keluar dari Chromium?</translation> <translation id="632825460376924298">Izinkan Login Chromium</translation> <translation id="6337530241089703714">Pilih apakah akan menghapus data Chromium dari perangkat ini atau menyimpannya</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_is.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_is.xtb index be2d0952..5d0f335 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_is.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_is.xtb
@@ -79,7 +79,6 @@ 1. Opnaðu Stillingar 2. Ýttu á „Sjálfgefið vafraforrit“ 3. Veldu Chromium.</translation> -<translation id="6183442264225539303">Skráðu þig inn á þetta vefsvæði og Chromium. Þú getur kveikt á samstillingu síðar.</translation> <translation id="6268381023930128611">Skrá út af Chromium?</translation> <translation id="632825460376924298">Leyfa innskráningu í Chromium</translation> <translation id="6337530241089703714">Veldu hvort þú vilt hreinsa gögn Chromium úr þessu tæki eða geyma þau</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_it.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_it.xtb index ee241bd..e2fe0683 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_it.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_it.xtb
@@ -79,7 +79,6 @@ 1. Apri le Impostazioni. 2. Tocca App browser predefinita. 3. Seleziona Chromium.</translation> -<translation id="6183442264225539303">Accedi a questo sito e a Chromium. Puoi attivare la sincronizzazione in un secondo momento.</translation> <translation id="6268381023930128611">Uscire da Chromium?</translation> <translation id="632825460376924298">Consenti l'accesso a Chromium</translation> <translation id="6337530241089703714">Scegli se cancellare i tuoi dati di Chromium da questo dispositivo o se conservarli</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_iw.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_iw.xtb index 13b8f820..dc73813e 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_iw.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_iw.xtb
@@ -79,7 +79,6 @@ 1. פותחים את ההגדרות 2. מקישים על אפליקציית הדפדפן שמוגדרת כברירת מחדל 3. בוחרים את Chromium.</translation> -<translation id="6183442264225539303">עליך להיכנס לאתר הזה ול-Chromium. ניתן להפעיל את הסנכרון מאוחר יותר.</translation> <translation id="6268381023930128611">האם לצאת מ-Chromium?</translation> <translation id="632825460376924298">התרת כניסה אל Chromium</translation> <translation id="6337530241089703714">האם למחוק את נתוני Chromium ממכשיר זה או לשמור אותם?</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ja.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ja.xtb index 4cfbeecb..cba259e 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ja.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ja.xtb
@@ -79,7 +79,6 @@ 1. [設定] を開きます。 2. [デフォルトのブラウザアプリ] をタップします。 3. Chromium を選択します。</translation> -<translation id="6183442264225539303">このサイトと Chromium にログインしてください。同期は後でオンにできます。</translation> <translation id="6268381023930128611">Chromium からログアウトしますか?</translation> <translation id="632825460376924298">Chromium へのログインを許可する</translation> <translation id="6337530241089703714">このデバイスから Chromium データを削除するかどうかを選択してください</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ka.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ka.xtb index 1d0a349..ab02875 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ka.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ka.xtb
@@ -79,7 +79,6 @@ 1. გახსენით „პარამეტრები“ 2. შეეხეთ „ბრაუზერის ნაგულისხმევ აპს“ 3. აირჩიეთ Chromium.</translation> -<translation id="6183442264225539303">შედით ამ საიტსა და Chromium-ში. სინქრონიზაციის ჩართვა მოგვიანებით შეგიძლიათ.</translation> <translation id="6268381023930128611">გსურთ Chromium-იდან გამოსვლა?</translation> <translation id="632825460376924298">Chromium-ში შესვლის დაშვება</translation> <translation id="6337530241089703714">აირჩიეთ, რა გსურთ — თქვენი Chromium მონაცემების გასუფთავება ამ მოწყობილობიდან თუ მათი შენარჩუნება</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_kk.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_kk.xtb index 778e5c8..894cea2dd 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_kk.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_kk.xtb
@@ -79,7 +79,6 @@ 1. Параметрлерді ашыңыз. 2. "Әдепкі браузер қолданбасы" түймесін түртіңіз. 3. Chromium браузерін таңдаңыз.</translation> -<translation id="6183442264225539303">Осы сайтқа және Chromium-ге кіріңіз. Синхрондауды кейінірек қосуға болады.</translation> <translation id="6268381023930128611">Chromium жүйесінен шығасыз ба?</translation> <translation id="632825460376924298">Chromium-ге кіруге рұқсат ету</translation> <translation id="6337530241089703714">Chromium деректері осы құрылғыдан өшірілсін бе әлде сақталсын ба?</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_km.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_km.xtb index b15657b1..2e6d69e 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_km.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_km.xtb
@@ -79,7 +79,6 @@ 1. បើកការកំណត់ 2. ចុចកម្មវិធីរុករកតាមអ៊ីនធឺណិតលំនាំដើម 3. ជ្រើសរើស Chromium។</translation> -<translation id="6183442264225539303">ចូលគេហទំព័រនេះ និង Chromium។ អ្នកអាចបើកសមកាលកម្មនៅពេលក្រោយ។</translation> <translation id="6268381023930128611">ចាកចេញពី Chromium ឬ?</translation> <translation id="632825460376924298">អនុញ្ញាតការចូល Chromium</translation> <translation id="6337530241089703714">ជ្រើសរើសថាតើត្រូវសម្អាតទិន្នន័យ Chromium របស់អ្នកពីឧបករណ៍នេះ ឬរក្សាទុកវា</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_kn.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_kn.xtb index a2c5e3ef..cc60134d 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_kn.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_kn.xtb
@@ -79,7 +79,6 @@ 1. ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ತೆರೆಯಿರಿ 2. ಡೀಫಾಲ್ಟ್ ಬ್ರೌಸರ್ ಆ್ಯಪ್ ಟ್ಯಾಪ್ ಮಾಡಿ 3. Chromium ಅನ್ನು ಆಯ್ಕೆಮಾಡಿ.</translation> -<translation id="6183442264225539303">ಈ ಸೈಟ್ಗೆ ಮತ್ತು Chromium ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ. ನಂತರ ನೀವು ಸಿಂಕ್ ಆನ್ ಮಾಡಬಹುದು.</translation> <translation id="6268381023930128611">Chromium ನಿಂದ ಸೈನ್ ಔಟ್ ಮಾಡುವುದೇ?</translation> <translation id="632825460376924298">Chromium ಸೈನ್-ಇನ್ ಅನ್ನು ಅನುಮತಿಸಿ</translation> <translation id="6337530241089703714">ಈ ಸಾಧನದಲ್ಲಿನ ನಿಮ್ಮ Chromium ಡೇಟಾವನ್ನು ತೆರವುಗೊಳಿಸಬೇಕೆ ಅಥವಾ ಉಳಿಸಿಕೊಳ್ಳಬೇಕೆ ಎಂಬುದನ್ನು ಆಯ್ಕೆಮಾಡಿ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ko.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ko.xtb index f62ecef..6dabcf6 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ko.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ko.xtb
@@ -79,7 +79,6 @@ 1. 설정을 엽니다. 2. 기본 브라우저 앱을 탭합니다. 3. Chromium을 선택합니다.</translation> -<translation id="6183442264225539303">이 사이트 및 Chromium에 로그인하세요. 나중에 동기화를 사용 설정할 수 있습니다.</translation> <translation id="6268381023930128611">Chromium에서 로그아웃</translation> <translation id="632825460376924298">Chromium 로그인 허용</translation> <translation id="6337530241089703714">이 기기에서 내 Chromium 데이터를 삭제할지 또는 유지할지 선택하세요</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ky.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ky.xtb index ac578b60..c8617a7 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ky.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ky.xtb
@@ -79,7 +79,6 @@ 1. Жөндөөлөрдү ачыңыз 2. Демейки серепчи колдонмосун басыңыз 3. Chromium'ду тандаңыз.</translation> -<translation id="6183442264225539303">Бул сайтка жана Chromium'га кириңиз. Шайкештирүүнү кийинчерээк күйгүзө аласыз.</translation> <translation id="6268381023930128611">Chromium'дан чыгасызбы?</translation> <translation id="632825460376924298">Chromium'га кирүүгө уруксат берүү</translation> <translation id="6337530241089703714">Chromium'дагы дайын-даректер ушул түзмөктөн өчүрүлсүнбү же сакталсынбы?</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_lo.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_lo.xtb index fb468d9..fc31825 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_lo.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_lo.xtb
@@ -78,7 +78,6 @@ <translation id="6119647025869519954">ເພື່ອເຮັດໃຫ້ Chromium ເປັນໂປຣແກຣມເລີ່ມຕົ້ນຂອງທ່ານ: 1. ເປີດການຕັ້ງຄ່າ ແຕະແອັບໂປຣແກຣມທ່ອງເວັບເລີ່ມຕົ້ນ 3. ເລືອກ Chromium.</translation> -<translation id="6183442264225539303">ເຂົ້າສູ່ລະບົບຫາເວັບໄຊນີ້ ແລະ Chromium. ທ່ານສາມາດເປີດການຊິ້ງຂໍ້ມູນໃນພາຍຫຼັງໄດ້.</translation> <translation id="6268381023930128611">ອອກຈາກລະບົບ Chromium ບໍ?</translation> <translation id="632825460376924298">ອະນຸຍາດການເຂົ້າສູ່ລະບົບ Chromium</translation> <translation id="6337530241089703714">ເລືອກວ່າຈະລຶບລ້າງຂໍ້ມູນ Chromium ຂອງທ່ານອອກຈາກອຸປະກອນນີ້ ຫຼື ເກັບມັນໄວ້</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_lt.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_lt.xtb index 61dc2a0..14fdbb3 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_lt.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_lt.xtb
@@ -79,7 +79,6 @@ 1. Atidarykite skiltį „Nustatymai“. 2. Palieskite „Numatytoji naršyklės programa“. 3. Pasirinkite „Chromium“.</translation> -<translation id="6183442264225539303">Prisijunkite prie šios svetainės ir „Chromium“. Sinchronizavimą galėsite įjungti vėliau.</translation> <translation id="6268381023930128611">Atsijungti nuo „Chromium“?</translation> <translation id="632825460376924298">Leisti „Chromium“ prisijungimą</translation> <translation id="6337530241089703714">Pasirinkite, ar norite išvalyti „Chromium“ duomenis iš šio įrenginio ar juos palikti</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_lv.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_lv.xtb index 88a6f6e9..b862c1d 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_lv.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_lv.xtb
@@ -79,7 +79,6 @@ 1. Atveriet iestatījumus. 2. Pieskarieties vienumam “Noklusējuma pārlūka lietotne”. 3. Atlasiet Chromium.</translation> -<translation id="6183442264225539303">Pierakstieties šajā vietnē un pārlūkā Chromium. Sinhronizāciju varat ieslēgt vēlāk.</translation> <translation id="6268381023930128611">Vai izrakstīties no Chromium?</translation> <translation id="632825460376924298">Atļaut pierakstīšanos pārlūkā Chromium</translation> <translation id="6337530241089703714">Izvēlieties, vai notīrīt Chromium datus no šīs ierīces vai tos paturēt</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_mk.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_mk.xtb index 0f04998..f3c7410 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_mk.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_mk.xtb
@@ -79,7 +79,6 @@ 1. Отворете „Поставки“ 2. Допрете „Стандардна апликација за прелистување“ 3. Изберете Chromium.</translation> -<translation id="6183442264225539303">Најавете се на сајтов и на Chromium. Синхронизацијата може да ја вклучите подоцна.</translation> <translation id="6268381023930128611">Ќе се одјавите од Chromium?</translation> <translation id="632825460376924298">Дозволете најавување на Chromium</translation> <translation id="6337530241089703714">Дали сакате да ги избришете податоците од Chromium од уредов или да ги задржите?</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ml.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ml.xtb index d929735..2a59e31 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ml.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ml.xtb
@@ -79,7 +79,6 @@ 1. ക്രമീകരണം തുറക്കുക 2. ഡിഫോൾട്ട് ബ്രൗസർ ആപ്പ് ടാപ്പ് ചെയ്യുക 3. Chromium തിരഞ്ഞെടുക്കുക.</translation> -<translation id="6183442264225539303">ഈ സൈറ്റിലും Chromium-ലും സൈൻ ഇൻ ചെയ്യുക. സമന്വയിപ്പിക്കൽ പിന്നീടും ഓണാക്കാനാകും.</translation> <translation id="6268381023930128611">Chromium-ത്തിൽ നിന്ന് സൈൻ ഔട്ട് ചെയ്യണോ?</translation> <translation id="632825460376924298">Chromium-ൽ സൈൻ ഇൻ ചെയ്യാൻ അനുവദിക്കുക</translation> <translation id="6337530241089703714">ഈ ഉപകരണത്തിൽ നിന്ന് നിങ്ങളുടെ Chromium ഡാറ്റ മായ്ക്കണോ അതോ നിലനിർത്തണോ എന്ന് തിരഞ്ഞെടുക്കുക</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_mn.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_mn.xtb index 753e728..99ba6b36 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_mn.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_mn.xtb
@@ -79,7 +79,6 @@ 1. Тохиргоог нээнэ үү 2. Өгөгдмөл хөтчийн аппыг товшино уу 3. Chromium-г сонгоно уу.</translation> -<translation id="6183442264225539303">Энэ сайт болон Chromium-д нэвтэрнэ үү. Та синк хийхийг дараа асааж болно.</translation> <translation id="6268381023930128611">Chromium-с гарах уу?</translation> <translation id="632825460376924298">Chromium-д нэвтрэхийг зөвшөөрөх</translation> <translation id="6337530241089703714">Chromium-н өгөгдлөө энэ төхөөрөмжөөс арилгах эсвэл хадгалах эсэхээ сонгоно уу</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_mr.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_mr.xtb index 08a8694..5f0cac8 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_mr.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_mr.xtb
@@ -79,7 +79,6 @@ १. सेटिंग्ज उघडा २. डीफॉल्ट ब्राउझर अॅप वर टॅप करा ३. Chromium निवडा.</translation> -<translation id="6183442264225539303">ही साइट आणि Chromium मध्ये साइन इन करा. तुम्ही सिंक करणे नंतर सुरू करू शकता.</translation> <translation id="6268381023930128611">Chromium मधून साइन आउट करायचे?</translation> <translation id="632825460376924298">Chromium मध्ये साइन-इन करण्याची अनुमती द्या</translation> <translation id="6337530241089703714">या डिव्हाइसवरून तुमचा Chromium डेटा साफ करायचा की ठेवायचा ते निवडा</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ms.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ms.xtb index ed7c2f8..7c64e74 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ms.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ms.xtb
@@ -79,7 +79,6 @@ 1. Buka Tetapan 2. Ketik Apl Penyemak Imbas Lalai 3. Pilih Chromium.</translation> -<translation id="6183442264225539303">Log masuk ke laman ini dan Chromium. Anda boleh menghidupkan penyegerakan kemudian.</translation> <translation id="6268381023930128611">Log keluar daripada Chromium?</translation> <translation id="632825460376924298">Benarkan Log Masuk Chromium</translation> <translation id="6337530241089703714">Pilih sama ada anda hendak mengosongkan data Chromium anda daripada peranti ini atau mengekalkan data tersebut</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_my.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_my.xtb index 9367027..5c30a58 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_my.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_my.xtb
@@ -79,7 +79,6 @@ ၁။ 'ဆက်တင်များ' ဖွင့်ပါ ၂။ 'မူရင်း ဘရောင်ဇာအက်ပ်' ကို တို့ပါ ၃။ Chromium ကို ရွေးပါ။</translation> -<translation id="6183442264225539303">ဤဝဘ်ဆိုက်နှင့် Chromium သို့ လက်မှတ်ထိုးဝင်ပါ။ စင့်ခ်လုပ်ခြင်းကို နောင်တွင် ဖွင့်နိုင်သည်။</translation> <translation id="6268381023930128611">Chromium မှထွက်မလား။</translation> <translation id="632825460376924298">Chromium သို့ လက်မှတ်ထိုးဝင်ခွင့်ပြုရန်</translation> <translation id="6337530241089703714">ဤစက်မှ သင်၏ Chromium ဒေတာများကို ရှင်းထုတ်မည် (သို့) ဆက်ထားရှိမည်ကို ရွေးပါ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ne.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ne.xtb index e4fb08b0..aed6590 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ne.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ne.xtb
@@ -78,7 +78,6 @@ १. सेटिङ खोल्नुहोस् २. 'डिफल्ट ब्राउजर एप'मा ट्याप गर्नुहोस् ३. Chromium चयन गर्नुहोस्।</translation> -<translation id="6183442264225539303">यो साइट र Chromium मा साइन इन गर्नुहोस्। तपाईं सिंक गर्ने सुविधा पछि अन गर्न सक्नुहुन्छ।</translation> <translation id="6268381023930128611">Chromium बाट साइन आउट गर्ने हो?</translation> <translation id="632825460376924298">Chromium मा साइन इन गर्ने अनुमति दिनुहोस्</translation> <translation id="6337530241089703714">तपाईं Chromium मा भएको आफ्नो डेटा यो डिभाइसमा राख्न चाहनुहुन्छ कि यसबाट हटाउन चाहनुहुन्छ भन्ने कुरा छनौट गर्नुहोस्</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_nl.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_nl.xtb index 6e0fa30..0bb1c35 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_nl.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_nl.xtb
@@ -79,7 +79,6 @@ 1. Open Instellingen. 2. Tik op Standaard browser-app. 3. Selecteer Chromium.</translation> -<translation id="6183442264225539303">Log in bij deze site en Chromium. Je kunt synchronisatie later aanzetten.</translation> <translation id="6268381023930128611">Uitloggen bij Chromium?</translation> <translation id="632825460376924298">Inloggen bij Chromium toestaan</translation> <translation id="6337530241089703714">Kies of je je Chromium-gegevens voor dit apparaat wilt verwijderen of behouden</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_no.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_no.xtb index eb779885..ab47590 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_no.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_no.xtb
@@ -79,7 +79,6 @@ 1. Åpne Innstillinger. 2. Trykk på Standard nettleserapp. 3. Velg Chromium.</translation> -<translation id="6183442264225539303">Logg på dette nettstedet og Chromium. Du kan slå på synkronisering senere.</translation> <translation id="6268381023930128611">Vil du logge av Chromium?</translation> <translation id="632825460376924298">Tillat Chromium-pålogging</translation> <translation id="6337530241089703714">Velg om du vil slette Chromium-dataene dine fra denne enheten eller beholde dem</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_or.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_or.xtb index 5248a62..b616caa 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_or.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_or.xtb
@@ -79,7 +79,6 @@ 1. ସେଟିଂସ୍ ଖୋଲନ୍ତୁ 2. ଡିଫଲ୍ଟ ବ୍ରାଉଜର୍ ଆପକୁ ଟାପ୍ କରନ୍ତୁ 3. Chromium ଚୟନ କରନ୍ତୁ।</translation> -<translation id="6183442264225539303">ଏହି ସାଇଟ ଏବଂ Chromiumରେ ସାଇନ ଇନ କରନ୍ତୁ। ଆପଣ ପରେ ସିଙ୍କ ଚାଲୁ କରିପାରିବେ।</translation> <translation id="6268381023930128611">Chromiumରୁ ସାଇନ୍ ଆଉଟ୍ କରିବେ କି?</translation> <translation id="632825460376924298">Chromiumରେ ସାଇନ୍-ଇନ୍ କରିବାକୁ ଅନୁମତି ଦିଅନ୍ତୁ</translation> <translation id="6337530241089703714">ଏହି ଡିଭାଇସରୁ ଆପଣଙ୍କ Chromium ଡାଟାକୁ ଖାଲି କରିବେ ନା ଏହାକୁ ରଖିବେ ତାହା ବାଛନ୍ତୁ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_pa.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_pa.xtb index dab7d9c..be7796f 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_pa.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_pa.xtb
@@ -79,7 +79,6 @@ 1. ਸੈਟਿੰਗਾਂ ਖੋਲ੍ਹੋ 2. ਪੂਰਵ-ਨਿਰਧਾਰਤ ਬ੍ਰਾਊਜ਼ਰ ਐਪ 'ਤੇ ਟੈਪ ਕਰੋ 3. Chromium ਚੁਣੋ।</translation> -<translation id="6183442264225539303">ਇਸ ਸਾਈਟ ਅਤੇ Chromium ਵਿੱਚ ਸਾਈਨ-ਇਨ ਕਰੋ। ਤੁਸੀਂ ਸਿੰਕ ਨੂੰ ਬਾਅਦ ਵਿੱਚ ਚਾਲੂ ਕਰ ਸਕਦੇ ਹੋ।</translation> <translation id="6268381023930128611">ਕੀ Chromium ਤੋਂ ਸਾਈਨ-ਆਊਟ ਹੋਣਾ ਹੈ?</translation> <translation id="632825460376924298">Chromium ਵਿੱਚ ਸਾਈਨ-ਇਨ ਕਰਨ ਦਿਓ</translation> <translation id="6337530241089703714">ਚੁਣੋ ਕਿ ਕੀ ਇਸ ਡੀਵਾਈਸ ਤੋਂ ਆਪਣਾ Chromium ਡਾਟਾ ਕਲੀਅਰ ਕਰਨਾ ਹੈ ਜਾਂ ਇਸਨੂੰ ਰੱਖਣਾ ਹੈ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_pl.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_pl.xtb index 2506432d..7cd26639 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_pl.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_pl.xtb
@@ -79,7 +79,6 @@ 1. Otwórz Ustawienia. 2. Kliknij Domyślna przeglądarka. 3. Wybierz Chromium.</translation> -<translation id="6183442264225539303">Zaloguj się w na tej stronie i w Chromium. Synchronizację możesz włączyć później.</translation> <translation id="6268381023930128611">Wylogować z Chromium?</translation> <translation id="632825460376924298">Zezwalaj na logowanie w Chromium</translation> <translation id="6337530241089703714">Zdecyduj, czy chcesz usunąć swoje dane z Chromium z tego urządzenia czy je na nim zachować</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_pt-BR.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_pt-BR.xtb index 115da2f..0598604 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_pt-BR.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_pt-BR.xtb
@@ -79,7 +79,6 @@ 1. Abra as Configurações. 2. Toque em 'App do navegador padrão". 3. Selecione o Chromium.</translation> -<translation id="6183442264225539303">Faça login neste site e no Chromium. É possível ativar a sincronização mais tarde.</translation> <translation id="6268381023930128611">Sair do Chromium?</translation> <translation id="632825460376924298">Permitir login no Chromium</translation> <translation id="6337530241089703714">Você quer apagar ou manter os dados do Chromium neste dispositivo?</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_pt-PT.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_pt-PT.xtb index 43a2d76..6a4c1649 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_pt-PT.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_pt-PT.xtb
@@ -79,7 +79,6 @@ 1. Abra as Definições 2. Toque em App de navegador predefinida 3. Selecione o Chromium.</translation> -<translation id="6183442264225539303">Inicie sessão neste site e no Chromium. Pode ativar a sincronização mais tarde.</translation> <translation id="6268381023930128611">Pretende terminar sessão no Chromium?</translation> <translation id="632825460376924298">Permitir o início de sessão no Chromium</translation> <translation id="6337530241089703714">Escolha se pretende limpar os seus dados do Chromium deste dispositivo ou mantê-los</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ro.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ro.xtb index 207a809..c0d1f577 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ro.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ro.xtb
@@ -79,7 +79,6 @@ 1. deschide Setările; 2. atinge Aplicația browser prestabilită; 3. selectează Chromium.</translation> -<translation id="6183442264225539303">Conectează-te la acest site și la Chromium. Poți activa sincronizarea mai târziu.</translation> <translation id="6268381023930128611">Te deconectezi de la Chromium?</translation> <translation id="632825460376924298">Permite conectarea la Chromium</translation> <translation id="6337530241089703714">Alege dacă ștergi datele Chromium de pe dispozitiv sau le păstrezi</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ru.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ru.xtb index 0a4f467..e12478b 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ru.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ru.xtb
@@ -79,7 +79,6 @@ 1. Откройте настройки устройства. 2. Найдите раздел, где выбирается браузер по умолчанию. 3. Выберите Chromium.</translation> -<translation id="6183442264225539303">Войдите на этот сайт и в Chromium. Синхронизацию можно включить позже.</translation> <translation id="6268381023930128611">Выйти из Chromium?</translation> <translation id="632825460376924298">Разрешить вход в Chromium</translation> <translation id="6337530241089703714">Удалить данные Chromium с этого устройства?</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_si.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_si.xtb index 7309506..fe2e81f 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_si.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_si.xtb
@@ -79,7 +79,6 @@ 1. සැකසීම් විවෘත කරන්න 2. පෙරනිමි බ්රව්සර යෙදුම තට්ටු කරන්න 3. Chromium තෝරන්න.</translation> -<translation id="6183442264225539303">මෙම අඩවිය සහ Chromium වෙත පුරන්න. ඔබට පසුව සමමුහුර්තය ක්රියාත්මක කළ හැකිය.</translation> <translation id="6268381023930128611">Chromium වෙතින් වරන්නද?</translation> <translation id="632825460376924298">Chromium පිරීමට ඉඩ දෙන්න</translation> <translation id="6337530241089703714">මෙම උපාංගයෙන් ඔබගේ Chromium දත්ත හිස් කරන්නේද හෝ එය තබා ගන්නේද යන්න තෝරන්න</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_sk.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_sk.xtb index 540598f..7429b5af 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_sk.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_sk.xtb
@@ -79,7 +79,6 @@ 1. Otvorte nastavenia. 2. Klepnite na položku Predvolená aplikácia prehliadača. 3. Vyberte Chromium.</translation> -<translation id="6183442264225539303">Prihláste sa na tomto webe a v prehliadači Chromium. Neskôr môžete zapnúť synchronizáciu.</translation> <translation id="6268381023930128611">Odhlásiť sa z prehliadača Chromium?</translation> <translation id="632825460376924298">Povoliť prihlásenie do prehliadača Chromium</translation> <translation id="6337530241089703714">Vyberte, či chcete údaje prehliadača Chromium v tomto zariadení vymazať alebo ponechať</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_sl.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_sl.xtb index 0c0624bb..0352017c 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_sl.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_sl.xtb
@@ -79,7 +79,6 @@ 1. Odprite nastavitve. 2. Dotaknite se možnosti za privzeto aplikacijo za brskanje. 3. Izberite Chromium.</translation> -<translation id="6183442264225539303">Prijavite se na tem spletnem mestu in v Chromium. Sinhronizacijo lahko vklopite pozneje.</translation> <translation id="6268381023930128611">Se želite odjaviti iz Chromiuma?</translation> <translation id="632825460376924298">Omogočanje prijave v Chromium</translation> <translation id="6337530241089703714">Izberite, ali želite izbrisati podatke v Chromiumu iz te naprave ali jih obdržati.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_sq.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_sq.xtb index 3162e60..a645913e 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_sq.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_sq.xtb
@@ -79,7 +79,6 @@ 1. Hap "Cilësimet" 2. Trokit tek "Aplikacioni i parazgjedhur i shfletuesit" 3. Zgjidh Chromium.</translation> -<translation id="6183442264225539303">Identifikohu në këtë sajt dhe në Chromium. Mund ta aktivizosh sinkronizmin më vonë.</translation> <translation id="6268381023930128611">Dëshiron të dalësh nga Chromium?</translation> <translation id="632825460376924298">Lejo identifikimin në Chromium</translation> <translation id="6337530241089703714">Zgjidh nëse do t'i pastrosh të dhënat e Chromium nga kjo pajisje apo do t'i mbash ato</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_sr-Latn.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_sr-Latn.xtb index ca6419f8..df5355c 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_sr-Latn.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_sr-Latn.xtb
@@ -79,7 +79,6 @@ 1. Otvorite podešavanja 2. Dodirnite Podrazumevana aplikacija za pregledanje 3. Izaberite Chromium.</translation> -<translation id="6183442264225539303">Prijavite se na ovaj sajt i u Chromium. Sinhronizaciju možete da uključite kasnije.</translation> <translation id="6268381023930128611">Želite li da se odjavite iz Chromium-a?</translation> <translation id="632825460376924298">Dozvolite prijavljivanje u Chromium</translation> <translation id="6337530241089703714">Odaberite da li ćete obrisati Chromium podatke sa ovog uređaja ili ih zadržati</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_sr.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_sr.xtb index 20fe3de..d644393 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_sr.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_sr.xtb
@@ -79,7 +79,6 @@ 1. Отворите подешавања 2. Додирните Подразумевана апликација за прегледање 3. Изаберите Chromium.</translation> -<translation id="6183442264225539303">Пријавите се на овај сајт и у Chromium. Синхронизацију можете да укључите касније.</translation> <translation id="6268381023930128611">Желите ли да се одјавите из Chromium-а?</translation> <translation id="632825460376924298">Дозволите пријављивање у Chromium</translation> <translation id="6337530241089703714">Одаберите да ли ћете обрисати Chromium податке са овог уређаја или их задржати</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_sv.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_sv.xtb index cdfdfc5..d436b5a 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_sv.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_sv.xtb
@@ -79,7 +79,6 @@ 1. Öppna inställningarna 2. Tryck på Standardwebbläsarapp 3. Välj Chromium.</translation> -<translation id="6183442264225539303">Logga in på den här webbplatsen och i Chromium. Du kan aktivera synkronisering senare.</translation> <translation id="6268381023930128611">Vill du logga ut från Chromium?</translation> <translation id="632825460376924298">Tillåt inloggning i Chromium</translation> <translation id="6337530241089703714">Välj om din data i Chromium ska raderas från den här enheten eller vara kvar</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_sw.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_sw.xtb index 968a319e..d03da37f 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_sw.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_sw.xtb
@@ -79,7 +79,6 @@ 1. Fungua Mipangilio 2. Gusa Programu ya Kivinjari Chaguomsingi 3. Chagua Chromium.</translation> -<translation id="6183442264225539303">Ingia katika akaunti kwenye tovuti hii na kwenye Chromium. Unaweza kuwasha kipengele cha kusawazisha baadaye.</translation> <translation id="6268381023930128611">Ungependa kuondoka kwenye Chromium?</translation> <translation id="632825460376924298">Ruhusu vidokezo vya kuingia katika akaunti kwenye Chromium</translation> <translation id="6337530241089703714">Chagua iwapo ungependa kufuta data yako ya Chromium kwenye kifaa hiki au kuihifadhi</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ta.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ta.xtb index 4268de9..6e04674d 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ta.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ta.xtb
@@ -79,7 +79,6 @@ 1. அமைப்புகளைத் திறக்கவும் 2. இயல்பு உலாவி ஆப்ஸ் என்பதைத் தட்டவும் 3. Chromiumமைத் தேர்ந்தெடுக்கவும்.</translation> -<translation id="6183442264225539303">இந்தத் தளத்திலும் Chromiumமிலும் உள்நுழையுங்கள். ஒத்திசைவைப் பின்னர் இயக்கலாம்.</translation> <translation id="6268381023930128611">Chromium இலிருந்து வெளியேறவா?</translation> <translation id="632825460376924298">Chromium உள்நுழைவை அனுமதி</translation> <translation id="6337530241089703714">இந்தச் சாதனத்தில் உள்ள உங்கள் Chromium தரவை அழிக்க வேண்டுமா வைத்திருக்க வேண்டுமா என்பதைத் தேர்வுசெய்யுங்கள்</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_te.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_te.xtb index 1434fbbc..a4684ba 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_te.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_te.xtb
@@ -79,7 +79,6 @@ 1. సెట్టింగ్లను తెరవండి 2. ఆటోమేటిక్ బ్రౌజర్ యాప్ను ట్యాప్ చేయండి 3. Chromiumను ఎంచుకోండి.</translation> -<translation id="6183442264225539303">ఈ సైట్కు, అలాగే Chromiumకు సైన్ ఇన్ చేయండి. మీరు సింక్ను తర్వాత ఆన్ చేయవచ్చు.</translation> <translation id="6268381023930128611">Chromium నుండి సైన్ అవుట్ చేయాలా?</translation> <translation id="632825460376924298">Chromium సైన్-ఇన్ను అనుమతించండి</translation> <translation id="6337530241089703714">ఈ పరికరం నుండి మీ Chromium డేటాను క్లియర్ చేయాలా లేదా ఉంచాలా అనే దాన్ని ఎంచుకోండి</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_th.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_th.xtb index 9085a170..8b23bb0 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_th.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_th.xtb
@@ -79,7 +79,6 @@ 1. เปิดการตั้งค่า 2. แตะแอปเบราว์เซอร์เริ่มต้น 3. เลือก Chromium</translation> -<translation id="6183442264225539303">ลงชื่อเข้าใช้เว็บไซต์นี้และ Chromium คุณเปิดการซิงค์ภายหลังได้</translation> <translation id="6268381023930128611">ต้องการออกจาก Chromium ใช่ไหม</translation> <translation id="632825460376924298">อนุญาตให้ลงชื่อเข้าใช้ Chromium</translation> <translation id="6337530241089703714">เลือกว่าจะล้างข้อมูล Chromium จากอุปกรณ์นี้หรือเก็บไว้</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_tr.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_tr.xtb index 095f3a84..f8c2121 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_tr.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_tr.xtb
@@ -79,7 +79,6 @@ 1. Ayarlar'ı açın 2. Varsayılan Tarayıcı Uygulaması'na dokunun 3. Chromium'u seçin.</translation> -<translation id="6183442264225539303">Bu sitede ve Chromium'da oturum açın. Senkronizasyonu daha sonra açabilirsiniz.</translation> <translation id="6268381023930128611">Chromium oturumunu kapatıyor musunuz?</translation> <translation id="632825460376924298">Chromium'da Oturum Açmaya İzin Ver</translation> <translation id="6337530241089703714">Chromium verilerinizi bu cihazdan temizlemeyi veya saklamayı seçin</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_uk.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_uk.xtb index 8ffdff69..62f68ade 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_uk.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_uk.xtb
@@ -79,7 +79,6 @@ 1. Відкрийте налаштування 2. Натисніть "Веб-переглядач за умовчанням" 3. Виберіть Chromium.</translation> -<translation id="6183442264225539303">Увійдіть в облікові записи цього сайту та Chromium. Синхронізацію можна ввімкнути пізніше.</translation> <translation id="6268381023930128611">Вийти з Chromium?</translation> <translation id="632825460376924298">Дозволити вхід у Chromium</translation> <translation id="6337530241089703714">Видалити дані Chromium із цього пристрою чи зберігати їх?</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ur.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ur.xtb index c0e73d1f..da9e52a 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ur.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ur.xtb
@@ -79,7 +79,6 @@ 1۔ ترتیبات کھولیں 2۔ ڈیفالٹ براؤزر ایپ پر تھپتھپائیں 3۔ Chromium کو منتخب کریں۔</translation> -<translation id="6183442264225539303">اس سائٹ اور Chromium پر سائن ان کریں۔ آپ بعد میں مطابقت پذیری کو آن کر سکتے ہیں۔</translation> <translation id="6268381023930128611">Chromium سے سائن آؤٹ کریں؟</translation> <translation id="632825460376924298">Chromium میں سائن ان کرنے کی اجازت دیں</translation> <translation id="6337530241089703714">منتخب کریں کہ آیا اپنے Chromium ڈیٹا کو اس آلے سے صاف کرنا ہے یا اسے رکھنا ہے</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_uz.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_uz.xtb index 92d8898..a14ef51a 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_uz.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_uz.xtb
@@ -78,7 +78,6 @@ 1. Sozlamalarni oching 2. Standart brauzer ilovasi ustiga bosing 3. Chromium brauzerini tanlang.</translation> -<translation id="6183442264225539303">Bu sayt va Chromium hisoblariga kiring. Sinxronizatsiyani keyinroq yoqish mumkin.</translation> <translation id="6268381023930128611">Chromium’dan chiqmoqchimisiz?</translation> <translation id="632825460376924298">Chromium hisobiga kirishga ruxsat berish</translation> <translation id="6337530241089703714">Chromium maʼlumotlari bu qurilmadan tozalanishi yoki saqlanib qolishini tanlang</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_vi.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_vi.xtb index 704f8de..b245e2b 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_vi.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_vi.xtb
@@ -79,7 +79,6 @@ 1. Mở phần Cài đặt 2. Nhấn vào Ứng dụng trình duyệt mặc định 3. Chọn Chromium.</translation> -<translation id="6183442264225539303">Đăng nhập vào trang web này và Chromium. Bạn có thể bật tính năng đồng bộ hóa sau.</translation> <translation id="6268381023930128611">Đăng xuất khỏi Chromium?</translation> <translation id="632825460376924298">Cho phép đăng nhập vào Chromium</translation> <translation id="6337530241089703714">Chọn xem bạn muốn xóa dữ liệu của mình trên Chromium khỏi thiết bị này hay giữ lại dữ liệu đó</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_zh-CN.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_zh-CN.xtb index dd6c15e..9289d6f 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_zh-CN.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_zh-CN.xtb
@@ -79,7 +79,6 @@ 1. 打开“设置” 2. 点按“默认浏览器应用” 3. 选择“Chromium”。</translation> -<translation id="6183442264225539303">登录此网站和 Chromium。您可等到需要时再开启同步功能。</translation> <translation id="6268381023930128611">退出 Chromium?</translation> <translation id="632825460376924298">允许登录 Chromium</translation> <translation id="6337530241089703714">请选择是要清除还是要保留您在此设备上存储的 Chromium 数据</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_zh-HK.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_zh-HK.xtb index ab7b903..cbdab7b2 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_zh-HK.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_zh-HK.xtb
@@ -79,7 +79,6 @@ 1. 開啟「設定」 2. 輕按 [預設瀏覽器應用程式] 3. 選取 [Chromium]。</translation> -<translation id="6183442264225539303">登入此網站和 Chromium。您可稍後再開啟同步功能。</translation> <translation id="6268381023930128611">要登出 Chromium 嗎?</translation> <translation id="632825460376924298">允許登入 Chromium</translation> <translation id="6337530241089703714">選擇要從此裝置上清除 Chromium 資料,還是要保留資料</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_zh-TW.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_zh-TW.xtb index f88a058..4ea4cbf 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_zh-TW.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_zh-TW.xtb
@@ -79,7 +79,6 @@ 1. 開啟「設定」 2. 輕觸 [預設瀏覽器 App] 3. 選取 [Chromium]</translation> -<translation id="6183442264225539303">登入這個網站和 Chromium。你可以稍後再開啟同步功能。</translation> <translation id="6268381023930128611">要登出 Chromium 嗎?</translation> <translation id="632825460376924298">允許登入 Chromium</translation> <translation id="6337530241089703714">選擇是否要清除你在這部裝置上的 Chromium 資料</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_zu.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_zu.xtb index fcb6c9b..3100cc7 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_zu.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_zu.xtb
@@ -79,7 +79,6 @@ 1. Vula Amasethingi 2. Thepha Uhlelo Lokusebenza Lwesiphequluli Esizenzakalelayo 3. Khetha i-Chromium.</translation> -<translation id="6183442264225539303">Ngena ngemvume kuleli sayithi naku-Chromium. Ungavula ukuvumelanisa kamuva.</translation> <translation id="6268381023930128611">Phuma ku-Chromium?</translation> <translation id="632825460376924298">Vumela Ukungena ngemvume kwe-Chromium</translation> <translation id="6337530241089703714">Khetha ukuthi usule yini idatha yakho ye-Chromium ekule divayisi noma uyigcine</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_af.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_af.xtb index 5f031e3..dcbfa9f9 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_af.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_af.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome het nie toegang tot jou foto's of video's nie. Aktiveer toegang in iOS-instellings > Privacy > Photos.</translation> <translation id="4099578267706723511">Help om Chrome te verbeter deur gebruikstatistiek en omvalverslae na Google te stuur.</translation> <translation id="417201473131094001">Nie gesteun op Chrome Kanarie nie</translation> -<translation id="4214277427269650960">Meld by hierdie werf en Chrome aan. Jy kan sinkronisering later aanskakel.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> het Chrome gebruik en het boekmerke, wagwoorde en ander instellings op hierdie toestel gelos.</translation> <translation id="424864128008805179">Meld af uit Chrome?</translation> <translation id="4249068189593983585">Chrome-wenk. Vir meer oortjieopsies, raak en hou die Wys Oortjies-knoppie op die nutsbalk aan die onderkant of bokant van jou skerm.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_am.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_am.xtb index 55d5107..d4295e7 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_am.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_am.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome የእርስዎ ፎቶዎች ወይም ቪዲዮዎች መዳረሻ የለውም። መዳረሻ በiOS ቅንብሮች > ግላዊነት > ፎቶዎች ውስጥ ያንቁ።</translation> <translation id="4099578267706723511">የአጠቃቀም ስታቲክሶችን እና የብልሽት ሪፖርቶችን ወደ Google በመላክ Chromeን የተሻለ ለማድረግ እገዛ ያድርጉ።</translation> <translation id="417201473131094001">በChrome Canary ላይ አይደገፍም</translation> -<translation id="4214277427269650960">ወደዚህ ጣቢያ እና Chrome በመለያ ይግቡ። በኋላ ስምረትን ማብራት ይችላሉ።</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> በዚህ መሣሪያ ላይ Chromeን እና ግራ ዕልባቶችን፣ የይለፍ ቃላትን እና ሌሎች ቅንብሮችን እየተጠቀመ ነበር።</translation> <translation id="424864128008805179">ከChrome ተዘግቶ ይወጣ?</translation> <translation id="4249068189593983585">የChrome ጠቃሚ ምክር። ተጨማሪ የትር አማራጮችን ለማግኘት በመሣሪያ አሞሌው ውስጥ የትሮችን አሳይ አዝራሩን ነክተው ይያዙ፣ ይህ በማያ ገጽዎ አናት ወይም ግርጌ ላይ ነው ያለው።</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ar.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ar.xtb index f2a4828..7021672f 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ar.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ar.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">لا تتوفر لدي Google Chrome إمكانية الدخول إلى الصور أو الفيديوهات. تستطيع تفعيل الدخول في إعدادات iOS > الخصوصية > الصور.</translation> <translation id="4099578267706723511">يمكنك المساعدة في تحسين Chrome عن طريق إرسال إحصاءات الاستخدام وتقارير الأعطال إلى Google.</translation> <translation id="417201473131094001">غير متاح على Chrome Canary</translation> -<translation id="4214277427269650960">سجِّل الدخول إلى هذا الموقع الإلكتروني وإلى Chrome. يمكنك تفعيل المزامنة لاحقًا.</translation> <translation id="4233521129555661685">كان <ph name="USER_EMAIL1" /> يستخدم Chrome وتركَ إشارات مرجعية وكلمات مرور وغيرها من الإعدادات مُسجَّلة على هذا الجهاز.</translation> <translation id="424864128008805179">هل تريد تسجيل الخروج من Chrome؟</translation> <translation id="4249068189593983585">نصيحة لاستخدام Chrome: لمزيد من خيارات علامات التبويب، يمكنك النقر مع الاستمرار على الزر "إظهار علامات التبويب" في شريط الأدوات الموجود أسفل الشاشة أو أعلاها.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_as.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_as.xtb index 3de46a6..1a89fc90 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_as.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_as.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">আপোনাৰ ফট’ বা ভিডিঅ’সমূহত Google Chromeৰ এক্সেছ নাই৷ iOS ছেটিং > গোপনীয়তা > ফট’-ত এক্সেছ সক্ষম কৰক।</translation> <translation id="4099578267706723511">Googleলৈ ব্যৱহাৰৰ পৰিসংখ্যা আৰু ক্ৰেশ্ব ৰিপ’ৰ্ট পঠিয়াই Chrome ক অধিক উন্নত কৰাত সহায় কৰক।</translation> <translation id="417201473131094001">Chrome Canaryত সমৰ্থিত নহয়</translation> -<translation id="4214277427269650960">এই ছাইটটো আৰু Chromeত ছাইন ইন কৰক। পাছত আপুনি ছিংক অন কৰিব পাৰে।</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" />এ Chrome ব্যৱহাৰ কৰি আছিল আৰু এই ডিভাইচটোত বুকমাৰ্ক, পাছৱৰ্ড আৰু অন্য ছেটিং এৰি গৈছে।</translation> <translation id="424864128008805179">Chromeৰ পৰা ছাইন আউট কৰিবনে?</translation> <translation id="4249068189593983585">Chrome ব্যৱহাৰৰ কিটিপ। টেবৰ অধিক বিকল্প পাবলৈ আপোনাৰ স্ক্রীণৰ একেবাৰে ওপৰত অথবা তলত থকা টুলবাৰৰ টেব দেখুৱাওক বুটামটো স্পৰ্শ কৰি ধৰি ৰাখক।</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_az.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_az.xtb index 12b4fc5..1a04b9f 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_az.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_az.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome məhsulunun foto və videolarınıza girişi yoxdur. iOS Ayarları > Məxfilik > Fotolar bölməsindən girişi aktiv edin.</translation> <translation id="4099578267706723511">İstifadə statistikası və qəza raportlarını Google'a göndərməklə Chrome'un gəlişməsini sağlayın.</translation> <translation id="417201473131094001">Chrome Canary'də dəstəklənmir</translation> -<translation id="4214277427269650960">Bu sayta və Chrome'a daxil olun. Sinxronlaşdırmanı daha sonra aktiv edə bilərsiniz.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> bu cihazda Chrome istifadə edirdi və əlfəcinlər, parollar və digər ayarlar qalıb.</translation> <translation id="424864128008805179">Chrome'dan çıxılsın?</translation> <translation id="4249068189593983585">Chrome məsləhəti. Daha çox tab seçimləri üçün ekranın aşağı və yuxarı hissəsində alətlər panelində yerləşən "Tabları Göstərin" düyməsinə basıb saxlayın.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_be.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_be.xtb index 726105a..47938a5 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_be.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_be.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">У браўзера Google Chrome няма доступу да фота і відэа. Уключыце доступ у меню iOS: "Налады > Прыватнасць > Фота".</translation> <translation id="4099578267706723511">Дапамажыце палепшыць Chrome, адпраўляючы ў Google статыстыку выкарыстання і справаздачы аб збоях.</translation> <translation id="417201473131094001">Не падтрымліваецца ў Chrome Canary</translation> -<translation id="4214277427269650960">Выканайце ўваход на сайт і ў Chrome. Сінхранізацыю можна ўключыць пазней.</translation> <translation id="4233521129555661685">Карыстальнік <ph name="USER_EMAIL1" />, папрацаваўшы ў браўзеры Chrome, пакінуў на гэтай прыладзе закладкі, паролі і іншыя налады.</translation> <translation id="424864128008805179">Выйсці з Chrome?</translation> <translation id="4249068189593983585">Падказка Chrome. Каб адкрыць больш параметраў укладкі, націсніце і ўтрымлівайце кнопку "Паказваць укладкі" на панэлі інструментаў, якая знаходзіцца ўнізе або ўверсе экрана.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_bg.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_bg.xtb index a6d0f2a83..c45a6a8 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_bg.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_bg.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome няма достъп до снимките или видеоклиповете ви. Активирайте го от „Settings“ > „Privacy“ > „Photos“ в iOS.</translation> <translation id="4099578267706723511">Помогнете за подобряването на Chrome, като изпращате до Google статистически данни за употребата и сигнали за сривове.</translation> <translation id="417201473131094001">Не се поддържа от Chrome Canary</translation> -<translation id="4214277427269650960">Влезте в профила си в този сайт и в Chrome. Можете да включите синхронизирането по-късно.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> използва Chrome и запази на това устройство отметки, пароли и други настройки.</translation> <translation id="424864128008805179">Искате ли да излезете от Chrome?</translation> <translation id="4249068189593983585">Съвет за Chrome. За да видите още опции за разделите, докоснете и задръжте бутона „Показване на разделите“ в лентата с инструменти в долната или горната част на екрана.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_bn.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_bn.xtb index 6a63e99..b59d1ee 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_bn.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_bn.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">আপনার ছবি বা ভিডিওতে Google Chrome এর অ্যাক্সেস নেই। iOS সেটিংস > গোপনীয়তা > ফটোগুলিতে অ্যাক্সেস সক্ষম করুন।</translation> <translation id="4099578267706723511">Google-এ ব্যবহারের পরিসংখ্যান এবং ক্র্যাশ রিপোর্টগুলি পাঠিয়ে Chrome-কে আরও ভাল করে তুলতে সহায়তা করুন৷</translation> <translation id="417201473131094001">'Chrome ক্যানারি'তে এই সুবিধা পাওয়া যাবে না</translation> -<translation id="4214277427269650960">এই সাইট ও Chrome-এ সাইন-ইন করুন। আপনি সিঙ্ক করার সুবিধা পরে চালু করতে পারেন।</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> Chrome ব্যবহার করছিলেন এবং এই ডিভাইসে বুকমার্ক, পাসওয়ার্ড এবং অন্যান্য সেটিংস রয়ে গেছে।</translation> <translation id="424864128008805179">Chrome থেকে সাইন-আউট করবেন?</translation> <translation id="4249068189593983585">Chrome সংক্রান্ত পরামর্শ। আরও ট্যাবের বিকল্প পেতে আপনার স্ক্রিনের নিচে অথবা উপরের দিকে থাকা টুলবারে 'ট্যাব দেখান' বিকল্পটি টাচ করে ধরে থাকুন।</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_bs.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_bs.xtb index 79bf4afe..1751a89 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_bs.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_bs.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome nema pristup vašim fotografijama ili videozapisima. Omogućite pristup u meniju iOS postavke > Privatnost > Fotografije.</translation> <translation id="4099578267706723511">Poboljšajte Chrome šaljući Googleu statistike upotrebe i izvješća o rušenju.</translation> <translation id="417201473131094001">Nije podržano na Chrome Canaryju</translation> -<translation id="4214277427269650960">Prijavite se na ovu web lokaciju i u Chrome. Sinhronizaciju možete uključiti kasnije.</translation> <translation id="4233521129555661685">Korisnik <ph name="USER_EMAIL1" /> je koristio Chrome i ostavio je oznake, lozinke i ostale postavke na ovom uređaju.</translation> <translation id="424864128008805179">Odjaviti se iz Chromea?</translation> <translation id="4249068189593983585">Savjet za Chrome. Za više opcija za kartice dodirnite i zadržite dugme Prikaži kartice na alatnoj traci, na dnu ili na vrhu ekrana.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ca.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ca.xtb index f6d42be..f27f4e7 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ca.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ca.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome no té accés als vostres vídeos o fotos. Permeteu-li l'accés a iOS, a Configuració > Privadesa > Fotos.</translation> <translation id="4099578267706723511">Ajuda a millorar Chrome enviant estadístiques d'ús i informes d'error a Google.</translation> <translation id="417201473131094001">No s'admeten a Chrome Canary</translation> -<translation id="4214277427269650960">Inicia la sessió en aquest lloc web i a Chrome. Pots activar la sincronització més endavant.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> ha utilitzat Chrome en aquest dispositiu i hi ha deixat adreces d'interès, contrasenyes i altres opcions de configuració.</translation> <translation id="424864128008805179">Vols tancar la sessió de Chrome?</translation> <translation id="4249068189593983585">Consell de Chrome. Per accedir a més opcions de pestanyes, mantén premut el botó Mostra pestanyes a la barra d'eines, que és a la part inferior o superior de la pantalla.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_cs.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_cs.xtb index 2b0fb22..7f2edf82 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_cs.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_cs.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome nemá přístup k vašim fotkám nebo videím. Povolte přístup v systému iOS v Nastavení > Soukromí > Fotky.</translation> <translation id="4099578267706723511">Pomozte Chrome zlepšovat – posílejte Googlu statistiky o využívání a zprávy o selhání.</translation> <translation id="417201473131094001">V Chrome Canary není podporováno</translation> -<translation id="4214277427269650960">Přihlaste se na tento webu a do Chromu. Synchronizaci můžete zapnout později.</translation> <translation id="4233521129555661685">Uživatel <ph name="USER_EMAIL1" /> používal Chrome a ponechal v tomto zařízení záložky, hesla a další nastavení.</translation> <translation id="424864128008805179">Odhlásit se z Chromu?</translation> <translation id="4249068189593983585">Tip pro Chrome. Další možnosti karet zobrazíte přidržením tlačítka Zobrazit karty, které najdete v dolní nebo horní části obrazovky.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_cy.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_cy.xtb index a0751ad..3fdcacf 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_cy.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_cy.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Nid oes gan Google Chrome fynediad at eich lluniau na fideos. Galluogwch fynediad yn Gosodiadau iOS > Preifatrwydd > Lluniau.</translation> <translation id="4099578267706723511">Helpwch i wella Chrome drwy anfon ystadegau defnydd ac adroddiadau toriadau at Google.</translation> <translation id="417201473131094001">Ni chefnogir ar Chrome Canary</translation> -<translation id="4214277427269650960">Mewngofnodi i'r wefan hon a Chrome. Gallwch droi cysoni ymlaen yn nes ymlaen.</translation> <translation id="4233521129555661685">Roedd <ph name="USER_EMAIL1" /> yn defnyddio Chrome a gadawodd nodau tudalen, cyfrineiriau, a gosodiadau eraill ar y ddyfais hon.</translation> <translation id="424864128008805179">Allgofnodi o Chrome?</translation> <translation id="4249068189593983585">Awgrym Chrome. Am ragor o opsiynau tabiau, cyffyrddwch a daliwch y botwm Dangos Tabiau yn y bar offer, sydd ar waelod neu ar frig eich sgrîn.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_da.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_da.xtb index 5bee676..3404beb 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_da.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_da.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome har ikke adgang til dine billeder eller videoer. Gå til iOS Indstillinger > Privatliv > Billeder for at få adgang.</translation> <translation id="4099578267706723511">Vær med til at gøre Chrome bedre ved at sende brugsstatistik og nedbrudsrapporter til Google.</translation> <translation id="417201473131094001">Understøttes ikke i Chrome Canary</translation> -<translation id="4214277427269650960">Log ind på dette website og Chrome. Du kan aktivere synkronisering senere.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> brugte Chrome og gemte bogmærker, adgangskoder og andre indstillinger på denne enhed.</translation> <translation id="424864128008805179">Vil du logge ud af Chrome?</translation> <translation id="4249068189593983585">Chrome-tip. Hvis du vil se flere faneindstillinger, skal du trykke på knappen Vis faner på værktøjslinjen og holde fingeren nede. Du finder knappen nederst eller øverst på skærmen.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_de.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_de.xtb index 564bc466..63180c1f 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_de.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_de.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Chrome hat keinen Zugriff auf deine Fotos und Videos. Aktiviere den Zugriff unter "iOS-Einstellungen > Datenschutz > Fotos".</translation> <translation id="4099578267706723511">Nutzungsstatistiken und Absturzberichte zur Verbesserung von Chrome an Google senden</translation> <translation id="417201473131094001">Wird von Chrome Canary nicht unterstützt</translation> -<translation id="4214277427269650960">Melde dich bei dieser Website und in Chrome an. Du kannst die Synchronisierung später aktivieren.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> hat Chrome genutzt und Lesezeichen, Passwörter und andere Einstellungen auf diesem Gerät festgelegt.</translation> <translation id="424864128008805179">Von Chrome abmelden?</translation> <translation id="4249068189593983585">Chrome-Tipp: Wenn du weitere Tab-Optionen sehen möchtest, berühre und halte die Schaltfläche „Tabs anzeigen“ in der Symbolleiste. Sie befindet sich unten oder oben auf dem Bildschirm.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_el.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_el.xtb index 797b546..b0dc9745 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_el.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_el.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Το Chrome δεν έχει πρόσβαση σε φωτογραφίες ή βίντεό σας. Ενεργ. πρόσβασης στις Ρυθμίσεις iOS > Απόρρητο > Φωτογραφίες.</translation> <translation id="4099578267706723511">Συμβάλετε στη βελτίωση του Chrome, στέλνοντας στην Google στατιστικά στοιχεία χρήσης και αναφορές σφαλμάτων.</translation> <translation id="417201473131094001">Δεν υποστηρίζεται στο Chrome Canary</translation> -<translation id="4214277427269650960">Συνδεθείτε σε αυτόν τον ιστότοπο και στο Chrome. Μπορείτε να ενεργοποιήσετε τον συγχρονισμό αργότερα.</translation> <translation id="4233521129555661685">Ο χρήστης <ph name="USER_EMAIL1" /> χρησιμοποίησε το Chrome και οι σελιδοδείκτες, οι κωδικοί πρόσβασης και άλλες ρυθμίσεις του αποθηκεύτηκαν σε αυτήν τη συσκευή.</translation> <translation id="424864128008805179">Αποσύνδεση από το Chrome;</translation> <translation id="4249068189593983585">Συμβουλή για το Chrome. Για περισσότερες επιλογές καρτελών, αγγίξτε παρατεταμένα το κουμπί Εμφάνιση καρτελών στη γραμμή εργαλείων, η οποία βρίσκεται στο κάτω ή το επάνω τμήμα της οθόνης.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_en-GB.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_en-GB.xtb index 887a418..9e3a409 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_en-GB.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_en-GB.xtb
@@ -52,12 +52,12 @@ <translation id="3988789688219830639">Google Chrome does not have access to your photos or videos. Enable access in iOS Settings > Privacy > Photos.</translation> <translation id="4099578267706723511">Help make Chrome better by sending usage statistics and crash reports to Google.</translation> <translation id="417201473131094001">Not supported on Chrome Canary</translation> -<translation id="4214277427269650960">Sign in to this site and Chrome. You can turn on sync later.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> was using Chrome and left bookmarks, passwords and other settings on this device.</translation> <translation id="424864128008805179">Sign out of Chrome?</translation> <translation id="4249068189593983585">Chrome tip. For more tab options, touch and hold the Show Tabs button in the toolbar, which is at the bottom or top of your screen.</translation> <translation id="4523886039239821078">Some add-ons cause Chrome to crash. Please uninstall:</translation> <translation id="4633328489441962921">Chrome can't check for updates</translation> +<translation id="4636900170638246267">Sign in to this site and Chrome.</translation> <translation id="4698415050768537821">Chrome couldn't check all passwords. Try again tomorrow or <ph name="BEGIN_LINK" />check passwords in your Google Account.<ph name="END_LINK" /></translation> <translation id="4802922164792993118">Chrome tip. Sign in faster by selecting your saved password at the top of the keyboard.</translation> <translation id="4819268619367838612">To help improve the app, Chrome sends usage and crash data to Google. <ph name="BEGIN_LINK" />Manage<ph name="END_LINK" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_es-419.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_es-419.xtb index ed41b35..41f27d93 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_es-419.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_es-419.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome no puede acceder a tus fotos ni videos. Habilita el acceso en Configuración de iOS > Privacidad > Fotos.</translation> <translation id="4099578267706723511">Envía las estadísticas de uso y los informes de fallos a Google para ayudarnos a mejorar Chrome.</translation> <translation id="417201473131094001">No es compatible con Chrome Canary</translation> -<translation id="4214277427269650960">Accede a este sitio y a Chrome. Puedes activar la sincronización más tarde.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> usó Chrome y dejó favoritos, contraseñas y otros parámetros de configuración en este dispositivo.</translation> <translation id="424864128008805179">¿Quieres salir de Chrome?</translation> <translation id="4249068189593983585">Sugerencia de Chrome: Para obtener más opciones de pestañas, mantén presionado el botón Mostrar pestañas de la barra de herramientas, que se encuentra en la parte inferior o superior de la pantalla.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_es.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_es.xtb index c524888e..448d732 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_es.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_es.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome no puede acceder a tus fotos y vídeos (para permitirlo, ve a Ajustes de iOS > Privacidad > Fotos).</translation> <translation id="4099578267706723511">Ayudar a mejorar Chrome enviando estadísticas de uso e informes sobre fallos.</translation> <translation id="417201473131094001">No compatible con Chrome Canary</translation> -<translation id="4214277427269650960">Inicia sesión en este sitio y en Chrome. Puedes activar la sincronización más tarde.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> ha usado Chrome y ha dejado marcadores, contraseñas y otras configuraciones en este dispositivo.</translation> <translation id="424864128008805179">¿Quieres cerrar sesión en Chrome?</translation> <translation id="4249068189593983585">Consejo sobre Chrome: Para ver más opciones de pestañas, mantén pulsado el botón Mostrar pestañas en la barra de herramientas, que se encuentra en la parte inferior o superior de la pantalla.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_et.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_et.xtb index 86a16f39..91e7c60 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_et.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_et.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome'il pole juurdepääsu fotodele ega videotele. Lubage iOS-is juurdep. valikutega Seaded > Privaatsus > Fotod.</translation> <translation id="4099578267706723511">Aidake muuta Chrome'i paremaks, saates Google'ile kasutusstatistikat ja krahhiaruandeid.</translation> <translation id="417201473131094001">Ei toetata versioonis Chrome Canary</translation> -<translation id="4214277427269650960">Logige sellele saidile ja Chrome'i sisse. Sünkroonimise saate hiljem sisse lülitada.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> kasutas Chrome'i ning jättis järjehoidjad, paroolid ja muud seaded sellesse seadmesse.</translation> <translation id="424864128008805179">Kas logida Chrome'ist välja?</translation> <translation id="4249068189593983585">Chrome'i nõuanne. Vahelehtede lisavalikute nägemiseks puudutage ja hoidke all ekraanikuva üla- või alaosas tööriistaribal olevat nuppu Kuva vahelehed.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_eu.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_eu.xtb index dbcb434..baa22d8 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_eu.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_eu.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome-k ez du argazki eta bideoetarako sarbiderik. Gaitu ezazu iOS sistemako Settings > Privacy > Photos atalean.</translation> <translation id="4099578267706723511">Hobetu Chrome Google-ri erabilera-estatistikak eta hutsegite-txostenak bidalita.</translation> <translation id="417201473131094001">Ez da bateragarria Chrome Canary-rekin</translation> -<translation id="4214277427269650960">Hasi saioa webgune honetan eta Chrome-n. Geroago aktiba dezakezu sinkronizazioa.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> Chrome-ren erabiltzailea zenez, laster-markak, pasahitzak eta beste ezarpena batzuk utzi ditu gailuan.</translation> <translation id="424864128008805179">Chrome-ko saioa amaitu nahi duzu?</translation> <translation id="4249068189593983585">Chrome-ri buruzko aholkua: fitxetako aukera gehiago ikusteko, eduki sakatuta tresna-barrako Erakutsi fitxak botoia. Pantailaren goiko edo beheko aldean aurkituko duzu.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fa.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fa.xtb index 752465a..689299ed 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fa.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fa.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome به عکسها یا ویدیوهای شما دسترسی ندارد. با رفتن به تنظیمات iOS > حریم خصوصی > عکسها دسترسی را فعال کنید.</translation> <translation id="4099578267706723511">با ارسال آمار کاربرد و گزارشهای خرابی به Google، به بهتر شدن Chrome کمک کنید.</translation> <translation id="417201473131094001">در Chrome Canary پشتیبانی نمیشود</translation> -<translation id="4214277427269650960">به سیستم این سایت و Chrome وارد شوید. میتوانید بعداً همگامسازی را روشن کنید.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> از Chrome استفاده میکرده است و نشانکها، گذرواژهها، و تنظیمات دیگری در این دستگاه ذخیره کرده است.</translation> <translation id="424864128008805179">از سیستم Chrome خارج می شوید؟</translation> <translation id="4249068189593983585">نکته Chrome. برای دیدن گزینههای بیشتر برگه، دکمه «نمایش برگهها» را در نوارابزار (واقع در پایین یا بالای صفحه) لمس کنید و نگه دارید.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fi.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fi.xtb index b077d076..4fb68b5b 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fi.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fi.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome ei voi käyttää kuviasi tai videoitasi. Anna käyttöoikeus kohdassa iOS-asetukset > Tietosuoja > Kuvat.</translation> <translation id="4099578267706723511">Auta parantamaan Chromea lähettämällä käyttötilastoja ja virheraportteja Googlelle.</translation> <translation id="417201473131094001">Ei tueta Chrome Canaryssa</translation> -<translation id="4214277427269650960">Kirjaudu tälle sivustolle ja Chromeen. Voit laittaa synkronoinnin päälle myöhemmin.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> käytti Chromea, ja hänen käyttämiä kirjanmerkkejä, salasanoja ja muita asetuksia jäi laitteelle.</translation> <translation id="424864128008805179">Kirjaudutaanko ulos Chromesta?</translation> <translation id="4249068189593983585">Chrome-vinkki: Voit avata välilehtien lisäasetukset painamalla pitkään ylä- tai alapalkissa olevaa Näytä välilehdet ‑painiketta.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fil.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fil.xtb index bdb43524..31d2f43 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fil.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fil.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Walang access ang Google Chrome sa larawan o video. I-enable ang access sa Mga Setting ng iOS > Privacy > Mga Larawan.</translation> <translation id="4099578267706723511">Tulungang mapahusay ang Chrome sa pamamagitan ng pagpapadala sa Google ng mga istatistika ng paggamit at ulat ng pag-crash.</translation> <translation id="417201473131094001">Hindi sinusuportahan sa Chrome Canary</translation> -<translation id="4214277427269650960">Mag-sign in sa site na ito at sa Chrome. Puwede mong i-on ang pag-sync sa ibang pagkakataon.</translation> <translation id="4233521129555661685">Ginamit ni <ph name="USER_EMAIL1" /> ang Chrome at nag-iwan siya ng mga bookmark, password, at iba pang mga setting sa device na ito.</translation> <translation id="424864128008805179">Mag-sign out sa Chrome?</translation> <translation id="4249068189593983585">Tip sa Chrome. Para sa higit pang opsyon sa tab, pindutin nang matagal ang button na Ipakita ang Mga Tab sa toolbar, na nasa ibaba o itaas ng iyong screen.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr-CA.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr-CA.xtb index a8070a2..951cee79 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr-CA.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr-CA.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome n'a pas accès à vos photos ou vidéos. Activez l'accès dans Réglages iOS > Confidentialité > Photos.</translation> <translation id="4099578267706723511">Envoyez des statistiques d'utilisation et des rapports d'erreur pour améliorer Chrome.</translation> <translation id="417201473131094001">Application non prise en charge par Chrome Canary</translation> -<translation id="4214277427269650960">Connectez-vous à ce site et à Chrome. Vous pouvez activer la synchronisation plus tard.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> utilisait Chrome et a laissé des favoris, des mots de passe et d'autres paramètres sur cet appareil.</translation> <translation id="424864128008805179">Se déconnecter de Chrome?</translation> <translation id="4249068189593983585">Astuce pour Chrome. Pour afficher plus d'options d'onglets, maintenez le doigt sur le bouton Afficher les onglets dans la barre d'outils, qui se trouve dans le bas ou dans le haut de votre écran.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr.xtb index dce6712e..77da3e8 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome n'a pas accès à vos photos ni à vos vidéos. Activez l'accès dans iOS via Réglages > Confidentialité > Photos.</translation> <translation id="4099578267706723511">Envoyer des statistiques d'utilisation et des rapports d'erreur pour améliorer Chrome</translation> <translation id="417201473131094001">Non disponible dans Chrome Canary</translation> -<translation id="4214277427269650960">Connectez-vous à ce site et à Chrome. Vous pourrez activer la synchronisation plus tard.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> utilisait Chrome et a laissé des favoris, des mots de passe et d'autres paramètres sur cet appareil.</translation> <translation id="424864128008805179">Se déconnecter de Chrome ?</translation> <translation id="4249068189593983585">Astuce Chrome : Pour afficher plus d'options d'onglets, appuyez de manière prolongée sur le bouton "Afficher les onglets" situé dans la barre d'outils affichée dans la partie inférieure ou supérieure de l'écran.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_gl.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_gl.xtb index 0caaac2..e30c44b8 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_gl.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_gl.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome non ten acceso ás túas fotos nin aos teus vídeos. Activa o acceso en Configuración de iOS > Privacidade > Fotos.</translation> <translation id="4099578267706723511">Axúdanos a mellorar Chrome enviando estatísticas de uso e informes de erros a Google.</translation> <translation id="417201473131094001">Non compatible en Chrome Canary</translation> -<translation id="4214277427269650960">Inicia sesión neste sitio e en Chrome. Podes activar a sincronización máis tarde.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> estivo usando Chrome e deixou os marcadores, os contrasinais e outras opcións de configuración neste dispositivo.</translation> <translation id="424864128008805179">Queres pechar sesión en Chrome?</translation> <translation id="4249068189593983585">Consello sobre Chrome: Para ver máis opcións relacionadas coas pestanas, mantén premido o botón Mostrar pestanas. Atoparalo na barra de ferramentas, situada na parte inferior ou superior da pantalla.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_gu.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_gu.xtb index 91eb0f6..ef7cd6d 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_gu.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_gu.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chromeને તમારા ફોટા અથવા વીડિયોનો ઍક્સેસ નથી. iOS સેટિંગ > પ્રાઇવસી > ફોટામાં ઍક્સેસને ચાલુ કરો.</translation> <translation id="4099578267706723511">ઉપયોગનાં આંકડા અને ક્રૅશ રિપોર્ટ Googleને મોકલીને Chromeને વધુ સારું બનાવવામાં મદદ કરો.</translation> <translation id="417201473131094001">Chrome Canary પર સપોર્ટ કરવામાં આવતી નથી</translation> -<translation id="4214277427269650960">આ સાઇટ અને Chromeમાં સાઇન ઇન કરો. તમે પછીથી તમારી સિંક કરવાની સુવિધા ચાલુ કરી શકો છો.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> Chromeનો ઉપયોગ કરી રહ્યાં હતા અને તેઓ આ ડિવાઇસ પર બુકમાર્ક, પાસવર્ડ અને અન્ય સેટિંગ છોડી ગયા છે.</translation> <translation id="424864128008805179">Chromeમાંથી સાઇન આઉટ કરીએ?</translation> <translation id="4249068189593983585">Chrome ટિપ. ટૅબના વધુ વિકલ્પો માટે, તમારી સ્ક્રીનના તળિયે અથવા ટોચે આવેલા ટૂલબારમાંના 'ટૅબ બતાવો' બટનને ટચ કરીને થોડીવાર દબાવી રાખો.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_hi.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_hi.xtb index 42446b7..cfc7333 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_hi.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_hi.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome के पास आपकी फ़ोटो या वीडियो का एक्सेस नहीं है. iOS सेटिंग > निजता > फ़ोटो में जाकर एक्सेस चालू करें.</translation> <translation id="4099578267706723511">Google को इस्तेमाल के आंकड़े और खराबी रिपोर्ट भेजकर Chrome को बेहतर बनाने में मदद करें.</translation> <translation id="417201473131094001">यह सुविधा Chrome के कैनरी वर्शन पर काम नहीं करती</translation> -<translation id="4214277427269650960">इस साइट और Chrome में साइन इन करें. आप सिंक करने की सुविधा को बाद में चालू कर सकते हैं.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> से Chrome का इस्तेमाल किया गया था और इसमें सेव किए गए बुकमार्क, पासवर्ड, और दूसरी सेटिंग को इस डिवाइस से नहीं हटाया गया.</translation> <translation id="424864128008805179">Chrome से साइन आउट करें?</translation> <translation id="4249068189593983585">Chrome इस्तेमाल करने के लिए सलाह. ज़्यादा टैब विकल्पों के लिए, टूलबार में 'टैब दिखाएं' बटन को दबाकर रखें. यह बटन आपकी स्क्रीन के सबसे नीचे या सबसे ऊपर मिलेगा.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_hr.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_hr.xtb index 9cb29f0e..57d42e4b 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_hr.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_hr.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Chrome nema pristup fotografijama ni videozapisima. Omogućite pristup u Postavkama iOS-a > Privatnost > Fotografije.</translation> <translation id="4099578267706723511">Poboljšajte Chrome šaljući Googleu statistike upotrebe i izvješća o rušenju.</translation> <translation id="417201473131094001">Nije podržano u Chrome Canaryju</translation> -<translation id="4214277427269650960">Prijavite se na ovu web-lokaciju i Chrome. Sinkronizaciju možete uključiti kasnije.</translation> <translation id="4233521129555661685">Korisnik <ph name="USER_EMAIL1" /> upotrebljavao je Chrome i ostavio oznake, zaporke i druge postavke na ovom uređaju.</translation> <translation id="424864128008805179">Želite li se odjaviti s Chromea?</translation> <translation id="4249068189593983585">Savjet za Chrome. Za više opcija za kartice dodirnite i držite gumb Prikaži kartice na alatnoj traci pri dnu ili vrhu zaslona.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_hu.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_hu.xtb index 915852b0..969ca91 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_hu.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_hu.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">A Google Chrome nem fér hozzá az Ön képeihez és videóihoz. Engedélyezés iOS-en: Beállítások > Adatvédelem > Fényképek.</translation> <translation id="4099578267706723511">Használati statisztikák és hibajelentések küldésével segíthet a Google-nak a Chrome fejlesztésében.</translation> <translation id="417201473131094001">A Chrome Canary nem támogatja</translation> -<translation id="4214277427269650960">Jelentkezzen be erre a webhelyre és a Chrome-ba. A szinkronizálást később is bekapcsolhatja.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> felhasználó használta Chrome-ot, és könyvjelzőket, jelszavakat, valamint egyéb beállításokat hagyott az eszközön.</translation> <translation id="424864128008805179">Kijelentkezés a Chrome-ból</translation> <translation id="4249068189593983585">Tipp a Chrome használatához. A további lapbeállításokhoz érintse meg és tartsa lenyomva az eszköztárban lévő Lapok megjelenítése gombot, amely a képernyő alsó vagy felső részén található.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_hy.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_hy.xtb index 3972ad14..3b07d8e1 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_hy.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_hy.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome-ին հասանելի չեն ձեր լուսանկարները կամ տեսանյութերը: Անցեք iOS Կարգավորումներ > Գաղտնիություն > Լուսանկարներ (Settings > Privacy > Photos) և միացրեք մուտքի թույլտվությունը:</translation> <translation id="4099578267706723511">Աջակցեք Google Chrome-ի կատարելագործմանը՝ Google-ին ավտոմատ կերպով ուղարկելով օգտագործման վիճակագրություն և խափանումների մասին հաղորդագրություններ:</translation> <translation id="417201473131094001">Չի աջակցվում Chrome Canary-ում</translation> -<translation id="4214277427269650960">Մուտք գործեք այս կայք և Chrome։ Համաժամացումը կարող եք ավելի ուշ միացնել։</translation> <translation id="4233521129555661685">Օգտատերը (<ph name="USER_EMAIL1" />) օգտագործել է Chrome-ը, և այս սարքում պահպանվել են էջանիշներ, գաղտնաբառեր և այլ կարգավորումներ։</translation> <translation id="424864128008805179">Դուրս գա՞լ Chrome-ից:</translation> <translation id="4249068189593983585">Խորհուրդ Chrome-ից: Հպեք և պահեք գործիքագոտու «Ցուցադրել ներդիրները» կոճակը՝ այլ ընտրանքներ տեսնելու համար: Գործիքագոտին սովորաբար գտնվում է էկրանի վերևի կամ ներքևի հատվածում:</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_id.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_id.xtb index 6ecdd6a..180df607 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_id.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_id.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome tidak memiliki akses ke foto atau video Anda. Izinkan akses di iOS Settings > Privacy > Photos.</translation> <translation id="4099578267706723511">Bantu penyempurnaan Chrome dengan mengirimkan statistik penggunaan dan laporan error ke Google.</translation> <translation id="417201473131094001">Tidak didukung di Chrome Canary</translation> -<translation id="4214277427269650960">Login ke situs ini dan Chrome. Anda dapat mengaktifkan sinkronisasi nanti.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> menggunakan Chrome dan meninggalkan bookmark, sandi, serta setelan lainnya di perangkat ini.</translation> <translation id="424864128008805179">Logout dari Chrome?</translation> <translation id="4249068189593983585">Tips Chrome. Untuk opsi tab lainnya, sentuh lama tombol Tampilkan Tab di toolbar, yang terdapat di bagian bawah atau atas layar.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_is.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_is.xtb index e0be4ce..37c6e50 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_is.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_is.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome hefur ekki aðgang að myndunum þínum eða myndskeiðum. Veittu aðgang í iOS Settings > Privacy > Photos.</translation> <translation id="4099578267706723511">Hjálpaðu til við að bæta Google Chrome með því að senda talnagögn um notkun og tilkynningar um hrun til Google.</translation> <translation id="417201473131094001">Ekki stutt í Chrome Canary</translation> -<translation id="4214277427269650960">Skráðu þig inn á þetta vefsvæði og Chrome. Þú getur kveikt á samstillingu síðar.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> notaði Chrome og skildi eftir bókamerki, aðgangsorð og aðrar stillingar í þessu tæki.</translation> <translation id="424864128008805179">Viltu skrá þig út úr Chrome?</translation> <translation id="4249068189593983585">Ábending um Chrome. Til að sjá fleiri valkosti fyrir flipa skaltu halda hnappinum „Sýna flipa“ inni á tækjastikunni, sem er neðst eða efst á skjánum.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_it.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_it.xtb index dabf56d7..d0f2a0e6 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_it.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_it.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome non ha accesso alle tue foto o ai tuoi video. Attiva l'accesso in Impostazioni iOS > Privacy > Foto.</translation> <translation id="4099578267706723511">Aiutaci a migliorare Chrome inviando a Google statistiche sull'utilizzo e report sugli arresti anomali.</translation> <translation id="417201473131094001">Non supportata su Chrome Canary</translation> -<translation id="4214277427269650960">Accedi a questo sito e a Chrome. Puoi attivare la sincronizzazione in un secondo momento.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> stava usando Chrome e ha lasciato preferiti, password e altre impostazioni su questo dispositivo.</translation> <translation id="424864128008805179">Uscire da Chrome?</translation> <translation id="4249068189593983585">Suggerimento per Chrome. Per vedere più opzioni sulla scheda, tocca e tieni premuto il pulsante Mostra schede della barra degli strumenti, che si trova nella parte inferiore o superiore della schermata.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_iw.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_iw.xtb index eb052f9..84296e1 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_iw.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_iw.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">ל-Google Chrome אין גישה לתמונות או לסרטונים שלך. אפשר גישה ב'הגדרות iOS' > 'פרטיות' > 'תמונות'.</translation> <translation id="4099578267706723511">אם שולחים אלינו נתוני שימוש ודוחות קריסה, עוזרים לשפר את Chrome.</translation> <translation id="417201473131094001">אין תמיכה ב-Chrome Canary</translation> -<translation id="4214277427269650960">עליך להיכנס לאתר הזה ול-Chrome. ניתן להפעיל את הסנכרון מאוחר יותר.</translation> <translation id="4233521129555661685">במכשיר הזה נעשה שימוש ב‑Chrome על ידי <ph name="USER_EMAIL1" /> ונשארו סימניות, סיסמאות והגדרות נוספות.</translation> <translation id="424864128008805179">האם לצאת מ-Chrome?</translation> <translation id="4249068189593983585">טיפ למשתמשי Chrome: כדי לקבל אפשרויות נוספות של כרטיסיות, יש ללחוץ לחיצה ארוכה על הלחצן 'הצגת כרטיסיות' בסרגל הכלים, שנמצא בחלק התחתון או העליון של המסך.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ja.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ja.xtb index 0985c537..acaf76a 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ja.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ja.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome で写真または動画にアクセスできません。iOS の [設定] > [プライバシー] > [写真] でアクセスを有効にしてください。</translation> <translation id="4099578267706723511">使用統計情報と障害レポートを Google に送信して、Chrome の品質向上にご協力ください。</translation> <translation id="417201473131094001">Chrome Canary ではサポートされていません</translation> -<translation id="4214277427269650960">このサイトと Chrome にログインしてください。同期は後でオンにできます。</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> は Chrome を使用しており、ブックマークやパスワードなどの設定がこのデバイスに残っています。</translation> <translation id="424864128008805179">Chrome からログアウトしますか?</translation> <translation id="4249068189593983585">Chrome の使い方のヒント: タブのオプションをさらに表示するには、画面の下部または上部のツールバーにある [タブを表示] を長押しします。</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ka.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ka.xtb index c40085d5..688dc8e 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ka.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ka.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome-ს არ აქვს წვდომა თქვენს ფოტოებსა და ვიდეოებზე. ჩართეთ წვდომა iOS-ის მენიუში: პარამეტრები > კონფიდენციალურობა > ფოტოები.</translation> <translation id="4099578267706723511">დაგვეხმარეთ Chrome-ის გაუმჯობესებაში, გამოყენების სტატისტიკისა და შეცდომების შესახებ მოხსენებების Google-ში გაგზავნით.</translation> <translation id="417201473131094001">მხარდაუჭერელია Chrome Canary-ში</translation> -<translation id="4214277427269650960">შედით ამ საიტსა და Chrome-ში. სინქრონიზაციის ჩართვა მოგვიანებით შეგიძლიათ.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> იყენებდა Chrome-ს და ამ მოწყობილობაზე დატოვა სანიშნეები, პაროლები და სხვა პარამეტრები.</translation> <translation id="424864128008805179">გსურთ Chrome-იდან გამოსვლა?</translation> <translation id="4249068189593983585">Chrome მინიშნება: ჩანართებთან დაკავშირებული სხვა ვარიანტის სანახავად ხანგრძლივად შეეხეთ „ჩანართების ჩვენების“ ღილაკს ხელსაწყოთა ზოლში, რომელიც მდებარეობს ეკრანის ქვედა ან ზედა ნაწილში.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_kk.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_kk.xtb index 65f8dd6..87c7bc34 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_kk.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_kk.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome сурет пен бейнелерге кіре алмайды. "iOS параметрлері > Құпиялылық > Фотосуреттер" арқылы рұқсат беру қажет.</translation> <translation id="4099578267706723511">Пайдалану статистикасы мен жаңылыс туралы есептерді Google компаниясына жіберу арқылы Chrome қызметін жақсартуға көмектесіңіз.</translation> <translation id="417201473131094001">Chrome Canary-де қолдау көрсетілмейді.</translation> -<translation id="4214277427269650960">Осы сайтқа және Chrome-ға кіріңіз. Синхрондауды кейінірек қосуға болады.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> Chrome браузерін қолданған еді, сондықтан осы құрылғыда оның бетбелгілері, құпия сөздері және басқа да параметрлері қалып қойды.</translation> <translation id="424864128008805179">Chrome жүйесінен шығасыз ба?</translation> <translation id="4249068189593983585">Chrome кеңесі. Қосымша қойынды опциялары үшін экранның төменгі не жоғарғы жағындағы құралдар тақтасындағы "Қойындыларды көрсету" түймесін басып тұрыңыз.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_km.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_km.xtb index 0a5a981..727af6a 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_km.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_km.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome មិនមានលទ្ធភាពចូលប្រើរូបថត និងវីដេអូរបស់អ្នកទេ។ បើកដំណើរការចូលប្រើនៅក្នុងការកំណត់ iOS > ភាពឯកជន > រូបថត។</translation> <translation id="4099578267706723511">ជួយធ្វើឲ្យ Chrome ប្រសើរជាងមុនដោយផ្ញើស្ថិតិប្រើប្រាស់ និងរបាយការណ៍ការគាំងទៅ Google។</translation> <translation id="417201473131094001">មិនអាចប្រើនៅលើ Chrome Canary បានទេ</translation> -<translation id="4214277427269650960">ចូលគេហទំព័រនេះ និង Chrome។ អ្នកអាចបើកសមកាលកម្មនៅពេលក្រោយ។</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> កំពុងប្រើ Chrome និងទុកចំណាំ ពាក្យសម្ងាត់ និងការកំណត់ផ្សេងទៀតនៅលើឧបករណ៍នេះ។</translation> <translation id="424864128008805179">ចង់ចេញពី Chrome មែនទេ?</translation> <translation id="4249068189593983585">គន្លឹះប្រើប្រាស់ Chrome ។ ដើម្បីទទួលបានជម្រើសផ្ទាំងច្រើនទៀត សូមចុចប៊ូតុង "បង្ហាញផ្ទាំង" ឱ្យជាប់នៅក្នុងរបារឧបករណ៍ ដែលស្ថិតនៅផ្នែកខាងក្រោម ឬខាងលើអេក្រង់របស់អ្នក។</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_kn.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_kn.xtb index 525f8380..feb6517 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_kn.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_kn.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">ನಿಮ್ಮ ಫೋಟೋಗಳು ಅಥವಾ ವೀಡಿಯೊಗಳಿಗೆ Google Chrome ಪ್ರವೇಶವನ್ನು ಹೊಂದಿಲ್ಲ. iOS ಸೆಟ್ಟಿಂಗ್ಗಳು > ಗೌಪ್ಯತೆ > ಫೋಟೋಗಳಲ್ಲಿ ಪ್ರವೇಶವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ.</translation> <translation id="4099578267706723511">Google ಗೆ ಬಳಕೆಯ ಅಂಕಿಅಂಶಗಳು ಮತ್ತು ಕ್ರ್ಯಾಶ್ ವರದಿಗಳನ್ನು ಕಳುಹಿಸುವ ಮೂಲಕ Chrome ಅನ್ನು ಉತ್ತಮಗೊಳಿಸಲು ಸಹಾಯ ಮಾಡಿ.</translation> <translation id="417201473131094001">Chrome Canary ನಲ್ಲಿ ಬೆಂಬಲಿಸುವುದಿಲ್ಲ</translation> -<translation id="4214277427269650960">ಈ ಸೈಟ್ಗೆ ಮತ್ತು Chrome ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ. ನಂತರ ನೀವು ಸಿಂಕ್ ಆನ್ ಮಾಡಬಹುದು.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" />, Chrome ಅನ್ನು ಬಳಸುತ್ತಿದ್ದರು ಮತ್ತು ಈ ಸಾಧನದಲ್ಲಿ ಬುಕ್ಮಾರ್ಕ್ಗಳು, ಪಾಸ್ವರ್ಡ್ಗಳು ಮತ್ತು ಇತರ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಉಳಿಸಿದ್ದಾರೆ.</translation> <translation id="424864128008805179">Chrome ನಿಂದ ಸೈನ್ ಔಟ್ ಮಾಡುವುದೇ?</translation> <translation id="4249068189593983585">Chrome ಸಲಹೆ. ಇನ್ನಷ್ಟು ಟ್ಯಾಬ್ ಆಯ್ಕೆಗಳಿಗಾಗಿ, ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ ಕೆಳಭಾಗ ಅಥವಾ ಮೇಲ್ಭಾಗದಲ್ಲಿರುವ ಪರಿಕರ ಪಟ್ಟಿಯಲ್ಲಿರುವ "ಟ್ಯಾಬ್ಗಳನ್ನು ತೋರಿಸಿ" ಬಟನ್ ಅನ್ನು ಸ್ಪರ್ಶಿಸಿ ಮತ್ತು ಹೋಲ್ಡ್ ಮಾಡಿ.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ko.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ko.xtb index a0204aeb..236d00aa3 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ko.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ko.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Chrome이 사진 또는 동영상에 액세스할 수 없습니다. 'iOS 설정 > 개인정보 보호 > 사진'에서 액세스를 허용하세요.</translation> <translation id="4099578267706723511">사용 통계와 비정상 종료 보고서를 Google로 전송하여 Chrome을 개선하는 데 동참하세요.</translation> <translation id="417201473131094001">Chrome Canary에서 지원되지 않습니다.</translation> -<translation id="4214277427269650960">이 사이트 및 Chrome에 로그인하세요. 나중에 동기화를 사용 설정할 수 있습니다.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> 계정이 Chrome을 사용했으며 이 기기에 북마크, 비밀번호, 기타 설정을 남겼습니다</translation> <translation id="424864128008805179">Chrome에서 로그아웃하시겠습니까?</translation> <translation id="4249068189593983585">Chrome 도움말. 더 많은 탭 옵션을 보려면 화면 하단이나 상단에 있는 툴바에서 탭 표시 버튼을 길게 터치하세요.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ky.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ky.xtb index 2cd06d74..6f47ceb 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ky.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ky.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome сүрөттөрүңүздү же видеолоруңузду көрө албайт. Көрүү үчүн iOS Жөндөөлөрү > Купуялык > Сүрөттөргө өтүңүз.</translation> <translation id="4099578267706723511">Google'га колдонуу статистикасын жөнөтүп, ката жөнүндө кабарлап, Chrome өркүндөтүлүшүнө жардам бериңиз.</translation> <translation id="417201473131094001">Chrome Canary'де колдоого алынбайт</translation> -<translation id="4214277427269650960">Бул сайтка жана Chrome'го кириңиз. Шайкештирүүнү кийинчерээк күйгүзө аласыз.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> бул түзмөктө Chrome'ду колдонуп, кыстармаларды, сырсөздөрдү жана башка жөндөөлөрдү өчүрбөй калды.</translation> <translation id="424864128008805179">Chrome каттоо эсебинен чыгасызбы?</translation> <translation id="4249068189593983585">Chrome'дон кеңеш. Өтмөктөгү башка параметрлерди көрүү үчүн Өтмөктөрдү көрсөтүү баскычын коё бербей басып туруңуз. Баскыч экраныңыздын төмөн же жогору жагындагы куралдар тилкесинде жайгашкан.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_lo.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_lo.xtb index aa41c21f..74520d6 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_lo.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_lo.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome ບໍ່ມີການເຂົ້າເຖິງຮູບຖ່າຍ ຫຼື ວິດີໂອຂອງທ່ານ. ເປີດໃຊ້ການເຂົ້າເຖິງຢູ່ໃນການຕັ້ງຄ່າ iOS > Privacy > Photos.</translation> <translation id="4099578267706723511">ຊ່ວຍເຮັດໃຫ້ Chrome ດີກ່ວາໂດຍການສົ່ງສະຖິຕິການໃຊ້ ແລະລາຍງານການຂັດຂ້ອງຫາ Google.</translation> <translation id="417201473131094001">ບໍ່ຮອງຮັບໃນ Chrome Canary</translation> -<translation id="4214277427269650960">ເຂົ້າສູ່ລະບົບຫາເວັບໄຊນີ້ ແລະ Chrome. ທ່ານສາມາດເປີດການຊິ້ງຂໍ້ມູນໃນພາຍຫຼັງໄດ້.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> ກຳລັງໃຊ້ Chrome ຢູ່ ແລະ ເປີດບຸກມາກ, ລະຫັດຜ່ານ ແລະ ການຕັ້ງຄ່າອື່ນໆປະໄວ້ຢູ່ອຸປະກອນນີ້.</translation> <translation id="424864128008805179">ອອກຈາກລະບົບ Chrome ບໍ?</translation> <translation id="4249068189593983585">ເຄັດລັບກ່ຽວກັບ Chrome. ສຳລັບຕົວເລືອກແຖບເພີ່ມເຕີມ, ກະລຸນາແຕະປຸ່ມສະແດງແຖບໃນແຖບເຄື່ອງມືຄ້າງໄວ້ ເຊິ່ງຢູ່ລຸ່ມສຸດ ຫຼື ເທິງສຸດຂອງໜ້າຈໍຂອງທ່ານ.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_lt.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_lt.xtb index 653500d..72d4718 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_lt.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_lt.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">„Google Chrome“ nepasiekia nuotraukų ar vaizdo įr. Įgal. prieigą apsil. „iOS“ nustatymai“ > „Privatumas“ > „Nuotraukos“.</translation> <translation id="4099578267706723511">Padėkite tobulinti „Chrome“ siųsdami „Google“ naudojimo statistiką ir strigčių ataskaitas.</translation> <translation id="417201473131094001">Nepalaikoma versijoje „Chrome Canary“</translation> -<translation id="4214277427269650960">Prisijunkite prie šios svetainės ir „Chrome“. Sinchronizavimą galėsite įjungti vėliau.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> naudojo „Chromium“ ir paliko žymes, slaptažodžius bei kitus nustatymus šiame įrenginyje.</translation> <translation id="424864128008805179">Atsijungti nuo „Chrome“?</translation> <translation id="4249068189593983585">„Chrome“ patarimas. Jei reikia daugiau skirtukų parinkčių, palieskite ir palaikykite mygtuką „Rodyti skirtukus“ įrankių juostoje, kuri yra ekrano apačioje arba viršuje.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_lv.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_lv.xtb index 0205d93a..d97637d 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_lv.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_lv.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome nevar piekļūt jūsu fotoattēliem vai videoklipiem. Iespējojiet piekļuvi: iOS Settings > Privacy > Photos.</translation> <translation id="4099578267706723511">Uzlabojiet pārlūku Chrome, uzņēmumam Google sūtot lietojuma statistiku un avāriju pārskatus.</translation> <translation id="417201473131094001">Netiek atbalstīta pārlūkā Chrome Canary.</translation> -<translation id="4214277427269650960">Pierakstieties šajā vietnē un pārlūkā Chrome. Sinhronizāciju varat ieslēgt vēlāk.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> izmantoja pārlūku Chrome un neizdzēsa grāmatzīmes, paroles un citus iestatījumus šajā ierīcē.</translation> <translation id="424864128008805179">Vai izrakstīties no pārlūka Chrome?</translation> <translation id="4249068189593983585">Chrome padoms. Lai iegūtu vairāk ciļņu iespēju, rīkjoslā, kas atrodas ekrāna apakšdaļā vai augšdaļā, pieskarieties pogai Rādīt cilnes un turiet to.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_mk.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_mk.xtb index b70ae23..d0009968 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_mk.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_mk.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome нема пристап до фотографиите или видеата. Овозможете пристап во Поставки на iOS > Приватност > Фотографии.</translation> <translation id="4099578267706723511">Помогнете да го подобриме Google Chrome со автоматско испраќање статистика за користење и извештаи за падови до Google.</translation> <translation id="417201473131094001">Не е поддржана на Chrome Canary</translation> -<translation id="4214277427269650960">Најавете се на сајтов и на Chrome. Синхронизацијата може да ја вклучите подоцна.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> користеше Chrome и остави обележувачи, лозинки и други поставки на уредов.</translation> <translation id="424864128008805179">Ќе се одјавите од Chrome?</translation> <translation id="4249068189593983585">Совет за Chrome: за повеќе опции за картичките, допрете го и задржете го копчето „Прикажи ги картичките“ во алатникот, што се наоѓа најгоре или најдолу на екранот.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ml.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ml.xtb index bb67169..d4d94ca 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ml.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ml.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome-ന് നിങ്ങളുടെ ഫോട്ടോകളിലേക്കോ വീഡിയോകളിലേക്കോ ആക്സസ് ഇല്ല. iOS ക്രമീകരണം > സ്വകാര്യത > ഫോട്ടോകൾ എന്നതിൽ ആക്സസ് പ്രവർത്തനക്ഷമമാക്കുക.</translation> <translation id="4099578267706723511">Google-ലേക്ക് ഉപയോഗ വിവരക്കണക്കുകളും ക്രാഷ് റിപ്പോർട്ടുകളും അയയ്ക്കുന്നതിലൂടെ Chrome-നെ മികച്ചതാക്കാൻ സഹായിക്കുക.</translation> <translation id="417201473131094001">Chrome Canary-യിൽ പിന്തുണയില്ല</translation> -<translation id="4214277427269650960">ഈ സൈറ്റിലും Chrome-ലും സൈൻ ഇൻ ചെയ്യുക. സമന്വയിപ്പിക്കൽ പിന്നീടും ഓണാക്കാനാകും.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> ആണ് Chrome ഉപയോഗിച്ചുകൊണ്ടിരുന്നത്, ഈ വ്യക്തിയുടെ ബുക്ക്മാർക്കുകളും പാസ്വേഡുകളും മറ്റ് ക്രമീകരണവും ഈ ഉപകരണത്തിലുണ്ട്.</translation> <translation id="424864128008805179">Chrome-ൽ നിന്ന് സൈൻ ഔട്ട് ചെയ്യണോ?</translation> <translation id="4249068189593983585">Chrome നുറുങ്ങുകൾ. കൂടുതൽ ടാബ് ഓപ്ഷനുകൾക്കായി, നിങ്ങളുടെ സ്ക്രീനിന്റെ താഴെയോ മുകളിലോ ഉള്ള, ടൂൾബാറിലെ 'ടാബുകൾ കാണിക്കുക' ബട്ടൺ സ്പർശിച്ച് പിടിക്കുക.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_mn.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_mn.xtb index a2f9031..9e7c50b 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_mn.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_mn.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome-д таны зураг, видеонд нэвтрэх зөвшөөрөл байхгүй байна. Та iOS Тохиргоо > Нууцлал > Зураг хэсэгт хандалтыг идэвхжүүлээрэй.</translation> <translation id="4099578267706723511">Хэрэглээний статистик мэдээ болон алдаа ослын тайланг автоматаар Google рүү илгээх замаар Google Chrome-ийг улам сайжруулахад тусална уу.</translation> <translation id="417201473131094001">Chrome Канар дээр дэмжихгүй</translation> -<translation id="4214277427269650960">Энэ сайт болон Chrome-д нэвтэрнэ үү. Та синк хийхийг дараа асааж болно.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> энэ төхөөрөмж дээр Chrome-г ашиглаж байсан бөгөөд хавчуурга, нууц үг болон бусад тохиргоог үлдээсэн.</translation> <translation id="424864128008805179">Chrome-с гарах уу?</translation> <translation id="4249068189593983585">Chrome-н зөвлөгөө. Табын бусад сонголтыг харахын тулд дэлгэцийнхээ доод эсвэл дээд хэсэгт байрлах самбараас Табыг харуулах товчлуурыг удаан дарна уу.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_mr.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_mr.xtb index 0dfd2f9..b0ca80f97 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_mr.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_mr.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome ला तुमच्या फोटो आणि व्हिडिओ ॲक्सेस नाही. iOS सेटिंग्ज > गोपनीयता > फोटो ॲक्सेस सक्षम करा.</translation> <translation id="4099578267706723511">वापरविषयक आकडेवारी आणि क्रॅश अहवाल Google कडे पाठवून Chrome अधिक चांगले करण्यास मदत करा.</translation> <translation id="417201473131094001">Chrome कॅनरी वर सपोर्ट नाही</translation> -<translation id="4214277427269650960">ही साइट आणि Chrome मध्ये साइन इन करा. तुम्ही सिंक करणे नंतर सुरू करू शकता.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> हा Chrome वापरत होता आणि त्याने या डिव्हाइसवर बुकमार्क, पासवर्ड आणि इतर सेटिंग्ज ठेवली आहेत.</translation> <translation id="424864128008805179">Chrome मधून साइन आउट करायचे?</translation> <translation id="4249068189593983585">Chrome टीप. आणखी टॅब पर्यायांसाठी, तुमच्या स्क्रीनच्या तळाशी किंवा सर्वात वर असलेल्या टूलबारवरील टॅब दाखवा बटणाला स्पर्श करा आणि धरून ठेवा.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ms.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ms.xtb index f97d4832..c3e9f98 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ms.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ms.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome tidak mempunyai akses ke foto atau video anda. Dayakan akses dalam Tetapan iOS > Privasi > Foto.</translation> <translation id="4099578267706723511">Bantu jadikan Chrome lebih baik dengan menghantar laporan perangkaan penggunaan dan ranap sistem kepada Google.</translation> <translation id="417201473131094001">Tidak disokong pada Chrome Canary</translation> -<translation id="4214277427269650960">Log masuk ke laman ini dan Chrome. Anda boleh menghidupkan penyegerakan kemudian.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> menggunakan Chrome dan membiarkan penanda halaman, kata laluan dan tetapan lain pada peranti ini.</translation> <translation id="424864128008805179">Log keluar daripada Chrome?</translation> <translation id="4249068189593983585">Petua Chrome. Untuk melihat lebih banyak pilihan tab, sentuh & tahan butang Tunjukkan Tab dalam bar alat, yang terletak di bahagian bawah atau atas skrin anda.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_my.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_my.xtb index cbfbf2b..d0153c2 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_my.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_my.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome သည်သင့်ဓာတ်ပုံများနှင့် ဗီဒီယိုများကို အသုံးပြုခွင့်မရှိပါ။ အသုံးပြုခွင့်ကို iOS ဆက်တင်များ > ကိုယ်ရေးအချက်အလက်လုံခြုံမှု > ဓာတ်ပုံများ တွင်သွားရောက်ဖွင့်နိုင်ပါသည်။</translation> <translation id="4099578267706723511">အသုံးပြုမှု စာရင်းအင်းများ နှင့် ပျက်စီးမှု အစီရင်ခံစာများကို Google သို့ အလိုအလျောက် ပို့ပေးခြင်းဖြင့် Chrome ကို ပိုကောင်းမွန်အောင် ကူညီပေးပါ။</translation> <translation id="417201473131094001">Chrome Canary တွင် ပံ့ပိုးမထားပါ</translation> -<translation id="4214277427269650960">ဤဝဘ်ဆိုက်နှင့် Chrome သို့ လက်မှတ်ထိုးဝင်ပါ။ စင့်ခ်လုပ်ခြင်းကို နောင်တွင် ဖွင့်နိုင်သည်။</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> က Chrome အသုံးပြုလျက်ရှိပြီး ဤစက်တွင် လိပ်စာ၊ စကားဝှက်နှင့် အခြားဆက်တင်များ ချန်ထားသည်။</translation> <translation id="424864128008805179">Chrome မှထွက်မလား။</translation> <translation id="4249068189593983585">Chrome အကြံပြုချက်။ နောက်ထပ် တဘ်ရွေးချယ်စရာများအတွက် ဖန်သားပြင်၏ အောက်ခြေ သို့မဟုတ် ထိပ်ဘက်ရှိ ကိရိယာဘားအတွင်း 'တဘ်ကို ပြရန်' ခလုတ်ကို တို့၍ဖိထားပါ။</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ne.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ne.xtb index 4c09cd1..3f689701 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ne.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ne.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome सँग तपाईंको तस्बिर वा भिडियोहरूमा पहुँच छैन। iOS सेटिङहरू > गोपनीयता > तस्बिरहरूमा पहुँच अन गर्नुहोस्।</translation> <translation id="4099578267706723511">Google मा प्रयोग तथ्याङ्क र क्रयास रिपोर्टहरू पठाएर Chrome लाई राम्रो बनाउन सहयोग गर्नुहोस्!</translation> <translation id="417201473131094001">Chrome क्यानेरीमा प्रयोग गर्न मिल्दैन</translation> -<translation id="4214277427269650960">यो साइट र Chrome मा साइन इन गर्नुहोस्। तपाईं सिंक गर्ने सुविधा पछि अन गर्न सक्नुहुन्छ।</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> ले Chrome प्रयोग गर्नुभएको थियो तर यो डिभाइसबाट सेभ गरिएका बुकमार्क, पासवर्ड र अन्य सेटिङ मेटाउनुभएको थिएन।</translation> <translation id="424864128008805179">Chrome बाट साइन आउट गर्ने हो?</translation> <translation id="4249068189593983585">Chrome सम्बन्धी सुझाव। ट्यापसम्बन्धी थप विकल्पहरू हेर्न, तपाईंको स्क्रिनको सिरान वा पुछारमा रहेको उपकरणपट्टीमा ट्याबहरू देखाउनुहोस् नामक बटनमा टच एण्ड होल्ड गर्नुहोस्।</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_nl.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_nl.xtb index 716c01e9..f73b848 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_nl.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_nl.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome heeft geen toegang tot je foto's of video's. Geef in iOS toegang via Instellingen > Privacy > Foto's.</translation> <translation id="4099578267706723511">Verzend automatisch gebruiksstatistieken en crashmeldingen naar Google.</translation> <translation id="417201473131094001">Niet ondersteund in Chrome Canary</translation> -<translation id="4214277427269650960">Log in bij deze site en Chrome. Je kunt synchronisatie later aanzetten.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> heeft Chrome gebruikt en heeft bookmarks, wachtwoorden en andere instellingen op dit apparaat laten staan.</translation> <translation id="424864128008805179">Uitloggen bij Chrome?</translation> <translation id="4249068189593983585">Chrome-tip. Voor meer tabbladopties tik je in de werkbalk onder- of bovenaan het scherm op de knop Tabbladen bekijken en houd je deze vast.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_no.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_no.xtb index 38890e7..8617b37 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_no.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_no.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome har ikke tilgang til bildene eller videoene dine. Slå på tilgangen i iOS-innstillingene > Personvern > Bilder.</translation> <translation id="4099578267706723511">Gjør Chrome bedre ved å sende bruksstatistikk og programstopprapporter til Google.</translation> <translation id="417201473131094001">Støttes ikke i Chrome Canary</translation> -<translation id="4214277427269650960">Logg på dette nettstedet og Chrome. Du kan slå på synkronisering senere.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> har brukt Chrome og etterlatt seg bokmerker, passord og andre innstillinger på denne enheten.</translation> <translation id="424864128008805179">Vil du logge av Chrome?</translation> <translation id="4249068189593983585">Chrome-tips. For flere fanealternativer, trykk og hold inne Vis faner-knappen på verktøylinjen, som du finner nederst eller øverst på skjermen.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_or.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_or.xtb index 0dc6c8ed..c48b773 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_or.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_or.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome ପାଖରେ ଆପଣଙ୍କର ଫଟୋ ଏବଂ ଭିଡିଓଗୁଡ଼ିକ ପାଇଁ ଆକ୍ସେସ୍ ନାହିଁ। 'iOS ସେଟିଂସ୍ > ଗୋପନୀୟତା > ଫଟୋସ୍'ରେ ଆକ୍ସେସ୍ ସକ୍ଷମ କରନ୍ତୁ।</translation> <translation id="4099578267706723511">Googleକୁ ବ୍ୟବହାରର ପରିସଂଖ୍ୟାନ ଏବଂ କ୍ରାଶ୍ ରିପୋର୍ଟ ପଠାଇ, Chromeକୁ ଉନ୍ନତ କରିବାରେ ସାହାଯ୍ୟ କରନ୍ତୁ।</translation> <translation id="417201473131094001">Chrome Canaryରେ ସମର୍ଥିତ ନୁହେଁ</translation> -<translation id="4214277427269650960">ଏହି ସାଇଟ ଏବଂ Chromeରେ ସାଇନ ଇନ କରନ୍ତୁ। ଆପଣ ପରେ ସିଙ୍କ ଚାଲୁ କରିପାରିବେ।</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> ଏହି ଡିଭାଇସରେ Chrome ବ୍ୟବହାର କରି ବୁକମାର୍କ, ପାସୱାର୍ଡ ଏବଂ ଅନ୍ୟ ସେଟିଂସ ଛାଡ଼ିଛନ୍ତି।</translation> <translation id="424864128008805179">Chromeରୁ ସାଇନ୍ ଆଉଟ୍ କରିବେ?</translation> <translation id="4249068189593983585">Chrome ଟିପ୍। ଅଧିକ ଟାବ୍ ବିକଳ୍ପ ପାଇଁ, ଟୁଲ୍ବାର୍ରେ ଥିବା 'ଟାବ୍ଗୁଡ଼ିକ ଦେଖାନ୍ତୁ' ବଟନ୍କୁ ସ୍ପର୍ଶ କରି ଧରି ରଖନ୍ତୁ ଯାହା ଆପଣଙ୍କ ସ୍କ୍ରିନ୍ର ନିମ୍ନରେ କିମ୍ବା ଶୀର୍ଷରେ ରହିଥାଏ।</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_pa.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_pa.xtb index 3ab5fc7f..0059865 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_pa.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_pa.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome ਦੀ ਤੁਹਾਡੀਆਂ ਫ਼ੋਟੋਆਂ ਜਾਂ ਵੀਡੀਓ ਤੱਕ ਪਹੁੰਚ ਨਹੀਂ ਹੈ। iOS ਸੈਟਿੰਗਾਂ > ਪਰਦੇਦਾਰੀ > ਫ਼ੋਟੋਆਂ ਵਿੱਚ ਪਹੁੰਚ ਨੂੰ ਚਾਲੂ ਕਰੋ।</translation> <translation id="4099578267706723511">Google ਨੂੰ ਵਰਤੋਂ ਅੰਕੜੇ ਅਤੇ ਕ੍ਰੈਸ਼ ਰਿਪੋਰਟਾਂ ਭੇਜ ਕੇ Chrome ਨੂੰ ਬਿਹਤਰ ਬਣਾਉਣ ਵਿੱਚ ਮਦਦ ਕਰੋ।</translation> <translation id="417201473131094001">Chrome Canary 'ਤੇ ਸਮਰਥਿਤ ਨਹੀਂ</translation> -<translation id="4214277427269650960">ਇਸ ਸਾਈਟ ਅਤੇ Chrome ਵਿੱਚ ਸਾਈਨ-ਇਨ ਕਰੋ। ਤੁਸੀਂ ਸਿੰਕ ਨੂੰ ਬਾਅਦ ਵਿੱਚ ਚਾਲੂ ਕਰ ਸਕਦੇ ਹੋ।</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> ਵੱਲੋਂ Chrome ਦੀ ਵਰਤੋਂ ਕੀਤੀ ਗਈ ਸੀ ਅਤੇ ਇਸ ਡੀਵਾਈਸ 'ਤੇ ਬੁੱਕਮਾਰਕ, ਪਾਸਵਰਡ ਅਤੇ ਹੋਰ ਸੈਟਿੰਗਾਂ ਨੂੰ ਆਯਾਤ ਨਹੀਂ ਕੀਤਾ ਗਿਆ।</translation> <translation id="424864128008805179">ਕੀ Chrome ਤੋਂ ਸਾਈਨ-ਆਊਟ ਹੋਣਾ ਹੈ?</translation> <translation id="4249068189593983585">Chrome ਨੁਕਤਾ। ਹੋਰ ਟੈਬ ਵਿਕਲਪਾਂ ਲਈ, ਟੂਲਬਾਰ ਵਿੱਚ 'ਟੈਬਾਂ ਦਿਖਾਓ' ਬਟਨ ਨੂੰ ਸਪਰਸ਼ ਕਰਕੇ ਰੱਖੋ, ਜੋ ਤੁਹਾਡੀ ਸਕ੍ਰੀਨ ਦੇ ਹੇਠਾਂ ਜਾਂ ਉੱਪਰ ਹੈ।</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_pl.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_pl.xtb index 0b97597..2c4e905 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_pl.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_pl.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome nie ma dostępu do Twoich zdjęć ani filmów. Aby włączyć dostęp w iOS, wybierz Ustawienia > Prywatność > Zdjęcia.</translation> <translation id="4099578267706723511">Pomóż ulepszyć Chrome, wysyłając do Google statystyki użytkowania i raporty o awariach.</translation> <translation id="417201473131094001">Nieobsługiwane w Chrome Canary</translation> -<translation id="4214277427269650960">Zaloguj się w na tej stronie i w Chrome. Synchronizację możesz włączyć później.</translation> <translation id="4233521129555661685">Użytkownik <ph name="USER_EMAIL1" /> korzystał z Chrome i zapisał na tym urządzeniu swoje zakładki, hasła i inne ustawienia.</translation> <translation id="424864128008805179">Wylogować z Chrome?</translation> <translation id="4249068189593983585">Wskazówka dla użytkowników Chrome. Aby zobaczyć więcej opcji kart, naciśnij i przytrzymaj przycisk Pokaż karty na pasku narzędzi, który znajduje się na dole lub na górze ekranu.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_pt-BR.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_pt-BR.xtb index a368160..22eac467 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_pt-BR.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_pt-BR.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">O Google Chrome não têm acesso às suas fotos ou vídeos. Permita o acesso em "Configurações do iOS" > "Privacidade" > "Fotos".</translation> <translation id="4099578267706723511">Ajude a melhorar o Chrome. Envie estatísticas de uso e relatórios de falhas ao Google.</translation> <translation id="417201473131094001">Indisponível no Chrome Canary</translation> -<translation id="4214277427269650960">Faça login neste site e no Chrome. É possível ativar a sincronização mais tarde.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> estava usando o Chrome e deixou favoritos, senhas e outras configurações neste dispositivo.</translation> <translation id="424864128008805179">Sair do Google Chrome?</translation> <translation id="4249068189593983585">Dica do Chrome. Para ver mais opções de guia, toque no botão "Mostrar guias" na barra de ferramentas localizada na parte superior ou inferior da tela e mantenha-o pressionado.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_pt-PT.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_pt-PT.xtb index 2556f62..b66fcbc 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_pt-PT.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_pt-PT.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">O Google Chrome não tem acesso aos seus vídeos ou fotos. Ative o acesso nas Definições do iOS > Privacidade > Fotos.</translation> <translation id="4099578267706723511">Ajude a melhorar o Chrome ao enviar estatísticas de utilização e relatórios de falhas para a Google.</translation> <translation id="417201473131094001">Opção não suportada no Chrome Canary.</translation> -<translation id="4214277427269650960">Inicie sessão neste site e no Chrome. Pode ativar a sincronização mais tarde.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> estava a utilizar o Chrome e deixou marcadores, palavras-passe e outras definições neste dispositivo.</translation> <translation id="424864128008805179">Pretende terminar sessão no Chrome?</translation> <translation id="4249068189593983585">Sugestão para o Chrome: para obter mais opções de separadores, toque sem soltar no botão Mostrar separadores na barra de ferramentas, que se encontra na parte superior ou inferior do ecrã.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ro.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ro.xtb index b74a27a..be72cfd 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ro.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ro.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome nu are acces la fotografii și videoclipuri. Activează accesul din Setări iOS > Confidențialitate > Fotografii.</translation> <translation id="4099578267706723511">Contribuie la îmbunătățirea Chrome trimițând statistici de utilizare și rapoarte de blocare la Google.</translation> <translation id="417201473131094001">Nu se acceptă pe Chrome Canary</translation> -<translation id="4214277427269650960">Conectează-te la acest site și la Chrome. Poți activa sincronizarea mai târziu.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> folosea Chrome și marcajele, parolele și alte setări ale sale au rămas pe acest dispozitiv.</translation> <translation id="424864128008805179">Te deconectezi de la Chrome?</translation> <translation id="4249068189593983585">Sfat pentru Chrome: pentru mai multe opțiuni de file, atinge lung butonul Afișează filele din bara de instrumente, care se află în partea de sus sau de jos a ecranului.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ru.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ru.xtb index 14068bdc2..0328dab 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ru.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ru.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">У Google Chrome нет доступа к вашим фото и видео. Чтобы предоставить его, нажмите "Настройки > Конфиденциальность > Фотографии".</translation> <translation id="4099578267706723511">Отправлять в Google статистику использования и отчеты о сбоях</translation> <translation id="417201473131094001">Проверка не поддерживается в Chrome Canary</translation> -<translation id="4214277427269650960">Войдите на этот сайт и в Chrome. Синхронизацию можно включить позже.</translation> <translation id="4233521129555661685">Пользователь <ph name="USER_EMAIL1" />, который работал с Chrome на этом устройстве, не удалил свои закладки, пароли и другие настройки</translation> <translation id="424864128008805179">Выйти из Chrome?</translation> <translation id="4249068189593983585">Совет для Chrome. Чтобы открыть список дополнительных действий с вкладками, нажмите и удерживайте кнопку "Показать вкладки" на панели инструментов в нижней или верхней части экрана.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_si.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_si.xtb index b2e0052..2829efa 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_si.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_si.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome හට ඔබේ ඡායාරූප හෝ වීඩියෝවලට ප්රවේශය නැත. iOS සැකසීම් > රහස්යතාව > ඡායාරූප තුළ ප්රවේශය සබල කරන්න.</translation> <translation id="4099578267706723511">Google වෙත භාවිත සංඛ්යාන සහ බිඳවැටීම් වාර්තා යැවීමෙන් Chrome වඩා යහපත් කිරීමට උදවු වන්න.</translation> <translation id="417201473131094001">Chrome කැනරි වල සහාය නොදක්වයි</translation> -<translation id="4214277427269650960">මෙම අඩවිය සහ Chrome වෙත පුරන්න. ඔබට පසුව සමමුහුර්තය ක්රියාත්මක කළ හැකිය.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> Chrome භාවිත කරමින් සිටි අතර මෙම උපාංගයේ පිටුසන්, මුරපද සහ වෙනත් සැකසීම් තබා ඇත.</translation> <translation id="424864128008805179">Chrome වෙතින් වරන්න</translation> <translation id="4249068189593983585">Chrome ඉඟිය. තවත් පටිති විකල්ප සඳහා, ඔබගේ තිරයේ පහළ හෝ ඉහළ මෙවලම් තීරුවේ ඇති පටිති පෙන්වන්න බොත්තම ස්පර්ශ කරගෙන සිටින්න.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sk.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sk.xtb index 269e739f..49e1b01 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sk.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sk.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome nemá prístup k vašim fotkám ani videám. Prístup povolíte v časti Nastavenia systému iOS > Súkromie > Fotky.</translation> <translation id="4099578267706723511">Odosielať štatistiky používania a prehľady chýb Googlu a pomáhať tak zlepšovať Chrome</translation> <translation id="417201473131094001">Nepodporované vo verzii Chrome Canary</translation> -<translation id="4214277427269650960">Prihláste sa na tomto webe a v Chrome. Neskôr môžete zapnúť synchronizáciu.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> používal(a) Chrome a zanechal(a) záložky, heslá a ďalšie nastavenia v tomto zariadení.</translation> <translation id="424864128008805179">Odhlásiť sa z Chromu?</translation> <translation id="4249068189593983585">Tip pre Chrome: ďalšie možnosti karty získate pridržaním tlačidla „Zobraziť karty“ na paneli s nástrojmi, ktorý sa nachádza v dolnej alebo hornej časti obrazovky.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sl.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sl.xtb index f96e9e994..eeebb5a 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sl.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sl.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome nima dostopa do fotografij ali videoposnetkov. Omogočite dostop v sistemu iOS: Settings > Privacy > Photos.</translation> <translation id="4099578267706723511">Pomagajte izboljšati Chrome s pošiljanjem statističnih podatkov o uporabi in poročil o zrušitvah Googlu.</translation> <translation id="417201473131094001">Ni podprto v Chromu Canary</translation> -<translation id="4214277427269650960">Prijavite se na tem spletnem mestu in v Chrome. Sinhronizacijo lahko vklopite pozneje.</translation> <translation id="4233521129555661685">Uporabnik <ph name="USER_EMAIL1" /> je uporabljal Chrome in pustil zaznamke, gesla in druge nastavitve v tej napravi.</translation> <translation id="424864128008805179">Se želite odjaviti iz Chroma?</translation> <translation id="4249068189593983585">Nasvet za Chrome. Če želite več možnosti za zavihke, pridržite gumb za prikaz zavihkov v orodni vrstici na dnu ali vrhu zaslona.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sq.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sq.xtb index 40309eb6a..19258d40 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sq.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sq.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome nuk ka qasje te fotografitë apo videot e tua. Aktivizo qasjen te Cilësimet e iOS > Privatësia > Fotografitë.</translation> <translation id="4099578267706723511">Ndihmo në përmirësimin e Chrome duke dërguar automatikisht te Google statistika përdorimi dhe raporte të ndërprerjeve aksidentale.</translation> <translation id="417201473131094001">Nuk mbështetet në Chrome Canary</translation> -<translation id="4214277427269650960">Identifikohu në këtë sajt dhe në Chrome. Mund ta aktivizosh sinkronizmin më vonë.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> po përdorte Chrome dhe ka lënë faqeshënues, fjalëkalime dhe cilësime të tjera në këtë pajisje.</translation> <translation id="424864128008805179">Do të dalësh nga Chrome?</translation> <translation id="4249068189593983585">Këshillë për Chrome. Për më shumë opsione për skedat, shtyp dhe mbaj shtypur butonin "Shfaq skedat" në shiritin e veglave që ndodhet në fund ose në krye të ekranit tënd.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sr-Latn.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sr-Latn.xtb index fa87592..bf240847 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sr-Latn.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sr-Latn.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome ne može da pristupa slikama ili video snimcima. Omogućite pristup u iOS Settings (Podešavanja iOS-a) > Privacy (Privatnost) > Photos (Slike).</translation> <translation id="4099578267706723511">Poboljšajte Chrome slanjem statistike korišćenja i izveštaja o otkazivanju Google-u.</translation> <translation id="417201473131094001">Nije podržano u verziji Chrome Canary</translation> -<translation id="4214277427269650960">Prijavite se na ovaj sajt i u Chrome. Sinhronizaciju možete da uključite kasnije.</translation> <translation id="4233521129555661685">Korisnik <ph name="USER_EMAIL1" /> je koristio Chrome i ostavio obeleživače, lozinke i druga podešavanja na ovom uređaju.</translation> <translation id="424864128008805179">Želite li da se odjavite iz Chrome-a?</translation> <translation id="4249068189593983585">Savet za Chrome. Ako želite više opcija za kartice, dodirnite i zadržite dugme Prikaži kartice na traci s alatkama, koja se nalazi u dnu ili vrhu ekrana.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sr.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sr.xtb index 3b00b2a..b0e0bab 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sr.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sr.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome не може да приступа сликама или видео снимцима. Омогућите приступ у iOS Settings (Подешавања iOS-а) > Privacy (Приватност) > Photos (Слике).</translation> <translation id="4099578267706723511">Побољшајте Chrome слањем статистике коришћења и извештаја о отказивању Google-у.</translation> <translation id="417201473131094001">Није подржано у верзији Chrome Canary</translation> -<translation id="4214277427269650960">Пријавите се на овај сајт и у Chrome. Синхронизацију можете да укључите касније.</translation> <translation id="4233521129555661685">Корисник <ph name="USER_EMAIL1" /> је користио Chrome и оставио обележиваче, лозинке и друга подешавања на овом уређају.</translation> <translation id="424864128008805179">Желите ли да се одјавите из Chrome-а?</translation> <translation id="4249068189593983585">Савет за Chrome. Ако желите више опција за картице, додирните и задржите дугме Прикажи картице на траци с алаткама, која се налази у дну или врху екрана.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sv.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sv.xtb index 2c72feb..6ac24ca4 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sv.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sv.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome har inte åtkomst till dina foton eller videor. Aktivera åtkomst i iOS-inställningar > Integritet > Foton.</translation> <translation id="4099578267706723511">Hjälp till att förbättra Chrome genom att skicka användningsstatistik och felrapporter till Google.</translation> <translation id="417201473131094001">Stöds inte på Chrome Canary</translation> -<translation id="4214277427269650960">Logga in på den här webbplatsen och i Chrome. Du kan aktivera synkronisering senare.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> använde Chrome och har lämnat kvar bokmärken, lösenord och andra inställningar på enheten.</translation> <translation id="424864128008805179">Vill du logga ut från Chrome?</translation> <translation id="4249068189593983585">Tips för Chrome. Tryck länge på Visa flikar i verktygsfältet så visas fler flikalternativ. Du hittar verktygsfältet längst ned eller högst upp på skärmen.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sw.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sw.xtb index dcf3a81..4329436 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sw.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sw.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome haina uwezo wa kufikia picha au video zako. Washa ufikiaji katika Mipangilio ya iOS > Faragha > Picha.</translation> <translation id="4099578267706723511">Saidia kuboresha Chrome kwa kutumia Google takwimu za matumizi na ripoti wakati wowote kivinjari hiki kinapoacha kufanya kazi.</translation> <translation id="417201473131094001">Haitumiki kwenye Chrome Canary (toleo la jaribio)</translation> -<translation id="4214277427269650960">Ingia katika akaunti kwenye tovuti hii na kwenye Chrome. Unaweza kuwasha kipengele cha kusawazisha baadaye.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> alikuwa akitumia Chrome na akaacha alamisho, manenosiri na mipangilio mingine kwenye kifaa hiki.</translation> <translation id="424864128008805179">Ungependa kuondoka kwenye Chrome?</translation> <translation id="4249068189593983585">Kidokezo cha Chrome. Ili upate chaguo zaidi za kichupo, bofya na ushikilie kitufe cha 'Onyesha Vichupo' katika upau wa vidhibiti unaopatikana sehemu ya chini au juu ya skrini yako.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ta.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ta.xtb index 144930ee..6044df2 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ta.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ta.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chromeமுக்குப் படங்களையோ வீடியோக்களையோ அணுக அனுமதி இல்லை. அணுகலை 'iOS அமைப்புகள் > தனியுரிமை > படங்கள்' என்பதில் இயக்கவும்.</translation> <translation id="4099578267706723511">பயன்பாட்டுப் புள்ளிவிவரங்களையும், சிதைவு அறிக்கைகளையும் Googleளுக்கு அனுப்புவதன் மூலம் Chromeஐ மேலும் சிறப்பானதாக்க உதவவும்.</translation> <translation id="417201473131094001">Chrome Canaryயில் ஆதரிக்கப்படாது</translation> -<translation id="4214277427269650960">இந்த தளத்திலும் Chromeமிலும் உள்நுழையுங்கள். ஒத்திசைவைப் பின்னர் இயக்கலாம்.</translation> <translation id="4233521129555661685">Chromeமை <ph name="USER_EMAIL1" /> பயன்படுத்திக் கொண்டிருந்தார். அவர் பயன்படுத்திய புக்மார்க்குகள், கடவுச்சொற்கள், பிற அமைப்புகள் ஆகியவை இந்தச் சாதனத்தில் சேமிக்கப்பட்டுள்ளன.</translation> <translation id="424864128008805179">Chrome இலிருந்து வெளியேறவா?</translation> <translation id="4249068189593983585">Chrome உதவிக்குறிப்பு. கூடுதல் தாவல் விருப்பங்களைப் பார்க்க திரையின் கீழிருக்கும் / மேலிருக்கும் கருவிப்பட்டியிலுள்ள ‘தாவல்களைக் காட்டு’ பட்டனைத் தொட்டுப் பிடிக்கவும்.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_te.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_te.xtb index 21027ee8..e83b98b 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_te.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_te.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome మీ ఫోటోలు లేదా వీడియోలకు యాక్సెస్ను కలిగి లేదు. iOS సెట్టింగ్లు > గోప్యత > ఫోటోల్లో యాక్సెస్ను ప్రారంభించండి.</translation> <translation id="4099578267706723511">వినియోగ గణాంకాలు, క్రాష్ రిపోర్ట్లను Googleకు పంపి, తద్వారా Chromeను మెరుగుపరచడంలో సహాయపడండి.</translation> <translation id="417201473131094001">Chrome కెనరీలో సపోర్ట్ చేయదు</translation> -<translation id="4214277427269650960">ఈ సైట్కు, అలాగే Chromeకు సైన్ ఇన్ చేయండి. మీరు సింక్ను తర్వాత ఆన్ చేయవచ్చు.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> Chromeను ఉపయోగిస్తూ, బుక్మార్క్లు, పాస్వర్డ్లు, ఇతర సెట్టింగ్లను ఈ పరికరంలో అలాగే ఉంచారు.</translation> <translation id="424864128008805179">Chrome నుండి సైన్ అవుట్ చేయాలా?</translation> <translation id="4249068189593983585">Chrome చిట్కా. మరిన్ని ట్యాబ్ ఎంపికల కోసం, మీ స్క్రీన్లో పైన కానీ దిగువన కానీ ఉండే సాధనాల బార్లో ట్యాబ్లను చూపు బటన్ను తాకి & అలాగే నొక్కి ఉంచండి.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_th.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_th.xtb index 38f3cc6..8abb359 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_th.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_th.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome ไม่มีสิทธิ์เข้าถึงรูปภาพหรือวิดีโอของคุณ เปิดการเข้าถึงได้ในการตั้งค่า iOS > ความเป็นส่วนตัว > รูปภาพ</translation> <translation id="4099578267706723511">ช่วยให้ Chrome ทำงานได้ดีขึ้นโดยส่งสถิติการใช้งานและรายงานข้อขัดข้องให้กับ Google</translation> <translation id="417201473131094001">ไม่รองรับใน Chrome Canary</translation> -<translation id="4214277427269650960">ลงชื่อเข้าใช้เว็บไซต์นี้และ Chrome คุณเปิดการซิงค์ภายหลังได้</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> ได้ใช้ Chrome และเก็บบุ๊กมาร์ก รหัสผ่าน รวมถึงการตั้งค่าอื่นๆ ไว้ในอุปกรณ์นี้</translation> <translation id="424864128008805179">ต้องการออกจากระบบ Chrome ไหม</translation> <translation id="4249068189593983585">เคล็ดลับสำหรับ Chrome ถ้าต้องการดูตัวเลือกแท็บเพิ่มเติม ให้แตะปุ่ม "แสดงแท็บ" ค้างไว้ในแถบเครื่องมือ ซึ่งอยู่ที่ด้านล่างหรือด้านบนของหน้าจอ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_tr.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_tr.xtb index 8d758c8..b862ed5 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_tr.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_tr.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome, fotoğraflarınıza veya videolarınıza erişemiyor. iOS Ayarlar > Gizlilik > Fotoğraflar'dan erişimi etkinleştirin.</translation> <translation id="4099578267706723511">Google'a kullanım istatistikleri ve kilitlenme raporları göndererek Chrome'u iyileştirmeye yardımcı olun.</translation> <translation id="417201473131094001">Chrome Canary'de desteklenmiyor</translation> -<translation id="4214277427269650960">Bu sitede ve Chrome'da oturum açın. Senkronizasyonu daha sonra açabilirsiniz.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" />, Chrome'u kullanıyordu, ardından yer işaretlerini, şifrelerini ve diğer ayarlarını bu cihazda bıraktı.</translation> <translation id="424864128008805179">Chrome oturumu kapatılsın mı?</translation> <translation id="4249068189593983585">Chrome için ipucu. Sekmelerle ilgili daha fazla seçenek görmek için ekranınızın altında veya üstünde görünen araç çubuğunda Sekmeleri Göster düğmesine dokunup basılı tutun.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_uk.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_uk.xtb index 6a9a6f8..18191a5 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_uk.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_uk.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome не має доступу до ваших фото чи відео. Надайте доступ у меню iOS "Параметри > Конфіденційність > Фото".</translation> <translation id="4099578267706723511">Допоможіть покращити Chrome, надсилаючи статистику та звіти про збої в Google.</translation> <translation id="417201473131094001">Не підтримується в Chrome Canary</translation> -<translation id="4214277427269650960">Увійдіть в облікові записи цього сайту та Chrome. Синхронізацію можна ввімкнути пізніше.</translation> <translation id="4233521129555661685">Користувач <ph name="USER_EMAIL1" /> застосовував Chrome і зберіг закладки, паролі й інші налаштування на цьому пристрої.</translation> <translation id="424864128008805179">Вийти з Chrome?</translation> <translation id="4249068189593983585">Порада щодо Chrome. Щоб відкрити більше параметрів, натисніть і утримуйте кнопку "Показати вкладки" на панелі інструментів, розташованій унизу або вгорі екрана.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ur.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ur.xtb index 1079b666..b7ce7be 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ur.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ur.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome کو آپ کی تصاویر یا ویڈیوز تک رسائی حاصل نہیں ہے۔ iOS ترتیبات > رازداری > تصاویر میں رسائی کو فعال کریں۔</translation> <translation id="4099578267706723511">Google کو استعمال کے اعداد و شمار اور کریش رپورٹس بھیج کر Chrome کو بہتر بنانے میں مدد کریں۔</translation> <translation id="417201473131094001">Chrome Canary پر تعاون یافتہ نہیں ہے</translation> -<translation id="4214277427269650960">اس سائٹ اور Chrome پر سائن ان کریں۔ آپ بعد میں مطابقت پذیری کو آن کر سکتے ہیں۔</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> Chrome استعمال کر رہا تھا اور اس آلہ پر بُک مارکس، پاس ورڈز اور دیگر ترتیبات چھوڑ دی ہیں۔</translation> <translation id="424864128008805179">Chrome سے سائن آؤٹ کریں؟</translation> <translation id="4249068189593983585">Chrome تجویز۔ ٹیب کے مزید اختیارات کیلئے، ٹول بار میں اس "ٹیبز دکھائيں" بٹن کو ٹچ کریں اور دبائے رکھیں جو آپ کی اسکرین کے نیچے یا اوپر ہوتا ہے۔</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_uz.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_uz.xtb index 294a3ed..0e576bfe 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_uz.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_uz.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome rasm va videolaringizni ko‘ra olmayapti. “Sozlamalar > Maxfiylik > Rasmlar” oynasida ruxsat bering.</translation> <translation id="4099578267706723511">Google’ga foydalanish statistikasi va ishdan chiqish hisobotlarini jo‘natish orqali Chrome’ning takomillashtirishga yordam bering</translation> <translation id="417201473131094001">Chrome Canary nashrida ishlamaydi</translation> -<translation id="4214277427269650960">Bu sayt va Chrome hisobiga kiring. Sinxronizatsiyani keyinroq yoqish mumkin.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> Chrome ishlatardi va bu qurilmada uning bukmarklar, parollar va boshqa sozlamalari qolgan.</translation> <translation id="424864128008805179">Chrome hisobidan chiqmoqchimisiz?</translation> <translation id="4249068189593983585">Chrome maslahati. Ko‘proq varaqlarni tanlash uchun ekranning quyi yoki yuqorisida joylashgan asboblar panelidan Varaqlarni ko‘rsatish tugmasi ustiga bosib turing.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_vi.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_vi.xtb index c06c6257..100ad5f 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_vi.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_vi.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome không có quyền truy cập ảnh hoặc video của bạn. Hãy cho phép truy cập trong Cài đặt iOS > Bảo mật > Ảnh.</translation> <translation id="4099578267706723511">Giúp cải thiện Chrome bằng cách gửi số liệu thống kê sử dụng và báo cáo sự cố cho Google.</translation> <translation id="417201473131094001">Chưa hỗ trợ trên Chrome Canary</translation> -<translation id="4214277427269650960">Đăng nhập vào trang web này và Chrome. Bạn có thể bật tính năng đồng bộ hóa sau.</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> đã dùng Chrome và lưu lại dấu trang, mật khẩu cũng như các chế độ cài đặt khác trên thiết bị này.</translation> <translation id="424864128008805179">Đăng xuất khỏi Chrome?</translation> <translation id="4249068189593983585">Mẹo sử dụng Chrome. Để xem thêm các tùy chọn về thẻ, hãy chạm và giữ nút Hiển thị thẻ trên thanh công cụ ở đầu hoặc cuối màn hình.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-CN.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-CN.xtb index 580a3bc..63d7687 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-CN.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-CN.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome 无权访问您的照片或视频。请依次点按 iOS 中的“设置”>“隐私”>“照片”,授予其访问权限。</translation> <translation id="4099578267706723511">将使用情况统计信息和崩溃报告发送给 Google,帮助我们完善 Chrome。</translation> <translation id="417201473131094001">在 Chrome Canary 版中不受支持</translation> -<translation id="4214277427269650960">登录此网站和 Chrome。您可等到需要时再开启同步功能。</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> 原本使用 Chrome,并在此设备上保存了书签、密码及其他设置。</translation> <translation id="424864128008805179">退出 Chrome?</translation> <translation id="4249068189593983585">Chrome 提示。要查看更多的标签页选项,请轻触并按住工具栏(位于屏幕底部或顶部)中的“显示标签页”按钮。</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-HK.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-HK.xtb index df30888..1651aaff 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-HK.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-HK.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome 沒有存取相片或影片的權限。請前往「iOS 設定」>「私隱」>「相片」開放權限。</translation> <translation id="4099578267706723511">將使用統計資料及當機報告傳送給 Google,助我們一臂之力,讓 Chrome 更臻完美。</translation> <translation id="417201473131094001">Chrome Canary 上不支援此功能</translation> -<translation id="4214277427269650960">登入此網站和 Chrome。您可稍後再開啟同步功能。</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> 之前曾在此裝置上使用 Chrome,並儲存書籤、密碼和其他設定。</translation> <translation id="424864128008805179">要登出 Chrome 嗎?</translation> <translation id="4249068189593983585">Chrome 提示。如果要多啲標籤選項,請㩒住螢幕底部或者頂部工具列入面中嘅 [顯示分頁] 掣。</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-TW.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-TW.xtb index fb685872..49b6233 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-TW.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-TW.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">Google Chrome 無法存取您的相片或影片,請前往「iOS 設定」中的 [隱私權] > [相片] 啟用存取權。</translation> <translation id="4099578267706723511">將使用統計資料及當機報告傳送給 Google,助我們一臂之力,讓 Chrome 更臻完美。</translation> <translation id="417201473131094001">Chrome Canary 不支援這項功能</translation> -<translation id="4214277427269650960">登入這個網站和 Chrome。你可以稍後再開啟同步功能。</translation> <translation id="4233521129555661685"><ph name="USER_EMAIL1" /> 原本使用 Chrome,並將書籤、密碼和其他設定儲存在裝置上。</translation> <translation id="424864128008805179">要登出 Chrome 嗎?</translation> <translation id="4249068189593983585">Chrome 提示。如需更多分頁選項,請輕觸並按住工具列 (位於畫面底部或頂端) 中的 [顯示分頁] 按鈕。</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_zu.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_zu.xtb index 86ac146b..a33990c 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_zu.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_zu.xtb
@@ -52,7 +52,6 @@ <translation id="3988789688219830639">I-Google Chrome ayinakho ukufinyelela kuzithombe noma amavidiyo akho. Nika amandla ukufinyelela kuzilungiselelo ze-iOS > Ubumfihlo > Izithombe.</translation> <translation id="4099578267706723511">Siza ukwenza i-Google Chrome ukuthi ibe ngcono ngokuthumela ngokuzenzakalelayo izibalo zokusebenzisa nemibiko yokusaphazeka ku-Google.</translation> <translation id="417201473131094001">Ayisekelwe ku-Chrome Canary</translation> -<translation id="4214277427269650960">Ngena ngemvume kuleli sayithi naku-Chrome. Ungavula ukuvumelanisa kamuva.</translation> <translation id="4233521129555661685">U-<ph name="USER_EMAIL1" /> ubesebenzisa i-Chrome futhi washiya amabhukhimakhi, amaphasiwedi, namanye amasethingi kule divayisi.</translation> <translation id="424864128008805179">Phuma ngemvume ku-Chrome?</translation> <translation id="4249068189593983585">Ithiphu le-Chrome. Ukuze uthole okunye okungakhethwa zethebhu, thinta uphinde ubambe inkinobho yokuthi Bonisa Ithebhu kubha yamathuluzi, engaphansi noma engaphezulu kwesikrini sakho.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_af.xtb b/ios/chrome/app/strings/resources/ios_strings_af.xtb index f924efc5..8221cbb 100644 --- a/ios/chrome/app/strings/resources/ios_strings_af.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_af.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524">Bied aan om <ph name="LANGUAGE" /> te vertaal</translation> <translation id="6289501276895392862">Het <ph name="CHANNEL_NAME" /> ontvolg</translation> <translation id="6293101329759844770">Maak <ph name="BEGIN_LINK" />Google-dienste<ph name="END_LINK" /> oop en tik op Veiligblaai om Veiligblaai aan te skakel.</translation> -<translation id="6294610283659775533">Jy kan oortjies stuur tussen toestelle wat met dieselfde Google-rekening aangemeld is</translation> <translation id="6321526113093607004">Voeg by Boekmerke</translation> <translation id="6324669097367352121">Aanmeldinstellings</translation> <translation id="6337234675334993532">Enkriptering</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_am.xtb b/ios/chrome/app/strings/resources/ios_strings_am.xtb index 932e2f1..d6de2ce7 100644 --- a/ios/chrome/app/strings/resources/ios_strings_am.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_am.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524">ወደ <ph name="LANGUAGE" /> ለመተርጎም ሐሳብ ያቅርቡ</translation> <translation id="6289501276895392862"><ph name="CHANNEL_NAME" /> መከተል ቆሟል</translation> <translation id="6293101329759844770">ደህንነቱ የተጠበቀ አሰሳን ለማብራት <ph name="BEGIN_LINK" />የGoogle አገልግሎቶች<ph name="END_LINK" />ን ይክፈቱ እና የጥንቃቄ አሰሳን መታ ያድርጉ።</translation> -<translation id="6294610283659775533">በተመሳሳዩ Google መለያ በገቡባቸው መሣሪያዎች መካከል ትሮችን መላክ ይችላሉ</translation> <translation id="6321526113093607004">ወደ ዕልባቶች አክል</translation> <translation id="6324669097367352121">የመግቢያ ቅንብሮች</translation> <translation id="6337234675334993532">ምስጠራ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ar.xtb b/ios/chrome/app/strings/resources/ios_strings_ar.xtb index f311a5c..a4ef804e 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ar.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ar.xtb
@@ -626,7 +626,6 @@ <translation id="6284652193729350524">اقتراح ترجمة <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">تم إلغاء متابعة <ph name="CHANNEL_NAME" />.</translation> <translation id="6293101329759844770">لتفعيل "التصفّح الآمن"، افتح <ph name="BEGIN_LINK" />خدمات Google<ph name="END_LINK" /> وانقر على "التصفّح الآمن".</translation> -<translation id="6294610283659775533">يمكنك إرسال علامات التبويب من وإلى الأجهزة التي تم من خلالها تسجيل الدخول إلى حساب Google نفسه.</translation> <translation id="6321526113093607004">إضافة إلى الإشارات المرجعية</translation> <translation id="6324669097367352121">إعدادات تسجيل الدخول</translation> <translation id="6337234675334993532">ترميز</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_as.xtb b/ios/chrome/app/strings/resources/ios_strings_as.xtb index e49d5e0..ceb499cc 100644 --- a/ios/chrome/app/strings/resources/ios_strings_as.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_as.xtb
@@ -329,6 +329,7 @@ <translation id="3775743491439407556">ছিংক কৰা সুবিধাটোৱে কাম কৰা নাই</translation> <translation id="3779810277399252432">ইণ্টাৰনেট সংযোগ নাই।</translation> <translation id="3783017676699494206">ছবি ছেভ কৰক</translation> +<translation id="3789294999358192700">তলৰ এই পদক্ষেপসমূহ অনুসৰণ কৰক:</translation> <translation id="3789841737615482174">ইনষ্টল কৰক</translation> <translation id="380329542618494757">নাম</translation> <translation id="3803696231112616155">এই ছাইটটো অনুবাদ কৰাৰ প্ৰস্তাৱ দিয়ক</translation> @@ -624,7 +625,6 @@ <translation id="6284652193729350524"><ph name="LANGUAGE" /> অনুবাদ কৰাৰ প্ৰস্তাৱ দিয়ক</translation> <translation id="6289501276895392862"><ph name="CHANNEL_NAME" />ক আনফ’ল’ কৰিলে</translation> <translation id="6293101329759844770">সুৰক্ষিত ব্ৰাউজিং অন কৰিবলৈ <ph name="BEGIN_LINK" />Google সেৱা<ph name="END_LINK" /> খোলক আৰু সুৰক্ষিত ব্ৰাউজিঙত টিপক।</translation> -<translation id="6294610283659775533">আপুনি একেটা Google একাউণ্টৰ জৰিয়তে ছাইন ইন কৰি থোৱা ডিভাইচসমূহৰ মাজত টেব পঠিয়াব পাৰে</translation> <translation id="6321526113093607004">বুকমাৰ্কত যোগ দিয়ক</translation> <translation id="6324669097367352121">ছাইন ইন কৰাৰ ছেটিং</translation> <translation id="6337234675334993532">এনক্ৰিপশ্বন</translation> @@ -942,6 +942,7 @@ <translation id="8870413625673593573">শেহতীয়াকৈ বন্ধ কৰা</translation> <translation id="8876882697946675716">আপোনাৰ ডিভাইচসমূহ ছিংক কৰি ৰাখক</translation> <translation id="8881801611828450202">এই প্ৰতিচ্ছবিটোৰ কাৰণে <ph name="SEARCH_ENGINE" />ত সন্ধান কৰক</translation> +<translation id="8891935667620843985">আপুনি Chromeক আপোনাৰ ডিফ’ল্ট ব্ৰাউজাৰ এপ্ বনাই তাত স্বয়ংক্ৰিয়ভাৱে লিংকসমূহ খুলিব পাৰে।</translation> <translation id="8898822736010347272">নতুন ভাবুকিবোৰ বিচাৰি পোৱাত আৰু ৱেবত থকা সকলোকে সুৰক্ষিত কৰাত সহায় কৰিবলৈ আপুনি চোৱা কিছুমান পৃষ্ঠাৰ URLসমূহ, সীমিত ছিষ্টেমৰ তথ্য আৰু কিছুমান পৃষ্ঠাৰ সমল Googleলৈ পঠিয়ায়।</translation> <translation id="8909135823018751308">শ্বেয়াৰ কৰক…</translation> <translation id="8917490105272468696">হয়, মই সন্মত</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_az.xtb b/ios/chrome/app/strings/resources/ios_strings_az.xtb index b8f64ff6..09594c6 100644 --- a/ios/chrome/app/strings/resources/ios_strings_az.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_az.xtb
@@ -625,7 +625,6 @@ <translation id="6284652193729350524"><ph name="LANGUAGE" /> dilindən tərcümə etməyi təklif edin</translation> <translation id="6289501276895392862"><ph name="CHANNEL_NAME" /> izləmədən çıxarıldı</translation> <translation id="6293101329759844770">Təhlükəsiz Baxışı aktiv etmək üçün <ph name="BEGIN_LINK" />Google Xidmətləri<ph name="END_LINK" /> bölməsini açın və Təhlükəsiz Baxış seçiminə toxunun.</translation> -<translation id="6294610283659775533">Eyni Google Hesabı ilə daxil olunan cihazlar arasında tablar göndərə bilərsiniz</translation> <translation id="6321526113093607004">Əlfəcinlərə əlavə edin</translation> <translation id="6324669097367352121">Daxil olma ayarları</translation> <translation id="6337234675334993532">Şifrələmə</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_be.xtb b/ios/chrome/app/strings/resources/ios_strings_be.xtb index 0537ff9..2937fa2 100644 --- a/ios/chrome/app/strings/resources/ios_strings_be.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_be.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524">Прапаноўваць перакласці з мовы: <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">Вы адпісаліся ад канала "<ph name="CHANNEL_NAME" />"</translation> <translation id="6293101329759844770">Каб уключыць Бяспечны прагляд, адкрыйце старонку <ph name="BEGIN_LINK" />Сэрвісы Google<ph name="END_LINK" /> і націсніце на пункт "Бяспечны прагляд".</translation> -<translation id="6294610283659775533">Вы можаце адпраўляць укладкі на свае прылады, на якіх выкананы ўваход у адзін і той жа Уліковы запіс Google</translation> <translation id="6321526113093607004">Дадаць у Закладкі</translation> <translation id="6324669097367352121">Налады ўваходу</translation> <translation id="6337234675334993532">Шыфраванне</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bg.xtb b/ios/chrome/app/strings/resources/ios_strings_bg.xtb index e8e8f23..fb0482f 100644 --- a/ios/chrome/app/strings/resources/ios_strings_bg.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_bg.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524">Предлагане на превод от <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">Следенето на <ph name="CHANNEL_NAME" /> бе прекратено</translation> <translation id="6293101329759844770">За да включите „Безопасно сърфиране“, отворете <ph name="BEGIN_LINK" />Услуги на Google<ph name="END_LINK" /> и докоснете съответната опция.</translation> -<translation id="6294610283659775533">Можете да изпращате раздели до други устройства, на които сте влезли в един и същ профил в Google</translation> <translation id="6321526113093607004">Добавяне към отметките</translation> <translation id="6324669097367352121">Настройки за вход</translation> <translation id="6337234675334993532">Шифроване</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bn.xtb b/ios/chrome/app/strings/resources/ios_strings_bn.xtb index b842d4ce..880b384 100644 --- a/ios/chrome/app/strings/resources/ios_strings_bn.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_bn.xtb
@@ -626,7 +626,6 @@ <translation id="6284652193729350524"><ph name="LANGUAGE" /> ভাষায় অনুবাদ করার প্রস্তাব দিন</translation> <translation id="6289501276895392862"><ph name="CHANNEL_NAME" /> ফলো করা বন্ধ করেছেন</translation> <translation id="6293101329759844770">Safe Browsing চালু করতে, <ph name="BEGIN_LINK" />Google পরিষেবা<ph name="END_LINK" /> বিকল্পটি খুলে Safe Browsing-এ ট্যাপ করুন।</translation> -<translation id="6294610283659775533">আপনি একই Google অ্যাকাউন্টের মাধ্যমে সাইন-ইন করা ডিভাইসের মধ্যে ট্যাব পাঠাতে পারেন</translation> <translation id="6321526113093607004">বুকমার্কে যোগ করুন</translation> <translation id="6324669097367352121">সাইন-ইন সেটিংস</translation> <translation id="6337234675334993532">এনক্রিপশন</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bs.xtb b/ios/chrome/app/strings/resources/ios_strings_bs.xtb index b4ed8a1e..c915bee 100644 --- a/ios/chrome/app/strings/resources/ios_strings_bs.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_bs.xtb
@@ -625,7 +625,6 @@ <translation id="6284652193729350524">Ponudi prijevod za <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">Prestali ste pratiti: <ph name="CHANNEL_NAME" /></translation> <translation id="6293101329759844770">Da uključite Sigurno pregledanje, otvorite <ph name="BEGIN_LINK" />Googleove usluge<ph name="END_LINK" /> i dodirnite Sigurno pregledanje.</translation> -<translation id="6294610283659775533">Možete slati kartice između uređaja koji su prijavljeni s istim Google računom</translation> <translation id="6321526113093607004">Dodaj u Oznake</translation> <translation id="6324669097367352121">Postavke prijave</translation> <translation id="6337234675334993532">Enkripcija</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ca.xtb b/ios/chrome/app/strings/resources/ios_strings_ca.xtb index be17492..9a413f8 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ca.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ca.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524">Proposa traduir el contingut en <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">Has deixat de seguir <ph name="CHANNEL_NAME" /></translation> <translation id="6293101329759844770">Per activar la funció Navegació segura, obre la pàgina <ph name="BEGIN_LINK" />Serveis de Google<ph name="END_LINK" /> i toca Navegació segura.</translation> -<translation id="6294610283659775533">Pots enviar pestanyes entre dispositius en què tinguis la sessió iniciada al mateix Compte de Google</translation> <translation id="6321526113093607004">Afegeix a Adreces d'interès</translation> <translation id="6324669097367352121">Configuració d'inici de sessió</translation> <translation id="6337234675334993532">Encriptació</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_cs.xtb b/ios/chrome/app/strings/resources/ios_strings_cs.xtb index 554d8da..4491981 100644 --- a/ios/chrome/app/strings/resources/ios_strings_cs.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_cs.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524">Nabízet překlad jazyka <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">Přestali jste sledovat kanál <ph name="CHANNEL_NAME" /></translation> <translation id="6293101329759844770">Pokud chcete zapnout Bezpečné prohlížení, otevřete <ph name="BEGIN_LINK" />Služby Google<ph name="END_LINK" /> a klepněte na Bezpečné prohlížení.</translation> -<translation id="6294610283659775533">Mezi zařízeními přihlášenými ke stejnému účtu Google lze posílat karty</translation> <translation id="6321526113093607004">Přidat do záložek</translation> <translation id="6324669097367352121">Nastavení přihlášení</translation> <translation id="6337234675334993532">Šifrování</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_cy.xtb b/ios/chrome/app/strings/resources/ios_strings_cy.xtb index ac34ba5..91402c8 100644 --- a/ios/chrome/app/strings/resources/ios_strings_cy.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_cy.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524">Cynnig cyfieithu <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">Wedi dad-ddilyn <ph name="CHANNEL_NAME" /></translation> <translation id="6293101329759844770">I droi Pori'n Ddiogel ymlaen, agorwch <ph name="BEGIN_LINK" />Gwasanaethau Google<ph name="END_LINK" /> a thapiwch Pori'n Ddiogel.</translation> -<translation id="6294610283659775533">Gallwch anfon tabiau rhwng dyfeisiau sydd wedi'u mewngofnodi gyda'r un Cyfrif Google</translation> <translation id="6321526113093607004">Ychwanegu at Nodau Tudalen</translation> <translation id="6324669097367352121">Gosodiadau mewngofnodi</translation> <translation id="6337234675334993532">Amgryptio</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_da.xtb b/ios/chrome/app/strings/resources/ios_strings_da.xtb index 69b709f5..db710f6 100644 --- a/ios/chrome/app/strings/resources/ios_strings_da.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_da.xtb
@@ -329,6 +329,7 @@ <translation id="3775743491439407556">Synkronisering fungerer ikke</translation> <translation id="3779810277399252432">Ingen internetforbindelse.</translation> <translation id="3783017676699494206">Gem billede</translation> +<translation id="3789294999358192700">Sådan gør du:</translation> <translation id="3789841737615482174">Installer</translation> <translation id="380329542618494757">Navn</translation> <translation id="3803696231112616155">Tilbyd at oversætte dette website</translation> @@ -624,7 +625,6 @@ <translation id="6284652193729350524">Tilbyd at oversætte fra <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">Følger ikke længere <ph name="CHANNEL_NAME" /></translation> <translation id="6293101329759844770">Åbn <ph name="BEGIN_LINK" />Google-tjenester<ph name="END_LINK" />, og tryk på Beskyttet browsing for at aktivere Beskyttet browsing.</translation> -<translation id="6294610283659775533">Du kan sende faner mellem enheder, hvor du er logget ind på den samme Google-konto</translation> <translation id="6321526113093607004">Føj til Bogmærker</translation> <translation id="6324669097367352121">Loginindstillinger</translation> <translation id="6337234675334993532">Kryptering</translation> @@ -942,6 +942,7 @@ <translation id="8870413625673593573">Senest lukkede</translation> <translation id="8876882697946675716">Bevar synkroniseringen af dine enheder</translation> <translation id="8881801611828450202">Søg på <ph name="SEARCH_ENGINE" /> efter dette billede</translation> +<translation id="8891935667620843985">Du kan åbne links i Chrome automatisk ved at angive Chrome som din standardbrowserapp.</translation> <translation id="8898822736010347272">Sender webadresser på visse sider, du besøger, begrænsede systemoplysninger og indhold fra visse sider til Google med henblik på at opdage nye trusler og beskytte brugerne på nettet.</translation> <translation id="8909135823018751308">Del…</translation> <translation id="8917490105272468696">Ja tak</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_de.xtb b/ios/chrome/app/strings/resources/ios_strings_de.xtb index 875193a..35023a5 100644 --- a/ios/chrome/app/strings/resources/ios_strings_de.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_de.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524">Übersetzung für <ph name="LANGUAGE" /> anbieten</translation> <translation id="6289501276895392862">Du folgst <ph name="CHANNEL_NAME" /> nicht mehr</translation> <translation id="6293101329759844770">Wenn du Safe Browsing aktivieren möchtest, öffne <ph name="BEGIN_LINK" />Google-Dienste<ph name="END_LINK" /> und tippe auf „Safe Browsing“.</translation> -<translation id="6294610283659775533">Du kannst Tabs zwischen Geräten senden, auf denen du mit demselben Google-Konto angemeldet bist.</translation> <translation id="6321526113093607004">Zu Lesezeichen hinzufügen</translation> <translation id="6324669097367352121">Anmeldeeinstellungen</translation> <translation id="6337234675334993532">Verschlüsselung</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_el.xtb b/ios/chrome/app/strings/resources/ios_strings_el.xtb index 13470ec..2366ab5 100644 --- a/ios/chrome/app/strings/resources/ios_strings_el.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_el.xtb
@@ -329,6 +329,7 @@ <translation id="3775743491439407556">Ο συγχρονισμός δεν λειτουργεί</translation> <translation id="3779810277399252432">Δεν υπάρχει σύνδεση στο διαδίκτυο.</translation> <translation id="3783017676699494206">Αποθήκευση εικόνας</translation> +<translation id="3789294999358192700">Ακολουθήστε τα εξής βήματα:</translation> <translation id="3789841737615482174">Εγκατάσταση</translation> <translation id="380329542618494757">Όνομα</translation> <translation id="3803696231112616155">Πρόταση για μετάφραση αυτού του ιστοτόπου</translation> @@ -624,7 +625,6 @@ <translation id="6284652193729350524">Πρόταση για μετάφραση <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">Καταργήθηκε η παρακολούθηση του καναλιού <ph name="CHANNEL_NAME" /></translation> <translation id="6293101329759844770">Για να ενεργοποιήσετε την Ασφαλή περιήγηση, ανοίξτε τις <ph name="BEGIN_LINK" />υπηρεσίες Google<ph name="END_LINK" /> και πατήστε Ασφαλής περιήγηση.</translation> -<translation id="6294610283659775533">Μπορείτε να στέλνετε καρτέλες μεταξύ συσκευών οι οποίες έχουν συνδεθεί με τον ίδιο Λογαριασμό Google.</translation> <translation id="6321526113093607004">Προσθήκη στους σελιδοδείκτες</translation> <translation id="6324669097367352121">Ρυθμίσεις σύνδεσης</translation> <translation id="6337234675334993532">Κρυπτογράφηση</translation> @@ -943,6 +943,7 @@ <translation id="8870413625673593573">Έκλεισαν πρόσφατα</translation> <translation id="8876882697946675716">Διατηρήστε συγχρονισμένες τις συσκευές σας</translation> <translation id="8881801611828450202">Αναζήτηση εικόνας σε <ph name="SEARCH_ENGINE" /></translation> +<translation id="8891935667620843985">Μπορείτε να ανοίγετε συνδέσμους αυτόματα στο Chrome αν το ορίσετε ως προεπιλεγμένη εφαρμογή προγράμματος περιήγησης.</translation> <translation id="8898822736010347272">Στέλνει URL από ορισμένες σελίδες που επισκέπτεστε, περιορισμένες πληροφορίες συστήματος και ορισμένο περιεχόμενο σελίδας στην Google, για να συμβάλλει στην ανακάλυψη νέων απειλών και την προστασία όλων των χρηστών στον ιστό.</translation> <translation id="8909135823018751308">Κοινοποίηση…</translation> <translation id="8917490105272468696">Ναι, συμφωνώ</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 27d2818..5aed6aa 100644 --- a/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb
@@ -329,6 +329,7 @@ <translation id="3775743491439407556">Sync isn't working</translation> <translation id="3779810277399252432">No Internet connection.</translation> <translation id="3783017676699494206">Save Image</translation> +<translation id="3789294999358192700">Follow the steps below:</translation> <translation id="3789841737615482174">Install</translation> <translation id="380329542618494757">Name</translation> <translation id="3803696231112616155">Offer to translate this site</translation> @@ -473,6 +474,7 @@ <translation id="4979397965658815378">Sign in with your Google Account to get your bookmarks, passwords, history and other settings on all your devices</translation> <translation id="4986678885919050584">Remove from this device</translation> <translation id="4989542687859782284">Unavailable</translation> +<translation id="498985224078955265">To send this tab to another device, sign in to Chrome on both devices.</translation> <translation id="5005498671520578047">Copy password</translation> <translation id="5017828934289857214">Remind me later</translation> <translation id="5037676449506322593">Select all</translation> @@ -524,6 +526,7 @@ <translation id="5489208564673669003">To manage cookies for all sites, see <ph name="BEGIN_LINK" />Cookie settings<ph name="END_LINK" />.</translation> <translation id="5490005495580364134">Block all cookies (not recommended)</translation> <translation id="5513681519188741830"><ph name="TIME" /> h ago</translation> +<translation id="5525095647255982834">To send this tab to another device, sign in to Chrome there.</translation> <translation id="5525269841082836315">Create passphrase</translation> <translation id="5542540507657872337"><ph name="COUNT" /> found</translation> <translation id="5548760955356983418">Handoff lets you start browsing a website on this device and then easily continue on your Mac. The current open website will appear in the Dock of your Mac. @@ -624,7 +627,6 @@ <translation id="6284652193729350524">Offer to translate <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">Unfollowed <ph name="CHANNEL_NAME" /></translation> <translation id="6293101329759844770">To turn on Safe Browsing, open <ph name="BEGIN_LINK" />Google services<ph name="END_LINK" /> and tap Safe Browsing.</translation> -<translation id="6294610283659775533">You can send tabs between devices that are signed in with the same Google Account</translation> <translation id="6321526113093607004">Add to Bookmarks</translation> <translation id="6324669097367352121">Sign in settings</translation> <translation id="6337234675334993532">Encryption</translation> @@ -942,6 +944,7 @@ <translation id="8870413625673593573">Recently Closed</translation> <translation id="8876882697946675716">Keep your devices in sync</translation> <translation id="8881801611828450202">Search <ph name="SEARCH_ENGINE" /> for This Image</translation> +<translation id="8891935667620843985">You can open links in Chrome automatically by making it your default browser app.</translation> <translation id="8898822736010347272">Sends URLs of some pages that you visit, limited system information and some page content to Google, to help discover new threats and protect everyone on the web.</translation> <translation id="8909135823018751308">Share…</translation> <translation id="8917490105272468696">Yes, I'm In</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb index 08670519..0e2179c 100644 --- a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524">Ofrecer traducción al <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">Dejaste de seguir <ph name="CHANNEL_NAME" /></translation> <translation id="6293101329759844770">Si quieres activar la Navegación segura, abre <ph name="BEGIN_LINK" />Servicios de Google<ph name="END_LINK" /> y, luego, presiona Navegación segura.</translation> -<translation id="6294610283659775533">Puedes enviar pestañas entre dispositivos en los que se haya accedido a la misma Cuenta de Google.</translation> <translation id="6321526113093607004">Agregar a Favoritos</translation> <translation id="6324669097367352121">Config. acceso</translation> <translation id="6337234675334993532">Encriptación</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es.xtb b/ios/chrome/app/strings/resources/ios_strings_es.xtb index 839940e..943ab1a 100644 --- a/ios/chrome/app/strings/resources/ios_strings_es.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_es.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524">Ofrecer traducir del <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">Has dejado de seguir a <ph name="CHANNEL_NAME" />.</translation> <translation id="6293101329759844770">Para activar Navegación segura, abre <ph name="BEGIN_LINK" />Servicios de Google<ph name="END_LINK" /> y toca Navegación segura.</translation> -<translation id="6294610283659775533">Puedes enviar pestañas entre dispositivos en los que se haya iniciado sesión con la misma cuenta de Google</translation> <translation id="6321526113093607004">Añadir a Marcadores</translation> <translation id="6324669097367352121">Configuración de inicio de sesión</translation> <translation id="6337234675334993532">Cifrado</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_et.xtb b/ios/chrome/app/strings/resources/ios_strings_et.xtb index 411f2c9..2033128 100644 --- a/ios/chrome/app/strings/resources/ios_strings_et.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_et.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524">Paku tõlkimist keelde <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">Kanali <ph name="CHANNEL_NAME" /> jälgimine lõpetati</translation> <translation id="6293101329759844770">Google'i ohutu sirvimise sisselülitamiseks avage jaotis <ph name="BEGIN_LINK" />Google'i teenused<ph name="END_LINK" /> ja puudutage valikut Google'i ohutu sirvimine.</translation> -<translation id="6294610283659775533">Saate vahelehti saata seadmete vahel, mis on sisse logitud sama Google'i kontoga</translation> <translation id="6321526113093607004">Lisa järjehoidjatesse</translation> <translation id="6324669097367352121">Sisselogimisseaded</translation> <translation id="6337234675334993532">Krüpteerimine</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_eu.xtb b/ios/chrome/app/strings/resources/ios_strings_eu.xtb index cc0264a..45d95ac 100644 --- a/ios/chrome/app/strings/resources/ios_strings_eu.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_eu.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524">Eskaini <ph name="LANGUAGE" /> itzultzea</translation> <translation id="6289501276895392862">Utzi diozu <ph name="CHANNEL_NAME" /> kanalari jarraitzeari</translation> <translation id="6293101329759844770">Arakatze segurua aktibatzeko, ireki <ph name="BEGIN_LINK" />Google-ren zerbitzuak<ph name="END_LINK" /> eta sakatu Arakatze segurua.</translation> -<translation id="6294610283659775533">Google-ko kontu berean saioa hasita daukaten gailuen artean fitxak bidal ditzakezu</translation> <translation id="6321526113093607004">Gehitu Laster-markak atalean</translation> <translation id="6324669097367352121">Saioa hasteko ezarpenak</translation> <translation id="6337234675334993532">Enkriptatzea</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fa.xtb b/ios/chrome/app/strings/resources/ios_strings_fa.xtb index a0da4eb..a25ae310 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fa.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fa.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524">پیشنهاد ترجمه <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">دنبال کردن <ph name="CHANNEL_NAME" /> لغو شد</translation> <translation id="6293101329759844770">برای روشن کردن «مرور ایمن»، <ph name="BEGIN_LINK" />سرویسهای Google<ph name="END_LINK" /> را باز کنید و روی «مرور ایمن» ضربه بزنید.</translation> -<translation id="6294610283659775533">برگهها را میتوانید بین دستگاههایی که با یک «حساب Google» به سیستم وارد شدند ارسال کنید.</translation> <translation id="6321526113093607004">افزودن به نشانکها</translation> <translation id="6324669097367352121">تنظیمات ورود به سیستم</translation> <translation id="6337234675334993532">رمزگذاری</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fi.xtb b/ios/chrome/app/strings/resources/ios_strings_fi.xtb index 36b3bd8..af97725 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fi.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fi.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524">Tarjoudu kääntämään <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862"><ph name="CHANNEL_NAME" /> ei enää seurannassa</translation> <translation id="6293101329759844770">Avaa <ph name="BEGIN_LINK" />Googlen palvelut<ph name="END_LINK" /> ja valitse Selaussuoja.</translation> -<translation id="6294610283659775533">Voit lähettää välilehtiä laitteiden välillä, jos olet kirjautuneena niillä samalle Google-tilille</translation> <translation id="6321526113093607004">Lisää kirjanmerkkeihin</translation> <translation id="6324669097367352121">Kirjautumisen aset.</translation> <translation id="6337234675334993532">Salaus</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fil.xtb b/ios/chrome/app/strings/resources/ios_strings_fil.xtb index 98729d5..596066d1 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fil.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fil.xtb
@@ -329,6 +329,7 @@ <translation id="3775743491439407556">Hindi Gumagana ang Pag-sync</translation> <translation id="3779810277399252432">Walang koneksyon sa internet.</translation> <translation id="3783017676699494206">I-save ang Larawan</translation> +<translation id="3789294999358192700">Sundin ang mga hakbang sa ibaba:</translation> <translation id="3789841737615482174">Mag-install</translation> <translation id="380329542618494757">Pangalan</translation> <translation id="3803696231112616155">Mag-alok na isalin ang site na ito</translation> @@ -624,7 +625,6 @@ <translation id="6284652193729350524">Mag-alok na isalin ang <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">Hindi na sinusubaybayan ang <ph name="CHANNEL_NAME" /></translation> <translation id="6293101329759844770">Para i-on ang Ligtas na Pag-browse, buksan ang <ph name="BEGIN_LINK" />Mga Serbisyo ng Google<ph name="END_LINK" /> at i-tap ang Ligtas na Pag-browse.</translation> -<translation id="6294610283659775533">Puwede kang magpadala ng mga tab sa pagitan ng mga device na naka-sign in gamit ang iisang Google Account</translation> <translation id="6321526113093607004">Idagdag sa Mga Bookmark</translation> <translation id="6324669097367352121">Mga setting sa pag-sign in</translation> <translation id="6337234675334993532">Pag-encrypt</translation> @@ -942,6 +942,7 @@ <translation id="8870413625673593573">Recently Closed</translation> <translation id="8876882697946675716">Panatilihing Naka-sync ang Iyong Mga Device</translation> <translation id="8881801611828450202">Hanapin sa <ph name="SEARCH_ENGINE" /> ang Larawang Ito</translation> +<translation id="8891935667620843985">Awtomatiko mong mabubuksan ang mga link sa Chrome sa pamamagitan ng pagtatakda nito bilang iyong Default na Browser App.</translation> <translation id="8898822736010347272">Nagpapadala ng mga URL ng ilang page na binibisita mo, limitadong impormasyon ng system, at ilang content ng page sa Google, para makatulong na tumuklas ng mga bagong banta at protektahan ang lahat ng nasa web.</translation> <translation id="8909135823018751308">Ibahagi…</translation> <translation id="8917490105272468696">Oo, Tinatanggap Ko</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb b/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb index 6b75f6c..5318d9b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524">Offrir de traduire du <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">Désabonné de <ph name="CHANNEL_NAME" /></translation> <translation id="6293101329759844770">Pour activer la navigation sécurisée, ouvrez le menu <ph name="BEGIN_LINK" />Services Google<ph name="END_LINK" /> et touchez Navigation sécurisée.</translation> -<translation id="6294610283659775533">Vous pouvez envoyer des onglets entre des appareils qui sont connectés au même compte Google</translation> <translation id="6321526113093607004">Ajouter aux favoris</translation> <translation id="6324669097367352121">Param. de connexion</translation> <translation id="6337234675334993532">Chiffrement</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fr.xtb b/ios/chrome/app/strings/resources/ios_strings_fr.xtb index c2ecad2..0072b20 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fr.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524">Proposer de traduire la langue suivante : <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">Vous ne suivez plus <ph name="CHANNEL_NAME" /></translation> <translation id="6293101329759844770">Pour activer la navigation sécurisée, ouvrez <ph name="BEGIN_LINK" />Services Google<ph name="END_LINK" /> et appuyez sur "Navigation sécurisée".</translation> -<translation id="6294610283659775533">Vous pouvez envoyer des onglets entre appareils connectés au même compte Google</translation> <translation id="6321526113093607004">Ajouter aux favoris</translation> <translation id="6324669097367352121">Paramètres connexion</translation> <translation id="6337234675334993532">Chiffrement</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_gl.xtb b/ios/chrome/app/strings/resources/ios_strings_gl.xtb index f6bf733..5f35b3a3 100644 --- a/ios/chrome/app/strings/resources/ios_strings_gl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_gl.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524">Ofrecer traducir contido en <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">Deixaches de seguir a canle <ph name="CHANNEL_NAME" /></translation> <translation id="6293101329759844770">Para activar a opción Navegación segura, abre <ph name="BEGIN_LINK" />Servizos de Google<ph name="END_LINK" /> e toca Navegación segura.</translation> -<translation id="6294610283659775533">Podes enviar pestanas entre dispositivos nos que teñas a sesión iniciada coa mesma Conta de Google</translation> <translation id="6321526113093607004">Engadir aos marcadores</translation> <translation id="6324669097367352121">Conf. inicio sesión</translation> <translation id="6337234675334993532">Encriptado</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_gu.xtb b/ios/chrome/app/strings/resources/ios_strings_gu.xtb index 0399ac22..16b5b81 100644 --- a/ios/chrome/app/strings/resources/ios_strings_gu.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_gu.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524"><ph name="LANGUAGE" />નો અનુવાદ કરવાનું કહો</translation> <translation id="6289501276895392862"><ph name="CHANNEL_NAME" />ને અનફૉલો કર્યું</translation> <translation id="6293101329759844770">Safe Browsingની સુવિધા ચાલુ કરવા માટે, <ph name="BEGIN_LINK" />Google સેવાઓ<ph name="END_LINK" /> ખોલો અને Safe Browsing પર ટૅપ કરો.</translation> -<translation id="6294610283659775533">તમે સમાન Google એકાઉન્ટ વડે સાઇન ઇન કરેલા ડિવાઇસ વચ્ચે ટૅબ મોકલી શકો છો</translation> <translation id="6321526113093607004">બુકમાર્કમાં ઉમેરો</translation> <translation id="6324669097367352121">સાઇન ઇન સેટિંગ</translation> <translation id="6337234675334993532">એન્ક્રિપ્શન</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hi.xtb b/ios/chrome/app/strings/resources/ios_strings_hi.xtb index f70a5d1..35fa501 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hi.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hi.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524"><ph name="LANGUAGE" /> में अनुवाद करें</translation> <translation id="6289501276895392862"><ph name="CHANNEL_NAME" /> को अनफ़ॉलो किया गया</translation> <translation id="6293101329759844770">Safe Browsing चालू करने के लिए, <ph name="BEGIN_LINK" />Google की सेवाएं<ph name="END_LINK" /> खोलें और Safe Browsing पर टैप करें.</translation> -<translation id="6294610283659775533">आप उन डिवाइसों के बीच टैब शेयर कर सकते हैं जिन पर एक ही Google खाते से साइन इन किया हो</translation> <translation id="6321526113093607004">Bookmarks में जोड़ें</translation> <translation id="6324669097367352121">सेटिंग में साइन इन करें</translation> <translation id="6337234675334993532">सुरक्षित करने का तरीका</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hr.xtb b/ios/chrome/app/strings/resources/ios_strings_hr.xtb index b280eb84..60f37c0f 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hr.xtb
@@ -625,7 +625,6 @@ <translation id="6284652193729350524">Ponudi prijevod za <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">Prestali ste pratiti <ph name="CHANNEL_NAME" /></translation> <translation id="6293101329759844770">Da biste uključili sigurno pregledavanje, otvorite odjeljak <ph name="BEGIN_LINK" />Googleove usluge<ph name="END_LINK" /> i dodirnite Sigurno pregledavanje.</translation> -<translation id="6294610283659775533">Možete slati kartice među uređajima prijavljenima istim Google računom</translation> <translation id="6321526113093607004">Dodaj u Oznake</translation> <translation id="6324669097367352121">Postavke prijave</translation> <translation id="6337234675334993532">Enkripcija</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hu.xtb b/ios/chrome/app/strings/resources/ios_strings_hu.xtb index f3dd279..8ef5086 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hu.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hu.xtb
@@ -625,7 +625,6 @@ <translation id="6284652193729350524">A(z) <ph name="LANGUAGE" /> nyelvű oldalak lefordításának felajánlása</translation> <translation id="6289501276895392862">Felhagyott a(z) <ph name="CHANNEL_NAME" /> követésével</translation> <translation id="6293101329759844770">A Biztonságos Böngészés bekapcsolásához nyissa meg a <ph name="BEGIN_LINK" />Google-szolgáltatások<ph name="END_LINK" /> szakaszt, majd koppintson a Biztonságos Böngészés lehetőségre.</translation> -<translation id="6294610283659775533">Átküldheti a lapokat ugyanazzal a Google-fiókkal bejelentkezett eszközei között</translation> <translation id="6321526113093607004">Hozzáadás a könyvjelzőkhöz</translation> <translation id="6324669097367352121">Bejelentkezési beállítások</translation> <translation id="6337234675334993532">Titkosítás</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hy.xtb b/ios/chrome/app/strings/resources/ios_strings_hy.xtb index 3ce46c7..19983aa5 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hy.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hy.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524">Առաջարկել թարգմանել <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">«<ph name="CHANNEL_NAME" />» ալիքի բաժանորդագրությունը չեղարկվեց</translation> <translation id="6293101329759844770">Անվտանգ դիտարկումը միացնելու համար բացեք <ph name="BEGIN_LINK" />Google-ի ծառայությունները<ph name="END_LINK" /> և սեղմեք «Անվտանգ դիտարկում»։</translation> -<translation id="6294610283659775533">Դուք կարող եք ուղարկել ներդիրները մի սարքից մյուսը, եթե դրանցում մտել եք հաշիվ միևնույն Google հաշվով</translation> <translation id="6321526113093607004">Ավելացնել «Էջանիշներ» բաժնում</translation> <translation id="6324669097367352121">Մուտքի կարգավորումներ</translation> <translation id="6337234675334993532">Գաղտնագրում</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_id.xtb b/ios/chrome/app/strings/resources/ios_strings_id.xtb index 8c7c83b1..0a22526 100644 --- a/ios/chrome/app/strings/resources/ios_strings_id.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_id.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524">Tawarkan untuk menerjemahkan bahasa <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">Berhenti mengikuti <ph name="CHANNEL_NAME" /></translation> <translation id="6293101329759844770">Untuk mengaktifkan Safe Browsing, buka <ph name="BEGIN_LINK" />Layanan Google<ph name="END_LINK" /> dan ketuk Safe Browsing.</translation> -<translation id="6294610283659775533">Anda dapat mengirim tab antar-perangkat yang login ke Akun Google yang sama</translation> <translation id="6321526113093607004">Tambahkan ke Bookmark</translation> <translation id="6324669097367352121">Setelan masuk</translation> <translation id="6337234675334993532">Enkripsi</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_is.xtb b/ios/chrome/app/strings/resources/ios_strings_is.xtb index b448641..38c5e81 100644 --- a/ios/chrome/app/strings/resources/ios_strings_is.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_is.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524">Bjóðast til að þýða <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">Hætti að fylgja <ph name="CHANNEL_NAME" /></translation> <translation id="6293101329759844770">Til að kveikja á öruggri vefskoðun skaltu opna <ph name="BEGIN_LINK" />Google þjónustur<ph name="END_LINK" /> og ýta á „Örugg vefskoðun“.</translation> -<translation id="6294610283659775533">Þú getur sent flipa á milli tækja sem eru skráð inn á sama Google reikninginn</translation> <translation id="6321526113093607004">Bæta við bókamerki</translation> <translation id="6324669097367352121">Innskráningarstillingar</translation> <translation id="6337234675334993532">Dulkóðun</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_it.xtb b/ios/chrome/app/strings/resources/ios_strings_it.xtb index f5ad075a..622f119b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_it.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_it.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524">Proponi di tradurre dalla lingua <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">Non segui più <ph name="CHANNEL_NAME" /></translation> <translation id="6293101329759844770">Per attivare Navigazione sicura, apri <ph name="BEGIN_LINK" />Servizi Google<ph name="END_LINK" /> e tocca Navigazione sicura.</translation> -<translation id="6294610283659775533">Puoi inviare schede tra dispositivi su cui è stato eseguito l'accesso con lo stesso Account Google</translation> <translation id="6321526113093607004">Aggiungi ai preferiti</translation> <translation id="6324669097367352121">Impostazioni accesso</translation> <translation id="6337234675334993532">Crittografia</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_iw.xtb b/ios/chrome/app/strings/resources/ios_strings_iw.xtb index da9d711d..1bb59f7 100644 --- a/ios/chrome/app/strings/resources/ios_strings_iw.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_iw.xtb
@@ -438,6 +438,7 @@ <translation id="4751645464639803239">כרטיסיית מצב אנונימי חדשה</translation> <translation id="4775879719735953715">דפדפן ברירת המחדל</translation> <translation id="4778644898150334464">שימוש בסיסמה אחרת</translation> +<translation id="478808905805139173">לפתוח במצב פרטי?</translation> <translation id="4802417911091824046">הצפנה באמצעות ביטוי סיסמה לא כוללת אמצעי תשלום וכתובות מ-Google Pay כדי לשנות את ההגדרה הזו צריך <ph name="BEGIN_LINK" />לאפס את הסנכרון<ph name="END_LINK" /></translation> @@ -623,7 +624,6 @@ <translation id="6284652193729350524">הצגת הצעה לתרגום <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">בוטל המעקב אחר <ph name="CHANNEL_NAME" /></translation> <translation id="6293101329759844770">כדי להפעיל גלישה בטוחה, יש להיכנס ל<ph name="BEGIN_LINK" />שירותי Google<ph name="END_LINK" /> ולהקיש על 'גלישה בטוחה'.</translation> -<translation id="6294610283659775533">אפשר לשלוח כרטיסיות ממכשיר למכשיר, כל עוד נכנסת במכשירים לאותו חשבון Google.</translation> <translation id="6321526113093607004">הוספה לסימניות</translation> <translation id="6324669097367352121">הגדרות כניסה</translation> <translation id="6337234675334993532">הצפנה</translation> @@ -959,6 +959,7 @@ <translation id="9055772144595778347">לא ניתן להיכנס</translation> <translation id="9057972802061533987">לא ניתן לעקוב. משהו השתבש.</translation> <translation id="9065203028668620118">עריכה</translation> +<translation id="9068336935206019333">פתיחה במצב פרטי ב-Chrome</translation> <translation id="9079935439869366234">סימון הכול כ'לא נקרא'</translation> <translation id="9081058212938299310">לעדכן את הסיסמה של <ph name="USERNAME" />?</translation> <translation id="9083392325882095631">פריט אחד</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ja.xtb b/ios/chrome/app/strings/resources/ios_strings_ja.xtb index aae2d6e..f763698 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ja.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ja.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524"><ph name="LANGUAGE" />を翻訳するか尋ねる</translation> <translation id="6289501276895392862"><ph name="CHANNEL_NAME" /> のフォローを解除しました</translation> <translation id="6293101329759844770">セーフ ブラウジングをオンにするには、[<ph name="BEGIN_LINK" />Google サービス<ph name="END_LINK" />] を開いて [セーフ ブラウジング] をタップします。</translation> -<translation id="6294610283659775533">同じ Google アカウントでログインしているデバイス間でタブを送信できます</translation> <translation id="6321526113093607004">ブックマークに追加</translation> <translation id="6324669097367352121">ログインの設定</translation> <translation id="6337234675334993532">暗号化</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ka.xtb b/ios/chrome/app/strings/resources/ios_strings_ka.xtb index d16a010..3fb44bb 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ka.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ka.xtb
@@ -625,7 +625,6 @@ <translation id="6284652193729350524"><ph name="LANGUAGE" /> ენის თარგმნის შემოთავაზება</translation> <translation id="6289501276895392862"><ph name="CHANNEL_NAME" /> აღარ არის თვალმიდევნებული</translation> <translation id="6293101329759844770">Safe Browsing-ის ჩასართავად გახსენით <ph name="BEGIN_LINK" />Google სერვისები<ph name="END_LINK" /> და შეეხეთ Safe Browsing-ს.</translation> -<translation id="6294610283659775533">სურვილისამებრ, შეგიძლიათ გაცვალოთ ჩანართები იმ მოწყობილობებს შორის, რომლებშიც შესული ხართ ერთი და იგივე Google ანგარიშით</translation> <translation id="6321526113093607004">სანიშნეებში დამატება</translation> <translation id="6324669097367352121">შესვლის პარამეტრები</translation> <translation id="6337234675334993532">დაშიფვრა</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_kk.xtb b/ios/chrome/app/strings/resources/ios_strings_kk.xtb index ceb6c7c..6b21588 100644 --- a/ios/chrome/app/strings/resources/ios_strings_kk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_kk.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524"><ph name="LANGUAGE" /> тілінен аудару ұсынысы</translation> <translation id="6289501276895392862"><ph name="CHANNEL_NAME" /> арнасына жазылудан бас тарттыңыз.</translation> <translation id="6293101329759844770">Safe Browsing функциясын қосу үшін <ph name="BEGIN_LINK" />Google қызметтерін<ph name="END_LINK" /> ашып, Safe Browsing түймесін түртіңіз.</translation> -<translation id="6294610283659775533">Бірдей Google аккаунтымен кірген құрылғыларға қойынды жіберуге болады.</translation> <translation id="6321526113093607004">Бетбелгілерге қосу</translation> <translation id="6324669097367352121">Кіру параметрлері</translation> <translation id="6337234675334993532">Шифрлау</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_km.xtb b/ios/chrome/app/strings/resources/ios_strings_km.xtb index abadc39..7f24b26c 100644 --- a/ios/chrome/app/strings/resources/ios_strings_km.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_km.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524">ផ្ដល់ការបកប្រែ<ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">បានឈប់តាមដាន <ph name="CHANNEL_NAME" /></translation> <translation id="6293101329759844770">ដើម្បីបើក "ការរុករកដោយសុវត្ថិភាព" សូមបើក<ph name="BEGIN_LINK" />សេវាកម្ម Google<ph name="END_LINK" /> រួចចុច "ការរុករកដោយសុវត្ថិភាព"។</translation> -<translation id="6294610283659775533">អ្នកអាចផ្ញើផ្ទាំងបានរវាងឧបករណ៍ ដែលបានចូលគណនី Google ដូចគ្នា</translation> <translation id="6321526113093607004">បញ្ចូលទៅក្នុងចំណាំ</translation> <translation id="6324669097367352121">ការកំណត់ការចូល</translation> <translation id="6337234675334993532">ការអ៊ីនគ្រីប</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_kn.xtb b/ios/chrome/app/strings/resources/ios_strings_kn.xtb index e61bd09..0992bd1 100644 --- a/ios/chrome/app/strings/resources/ios_strings_kn.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_kn.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524"><ph name="LANGUAGE" /> ಅನ್ನು ಅನುವಾದಿಸುವ ಕೊಡುಗೆ</translation> <translation id="6289501276895392862"><ph name="CHANNEL_NAME" /> ಅನ್ನು ಅನ್ಫಾಲೋ ಮಾಡಲಾಗಿದೆ</translation> <translation id="6293101329759844770">ಸುರಕ್ಷಿತ ಬ್ರೌಸಿಂಗ್ ಅನ್ನು ಆನ್ ಮಾಡಲು, <ph name="BEGIN_LINK" />Google ಸೇವೆಗಳನ್ನು<ph name="END_LINK" /> ತೆರೆಯಿರಿ ಮತ್ತು ಸುರಕ್ಷಿತ ಬ್ರೌಸಿಂಗ್ ಅನ್ನು ಟ್ಯಾಪ್ ಮಾಡಿ.</translation> -<translation id="6294610283659775533">ಒಂದೇ Google ಖಾತೆಯನ್ನು ಬಳಸಿಕೊಂಡು ಸೈನ್ ಇನ್ ಮಾಡಿರುವ ಸಾಧನಗಳ ನಡುವೆ ನೀವು ಟ್ಯಾಬ್ಗಳನ್ನು ಕಳುಹಿಸಬಹುದು</translation> <translation id="6321526113093607004">ಬುಕ್ಮಾರ್ಕ್ಗಳಿಗೆ ಸೇರಿಸಿ</translation> <translation id="6324669097367352121">ಸೈನ್ ಇನ್ ಸೆಟ್ಟಿಂಗ್ಗಳು</translation> <translation id="6337234675334993532">ಎನ್ಕ್ರಿಪ್ಶನ್</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ko.xtb b/ios/chrome/app/strings/resources/ios_strings_ko.xtb index b48745f..3f6325f 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ko.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ko.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524"><ph name="LANGUAGE" /> 번역 옵션 제공</translation> <translation id="6289501276895392862"><ph name="CHANNEL_NAME" /> 팔로우를 해제했습니다.</translation> <translation id="6293101329759844770">세이프 브라우징을 사용 설정하려면 <ph name="BEGIN_LINK" />Google 서비스<ph name="END_LINK" />를 열고 세이프 브라우징을 탭하세요.</translation> -<translation id="6294610283659775533">동일한 Google 계정으로 로그인한 기기 간에 탭을 보낼 수 있습니다.</translation> <translation id="6321526113093607004">북마크에 추가</translation> <translation id="6324669097367352121">로그인 설정</translation> <translation id="6337234675334993532">암호화</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ky.xtb b/ios/chrome/app/strings/resources/ios_strings_ky.xtb index fd6fd3a..919076d3 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ky.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ky.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524"><ph name="LANGUAGE" /> тилин которууну сунуштоо</translation> <translation id="6289501276895392862"><ph name="CHANNEL_NAME" /> каналына жазылуу токтотулду</translation> <translation id="6293101329759844770">Коопсуз серептөөнү күйгүзүү үчүн <ph name="BEGIN_LINK" />Google кызматтарын<ph name="END_LINK" /> ачып, Коопсуз серептөөнү таптаңыз.</translation> -<translation id="6294610283659775533">Бир Google аккаунту менен кирип турган түзмөктөрдө өтмөктөрдү жөнөтсөңүз болот</translation> <translation id="6321526113093607004">Кыстармаларга кошуу</translation> <translation id="6324669097367352121">Жөндөөлөргө кирүү</translation> <translation id="6337234675334993532">Шифрлөө</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lo.xtb b/ios/chrome/app/strings/resources/ios_strings_lo.xtb index ccd95c29..53da8076 100644 --- a/ios/chrome/app/strings/resources/ios_strings_lo.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_lo.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524">ສະເໜີແປ <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">ເຊົາຕິດຕາມ <ph name="CHANNEL_NAME" /> ແລ້ວ</translation> <translation id="6293101329759844770">ເພື່ອເປີດ Safe Browsing, ກະລຸນາເປີດ <ph name="BEGIN_LINK" />ການບໍລິການ Google<ph name="END_LINK" /> ແລະ ແຕະ Safe Browsing.</translation> -<translation id="6294610283659775533">ທ່ານສາມາດສົ່ງແຖບຕ່າງໆລະຫວ່າງອຸປະກອນທີ່ເຂົ້າສູ່ລະບົບດ້ວຍບັນຊີ Google ດຽວກັນໄດ້</translation> <translation id="6321526113093607004">ເພີ່ມໃສ່ບຸກມາກ</translation> <translation id="6324669097367352121">ເຂົ້າສູ່ລະບົບການຕັ້ງຄ່າ</translation> <translation id="6337234675334993532">ການເຂົ້າລະຫັດ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lt.xtb b/ios/chrome/app/strings/resources/ios_strings_lt.xtb index 0a4f9df2..ea00edd6 100644 --- a/ios/chrome/app/strings/resources/ios_strings_lt.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_lt.xtb
@@ -625,7 +625,6 @@ <translation id="6284652193729350524">Siūlyti versti <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">Nebestebima: <ph name="CHANNEL_NAME" /></translation> <translation id="6293101329759844770">Jei norite įjungti saugų naršymą, atidarykite skiltį <ph name="BEGIN_LINK" />„Google“ paslaugos“<ph name="END_LINK" /> ir palieskite „Saugus naršymas“.</translation> -<translation id="6294610283659775533">Galite siųsti skirtukus iš vieno įrenginio į kitą, kuriuose prisijungta prie tos pačios „Google“ paskyros</translation> <translation id="6321526113093607004">Pridėti prie žymių</translation> <translation id="6324669097367352121">Prisijungimo nustat.</translation> <translation id="6337234675334993532">Šifruotė</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lv.xtb b/ios/chrome/app/strings/resources/ios_strings_lv.xtb index e9f813d..d9fa2058 100644 --- a/ios/chrome/app/strings/resources/ios_strings_lv.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_lv.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524">Piedāvāt tulkot šādā valodā: <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">Sekošana kanālam <ph name="CHANNEL_NAME" /> ir pārtraukta.</translation> <translation id="6293101329759844770">Lai ieslēgtu drošo pārlūkošanu, atveriet sadaļu <ph name="BEGIN_LINK" />Google pakalpojumi<ph name="END_LINK" /> un pieskarieties vienumam Droša pārlūkošana.</translation> -<translation id="6294610283659775533">Varat pārsūtīt cilnes starp ierīcēm, kurās esat pierakstījies vienā un tajā pašā Google kontā.</translation> <translation id="6321526113093607004">Pievienot grāmatzīmēm</translation> <translation id="6324669097367352121">Pierakst.iestatījumi</translation> <translation id="6337234675334993532">Šifrēšana</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mk.xtb b/ios/chrome/app/strings/resources/ios_strings_mk.xtb index 5eaf3dc3..2ea28ac 100644 --- a/ios/chrome/app/strings/resources/ios_strings_mk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_mk.xtb
@@ -329,6 +329,7 @@ <translation id="3775743491439407556">Синхронизацијата не функционира</translation> <translation id="3779810277399252432">Нема интернет-врска.</translation> <translation id="3783017676699494206">Зачувај слика</translation> +<translation id="3789294999358192700">Следете ги чекорите подолу:</translation> <translation id="3789841737615482174">Инсталирај</translation> <translation id="380329542618494757">Име</translation> <translation id="3803696231112616155">Понудувај да го преведеш сајтов</translation> @@ -624,7 +625,6 @@ <translation id="6284652193729350524">Понудувај превод од <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">Се отследи <ph name="CHANNEL_NAME" /></translation> <translation id="6293101329759844770">За да го вклучите „Безбедното прелистување“, отворете <ph name="BEGIN_LINK" />Услуги на Google<ph name="END_LINK" /> и допрете „Безбедно прелистување“.</translation> -<translation id="6294610283659775533">Може да испраќате картички меѓу уредите што се најавени со истата сметка на Google</translation> <translation id="6321526113093607004">Додај во „Обележувачи“</translation> <translation id="6324669097367352121">Поставки за најавување</translation> <translation id="6337234675334993532">Шифрирање</translation> @@ -942,6 +942,7 @@ <translation id="8870413625673593573">Неодамна затворено</translation> <translation id="8876882697946675716">Уредите нека ви бидат синхронизирани</translation> <translation id="8881801611828450202">Пребарај <ph name="SEARCH_ENGINE" /> за сликава</translation> +<translation id="8891935667620843985">Може да отворате сајтови во Chrome автоматски така што ќе го направите ваша стандардна апликација за прелистувач.</translation> <translation id="8898822736010347272">Испраќа URL-адреси до Google од некои страници што ги посетувате, како и ограничени податоци за системот и некои содржини од страниците за да помогне да се откријат нови закани и да се заштитат сите на интернет.</translation> <translation id="8909135823018751308">Сподели…</translation> <translation id="8917490105272468696">Да, прифаќам</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ml.xtb b/ios/chrome/app/strings/resources/ios_strings_ml.xtb index e27acd6..d1659726 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ml.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ml.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524"><ph name="LANGUAGE" /> വിവർത്തനം ചെയ്യാനുള്ള അനുമതി</translation> <translation id="6289501276895392862"><ph name="CHANNEL_NAME" /> പിന്തുടരുന്നത് ഒഴിവാക്കി</translation> <translation id="6293101329759844770">സുരക്ഷിത ബ്രൗസിംഗ് ഓണാക്കാൻ, <ph name="BEGIN_LINK" />Google സേവനങ്ങൾ<ph name="END_LINK" /> തുറന്ന് സുരക്ഷിത ബ്രൗസിംഗ് ടാപ്പ് ചെയ്യുക.</translation> -<translation id="6294610283659775533">ഒരേ Google അക്കൗണ്ടിൽ സൈൻ ഇൻ ചെയ്തിരിക്കുന്ന ഉപകരണങ്ങൾ തമ്മിൽ നിങ്ങൾക്ക് ടാബുകൾ അയയ്ക്കാനാകും</translation> <translation id="6321526113093607004">ബുക്ക്മാർക്കുകളിൽ ചേർക്കുക</translation> <translation id="6324669097367352121">സൈൻ ഇൻ ക്രമീകരണങ്ങൾ</translation> <translation id="6337234675334993532">എന്ക്രിപ്ഷന്</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mn.xtb b/ios/chrome/app/strings/resources/ios_strings_mn.xtb index 3e59aa9..f8f4b7b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_mn.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_mn.xtb
@@ -329,6 +329,7 @@ <translation id="3775743491439407556">Синк ажиллахгүй байна</translation> <translation id="3779810277399252432">Интернэт холболт алга.</translation> <translation id="3783017676699494206">Зургийг хадгал</translation> +<translation id="3789294999358192700">Дараах алхмуудыг дагана уу:</translation> <translation id="3789841737615482174">Суулгах</translation> <translation id="380329542618494757">Нэр</translation> <translation id="3803696231112616155">Энэ сайтыг орчуулахыг санал болгох</translation> @@ -623,7 +624,6 @@ <translation id="6284652193729350524"><ph name="LANGUAGE" />-г орчуулахыг санал болгох</translation> <translation id="6289501276895392862"><ph name="CHANNEL_NAME" />-г дагахаа больсон</translation> <translation id="6293101329759844770">Аюулгүй үзэлтийг асаахын тулд <ph name="BEGIN_LINK" />Google-н үйлчилгээнүүдийг<ph name="END_LINK" /> нээж, Аюулгүй үзэлт дээр товшино уу.</translation> -<translation id="6294610283659775533">Та ижил Google Бүртгэлээр нэвтэрсэн төхөөрөмжүүдийн хооронд таб илгээх боломжтой</translation> <translation id="6321526113093607004">Хавчуургaд нэмэх</translation> <translation id="6324669097367352121">Нэвтрэх тохиргоонууд</translation> <translation id="6337234675334993532">Шифрлэх</translation> @@ -941,6 +941,7 @@ <translation id="8870413625673593573">Саяхан хаагдсан</translation> <translation id="8876882697946675716">Төхөөрөмжүүдээ синк хийсэн хэвээр байгаарай</translation> <translation id="8881801611828450202">Энэ зургийг <ph name="SEARCH_ENGINE" />-с хайх</translation> +<translation id="8891935667620843985">Та Chrome-г өгөгдмөл хөтчийн програм болгосноор холбоосуудыг автоматаар нээх боломжтой.</translation> <translation id="8898822736010347272">Шинэ аюул заналыг олж илрүүлэх болон веб дээрх бүх хүнийг хамгаалахад туслахын тулд таны зочилдог зарим хуудасны URL, системийн хязгаарлагдмал мэдээлэл болон хуудасны зарим контентыг Google рүү илгээдэг.</translation> <translation id="8909135823018751308">Мэдээллийг хуваалцах ...</translation> <translation id="8917490105272468696">Тийм, би зөвшөөрч байна</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mr.xtb b/ios/chrome/app/strings/resources/ios_strings_mr.xtb index 0816828..234fb9ce4 100644 --- a/ios/chrome/app/strings/resources/ios_strings_mr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_mr.xtb
@@ -626,7 +626,6 @@ <translation id="6289501276895392862"><ph name="CHANNEL_NAME" /> ला अनफॉलो करा</translation> <translation id="6293101329759844770">सुरक्षित ब्राउझिंग सुरू करण्यासाठी, <ph name="BEGIN_LINK" />Google सेवा<ph name="END_LINK" /> उघडा आणि सुरक्षित ब्राउझिंग वर टॅप करा.</translation> -<translation id="6294610283659775533">तुम्ही हेच Google खाते वापरून साइन केलेल्या डिव्हाइस दरम्यान टॅब पाठवू शकता</translation> <translation id="6321526113093607004">बुकमार्क मध्ये जोडा</translation> <translation id="6324669097367352121">साइन इन सेटिंग्ज</translation> <translation id="6337234675334993532">एंक्रिप्शन</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ms.xtb b/ios/chrome/app/strings/resources/ios_strings_ms.xtb index 6149b66..9318677 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ms.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ms.xtb
@@ -329,6 +329,7 @@ <translation id="3775743491439407556">Penyegerakan Tidak Berfungsi</translation> <translation id="3779810277399252432">Tiada sambungan Internet.</translation> <translation id="3783017676699494206">Simpan Imej</translation> +<translation id="3789294999358192700">Ikut langkah di bawah:</translation> <translation id="3789841737615482174">Pasang</translation> <translation id="380329542618494757">Nama</translation> <translation id="3803696231112616155">Tawarkan untuk menterjemahkan tapak ini</translation> @@ -624,7 +625,6 @@ <translation id="6284652193729350524">Tawarkan untuk menterjemah <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">Telah berhenti mengikuti <ph name="CHANNEL_NAME" /></translation> <translation id="6293101329759844770">Untuk menghidupkan Penyemakan Imbas Selamat, buka <ph name="BEGIN_LINK" />Perkhidmatan Google<ph name="END_LINK" /> dan ketik Penyemakan Imbas Selamat.</translation> -<translation id="6294610283659775533">Anda boleh menghantar tab antara peranti yang dilog masuk dengan Google Account yang sama</translation> <translation id="6321526113093607004">Tambahkan pada Penanda Halaman</translation> <translation id="6324669097367352121">Tetapan log masuk</translation> <translation id="6337234675334993532">Penyulitan</translation> @@ -942,6 +942,7 @@ <translation id="8870413625673593573">Ditutup Baru-baru Ini</translation> <translation id="8876882697946675716">Pastikan Peranti Anda Segerak</translation> <translation id="8881801611828450202">Cari Imej Ini di <ph name="SEARCH_ENGINE" /></translation> +<translation id="8891935667620843985">Anda boleh membuka pautan dalam Chrome secara automatik dengan menjadikan Chrome sebagai Apl Penyemak Imbas Lalai anda.</translation> <translation id="8898822736010347272">Menghantar URL sesetengah halaman yang anda lawati, maklumat sistem yang terhad dan sebahagian kandungan halaman kepada Google untuk menemukan ancaman baharu dan melindungi semua pengguna web.</translation> <translation id="8909135823018751308">Kongsi…</translation> <translation id="8917490105272468696">Ya, Saya Ikut Serta</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_my.xtb b/ios/chrome/app/strings/resources/ios_strings_my.xtb index efcc558..ce20e56 100644 --- a/ios/chrome/app/strings/resources/ios_strings_my.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_my.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524"><ph name="LANGUAGE" /> သို့ ဘာသာပြန်ဆိုရန်အတွက် ကမ်းလှမ်းရန်</translation> <translation id="6289501276895392862"><ph name="CHANNEL_NAME" /> ကို လိုက်မကြည့်တော့ပါ</translation> <translation id="6293101329759844770">'လုံခြုံစွာ ဖွင့်ကြည့်ခြင်း' ကိုဖွင့်ရန် <ph name="BEGIN_LINK" />Google ဝန်ဆောင်မှုများ<ph name="END_LINK" /> တွင် 'လုံခြုံစွာ ဖွင့်ကြည့်ခြင်း' ကို တို့ပါ။</translation> -<translation id="6294610283659775533">တူညီသည့် Google Account ဖြင့် လက်မှတ်ထိုး ဝင်ထားသည့်စက်များအကြား တဘ်များပို့နိုင်သည်</translation> <translation id="6321526113093607004">လိပ်စာများသို့ ထည့်ရန်</translation> <translation id="6324669097367352121">လက်မှတ်ထိုးဝင်ရောက်ခြင်း ဆက်တင်များ</translation> <translation id="6337234675334993532">လျှို့ဝှက်ကုဒ်သွင်းခြင်း</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ne.xtb b/ios/chrome/app/strings/resources/ios_strings_ne.xtb index 18d847b..36f0469d 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ne.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ne.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524"><ph name="LANGUAGE" /> भाषा अनुवाद गर्न प्रस्ताव गर्नुहोस्</translation> <translation id="6289501276895392862"><ph name="CHANNEL_NAME" /> अनफलो गरियो</translation> <translation id="6293101329759844770">Safe Browsing अन गर्न <ph name="BEGIN_LINK" />Google का सेवाहरू<ph name="END_LINK" /> खोल्नुहोस् र Safe Browsing मा ट्याप गर्नुहोस्।</translation> -<translation id="6294610283659775533">तपाईं उही Google खातामार्फत साइन इन गरिएका एउटा डिभाइसबाट अर्को डिभाइसमा ट्याबहरू पठाउन सक्नुहुन्छ</translation> <translation id="6321526113093607004">'बुकमार्कहरू' मा हाल्नुहोस्</translation> <translation id="6324669097367352121">सेटिङहरूमा साइन इन गर्नुहोस्</translation> <translation id="6337234675334993532">इन्क्रिप्सन</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_nl.xtb b/ios/chrome/app/strings/resources/ios_strings_nl.xtb index 1a85920..74f075f 100644 --- a/ios/chrome/app/strings/resources/ios_strings_nl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_nl.xtb
@@ -329,6 +329,7 @@ <translation id="3775743491439407556">Synchronisatie werkt niet</translation> <translation id="3779810277399252432">Geen internetverbinding.</translation> <translation id="3783017676699494206">Afbeelding opslaan</translation> +<translation id="3789294999358192700">Voer de onderstaande stappen uit:</translation> <translation id="3789841737615482174">Installeren</translation> <translation id="380329542618494757">Naam</translation> <translation id="3803696231112616155">Aanbieden om deze site te vertalen</translation> @@ -624,7 +625,6 @@ <translation id="6284652193729350524">Aanbieden om <ph name="LANGUAGE" /> te vertalen</translation> <translation id="6289501276895392862"><ph name="CHANNEL_NAME" /> is ontvolgd</translation> <translation id="6293101329759844770">Als je Safe Browsing wilt gebruiken, open je <ph name="BEGIN_LINK" />Google-services<ph name="END_LINK" /> en tik je op Safe Browsing.</translation> -<translation id="6294610283659775533">Je kunt tabbladen sturen tussen apparaten waarop je bent ingelogd met hetzelfde Google-account.</translation> <translation id="6321526113093607004">Toevoegen aan bookmarks</translation> <translation id="6324669097367352121">Inloginstellingen</translation> <translation id="6337234675334993532">Versleuteling</translation> @@ -942,6 +942,7 @@ <translation id="8870413625673593573">Recent gesloten</translation> <translation id="8876882697946675716">Je apparaten synchroniseren</translation> <translation id="8881801611828450202">Zoeken op <ph name="SEARCH_ENGINE" /> naar deze afbeelding</translation> +<translation id="8891935667620843985">Je kunt links automatisch openen in Chrome door Chrome in te stellen als je standaard browser-app.</translation> <translation id="8898822736010347272">Stuurt URL's van sommige pagina's die je bezoekt, beperkte systeeminformatie en bepaalde paginacontent naar Google om nieuwe dreigingen te ontdekken en iedereen op internet te beschermen.</translation> <translation id="8909135823018751308">Delen</translation> <translation id="8917490105272468696">Ja, aanzetten</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_no.xtb b/ios/chrome/app/strings/resources/ios_strings_no.xtb index b1902c7dc..531b023 100644 --- a/ios/chrome/app/strings/resources/ios_strings_no.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_no.xtb
@@ -329,6 +329,7 @@ <translation id="3775743491439407556">Synkronisering fungerer ikke</translation> <translation id="3779810277399252432">Ingen internettilkobling.</translation> <translation id="3783017676699494206">Lagre bildet</translation> +<translation id="3789294999358192700">Gjør dette:</translation> <translation id="3789841737615482174">Installer</translation> <translation id="380329542618494757">Navn</translation> <translation id="3803696231112616155">Tilby å oversette dette nettstedet</translation> @@ -624,7 +625,6 @@ <translation id="6284652193729350524">Tilby å oversette <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">Sluttet å følge <ph name="CHANNEL_NAME" /></translation> <translation id="6293101329759844770">For å slå på Safe Browsing, åpne <ph name="BEGIN_LINK" />Google-tjenester<ph name="END_LINK" /> og trykk på Safe Browsing.</translation> -<translation id="6294610283659775533">Du kan sende faner mellom enheter som er logget på med samme Google-konto</translation> <translation id="6321526113093607004">Legg til i bokmerker</translation> <translation id="6324669097367352121">Påloggingsinnstillinger</translation> <translation id="6337234675334993532">Kryptering</translation> @@ -942,6 +942,7 @@ <translation id="8870413625673593573">Nylig lukket</translation> <translation id="8876882697946675716">Hold enhetene dine synkronisert</translation> <translation id="8881801611828450202">Søk etter dette bildet i <ph name="SEARCH_ENGINE" /></translation> +<translation id="8891935667620843985">Du kan åpne linker i Chrome automatisk ved å angi Chrome som standard nettleserapp.</translation> <translation id="8898822736010347272">Sender nettadresser for noen av sidene du besøker, begrenset systeminformasjon og noe sideinnhold til Google for å bidra til å oppdage nye trusler og beskytte alle på nettet.</translation> <translation id="8909135823018751308">Del</translation> <translation id="8917490105272468696">Ja, den er grei</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_or.xtb b/ios/chrome/app/strings/resources/ios_strings_or.xtb index 6d3a35f8..630d92d 100644 --- a/ios/chrome/app/strings/resources/ios_strings_or.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_or.xtb
@@ -622,7 +622,6 @@ <translation id="6284652193729350524"><ph name="LANGUAGE" />କୁ ଅନୁବାଦ କରିବା ପାଇଁ ଅଫର୍ କରନ୍ତୁ</translation> <translation id="6289501276895392862"><ph name="CHANNEL_NAME" />କୁ ଅନୁସରଣ କରିବା ବନ୍ଦ କରାଯାଇଛି</translation> <translation id="6293101329759844770">ସେଫ୍ ବ୍ରାଉଜିଂ ଚାଲୁ କରିବାକୁ, <ph name="BEGIN_LINK" />Google ସେବାଗୁଡ଼ିକ<ph name="END_LINK" /> ଖୋଲନ୍ତୁ ଏବଂ ସେଫ୍ ବ୍ରାଉଜିଂରେ ଟାପ୍ କରନ୍ତୁ।</translation> -<translation id="6294610283659775533">ସମାନ Google ଆକାଉଣ୍ଟ ମାଧ୍ୟମରେ ସାଇନ୍ ଇନ୍ କରାଯାଇଥିବା ଡିଭାଇସଗୁଡ଼ିକ ମଧ୍ୟରେ ଆପଣ ଟାବଗୁଡ଼ିକ ପଠାଇପାରିବେ</translation> <translation id="6321526113093607004">ବୁକମାର୍କଗୁଡ଼ିକରେ ଯୋଗ କରନ୍ତୁ</translation> <translation id="6324669097367352121">ସାଇନ୍ ଇନ୍ ସେଟିଂ</translation> <translation id="6337234675334993532">ଏନକ୍ରିପ୍ସନ୍</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pa.xtb b/ios/chrome/app/strings/resources/ios_strings_pa.xtb index ed5337d..e3e5ee7 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pa.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pa.xtb
@@ -329,6 +329,7 @@ <translation id="3775743491439407556">ਸਿੰਕ ਕੰਮ ਨਹੀਂ ਕਰ ਰਿਹਾ ਹੈ</translation> <translation id="3779810277399252432">ਕੋਈ ਇੰਟਰਨੈੱਟ ਕਨੈਕਸ਼ਨ ਨਹੀਂ ਹੈ।</translation> <translation id="3783017676699494206">ਚਿੱਤਰ ਰੱਖਿਅਤ ਕਰੋ</translation> +<translation id="3789294999358192700">ਹੇਠ ਦਿੱਤੇ ਪੜਾਵਾਂ ਦੀ ਪਾਲਣਾ ਕਰੋ:</translation> <translation id="3789841737615482174">ਸਥਾਪਤ ਕਰੋ</translation> <translation id="380329542618494757">ਨਾਮ</translation> <translation id="3803696231112616155">ਇਸ ਸਾਈਟ ਨੂੰ ਅਨੁਵਾਦ ਕਰਨ ਦੀ ਪੇਸ਼ਕਸ਼</translation> @@ -624,7 +625,6 @@ <translation id="6284652193729350524"><ph name="LANGUAGE" /> ਦੇ ਅਨੁਵਾਦ ਲਈ ਪੇਸ਼ਕਸ਼</translation> <translation id="6289501276895392862"><ph name="CHANNEL_NAME" /> ਦਾ ਅਨੁਸਰਣ ਬੰਦ ਕੀਤਾ ਗਿਆ</translation> <translation id="6293101329759844770">ਸੁਰੱਖਿਅਤ ਬ੍ਰਾਊਜ਼ਿੰਗ ਚਾਲੂ ਕਰਨ ਲਈ, <ph name="BEGIN_LINK" />Google ਸੇਵਾਵਾਂ<ph name="END_LINK" /> ਖੋਲ੍ਹੋ ਅਤੇ ਸੁਰੱਖਿਅਤ ਬ੍ਰਾਊਜ਼ਿੰਗ 'ਤੇ ਟੈਪ ਕਰੋ।</translation> -<translation id="6294610283659775533">ਤੁਸੀਂ ਉਨ੍ਹਾਂ ਡੀਵਾਈਸਾਂ ਵਿਚਾਲੇ ਟੈਬਾਂ ਭੇਜ ਸਕਦੇ ਹੋ ਜੋ ਇੱਕੋ Google ਖਾਤੇ ਨਾਲ ਸਾਈਨ-ਇਨ ਕੀਤੇ ਹੋਏ ਹਨ</translation> <translation id="6321526113093607004">ਬੁੱਕਮਾਰਕਾਂ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ</translation> <translation id="6324669097367352121">ਸਾਈਨ-ਇਨ ਸੈਟਿੰਗਾਂ</translation> <translation id="6337234675334993532">ਇਨਕ੍ਰਿਪਸ਼ਨ</translation> @@ -942,6 +942,7 @@ <translation id="8870413625673593573">ਹੁਣੇ ਜਿਹੇ ਬੰਦ ਕੀਤੀਆਂ</translation> <translation id="8876882697946675716">ਆਪਣੇ ਡੀਵਾਈਸਾਂ ਦਾ ਆਪਸ ਵਿੱਚ ਸਿੰਕ ਕਰਕੇ ਰੱਖੋ</translation> <translation id="8881801611828450202">ਇਸ ਚਿੱਤਰ ਲਈ <ph name="SEARCH_ENGINE" /> ਖੋਜੋ</translation> +<translation id="8891935667620843985">ਤੁਸੀਂ Chrome ਨੂੰ ਆਪਣੀ ਪੂਰਵ-ਨਿਰਧਾਰਿਤ ਬ੍ਰਾਊਜ਼ਰ ਐਪ ਬਣਾ ਕੇ ਸਵੈਚਲਿਤ ਤੌਰ 'ਤੇ ਇਸ ਵਿੱਚ ਲਿੰਕ ਖੋਲ੍ਹ ਸਕਦੇ ਹੋ।</translation> <translation id="8898822736010347272">ਵੈੱਬ 'ਤੇ ਨਵੇਂ ਖਤਰਿਆਂ ਨੂੰ ਲੱਭ ਕੇ ਹਰੇਕ ਦੀ ਸੁਰੱਖਿਆ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕਰਨ ਲਈ ਤੁਹਾਡੇ ਵੱਲੋਂ ਦੇਖੇ ਗਏ ਕੁਝ ਪੰਨਿਆਂ ਦੇ URL, ਸੀਮਤ ਸਿਸਟਮ ਜਾਣਕਾਰੀ ਅਤੇ ਕੁਝ ਨਵੀਂ ਪੰਨਾ ਸਮੱਗਰੀ Google ਨੂੰ ਭੇਜੇ ਜਾਂਦੇ ਹਨ।</translation> <translation id="8909135823018751308">ਸ਼ੇਅਰ ਕਰੋ…</translation> <translation id="8917490105272468696">ਹਾਂ, ਮੈਂ ਸਹਿਮਤ ਹਾਂ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pl.xtb b/ios/chrome/app/strings/resources/ios_strings_pl.xtb index 32b7af4..b34745a 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pl.xtb
@@ -625,7 +625,6 @@ <translation id="6284652193729350524">Proponuj tłumaczenie z języka: <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">Usunięto z obserwowanych: <ph name="CHANNEL_NAME" /></translation> <translation id="6293101329759844770">Aby włączyć Bezpieczne przeglądanie, otwórz <ph name="BEGIN_LINK" />Usługi Google<ph name="END_LINK" /> i kliknij Bezpieczne przeglądanie.</translation> -<translation id="6294610283659775533">Możesz przesyłać karty między urządzeniami zalogowanymi na to samo konto Google</translation> <translation id="6321526113093607004">Dodaj do Zakładek</translation> <translation id="6324669097367352121">Ustawienia logowania</translation> <translation id="6337234675334993532">Szyfrowanie</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 7220fb7..e58660c 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524">Oferecer a opção de traduzir o <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">Você parou de seguir <ph name="CHANNEL_NAME" /></translation> <translation id="6293101329759844770">Acesse <ph name="BEGIN_LINK" />Serviços do Google<ph name="END_LINK" /> e toque em "Navegação segura" para ativar esse recurso.</translation> -<translation id="6294610283659775533">Você pode compartilhar guias entre dispositivos conectados à mesma Conta do Google</translation> <translation id="6321526113093607004">Adicionar aos favoritos</translation> <translation id="6324669097367352121">Configurações de login</translation> <translation id="6337234675334993532">Criptografia</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb index 3c0233a..9878756 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524">Propor tradução de <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">Deixou de seguir o canal <ph name="CHANNEL_NAME" /></translation> <translation id="6293101329759844770">Para ativar a Navegação segura, abra <ph name="BEGIN_LINK" />Serviços Google<ph name="END_LINK" /> e toque em Navegação segura.</translation> -<translation id="6294610283659775533">Pode enviar separadores entre dispositivos que têm sessão iniciada com a mesma Conta Google</translation> <translation id="6321526113093607004">Adicionar aos Marcadores</translation> <translation id="6324669097367352121">Definições de início de sessão</translation> <translation id="6337234675334993532">Encriptação</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ro.xtb b/ios/chrome/app/strings/resources/ios_strings_ro.xtb index 221c33c..a3aaf3f 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ro.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ro.xtb
@@ -329,6 +329,7 @@ <translation id="3775743491439407556">Sincronizarea nu funcționează</translation> <translation id="3779810277399252432">Nicio conexiune la internet.</translation> <translation id="3783017676699494206">Salvează imaginea</translation> +<translation id="3789294999358192700">Urmează pașii de mai jos.</translation> <translation id="3789841737615482174">Instalează</translation> <translation id="380329542618494757">Nume</translation> <translation id="3803696231112616155">Oferă traducerea acestui site</translation> @@ -624,7 +625,6 @@ <translation id="6284652193729350524">Oferă traducerea din <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">Ai anulat urmărirea pentru <ph name="CHANNEL_NAME" /></translation> <translation id="6293101329759844770">Pentru a activa Navigarea sigură, deschide <ph name="BEGIN_LINK" />Serviciile Google<ph name="END_LINK" /> și atinge Navigare sigură.</translation> -<translation id="6294610283659775533">Poți să trimiți file între dispozitivele conectate cu același Cont Google.</translation> <translation id="6321526113093607004">Adaugă în Marcaje</translation> <translation id="6324669097367352121">Setări de conectare</translation> <translation id="6337234675334993532">Criptare</translation> @@ -942,6 +942,7 @@ <translation id="8870413625673593573">Închise recent</translation> <translation id="8876882697946675716">Menține dispozitivele sincronizate</translation> <translation id="8881801611828450202">Caută această imagine cu <ph name="SEARCH_ENGINE" /></translation> +<translation id="8891935667620843985">Poți deschide automat linkuri în Chrome, setând-o ca aplicație browser prestabilită.</translation> <translation id="8898822736010347272">Trimite la Google adrese URL ale unor pagini pe care le accesezi, informații despre sistem limitate și o parte din conținutul paginii pentru a identifica amenințările noi și a proteja toți utilizatorii de pe web.</translation> <translation id="8909135823018751308">Trimite…</translation> <translation id="8917490105272468696">Da, accept</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ru.xtb b/ios/chrome/app/strings/resources/ios_strings_ru.xtb index 57d8558a..e51a192 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ru.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ru.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524">Предлагать перевести страницы на этом языке (<ph name="LANGUAGE" />)</translation> <translation id="6289501276895392862">Подписка на "<ph name="CHANNEL_NAME" />" отменена.</translation> <translation id="6293101329759844770">Чтобы включить Безопасный просмотр, откройте <ph name="BEGIN_LINK" />сервисы Google<ph name="END_LINK" /> и нажмите "Безопасный просмотр".</translation> -<translation id="6294610283659775533">Вы можете отправлять вкладки на устройства, на которых выполнен вход в тот же аккаунт Google.</translation> <translation id="6321526113093607004">Добавить в закладки</translation> <translation id="6324669097367352121">Настройки входа</translation> <translation id="6337234675334993532">Шифрование</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_si.xtb b/ios/chrome/app/strings/resources/ios_strings_si.xtb index 28df7e2e..3b9ae453 100644 --- a/ios/chrome/app/strings/resources/ios_strings_si.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_si.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524"><ph name="LANGUAGE" /> පරිවර්තන කිරීමට පිරිනමන්න</translation> <translation id="6289501276895392862"><ph name="CHANNEL_NAME" /> අනුගමනය කිරීමෙන් ඉවත් විය</translation> <translation id="6293101329759844770">සුරක්ෂිත බ්රවුස් කිරීම ක්රියාත්මක කිරීමට, <ph name="BEGIN_LINK" />Google සේවා<ph name="END_LINK" /> විවෘත කර සුරක්ෂිත බ්රවුස් කිරීම තට්ටු කරන්න.</translation> -<translation id="6294610283659775533">එකම Google ගිණුම සමඟ පුරා ඇති උපාංග අතර ඔබට ටැබ යැවිය හැකිය</translation> <translation id="6321526113093607004">පිටුසන් වෙත එක් කරන්න</translation> <translation id="6324669097367352121">පුරනය වීමේ සැකසීම්</translation> <translation id="6337234675334993532">සංකේතනය</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sk.xtb b/ios/chrome/app/strings/resources/ios_strings_sk.xtb index 2b73eb0..c2f585c 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sk.xtb
@@ -329,6 +329,7 @@ <translation id="3775743491439407556">Synchronizácia nefunguje</translation> <translation id="3779810277399252432">Internetové pripojenie nie je k dispozícii.</translation> <translation id="3783017676699494206">Uložiť obrázok</translation> +<translation id="3789294999358192700">Postupujte takto:</translation> <translation id="3789841737615482174">Inštalovať</translation> <translation id="380329542618494757">Meno</translation> <translation id="3803696231112616155">Ponúkať preklad tohto webu</translation> @@ -624,7 +625,6 @@ <translation id="6284652193729350524">Ponúkať preklad jazyka <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">Prestali ste sledovať <ph name="CHANNEL_NAME" /></translation> <translation id="6293101329759844770">Ak chcete zapnúť Bezpečné prehliadanie, otvorte <ph name="BEGIN_LINK" />Služby Googlu<ph name="END_LINK" /> a klepnite na Bezpečné prehliadanie.</translation> -<translation id="6294610283659775533">Môžete odosielať karty medzi zariadeniami, v ktorých sa prihlásite rovnakým účtom Google</translation> <translation id="6321526113093607004">Pridať medzi záložky</translation> <translation id="6324669097367352121">Nastavenia prihlásenia</translation> <translation id="6337234675334993532">Šifrovanie</translation> @@ -942,6 +942,7 @@ <translation id="8870413625673593573">Nedávno zatvorené</translation> <translation id="8876882697946675716">Udržiavajte svoje zariadenia synchronizované</translation> <translation id="8881801611828450202">Hľadať tento obrázok v službe <ph name="SEARCH_ENGINE" /></translation> +<translation id="8891935667620843985">Ak nastavíte Chrome ako predvolený prehliadač, budete v ňom môcť automaticky otvárať odkazy.</translation> <translation id="8898822736010347272">Odosiela webové adresy niektorých navštívených stránok, obmedzené informácie o systéme a určitý obsah stránok, aby pomáhalo objavovať nové hrozby a chrániť všetkých na internete.</translation> <translation id="8909135823018751308">Zdieľať…</translation> <translation id="8917490105272468696">Áno, súhlasím</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sl.xtb b/ios/chrome/app/strings/resources/ios_strings_sl.xtb index 3bef4397..eece22a 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sl.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524">Ponudi prevajanje iz jezika <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">Spremljanje <ph name="CHANNEL_NAME" /> je preklicano.</translation> <translation id="6293101329759844770">Če želite vklopiti Varno brskanje, odprite <ph name="BEGIN_LINK" />Google storitve<ph name="END_LINK" /> in se dotaknite »Varno brskanje«.</translation> -<translation id="6294610283659775533">Med napravami, v katerih ste prijavljeni z istim računom Google, si lahko pošiljate zavihke.</translation> <translation id="6321526113093607004">Dodaj med zaznamke</translation> <translation id="6324669097367352121">Nastavitve za prijavo</translation> <translation id="6337234675334993532">Šifriranje</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sq.xtb b/ios/chrome/app/strings/resources/ios_strings_sq.xtb index 943688b7..5f2623c7 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sq.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sq.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524">Ofro përkthimin në <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">Ndjekja e <ph name="CHANNEL_NAME" /> u anulua</translation> <translation id="6293101329759844770">Për të aktivizuar "Shfletimin e sigurt", hap <ph name="BEGIN_LINK" />Shërbimet e Google<ph name="END_LINK" /> dhe trokit te "Shfletimi i sigurt".</translation> -<translation id="6294610283659775533">Mund të dërgosh skeda ndërmjet pajisjeve që janë të identifikuara me të njëjtën "Llogari të Google"</translation> <translation id="6321526113093607004">Shto te faqeshënuesit</translation> <translation id="6324669097367352121">Cilësimet e identifikimit</translation> <translation id="6337234675334993532">Enkriptimi</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 2d26e98e..d750d373 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb
@@ -329,6 +329,7 @@ <translation id="3775743491439407556">Sinhronizacija ne radi</translation> <translation id="3779810277399252432">Nema internet veze.</translation> <translation id="3783017676699494206">Sačuvaj sliku</translation> +<translation id="3789294999358192700">Pratite korake ispod:</translation> <translation id="3789841737615482174">Instaliraj</translation> <translation id="380329542618494757">Ime</translation> <translation id="3803696231112616155">Ponudi prevod ovog sajta</translation> @@ -624,7 +625,6 @@ <translation id="6284652193729350524">Ponudi prevod za <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">Opozvali ste praćenje kanala <ph name="CHANNEL_NAME" /></translation> <translation id="6293101329759844770">Da biste uključili Bezbedno pregledanje, otvorite <ph name="BEGIN_LINK" />Google usluge<ph name="END_LINK" /> i dodirnite Bezbedno pregledanje.</translation> -<translation id="6294610283659775533">Možete da šaljete kartice s jednog uređaja na drugi ako ste na njih prijavljeni pomoću istog Google naloga</translation> <translation id="6321526113093607004">Dodaj u obeleživače</translation> <translation id="6324669097367352121">Podešavanja prijavljivanja</translation> <translation id="6337234675334993532">Šifrovanje</translation> @@ -942,6 +942,7 @@ <translation id="8870413625673593573">Nedavno zatvoreno</translation> <translation id="8876882697946675716">Sinhronizujte uređaje</translation> <translation id="8881801611828450202">Pretraži ovu sliku u <ph name="SEARCH_ENGINE" />-u</translation> +<translation id="8891935667620843985">Možete da automatski otvarate linkove u Chrome-u tako što ćete ga podesiti kao podrazumevanu aplikaciju za pregledanje.</translation> <translation id="8898822736010347272">Šalje Google-u URL-ove nekih stranica koje posećujete, ograničene informacije o sistemu i određeni sadržaj stranica da bi se otkrile nove pretnje i zaštitili svi širom veba.</translation> <translation id="8909135823018751308">Deli...</translation> <translation id="8917490105272468696">Da, omogući</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sr.xtb b/ios/chrome/app/strings/resources/ios_strings_sr.xtb index ec6b8f4..5685a3f2 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sr.xtb
@@ -329,6 +329,7 @@ <translation id="3775743491439407556">Синхронизација не ради</translation> <translation id="3779810277399252432">Нема интернет везе.</translation> <translation id="3783017676699494206">Сачувај слику</translation> +<translation id="3789294999358192700">Пратите кораке испод:</translation> <translation id="3789841737615482174">Инсталирај</translation> <translation id="380329542618494757">Име</translation> <translation id="3803696231112616155">Понуди превод овог сајта</translation> @@ -624,7 +625,6 @@ <translation id="6284652193729350524">Понуди превод за <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">Опозвали сте праћење канала <ph name="CHANNEL_NAME" /></translation> <translation id="6293101329759844770">Да бисте укључили Безбедно прегледање, отворите <ph name="BEGIN_LINK" />Google услуге<ph name="END_LINK" /> и додирните Безбедно прегледање.</translation> -<translation id="6294610283659775533">Можете да шаљете картице с једног уређаја на други ако сте на њих пријављени помоћу истог Google налога</translation> <translation id="6321526113093607004">Додај у обележиваче</translation> <translation id="6324669097367352121">Подешавања пријављивања</translation> <translation id="6337234675334993532">Шифровање</translation> @@ -942,6 +942,7 @@ <translation id="8870413625673593573">Недавно затворено</translation> <translation id="8876882697946675716">Синхронизујте уређаје</translation> <translation id="8881801611828450202">Претражи ову слику у <ph name="SEARCH_ENGINE" />-у</translation> +<translation id="8891935667620843985">Можете да аутоматски отварате линкове у Chrome-у тако што ћете га подесити као подразумевану апликацију за прегледање.</translation> <translation id="8898822736010347272">Шаље Google-у URL-ове неких страница које посећујете, ограничене информације о систему и одређени садржај страница да би се откриле нове претње и заштитили сви широм веба.</translation> <translation id="8909135823018751308">Дели...</translation> <translation id="8917490105272468696">Да, омогући</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sv.xtb b/ios/chrome/app/strings/resources/ios_strings_sv.xtb index 2c128d6..dca11d7 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sv.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sv.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524">Erbjud översättning från <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">Slutade följa <ph name="CHANNEL_NAME" /></translation> <translation id="6293101329759844770">Öppna <ph name="BEGIN_LINK" />Googles tjänster<ph name="END_LINK" /> och tryck på Säker webbsökning om du vill aktivera det.</translation> -<translation id="6294610283659775533">Du kan skicka flikar mellan enheter som är inloggade på samma Google-konto</translation> <translation id="6321526113093607004">Lägg till i bokmärken</translation> <translation id="6324669097367352121">Inloggningsinställn.</translation> <translation id="6337234675334993532">Kryptering</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sw.xtb b/ios/chrome/app/strings/resources/ios_strings_sw.xtb index e789f9a..efde94e2 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sw.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sw.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524">Jitolee kutafsiri kutoka <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">Umeacha kufuatilia <ph name="CHANNEL_NAME" /></translation> <translation id="6293101329759844770">Ili uwashe kipengele cha Kuvinjari Salama, fungua <ph name="BEGIN_LINK" />Huduma za Google<ph name="END_LINK" /> na uguse Kuvinjari Salama.</translation> -<translation id="6294610283659775533">Unaweza kutuma vichupo kati ya vifaa ulivyotumia kuingia katika Akaunti moja ya Google</translation> <translation id="6321526113093607004">Ongeza kwenye Alamisho</translation> <translation id="6324669097367352121">Ingia kwenye mipangilio</translation> <translation id="6337234675334993532">Usimbaji fiche</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ta.xtb b/ios/chrome/app/strings/resources/ios_strings_ta.xtb index 4223a38..468d0bc5 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ta.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ta.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524"><ph name="LANGUAGE" /> க்கு மொழிபெயர்</translation> <translation id="6289501276895392862"><ph name="CHANNEL_NAME" /> ஐப் பின்தொடர்வதை நிறுத்திவிட்டீர்கள்</translation> <translation id="6293101329759844770">’பாதுகாப்பு உலாவலை’ இயக்க, <ph name="BEGIN_LINK" />Google சேவைகள்<ph name="END_LINK" /> என்பதைத் திறந்து ’பாதுகாப்பு உலாவல்’ என்பதைத் தட்டவும்.</translation> -<translation id="6294610283659775533">ஒரே Google கணக்கின் மூலம் உள்நுழைந்துள்ள சாதனங்களுக்கு இடையே பக்கங்களை அனுப்பிக்கொள்ள முடியும்</translation> <translation id="6321526113093607004">புக்மார்க்குகளில் சேர்</translation> <translation id="6324669097367352121">உள்நுழைவு அமைப்புகள்</translation> <translation id="6337234675334993532">என்க்ரிப்ஷன்</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_te.xtb b/ios/chrome/app/strings/resources/ios_strings_te.xtb index 4dab48b..e753b99f 100644 --- a/ios/chrome/app/strings/resources/ios_strings_te.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_te.xtb
@@ -329,6 +329,7 @@ <translation id="3775743491439407556">సింక్ పని చేయడం లేదు</translation> <translation id="3779810277399252432">ఇంటర్నెట్ కనెక్షన్ లేదు.</translation> <translation id="3783017676699494206">చిత్రాన్ని సేవ్ చేయి</translation> +<translation id="3789294999358192700">కింది దశలను ఫాలో అవ్వండి:</translation> <translation id="3789841737615482174">ఇన్స్టాల్ చేయి</translation> <translation id="380329542618494757">పేరు</translation> <translation id="3803696231112616155">ఈ సైట్కు అనువాదం అందించే సూచన</translation> @@ -624,7 +625,6 @@ <translation id="6284652193729350524"><ph name="LANGUAGE" />లోకి అనువాదం అందించే సూచన</translation> <translation id="6289501276895392862"><ph name="CHANNEL_NAME" />ను అన్-ఫాలో చేశారు</translation> <translation id="6293101329759844770">సురక్షిత బ్రౌజింగ్ ఆన్ చేయడానికి, <ph name="BEGIN_LINK" />Google సర్వీస్ల<ph name="END_LINK" />ను తెరిచి, 'సురక్షిత బ్రౌజింగ్'ను ట్యాప్ చేయండి.</translation> -<translation id="6294610283659775533">ఒకే Google ఖాతాతో సైన్ ఇన్ చేయబడి ఉన్న పరికరాల మధ్య మీరు ట్యాబ్లను పంపవచ్చు</translation> <translation id="6321526113093607004">బుక్మార్క్లకు జోడించు</translation> <translation id="6324669097367352121">సైన్ ఇన్ సెట్టింగ్లు</translation> <translation id="6337234675334993532">ఎన్క్రిప్షన్</translation> @@ -942,6 +942,7 @@ <translation id="8870413625673593573">ఇటీవల మూసివేసినవి</translation> <translation id="8876882697946675716">మీ పరికరాలను సింక్లో ఉంచండి</translation> <translation id="8881801611828450202">ఈ చిత్రం కోసం <ph name="SEARCH_ENGINE" />ని వెతకండి</translation> +<translation id="8891935667620843985">Chromeను మీ ఆటోమేటిక్ బ్రౌజర్ యాప్గా చేయడం ద్వారా, దానిలో లింక్లను ఆటోమేటిక్గా తెరవవచ్చు.</translation> <translation id="8898822736010347272">కొత్త థ్రెట్స్ను గుర్తించడంలో, వెబ్లోని అందరు యూజర్లను రక్షించడంలో సహాయపడేందుకు మీరు సందర్శించే కొన్ని పేజీల URLలను, కొంత సిస్టమ్ సమాచారాన్ని, కొంత పేజీ కంటెంట్ను Googleకు పంపుతుంది.</translation> <translation id="8909135823018751308">షేర్ చేయండి…</translation> <translation id="8917490105272468696">సరే, నాకు సమ్మతమే</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_th.xtb b/ios/chrome/app/strings/resources/ios_strings_th.xtb index ce1a359..7b581e7 100644 --- a/ios/chrome/app/strings/resources/ios_strings_th.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_th.xtb
@@ -329,6 +329,7 @@ <translation id="3775743491439407556">การซิงค์ไม่ทำงาน</translation> <translation id="3779810277399252432">ไม่มีการเชื่อมต่ออินเทอร์เน็ต</translation> <translation id="3783017676699494206">บันทึกภาพ</translation> +<translation id="3789294999358192700">โดยทำตามขั้นตอนด้านล่างนี้</translation> <translation id="3789841737615482174">ติดตั้ง</translation> <translation id="380329542618494757">ชื่อ</translation> <translation id="3803696231112616155">เสนอให้แปลเว็บไซต์นี้</translation> @@ -624,7 +625,6 @@ <translation id="6284652193729350524">เสนอการแปล <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">เลิกติดตาม <ph name="CHANNEL_NAME" /> แล้ว</translation> <translation id="6293101329759844770">หากต้องการเปิด Google Safe Browsing ให้เปิด<ph name="BEGIN_LINK" />บริการของ Google<ph name="END_LINK" /> จากนั้นแตะ Google Safe Browsing</translation> -<translation id="6294610283659775533">คุณสามารถส่งแท็บระหว่างอุปกรณ์ที่ลงชื่อเข้าใช้บัญชี Google เดียวกัน</translation> <translation id="6321526113093607004">เพิ่มลงในบุ๊กมาร์ก</translation> <translation id="6324669097367352121">ตั้งค่าลงชื่อเข้าใช้</translation> <translation id="6337234675334993532">การเข้ารหัส</translation> @@ -942,6 +942,7 @@ <translation id="8870413625673593573">เพิ่งปิด</translation> <translation id="8876882697946675716">ซิงค์อุปกรณ์อยู่เสมอ</translation> <translation id="8881801611828450202">ค้นหาภาพนี้ใน <ph name="SEARCH_ENGINE" /></translation> +<translation id="8891935667620843985">คุณเปิดลิงก์ใน Chrome โดยอัตโนมัติได้ด้วยการตั้งเป็นแอปเบราว์เซอร์เริ่มต้น</translation> <translation id="8898822736010347272">ส่ง URL ของหน้าบางหน้าที่คุณเข้าชม ข้อมูลระบบที่จำกัด และเนื้อหาบางส่วนของหน้าไปให้ Google เพื่อช่วยตรวจหาภัยคุกคามใหม่ๆ และปกป้องทุกคนที่ใช้อินเทอร์เน็ต</translation> <translation id="8909135823018751308">แชร์…</translation> <translation id="8917490105272468696">ได้สิ ตกลง</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_tr.xtb b/ios/chrome/app/strings/resources/ios_strings_tr.xtb index cdf61d21..828193cf 100644 --- a/ios/chrome/app/strings/resources/ios_strings_tr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_tr.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524"><ph name="LANGUAGE" /> diline çevirmeyi öner</translation> <translation id="6289501276895392862"><ph name="CHANNEL_NAME" /> takibi bırakıldı</translation> <translation id="6293101329759844770">Güvenli Tarama'yı etkinleştirmek için <ph name="BEGIN_LINK" />Google Hizmetleri<ph name="END_LINK" />'ni açıp Güvenli Tarama'ya dokunun.</translation> -<translation id="6294610283659775533">Aynı Google Hesabında oturum açmış olan cihazlar arasında sekmeleri gönderebilirsiniz</translation> <translation id="6321526113093607004">Yer İşaretlerine Ekle</translation> <translation id="6324669097367352121">Oturum açma ayarları</translation> <translation id="6337234675334993532">Şifreleme</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_uk.xtb b/ios/chrome/app/strings/resources/ios_strings_uk.xtb index eb70a23..00f31a773 100644 --- a/ios/chrome/app/strings/resources/ios_strings_uk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_uk.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524">Пропонувати переклад для такої мови: <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">Ви скасували підписку на канал <ph name="CHANNEL_NAME" /></translation> <translation id="6293101329759844770">Щоб увімкнути Безпечний перегляд, відкрийте параметр <ph name="BEGIN_LINK" />Сервіси Google<ph name="END_LINK" /> і натисніть "Безпечний перегляд".</translation> -<translation id="6294610283659775533">Ви можете надсилати вкладки між пристроями, на яких увійшли в той самий обліковий запис Google</translation> <translation id="6321526113093607004">Додати в закладки</translation> <translation id="6324669097367352121">Налаштування входу</translation> <translation id="6337234675334993532">Шифрування</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ur.xtb b/ios/chrome/app/strings/resources/ios_strings_ur.xtb index 53d75681..438da07 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ur.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ur.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524"><ph name="LANGUAGE" /> کا ترجمہ کرنے کی پیشکش کریں</translation> <translation id="6289501276895392862"><ph name="CHANNEL_NAME" /> کی پیروی ختم کی گئی</translation> <translation id="6293101329759844770">محفوظ براؤزنگ کو آن کرنے کے لیے، <ph name="BEGIN_LINK" />Google سروسز<ph name="END_LINK" /> کھولیں اور محفوظ براؤزنگ پر تھپتھپائیں۔</translation> -<translation id="6294610283659775533">آپ اسی Google اکاؤنٹ کے ساتھ سائن ان کردہ آلات کے درمیان ٹیبز بھیج سکتے ہیں</translation> <translation id="6321526113093607004">بُک مارکس میں شامل کریں</translation> <translation id="6324669097367352121">سائن ان کی ترتیبات</translation> <translation id="6337234675334993532">مرموزکاری</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_uz.xtb b/ios/chrome/app/strings/resources/ios_strings_uz.xtb index 83badd2..1a8e75b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_uz.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_uz.xtb
@@ -625,7 +625,6 @@ <translation id="6284652193729350524">Bu tildagi sahifalar tarjimasi taklif qilinsin: <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862"><ph name="CHANNEL_NAME" /> mavzusiga obuna bekor qilindi</translation> <translation id="6293101329759844770">Saytlarni xavfsiz kezish rejimini yoqish uchun <ph name="BEGIN_LINK" />Google xizmatlari<ph name="END_LINK" /> bandini oching va Saytlarni xavfsiz kezish ustiga bosing.</translation> -<translation id="6294610283659775533">Varaqlarni bir xil Google hisobidan kirilgan qurilmalararo yuborish mumkin</translation> <translation id="6321526113093607004">Bukmarklash</translation> <translation id="6324669097367352121">Kirish sozlamalari</translation> <translation id="6337234675334993532">Shifrlash</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_vi.xtb b/ios/chrome/app/strings/resources/ios_strings_vi.xtb index 5eea0697..a559773 100644 --- a/ios/chrome/app/strings/resources/ios_strings_vi.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_vi.xtb
@@ -329,6 +329,7 @@ <translation id="3775743491439407556">Tính năng đồng bộ hóa hiện không hoạt động</translation> <translation id="3779810277399252432">Không có kết nối Internet.</translation> <translation id="3783017676699494206">Lưu hình ảnh</translation> +<translation id="3789294999358192700">Hãy làm theo các bước sau:</translation> <translation id="3789841737615482174">Cài đặt</translation> <translation id="380329542618494757">Tên</translation> <translation id="3803696231112616155">Đề xuất dịch trang web này</translation> @@ -624,7 +625,6 @@ <translation id="6284652193729350524">Đề xuất dịch <ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">Đã ngừng theo dõi <ph name="CHANNEL_NAME" /></translation> <translation id="6293101329759844770">Để bật tính năng Duyệt web an toàn, hãy mở <ph name="BEGIN_LINK" />Các dịch vụ của Google<ph name="END_LINK" /> rồi nhấn vào Duyệt web an toàn.</translation> -<translation id="6294610283659775533">Bạn có thể gửi thẻ giữa các thiết bị được đăng nhập bằng cùng một Tài khoản Google</translation> <translation id="6321526113093607004">Thêm vào Dấu trang</translation> <translation id="6324669097367352121">Cài đặt đăng nhập</translation> <translation id="6337234675334993532">Mã hóa</translation> @@ -942,6 +942,7 @@ <translation id="8870413625673593573">Các thẻ đã Đóng gần đây</translation> <translation id="8876882697946675716">Đồng bộ hóa các thiết bị của bạn</translation> <translation id="8881801611828450202">Tìm hình ảnh này trên <ph name="SEARCH_ENGINE" /></translation> +<translation id="8891935667620843985">Bạn có thể đặt Chrome làm Ứng dụng trình duyệt mặc định để các đường liên kết tự động mở trong Chrome.</translation> <translation id="8898822736010347272">Gửi URL của một số trang bạn truy cập, thông tin về hệ thống (có giới hạn) và một số nội dung trang cho Google, nhằm phát hiện các mối đe dọa mới và bảo vệ mọi người khi dùng web.</translation> <translation id="8909135823018751308">Chia sẻ...</translation> <translation id="8917490105272468696">Có, tôi đồng ý</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb index 2fd2cd9a..a884961 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524">主动询问是否翻译<ph name="LANGUAGE" />内容</translation> <translation id="6289501276895392862">已取消关注“<ph name="CHANNEL_NAME" />”</translation> <translation id="6293101329759844770">如需开启“安全浏览”功能,请打开 <ph name="BEGIN_LINK" />Google 服务<ph name="END_LINK" />,然后点按“安全浏览”。</translation> -<translation id="6294610283659775533">您可在使用同一 Google 帐号登录的不同设备间发送标签页</translation> <translation id="6321526113093607004">添加到“书签”</translation> <translation id="6324669097367352121">登录设置</translation> <translation id="6337234675334993532">加密</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb index c66309d..58089b2 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524">為<ph name="LANGUAGE" />提供翻譯選項</translation> <translation id="6289501276895392862">已取消追蹤 <ph name="CHANNEL_NAME" /></translation> <translation id="6293101329759844770">如要啟用「安全瀏覽」功能,請開啟「<ph name="BEGIN_LINK" />Google 服務<ph name="END_LINK" />」,並輕按 [安全瀏覽]。</translation> -<translation id="6294610283659775533">您可在已登入同一個 Google 帳戶的裝置之間傳送分頁</translation> <translation id="6321526113093607004">新增至「書籤」</translation> <translation id="6324669097367352121">登入設定</translation> <translation id="6337234675334993532">加密</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb index 24c64ba..c0b343d 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524">針對<ph name="LANGUAGE" />提供翻譯選項</translation> <translation id="6289501276895392862">已取消追蹤「<ph name="CHANNEL_NAME" />」</translation> <translation id="6293101329759844770">如要啟用安全瀏覽功能,請開啟 <ph name="BEGIN_LINK" />Google 服務<ph name="END_LINK" />並輕觸 [安全瀏覽]。</translation> -<translation id="6294610283659775533">你可以在已登入相同 Google 帳戶的裝置之間傳送分頁</translation> <translation id="6321526113093607004">加入書籤</translation> <translation id="6324669097367352121">登入設定</translation> <translation id="6337234675334993532">加密</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zu.xtb b/ios/chrome/app/strings/resources/ios_strings_zu.xtb index 5dfe20a..740b6fe 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zu.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zu.xtb
@@ -624,7 +624,6 @@ <translation id="6284652193729350524">Nikeza ukuhumusha isi-<ph name="LANGUAGE" /></translation> <translation id="6289501276895392862">Uyeke ukulandela i-<ph name="CHANNEL_NAME" /></translation> <translation id="6293101329759844770">Ukuze uvule Ukuphequlula Ngokuphepha, vula <ph name="BEGIN_LINK" />Amasevisi we-Google<ph name="END_LINK" /> bese uthepha okuthi Ukuphequlula ngokuphepha.</translation> -<translation id="6294610283659775533">Ungathumela amathebhu phakathi kwamadivayisi angene ngemvume nge-akhawunti ye-Google efanayo</translation> <translation id="6321526113093607004">Engeza kumabhukhimakhi</translation> <translation id="6324669097367352121">Izilungiselelo zokungena ngemvume</translation> <translation id="6337234675334993532">Ukubethela</translation>
diff --git a/ios/chrome/browser/signin/authentication_service.mm b/ios/chrome/browser/signin/authentication_service.mm index 7f1d4b2..68a26fd 100644 --- a/ios/chrome/browser/signin/authentication_service.mm +++ b/ios/chrome/browser/signin/authentication_service.mm
@@ -649,10 +649,9 @@ // might still be accessible in SSO, and |OnIdentityListChanged| will handle // this when |identity| will actually disappear from SSO. base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, - base::BindOnce(&AuthenticationService::HandleForgottenIdentity, - base::Unretained(this), identity, /*should_prompt=*/true, - /*device_restore=*/false)); + FROM_HERE, base::BindOnce(&AuthenticationService::HandleForgottenIdentity, + GetWeakPtr(), identity, /*should_prompt=*/true, + /*device_restore=*/false)); } void AuthenticationService::HandleForgottenIdentity(
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_mediator.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_mediator.mm index be8e55c5..c30c58c2 100644 --- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_mediator.mm +++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_mediator.mm
@@ -816,7 +816,9 @@ ChromeBrowserState::FromBrowserState(self.browser->GetBrowserState()) ->GetPrefs(); BOOL isFeedVisible = - pref_service->GetBoolean(prefs::kArticlesForYouEnabled) && + (pref_service->GetBoolean(prefs::kArticlesForYouEnabled) && + pref_service->GetBoolean(prefs::kNTPContentSuggestionsEnabled) && + !IsFeedAblationEnabled()) && pref_service->GetBoolean(feed::prefs::kArticlesListVisible); if (ShouldOnlyShowTrendingQueriesForDisabledFeed() && isFeedVisible) { // Notify consumer with empty array so it knows to remove the module.
diff --git a/ios/chrome/browser/web/browsing_egtest.mm b/ios/chrome/browser/web/browsing_egtest.mm index e422e974..7a7da63 100644 --- a/ios/chrome/browser/web/browsing_egtest.mm +++ b/ios/chrome/browser/web/browsing_egtest.mm
@@ -159,69 +159,6 @@ assertWithMatcher:grey_notNil()]; } -// Tests clicking a link with target="_blank" and "event.stopPropagation()" -// opens a new tab. -- (void)testBrowsingStopPropagation { - // Create map of canned responses and set up the test HTML server. - std::map<GURL, std::string> responses; - const GURL URL = web::test::HttpServer::MakeUrl("http://stopPropagation"); - const GURL destinationURL = - web::test::HttpServer::MakeUrl("http://destination"); - // This is a page with a link to |kDestination|. - responses[URL] = base::StringPrintf( - "<a id='link' href='%s' target='_blank' " - "onclick='event.stopPropagation()'>link</a>", - destinationURL.spec().c_str()); - // This is the destination page; it just contains some text. - responses[destinationURL] = "You've arrived!"; - web::test::SetUpSimpleHttpServer(responses); - - ScopedBlockPopupsPref prefSetter(CONTENT_SETTING_ALLOW); - - [ChromeEarlGrey loadURL:URL]; - [ChromeEarlGrey waitForMainTabCount:1]; - - [ChromeEarlGrey tapWebStateElementWithID:@"link"]; - [ChromeEarlGrey waitForMainTabCount:2]; - [ChromeEarlGrey waitForPageToFinishLoading]; - - // Verify the new tab was opened with the expected URL. - [[EarlGrey selectElementWithMatcher:OmniboxText(destinationURL.GetContent())] - assertWithMatcher:grey_notNil()]; -} - -// Tests clicking a relative link with target="_blank" and -// "event.stopPropagation()" opens a new tab. -- (void)testBrowsingStopPropagationRelativePath { - // Create map of canned responses and set up the test HTML server. - std::map<GURL, std::string> responses; - const GURL URL = web::test::HttpServer::MakeUrl("http://stopPropRel"); - const GURL destinationURL = - web::test::HttpServer::MakeUrl("http://stopPropRel/#test"); - // This is page with a relative link to "#test". - responses[URL] = - "<a id='link' href='#test' target='_blank' " - "onclick='event.stopPropagation()'>link</a>"; - // This is the page that should be showing at the end of the test. - responses[destinationURL] = "You've arrived!"; - web::test::SetUpSimpleHttpServer(responses); - - ScopedBlockPopupsPref prefSetter(CONTENT_SETTING_ALLOW); - - [ChromeEarlGrey loadURL:URL]; - [ChromeEarlGrey waitForMainTabCount:1]; - - [ChromeEarlGrey tapWebStateElementWithID:@"link"]; - - [ChromeEarlGrey waitForMainTabCount:2]; - - // Verify the new tab was opened with the expected URL. - const std::string omniboxText = - net::GetContentAndFragmentForUrl(destinationURL); - [[EarlGrey selectElementWithMatcher:OmniboxText(omniboxText)] - assertWithMatcher:grey_notNil()]; -} - // Tests that clicking a link with URL changed by onclick uses the href of the // anchor tag instead of the one specified in JavaScript. Also verifies a new // tab is opened by target '_blank'.
diff --git a/ipc/BUILD.gn b/ipc/BUILD.gn index 5f56977c..084b6e88 100644 --- a/ipc/BUILD.gn +++ b/ipc/BUILD.gn
@@ -253,7 +253,7 @@ "//base/test:test_support", "//mojo/core/embedder", "//mojo/core/test:test_support", - "//third_party/ipcz/src:ipcz_tests_sources_chromium", + "//third_party/ipcz/src:ipcz_test_support_chromium", "//third_party/ipcz/src:test_buildflags", ] }
diff --git a/net/disk_cache/blockfile/bitmap.h b/net/disk_cache/blockfile/bitmap.h index 07806cf..9ffa98b9 100644 --- a/net/disk_cache/blockfile/bitmap.h +++ b/net/disk_cache/blockfile/bitmap.h
@@ -8,6 +8,8 @@ #include <stdint.h> #include <string.h> +#include <memory> + #include "base/memory/raw_ptr.h" #include "net/base/net_export.h"
diff --git a/net/http/transport_security_state_static.pins b/net/http/transport_security_state_static.pins index a28b472..4d50d82 100644 --- a/net/http/transport_security_state_static.pins +++ b/net/http/transport_security_state_static.pins
@@ -43,9 +43,9 @@ # hash function for preloaded entries again (we have already done so once). # -# Last updated: 2022-07-21 12:57 UTC +# Last updated: 2022-07-22 12:56 UTC PinsListTimestamp -1658408220 +1658494599 TestSPKI sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
diff --git a/remoting/host/pam_authorization_factory_posix.cc b/remoting/host/pam_authorization_factory_posix.cc index 1c1ae14..b446a0b 100644 --- a/remoting/host/pam_authorization_factory_posix.cc +++ b/remoting/host/pam_authorization_factory_posix.cc
@@ -72,7 +72,7 @@ protocol::Authenticator::RejectionReason PamAuthorizer::rejection_reason() const { if (local_login_status_ == DISALLOWED) { - return INVALID_CREDENTIALS; + return RejectionReason::INVALID_CREDENTIALS; } else { return underlying_->rejection_reason(); }
diff --git a/remoting/protocol/authenticator.h b/remoting/protocol/authenticator.h index 0218826..e9c3301 100644 --- a/remoting/protocol/authenticator.h +++ b/remoting/protocol/authenticator.h
@@ -63,7 +63,7 @@ PROCESSING_MESSAGE, }; - enum RejectionReason { + enum class RejectionReason { // The account credentials were not valid (i.e. incorrect PIN). INVALID_CREDENTIALS,
diff --git a/remoting/protocol/fake_authenticator.cc b/remoting/protocol/fake_authenticator.cc index b0f46175..eaff44a 100644 --- a/remoting/protocol/fake_authenticator.cc +++ b/remoting/protocol/fake_authenticator.cc
@@ -156,7 +156,7 @@ Authenticator::RejectionReason FakeAuthenticator::rejection_reason() const { EXPECT_EQ(REJECTED, state()); - return INVALID_CREDENTIALS; + return RejectionReason::INVALID_CREDENTIALS; } void FakeAuthenticator::ProcessMessage(const jingle_xmpp::XmlElement* message,
diff --git a/remoting/protocol/jingle_session.cc b/remoting/protocol/jingle_session.cc index 1153599..90603619 100644 --- a/remoting/protocol/jingle_session.cc +++ b/remoting/protocol/jingle_session.cc
@@ -65,23 +65,21 @@ ErrorCode AuthRejectionReasonToErrorCode( Authenticator::RejectionReason reason) { switch (reason) { - case Authenticator::INVALID_CREDENTIALS: + case Authenticator::RejectionReason::INVALID_CREDENTIALS: return AUTHENTICATION_FAILED; - case Authenticator::PROTOCOL_ERROR: + case Authenticator::RejectionReason::PROTOCOL_ERROR: return INCOMPATIBLE_PROTOCOL; - case Authenticator::INVALID_ACCOUNT_ID: + case Authenticator::RejectionReason::INVALID_ACCOUNT_ID: return INVALID_ACCOUNT; - case Authenticator::TOO_MANY_CONNECTIONS: + case Authenticator::RejectionReason::TOO_MANY_CONNECTIONS: return SESSION_REJECTED; - case Authenticator::REJECTED_BY_USER: + case Authenticator::RejectionReason::REJECTED_BY_USER: return SESSION_REJECTED; - case Authenticator::AUTHZ_POLICY_CHECK_FAILED: + case Authenticator::RejectionReason::AUTHZ_POLICY_CHECK_FAILED: return AUTHZ_POLICY_CHECK_FAILED; - case Authenticator::LOCATION_AUTHZ_POLICY_CHECK_FAILED: + case Authenticator::RejectionReason::LOCATION_AUTHZ_POLICY_CHECK_FAILED: return LOCATION_AUTHZ_POLICY_CHECK_FAILED; } - NOTREACHED(); - return UNKNOWN_ERROR; } // Extracts a sequential id from the id attribute of the IQ stanza.
diff --git a/remoting/protocol/me2me_host_authenticator_factory.cc b/remoting/protocol/me2me_host_authenticator_factory.cc index 21d40f8..3aa9455 100644 --- a/remoting/protocol/me2me_host_authenticator_factory.cc +++ b/remoting/protocol/me2me_host_authenticator_factory.cc
@@ -79,8 +79,8 @@ LOG(ERROR) << "Rejecting incoming connection from " << remote_jid << ": Prefix mismatch. Expected: " << canonical_host_owner_email_; - return base::WrapUnique( - new RejectingAuthenticator(Authenticator::INVALID_CREDENTIALS)); + return base::WrapUnique(new RejectingAuthenticator( + Authenticator::RejectionReason::INVALID_CREDENTIALS)); } // If necessary, verify that the client's jid belongs to the correct domain. @@ -102,7 +102,7 @@ LOG(ERROR) << "Rejecting incoming connection from " << remote_jid << ": Domain not allowed."; return std::make_unique<RejectingAuthenticator>( - Authenticator::INVALID_ACCOUNT_ID); + Authenticator::RejectionReason::INVALID_ACCOUNT_ID); } } @@ -121,8 +121,8 @@ pin_hash_, pairing_registry_); } - return base::WrapUnique( - new RejectingAuthenticator(Authenticator::INVALID_CREDENTIALS)); + return base::WrapUnique(new RejectingAuthenticator( + Authenticator::RejectionReason::INVALID_CREDENTIALS)); } } // namespace protocol
diff --git a/remoting/protocol/negotiating_authenticator_base.h b/remoting/protocol/negotiating_authenticator_base.h index 3e184db..0312cf3 100644 --- a/remoting/protocol/negotiating_authenticator_base.h +++ b/remoting/protocol/negotiating_authenticator_base.h
@@ -140,7 +140,7 @@ Method current_method_ = Method::INVALID; std::unique_ptr<Authenticator> current_authenticator_; State state_; - RejectionReason rejection_reason_ = INVALID_CREDENTIALS; + RejectionReason rejection_reason_ = RejectionReason::INVALID_CREDENTIALS; }; } // namespace protocol
diff --git a/remoting/protocol/negotiating_authenticator_unittest.cc b/remoting/protocol/negotiating_authenticator_unittest.cc index 062f4896..135c8136b 100644 --- a/remoting/protocol/negotiating_authenticator_unittest.cc +++ b/remoting/protocol/negotiating_authenticator_unittest.cc
@@ -245,7 +245,7 @@ kTestPinBad, kTestPin)); ASSERT_NO_FATAL_FAILURE(RunAuthExchange()); - VerifyRejected(Authenticator::INVALID_CREDENTIALS); + VerifyRejected(Authenticator::RejectionReason::INVALID_CREDENTIALS); } TEST_F(NegotiatingAuthenticatorTest, IncompatibleMethods) { @@ -258,7 +258,7 @@ ASSERT_NO_FATAL_FAILURE(RunAuthExchange()); - VerifyRejected(Authenticator::PROTOCOL_ERROR); + VerifyRejected(Authenticator::RejectionReason::PROTOCOL_ERROR); } TEST_F(NegotiatingAuthenticatorTest, PairingNotSupported) { @@ -292,7 +292,7 @@ ASSERT_NO_FATAL_FAILURE(InitAuthenticators(kTestClientId, kTestPairedSecret, kTestPinBad, kTestPin)); ASSERT_NO_FATAL_FAILURE(RunAuthExchange()); - VerifyRejected(Authenticator::INVALID_CREDENTIALS); + VerifyRejected(Authenticator::RejectionReason::INVALID_CREDENTIALS); } TEST_P(NegotiatingPairingAuthenticatorTest, PairingSucceeded) { @@ -317,7 +317,7 @@ ASSERT_NO_FATAL_FAILURE(InitAuthenticators( kTestClientId, kTestPairedSecretBad, kTestPinBad, kTestPin)); ASSERT_NO_FATAL_FAILURE(RunAuthExchange()); - VerifyRejected(Authenticator::INVALID_CREDENTIALS); + VerifyRejected(Authenticator::RejectionReason::INVALID_CREDENTIALS); } } // namespace protocol
diff --git a/remoting/protocol/negotiating_client_authenticator.cc b/remoting/protocol/negotiating_client_authenticator.cc index 3f287d8..47efd58 100644 --- a/remoting/protocol/negotiating_client_authenticator.cc +++ b/remoting/protocol/negotiating_client_authenticator.cc
@@ -65,7 +65,7 @@ if (method_set_by_host_ || method == Method::INVALID || std::find(methods_.begin(), methods_.end(), method) == methods_.end()) { state_ = REJECTED; - rejection_reason_ = PROTOCOL_ERROR; + rejection_reason_ = RejectionReason::PROTOCOL_ERROR; std::move(resume_callback).Run(); return; }
diff --git a/remoting/protocol/negotiating_host_authenticator.cc b/remoting/protocol/negotiating_host_authenticator.cc index a3d4204..efd3ec8 100644 --- a/remoting/protocol/negotiating_host_authenticator.cc +++ b/remoting/protocol/negotiating_host_authenticator.cc
@@ -96,7 +96,7 @@ // If the host has already chosen a method, it can't be changed by the client. if (current_method_ != Method::INVALID && method != current_method_) { state_ = REJECTED; - rejection_reason_ = PROTOCOL_ERROR; + rejection_reason_ = RejectionReason::PROTOCOL_ERROR; std::move(resume_callback).Run(); return; } @@ -113,7 +113,7 @@ if (supported_methods_attr.empty()) { // Message contains neither method nor supported-methods attributes. state_ = REJECTED; - rejection_reason_ = PROTOCOL_ERROR; + rejection_reason_ = RejectionReason::PROTOCOL_ERROR; std::move(resume_callback).Run(); return; } @@ -137,7 +137,7 @@ if (method == Method::INVALID) { // Failed to find a common auth method. state_ = REJECTED; - rejection_reason_ = PROTOCOL_ERROR; + rejection_reason_ = RejectionReason::PROTOCOL_ERROR; std::move(resume_callback).Run(); return; }
diff --git a/remoting/protocol/pairing_authenticator_base.cc b/remoting/protocol/pairing_authenticator_base.cc index 75063da..6f7ce15 100644 --- a/remoting/protocol/pairing_authenticator_base.cc +++ b/remoting/protocol/pairing_authenticator_base.cc
@@ -39,7 +39,7 @@ Authenticator::RejectionReason PairingAuthenticatorBase::rejection_reason() const { if (!spake2_authenticator_) { - return PROTOCOL_ERROR; + return RejectionReason::PROTOCOL_ERROR; } return spake2_authenticator_->rejection_reason(); } @@ -121,7 +121,8 @@ // credentials were the paired secret, then notify the peer that the // PIN-less connection failed and retry using the PIN. if (spake2_authenticator_->state() == REJECTED && - spake2_authenticator_->rejection_reason() == INVALID_CREDENTIALS && + spake2_authenticator_->rejection_reason() == + RejectionReason::INVALID_CREDENTIALS && using_paired_secret_) { using_paired_secret_ = false; error_message_ = "invalid-shared-secret";
diff --git a/remoting/protocol/pairing_host_authenticator.cc b/remoting/protocol/pairing_host_authenticator.cc index b7e7e5f..788d401 100644 --- a/remoting/protocol/pairing_host_authenticator.cc +++ b/remoting/protocol/pairing_host_authenticator.cc
@@ -61,7 +61,7 @@ Authenticator::RejectionReason PairingHostAuthenticator::rejection_reason() const { if (protocol_error_) { - return PROTOCOL_ERROR; + return RejectionReason::PROTOCOL_ERROR; } return PairingAuthenticatorBase::rejection_reason(); }
diff --git a/remoting/protocol/spake2_authenticator.cc b/remoting/protocol/spake2_authenticator.cc index a92f05157..332cccd 100644 --- a/remoting/protocol/spake2_authenticator.cc +++ b/remoting/protocol/spake2_authenticator.cc
@@ -165,7 +165,7 @@ if (!DecodeBinaryValueFromXml(message, kCertificateTag, &cert_present, &remote_cert_)) { state_ = REJECTED; - rejection_reason_ = PROTOCOL_ERROR; + rejection_reason_ = RejectionReason::PROTOCOL_ERROR; return; } @@ -173,7 +173,7 @@ if (!is_host_ && remote_cert_.empty()) { LOG(WARNING) << "No valid host certificate."; state_ = REJECTED; - rejection_reason_ = PROTOCOL_ERROR; + rejection_reason_ = RejectionReason::PROTOCOL_ERROR; return; } @@ -187,7 +187,7 @@ &verification_hash_present, &verification_hash)) { state_ = REJECTED; - rejection_reason_ = PROTOCOL_ERROR; + rejection_reason_ = RejectionReason::PROTOCOL_ERROR; return; } @@ -196,7 +196,7 @@ if (!spake_message_present) { LOG(WARNING) << "<spake-message> not found."; state_ = REJECTED; - rejection_reason_ = PROTOCOL_ERROR; + rejection_reason_ = RejectionReason::PROTOCOL_ERROR; return; } uint8_t key[SPAKE2_MAX_KEY_SIZE]; @@ -208,7 +208,7 @@ spake_message.size()); if (!result) { state_ = REJECTED; - rejection_reason_ = INVALID_CREDENTIALS; + rejection_reason_ = RejectionReason::INVALID_CREDENTIALS; return; } CHECK(key_size); @@ -221,14 +221,14 @@ } else if (spake_message_present) { LOG(WARNING) << "Received duplicate <spake-message>."; state_ = REJECTED; - rejection_reason_ = PROTOCOL_ERROR; + rejection_reason_ = RejectionReason::PROTOCOL_ERROR; return; } if (spake_message_sent_ && !verification_hash_present) { LOG(WARNING) << "Didn't receive <verification-hash> when expected."; state_ = REJECTED; - rejection_reason_ = PROTOCOL_ERROR; + rejection_reason_ = RejectionReason::PROTOCOL_ERROR; return; } @@ -238,7 +238,7 @@ expected_verification_hash_.data(), verification_hash.size())) { state_ = REJECTED; - rejection_reason_ = INVALID_CREDENTIALS; + rejection_reason_ = RejectionReason::INVALID_CREDENTIALS; return; } state_ = ACCEPTED;
diff --git a/remoting/protocol/spake2_authenticator.h b/remoting/protocol/spake2_authenticator.h index 9f6bfdb..f5a1afc4 100644 --- a/remoting/protocol/spake2_authenticator.h +++ b/remoting/protocol/spake2_authenticator.h
@@ -87,7 +87,7 @@ raw_ptr<SPAKE2_CTX> spake2_context_; State state_; bool started_ = false; - RejectionReason rejection_reason_ = INVALID_CREDENTIALS; + RejectionReason rejection_reason_ = RejectionReason::INVALID_CREDENTIALS; std::string local_spake_message_; bool spake_message_sent_ = false; std::string outgoing_verification_hash_;
diff --git a/remoting/protocol/spake2_authenticator_unittest.cc b/remoting/protocol/spake2_authenticator_unittest.cc index aeb2d71..25cef15 100644 --- a/remoting/protocol/spake2_authenticator_unittest.cc +++ b/remoting/protocol/spake2_authenticator_unittest.cc
@@ -83,7 +83,8 @@ ASSERT_NO_FATAL_FAILURE(RunAuthExchange()); ASSERT_EQ(Authenticator::REJECTED, client_->state()); - ASSERT_EQ(Authenticator::INVALID_CREDENTIALS, client_->rejection_reason()); + ASSERT_EQ(Authenticator::RejectionReason::INVALID_CREDENTIALS, + client_->rejection_reason()); // Change |client_| so that we can get the last message. reinterpret_cast<Spake2Authenticator*>(client_.get())->state_ =
diff --git a/remoting/protocol/third_party_authenticator_base.cc b/remoting/protocol/third_party_authenticator_base.cc index 9af48fe..451b1fc4 100644 --- a/remoting/protocol/third_party_authenticator_base.cc +++ b/remoting/protocol/third_party_authenticator_base.cc
@@ -28,8 +28,7 @@ Authenticator::State initial_state) : token_state_(initial_state), started_(false), - rejection_reason_(INVALID_CREDENTIALS) { -} + rejection_reason_(RejectionReason::INVALID_CREDENTIALS) {} ThirdPartyAuthenticatorBase::~ThirdPartyAuthenticatorBase() = default;
diff --git a/remoting/protocol/third_party_client_authenticator.cc b/remoting/protocol/third_party_client_authenticator.cc index 5ec5108..e1732e0 100644 --- a/remoting/protocol/third_party_client_authenticator.cc +++ b/remoting/protocol/third_party_client_authenticator.cc
@@ -37,7 +37,7 @@ LOG(ERROR) << "Third-party authentication protocol error: " "missing token verification URL or scope."; token_state_ = REJECTED; - rejection_reason_ = PROTOCOL_ERROR; + rejection_reason_ = RejectionReason::PROTOCOL_ERROR; std::move(resume_callback).Run(); return; } @@ -70,8 +70,9 @@ token_ = third_party_token; if (token_.empty() || validation_result.is_error()) { token_state_ = REJECTED; - rejection_reason_ = validation_result.is_error() ? validation_result.error() - : INVALID_CREDENTIALS; + rejection_reason_ = validation_result.is_error() + ? validation_result.error() + : RejectionReason::INVALID_CREDENTIALS; } else { DCHECK(!validation_result.success().empty()); token_state_ = MESSAGE_READY;
diff --git a/remoting/protocol/third_party_host_authenticator.cc b/remoting/protocol/third_party_host_authenticator.cc index ee0fd58..8bcdf11 100644 --- a/remoting/protocol/third_party_host_authenticator.cc +++ b/remoting/protocol/third_party_host_authenticator.cc
@@ -34,7 +34,7 @@ if (token.empty()) { LOG(ERROR) << "Third-party authentication protocol error: missing token."; token_state_ = REJECTED; - rejection_reason_ = PROTOCOL_ERROR; + rejection_reason_ = RejectionReason::PROTOCOL_ERROR; std::move(resume_callback).Run(); return; }
diff --git a/remoting/protocol/v2_authenticator.cc b/remoting/protocol/v2_authenticator.cc index 419ea07b..2a175d4 100644 --- a/remoting/protocol/v2_authenticator.cc +++ b/remoting/protocol/v2_authenticator.cc
@@ -62,7 +62,7 @@ key_exchange_impl_(type, shared_secret), state_(initial_state), started_(false), - rejection_reason_(INVALID_CREDENTIALS) { + rejection_reason_(RejectionReason::INVALID_CREDENTIALS) { pending_messages_.push(key_exchange_impl_.GetNextMessage()); } @@ -105,7 +105,7 @@ if (!is_host_side() && remote_cert_.empty()) { LOG(WARNING) << "No valid host certificate."; state_ = REJECTED; - rejection_reason_ = PROTOCOL_ERROR; + rejection_reason_ = RejectionReason::PROTOCOL_ERROR; return; } @@ -113,7 +113,7 @@ if (!eke_element) { LOG(WARNING) << "No eke-message found."; state_ = REJECTED; - rejection_reason_ = PROTOCOL_ERROR; + rejection_reason_ = RejectionReason::PROTOCOL_ERROR; return; } @@ -124,7 +124,7 @@ !base::Base64Decode(base64_message, &spake_message)) { LOG(WARNING) << "Failed to decode auth message received from the peer."; state_ = REJECTED; - rejection_reason_ = PROTOCOL_ERROR; + rejection_reason_ = RejectionReason::PROTOCOL_ERROR; return; } @@ -138,7 +138,7 @@ case P224EncryptedKeyExchange::kResultFailed: state_ = REJECTED; - rejection_reason_ = INVALID_CREDENTIALS; + rejection_reason_ = RejectionReason::INVALID_CREDENTIALS; return; case P224EncryptedKeyExchange::kResultSuccess:
diff --git a/remoting/protocol/validating_authenticator.cc b/remoting/protocol/validating_authenticator.cc index bb3a8651..2b1a244 100644 --- a/remoting/protocol/validating_authenticator.cc +++ b/remoting/protocol/validating_authenticator.cc
@@ -93,19 +93,19 @@ return; case Result::ERROR_INVALID_CREDENTIALS: - rejection_reason_ = Authenticator::INVALID_CREDENTIALS; + rejection_reason_ = RejectionReason::INVALID_CREDENTIALS; break; case Result::ERROR_INVALID_ACCOUNT: - rejection_reason_ = Authenticator::INVALID_ACCOUNT_ID; + rejection_reason_ = RejectionReason::INVALID_ACCOUNT_ID; break; case Result::ERROR_TOO_MANY_CONNECTIONS: - rejection_reason_ = Authenticator::TOO_MANY_CONNECTIONS; + rejection_reason_ = RejectionReason::TOO_MANY_CONNECTIONS; break; case Result::ERROR_REJECTED_BY_USER: - rejection_reason_ = Authenticator::REJECTED_BY_USER; + rejection_reason_ = RejectionReason::REJECTED_BY_USER; break; }
diff --git a/remoting/protocol/validating_authenticator.h b/remoting/protocol/validating_authenticator.h index 55ae123..e5a046f7 100644 --- a/remoting/protocol/validating_authenticator.h +++ b/remoting/protocol/validating_authenticator.h
@@ -75,7 +75,8 @@ State state_ = Authenticator::WAITING_MESSAGE; // Returns the rejection reason. Can be called only when in REJECTED state. - RejectionReason rejection_reason_ = Authenticator::INVALID_CREDENTIALS; + RejectionReason rejection_reason_ = + Authenticator::RejectionReason::INVALID_CREDENTIALS; std::unique_ptr<Authenticator> current_authenticator_;
diff --git a/remoting/protocol/validating_authenticator_unittest.cc b/remoting/protocol/validating_authenticator_unittest.cc index 6e92153d..afc5879 100644 --- a/remoting/protocol/validating_authenticator_unittest.cc +++ b/remoting/protocol/validating_authenticator_unittest.cc
@@ -209,7 +209,7 @@ SendMessageAndWaitForCallback(); ASSERT_TRUE(validate_complete_called_); ASSERT_EQ(Authenticator::REJECTED, validating_authenticator_->state()); - ASSERT_EQ(Authenticator::INVALID_CREDENTIALS, + ASSERT_EQ(Authenticator::RejectionReason::INVALID_CREDENTIALS, validating_authenticator_->rejection_reason()); } @@ -226,7 +226,7 @@ SendMessageAndWaitForCallback(); ASSERT_TRUE(validate_complete_called_); ASSERT_EQ(Authenticator::REJECTED, validating_authenticator_->state()); - ASSERT_EQ(Authenticator::REJECTED_BY_USER, + ASSERT_EQ(Authenticator::RejectionReason::REJECTED_BY_USER, validating_authenticator_->rejection_reason()); } @@ -253,7 +253,7 @@ SendMessageAndWaitForCallback(); ASSERT_TRUE(validate_complete_called_); ASSERT_EQ(Authenticator::REJECTED, validating_authenticator_->state()); - ASSERT_EQ(Authenticator::REJECTED_BY_USER, + ASSERT_EQ(Authenticator::RejectionReason::REJECTED_BY_USER, validating_authenticator_->rejection_reason()); } @@ -270,7 +270,7 @@ SendMessageAndWaitForCallback(); ASSERT_TRUE(validate_complete_called_); ASSERT_EQ(Authenticator::REJECTED, validating_authenticator_->state()); - ASSERT_EQ(Authenticator::TOO_MANY_CONNECTIONS, + ASSERT_EQ(Authenticator::RejectionReason::TOO_MANY_CONNECTIONS, validating_authenticator_->rejection_reason()); } @@ -283,13 +283,14 @@ .WillByDefault(Return(Authenticator::REJECTED)); ON_CALL(*mock_authenticator_, rejection_reason()) - .WillByDefault(Return(Authenticator::INVALID_CREDENTIALS)); + .WillByDefault( + Return(Authenticator::RejectionReason::INVALID_CREDENTIALS)); // Verify validation callback is not called for invalid connections. SendMessageAndWaitForCallback(); ASSERT_FALSE(validate_complete_called_); ASSERT_EQ(Authenticator::REJECTED, validating_authenticator_->state()); - ASSERT_EQ(Authenticator::INVALID_CREDENTIALS, + ASSERT_EQ(Authenticator::RejectionReason::INVALID_CREDENTIALS, validating_authenticator_->rejection_reason()); } @@ -302,13 +303,14 @@ .WillByDefault(Return(Authenticator::REJECTED)); ON_CALL(*mock_authenticator_, rejection_reason()) - .WillByDefault(Return(Authenticator::INVALID_ACCOUNT_ID)); + .WillByDefault( + Return(Authenticator::RejectionReason::INVALID_ACCOUNT_ID)); // Verify validation callback is not called for invalid connections. SendMessageAndWaitForCallback(); ASSERT_FALSE(validate_complete_called_); ASSERT_EQ(Authenticator::REJECTED, validating_authenticator_->state()); - ASSERT_EQ(Authenticator::INVALID_ACCOUNT_ID, + ASSERT_EQ(Authenticator::RejectionReason::INVALID_ACCOUNT_ID, validating_authenticator_->rejection_reason()); } @@ -321,13 +323,13 @@ .WillByDefault(Return(Authenticator::REJECTED)); ON_CALL(*mock_authenticator_, rejection_reason()) - .WillByDefault(Return(Authenticator::PROTOCOL_ERROR)); + .WillByDefault(Return(Authenticator::RejectionReason::PROTOCOL_ERROR)); // Verify validation callback is not called for invalid connections. SendMessageAndWaitForCallback(); ASSERT_FALSE(validate_complete_called_); ASSERT_EQ(Authenticator::REJECTED, validating_authenticator_->state()); - ASSERT_EQ(Authenticator::PROTOCOL_ERROR, + ASSERT_EQ(Authenticator::RejectionReason::PROTOCOL_ERROR, validating_authenticator_->rejection_reason()); }
diff --git a/storage/browser/quota/special_storage_policy.h b/storage/browser/quota/special_storage_policy.h index f59e384c..2d3015e 100644 --- a/storage/browser/quota/special_storage_policy.h +++ b/storage/browser/quota/special_storage_policy.h
@@ -9,7 +9,6 @@ #include "base/memory/ref_counted.h" #include "base/observer_list.h" #include "base/sequence_checker.h" -#include "services/network/public/cpp/session_cookie_delete_predicate.h" class GURL; @@ -80,16 +79,6 @@ // Returns true if some origins are only allowed session-only storage. virtual bool HasSessionOnlyOrigins() = 0; - // Returns a predicate that takes the domain of a cookie and a bool whether - // the cookie is secure and returns true if the cookie should be deleted on - // exit. - // If |HasSessionOnlyOrigins()| is true a non-null callback is returned. - // It uses domain matching as described in section 5.1.3 of RFC 6265 to - // identify content setting rules that could have influenced the cookie - // when it was created. - virtual network::DeleteCookiePredicate - CreateDeleteCookieOnExitPredicate() = 0; - // Adds/removes an observer, the policy does not take // ownership of the observer. Should only be called on the IO thread. void AddObserver(Observer* observer);
diff --git a/storage/browser/test/mock_special_storage_policy.cc b/storage/browser/test/mock_special_storage_policy.cc index d91c31c..acd2913 100644 --- a/storage/browser/test/mock_special_storage_policy.cc +++ b/storage/browser/test/mock_special_storage_policy.cc
@@ -4,10 +4,7 @@ #include "storage/browser/test/mock_special_storage_policy.h" -#include "base/bind.h" -#include "base/callback.h" #include "base/containers/contains.h" -#include "net/cookies/cookie_util.h" namespace storage { @@ -27,20 +24,6 @@ return base::Contains(session_only_, origin); } -network::DeleteCookiePredicate -MockSpecialStoragePolicy::CreateDeleteCookieOnExitPredicate() { - return base::BindRepeating( - &MockSpecialStoragePolicy::ShouldDeleteCookieOnExit, - base::Unretained(this)); -} - -bool MockSpecialStoragePolicy::ShouldDeleteCookieOnExit( - const std::string& domain, - bool is_https) { - GURL origin = net::cookie_util::CookieOriginToURL(domain, is_https); - return IsStorageSessionOnly(origin); -} - bool MockSpecialStoragePolicy::HasIsolatedStorage(const GURL& origin) { return base::Contains(isolated_, origin); }
diff --git a/storage/browser/test/mock_special_storage_policy.h b/storage/browser/test/mock_special_storage_policy.h index 103ca138..bf3bba87 100644 --- a/storage/browser/test/mock_special_storage_policy.h +++ b/storage/browser/test/mock_special_storage_policy.h
@@ -8,7 +8,6 @@ #include <set> #include <string> -#include "services/network/public/cpp/session_cookie_delete_predicate.h" #include "storage/browser/quota/special_storage_policy.h" #include "url/gurl.h" @@ -24,7 +23,6 @@ bool HasIsolatedStorage(const GURL& origin) override; bool HasSessionOnlyOrigins() override; bool IsStorageDurable(const GURL& origin) override; - network::DeleteCookiePredicate CreateDeleteCookieOnExitPredicate() override; void AddProtected(const GURL& origin) { protected_.insert(origin); } @@ -68,8 +66,6 @@ ~MockSpecialStoragePolicy() override; private: - bool ShouldDeleteCookieOnExit(const std::string& domain, bool is_https); - std::set<GURL> protected_; std::set<GURL> unlimited_; std::set<GURL> session_only_;
diff --git a/testing/buildbot/filters/android.emulator_p.chrome_public_test_apk.filter b/testing/buildbot/filters/android.emulator_p.chrome_public_test_apk.filter index 8c4c4bf..26a128f7 100644 --- a/testing/buildbot/filters/android.emulator_p.chrome_public_test_apk.filter +++ b/testing/buildbot/filters/android.emulator_p.chrome_public_test_apk.filter
@@ -72,11 +72,6 @@ # crbug.com/1062058 -org.chromium.chrome.browser.customtabs.DetachedResourceRequestTest.testSafeBrowsingMainResourceWithSplitCache -# crbug.com/1062838 --org.chromium.chrome.browser.offlinepages.prefetch.PrefetchFeedFlowTest.testPrefetchForbiddenByServer_FullBrowser --org.chromium.chrome.browser.offlinepages.prefetch.PrefetchFeedFlowTest.testPrefetchSinglePageSuccess_FullBrowser --org.chromium.chrome.browser.offlinepages.prefetch.PrefetchFeedFlowTest.testPrefetchPageReadyLater_FullBrowser - # crbug.com/1062843 -org.chromium.chrome.browser.banners.AppBannerManagerTest.testAppInstalledModalNativeAppBannerCustomTab -org.chromium.chrome.browser.banners.AppBannerManagerTest.testModalNativeAppBannerCanBeTriggeredMultipleTimesCustomTab
diff --git a/testing/buildbot/filters/linux-chromeos.browser_tests.require_lacros.filter b/testing/buildbot/filters/linux-chromeos.browser_tests.require_lacros.filter index b193ab92..4b46e2f4 100644 --- a/testing/buildbot/filters/linux-chromeos.browser_tests.require_lacros.filter +++ b/testing/buildbot/filters/linux-chromeos.browser_tests.require_lacros.filter
@@ -7,7 +7,6 @@ BrowserAppShelfControllerBrowserTest* ChromeVox* DemoAshRequiresLacrosTest* -DesksTemplatesClientLacrosTest* Dictation* SelectToSpeak* SwitchAccess*
diff --git a/testing/unexpected_passes_common/builders.py b/testing/unexpected_passes_common/builders.py index 9d4810f..71acbf2 100644 --- a/testing/unexpected_passes_common/builders.py +++ b/testing/unexpected_passes_common/builders.py
@@ -9,7 +9,7 @@ import logging import os import subprocess -import typing +from typing import Any, Dict, Iterable, List, Set, Tuple import six @@ -24,13 +24,10 @@ AUTOGENERATED_JSON_KEY = 'AAAAA1 AUTOGENERATED FILE DO NOT EDIT' -FakeBuildersDict = typing.Dict[data_types.BuilderEntry, typing. - Set[data_types.BuilderEntry]] +FakeBuildersDict = Dict[data_types.BuilderEntry, Set[data_types.BuilderEntry]] _registered_instance = None -# pylint: disable=useless-object-inheritance - def GetInstance() -> 'Builders': return _registered_instance @@ -48,7 +45,7 @@ _registered_instance = None -class Builders(object): +class Builders(): def __init__(self, suite: str, include_internal_builders: bool): """ Args: @@ -61,9 +58,8 @@ self._suite = suite self._include_internal_builders = include_internal_builders - def _ProcessJsonFiles(self, files: typing.List[str], are_internal_files: bool, - builder_type: str - ) -> typing.Set[data_types.BuilderEntry]: + def _ProcessJsonFiles(self, files: List[str], are_internal_files: bool, + builder_type: str) -> Set[data_types.BuilderEntry]: builders = set() for filepath in files: if not filepath.endswith('.json'): @@ -91,7 +87,7 @@ data_types.BuilderEntry(builder, builder_type, are_internal_files)) return builders - def GetCiBuilders(self) -> typing.Set[data_types.BuilderEntry]: + def GetCiBuilders(self) -> Set[data_types.BuilderEntry]: """Gets the set of CI builders to query. Returns: @@ -115,8 +111,7 @@ ', '.join([b.name for b in ci_builders])) return ci_builders - def _BuilderRunsTestOfInterest(self, test_map: typing.Dict[str, typing.Any] - ) -> bool: + def _BuilderRunsTestOfInterest(self, test_map: Dict[str, Any]) -> bool: """Determines if a builder runs a test of interest. Args: @@ -130,8 +125,8 @@ """ raise NotImplementedError() - def GetTryBuilders(self, ci_builders: typing.Iterable[data_types.BuilderEntry] - ) -> typing.Set[data_types.BuilderEntry]: + def GetTryBuilders(self, ci_builders: Iterable[data_types.BuilderEntry] + ) -> Set[data_types.BuilderEntry]: """Gets the set of try builders to query. A try builder is of interest if it mirrors a builder in |ci_builders| or is @@ -178,7 +173,7 @@ def _GetMirroredBuildersForCiBuilder( self, ci_builder: data_types.BuilderEntry - ) -> typing.Tuple[typing.Set[data_types.BuilderEntry], bool]: + ) -> Tuple[Set[data_types.BuilderEntry], bool]: """Gets the set of try builders that mirror a CI builder. Args: @@ -265,7 +260,7 @@ text=True) return bb_output - def GetIsolateNames(self) -> typing.Set[str]: + def GetIsolateNames(self) -> Set[str]: """Gets the isolate names that are relevant to this implementation. Returns: @@ -283,7 +278,7 @@ """ raise NotImplementedError() - def GetNonChromiumBuilders(self) -> typing.Set[data_types.BuilderEntry]: + def GetNonChromiumBuilders(self) -> Set[data_types.BuilderEntry]: """Gets the builders that are not actual Chromium builders. These are listed in the Chromium //testing/buildbot files, but aren't under
diff --git a/testing/unexpected_passes_common/builders_unittest.py b/testing/unexpected_passes_common/builders_unittest.py index 78a6043..aaa8d66 100755 --- a/testing/unexpected_passes_common/builders_unittest.py +++ b/testing/unexpected_passes_common/builders_unittest.py
@@ -8,7 +8,7 @@ import json import os import sys -import typing +from typing import Any, Dict, Set, Tuple import unittest if sys.version_info[0] == 2: @@ -132,7 +132,7 @@ def testFilterBySuite(self) -> None: """Tests that only builders that run the given suite are returned.""" - def SideEffect(tm: typing.Dict[str, typing.Any]) -> bool: + def SideEffect(tm: Dict[str, Any]) -> bool: tests = tm.get('isolated_scripts', []) for t in tests: if t.get('isolate_name') == 'foo_integration_test': @@ -333,7 +333,7 @@ """Tests that parsed, mirrored builders get returned on success.""" def SideEffect(ci_builder: data_types.BuilderEntry - ) -> typing.Tuple[typing.Set[data_types.BuilderEntry], bool]: + ) -> Tuple[Set[data_types.BuilderEntry], bool]: b = [ data_types.BuilderEntry(ci_builder.name.replace('ci', 'try'), constants.BuilderTypes.TRY, False), @@ -364,7 +364,7 @@ def testDedicatedJsonContentLoaded(self) -> None: """Tests that tryserver JSON content is loaded.""" - def SideEffect(test_spec: typing.Dict[str, typing.Any]) -> bool: + def SideEffect(test_spec: Dict[str, Any]) -> bool: # Treat non-empty test specs as valid. return bool(test_spec) @@ -447,7 +447,7 @@ def testDedicatedFilterBySuite(self) -> None: """Tests that only builders that run the given suite are returned.""" - def SideEffect(tm: typing.Dict[str, typing.Any]) -> bool: + def SideEffect(tm: Dict[str, Any]) -> bool: tests = tm.get('isolated_scripts', []) for t in tests: if t.get('isolate_name') == 'foo_integration_test': @@ -505,8 +505,7 @@ def testDedicatedAndMirroredCombined(self) -> None: """Tests that both dedicated and mirrored trybots are returned.""" - def SideEffect(_: typing.Any - ) -> typing.Tuple[typing.Set[data_types.BuilderEntry], bool]: + def SideEffect(_: Any) -> Tuple[Set[data_types.BuilderEntry], bool]: return set({ data_types.BuilderEntry('mirrored_trybot', constants.BuilderTypes.TRY, False)
diff --git a/testing/unexpected_passes_common/data_types.py b/testing/unexpected_passes_common/data_types.py index e9b89af..31810a6 100644 --- a/testing/unexpected_passes_common/data_types.py +++ b/testing/unexpected_passes_common/data_types.py
@@ -9,7 +9,8 @@ import copy import fnmatch import logging -import typing +from typing import (Any, Dict, Generator, Iterable, List, Optional, Set, Tuple, + Type, Union) import six @@ -26,38 +27,36 @@ TestExpectationMap = None # Type hinting aliases. -ResultListType = typing.List['BaseResult'] -ResultSetType = typing.Set['BaseResult'] - -# pylint: disable=super-with-arguments,useless-object-inheritance +ResultListType = List['BaseResult'] +ResultSetType = Set['BaseResult'] -def SetExpectationImplementation(impl: typing.Type['BaseExpectation']) -> None: +def SetExpectationImplementation(impl: Type['BaseExpectation']) -> None: global Expectation assert issubclass(impl, BaseExpectation) Expectation = impl -def SetResultImplementation(impl: typing.Type['BaseResult']) -> None: +def SetResultImplementation(impl: Type['BaseResult']) -> None: global Result assert issubclass(impl, BaseResult) Result = impl -def SetBuildStatsImplementation(impl: typing.Type['BaseBuildStats']) -> None: +def SetBuildStatsImplementation(impl: Type['BaseBuildStats']) -> None: global BuildStats assert issubclass(impl, BaseBuildStats) BuildStats = impl -def SetTestExpectationMapImplementation( - impl: typing.Type['BaseTestExpectationMap']) -> None: +def SetTestExpectationMapImplementation(impl: Type['BaseTestExpectationMap'] + ) -> None: global TestExpectationMap assert issubclass(impl, BaseTestExpectationMap) TestExpectationMap = impl -class BaseExpectation(object): +class BaseExpectation(): """Container for a test expectation. Similar to typ's expectations_parser.Expectation class, but with unnecessary @@ -69,9 +68,9 @@ def __init__(self, test: str, - tags: typing.Iterable[str], - expected_results: typing.Union[str, typing.Iterable[str]], - bug: typing.Optional[str] = None): + tags: Iterable[str], + expected_results: Union[str, Iterable[str]], + bug: Optional[str] = None): self.test = test self.tags = frozenset(tags) self.bug = bug or '' @@ -88,13 +87,13 @@ else: self._comp = self._CompareNonWildcard - def __eq__(self, other: typing.Any) -> bool: + def __eq__(self, other: Any) -> bool: return (isinstance(other, BaseExpectation) and self.test == other.test and self.tags == other.tags and self.expected_results == other.expected_results and self.bug == other.bug) - def __ne__(self, other: typing.Any) -> bool: + def __ne__(self, other: Any) -> bool: return not self.__eq__(other) def __hash__(self) -> int: @@ -134,14 +133,14 @@ return self._comp(test_name) -class BaseResult(object): +class BaseResult(): """Container for a test result. Contains the minimal amount of data necessary to describe/identify a result from ResultDB for the purposes of the unexpected pass finder. """ - def __init__(self, test: str, tags: typing.Iterable[str], actual_result: str, + def __init__(self, test: str, tags: Iterable[str], actual_result: str, step: str, build_id: str): """ Args: @@ -158,13 +157,13 @@ self.step = step self.build_id = build_id - def __eq__(self, other: typing.Any) -> bool: + def __eq__(self, other: Any) -> bool: return (isinstance(other, BaseResult) and self.test == other.test and self.tags == other.tags and self.actual_result == other.actual_result and self.step == other.step and self.build_id == other.build_id) - def __ne__(self, other: typing.Any) -> bool: + def __ne__(self, other: Any) -> bool: return not self.__eq__(other) def __hash__(self) -> int: @@ -172,7 +171,7 @@ (self.test, self.tags, self.actual_result, self.step, self.build_id)) -class BaseBuildStats(object): +class BaseBuildStats(): """Container for keeping track of a builder's pass/fail stats.""" def __init__(self): @@ -232,13 +231,13 @@ return self.did_never_pass # pylint:enable=unused-argument - def __eq__(self, other: typing.Any) -> bool: + def __eq__(self, other: Any) -> bool: return (isinstance(other, BuildStats) and self.passed_builds == other.passed_builds and self.total_builds == other.total_builds and self.failure_links == other.failure_links) - def __ne__(self, other: typing.Any) -> bool: + def __ne__(self, other: Any) -> bool: return not self.__eq__(other) @@ -268,7 +267,7 @@ for k, v in kwargs.items(): self[k] = v - def setdefault(self, key: typing.Any, value: typing.Any = None) -> typing.Any: + def setdefault(self, key: Any, value: Any = None) -> Any: if key not in self: self[key] = value return self[key] @@ -276,8 +275,7 @@ def _value_type(self) -> type: raise NotImplementedError() - def IterToValueType(self, - value_type: type) -> typing.Generator[tuple, None, None]: + def IterToValueType(self, value_type: type) -> Generator[tuple, None, None]: """Recursively iterates over contents until |value_type| is found. Used to get rid of nested loops, instead using a single loop that @@ -306,7 +304,7 @@ def Merge(self, other_map: 'BaseTypedMap', - reference_map: typing.Optional[dict] = None) -> None: + reference_map: Optional[dict] = None) -> None: """Merges |other_map| into self. Args: @@ -365,13 +363,14 @@ def __setitem__(self, key: str, value: 'ExpectationBuilderMap') -> None: assert IsStringType(key) assert isinstance(value, ExpectationBuilderMap) - super(BaseTestExpectationMap, self).__setitem__(key, value) + super().__setitem__(key, value) def _value_type(self) -> type: return ExpectationBuilderMap - def IterBuilderStepMaps(self) -> typing.Generator[ - typing.Tuple[str, BaseExpectation, 'BuilderStepMap'], None, None]: + def IterBuilderStepMaps( + self + ) -> Generator[Tuple[str, BaseExpectation, 'BuilderStepMap'], None, None]: """Iterates over all BuilderStepMaps contained in the map. Returns: @@ -380,12 +379,11 @@ """ return self.IterToValueType(BuilderStepMap) - def AddResultList( - self, - builder: str, - results: ResultListType, - expectation_files: typing.Optional[typing.Iterable[str]] = None - ) -> ResultListType: + def AddResultList(self, + builder: str, + results: ResultListType, + expectation_files: Optional[Iterable[str]] = None + ) -> ResultListType: """Adds |results| to |self|. Args: @@ -434,9 +432,9 @@ return unmatched_results - def _AddGroupedResults( - self, grouped_results: typing.Dict[str, ResultListType], builder: str, - expectation_files: typing.Optional[typing.List[str]]) -> ResultSetType: + def _AddGroupedResults(self, grouped_results: Dict[str, ResultListType], + builder: str, expectation_files: Optional[List[str]] + ) -> ResultSetType: """Adds all results in |grouped_results| to |self|. Args: @@ -481,8 +479,8 @@ stats.AddFailedBuild(result.build_id) def SplitByStaleness( - self) -> typing.Tuple['BaseTestExpectationMap', 'BaseTestExpectationMap', - 'BaseTestExpectationMap']: + self) -> Tuple['BaseTestExpectationMap', 'BaseTestExpectationMap', + 'BaseTestExpectationMap']: """Separates stored data based on expectation staleness. Returns: @@ -559,8 +557,7 @@ [FULL_PASS, PARTIAL_PASS, NEVER_PASS]) return stale_dict, semi_stale_dict, active_dict - def _ShouldTreatSemiStaleAsActive(self, - pass_map: typing.Dict[int, 'BuilderStepMap'] + def _ShouldTreatSemiStaleAsActive(self, pass_map: Dict[int, 'BuilderStepMap'] ) -> bool: """Check if a semi-stale expectation should be treated as active. @@ -577,7 +574,7 @@ del pass_map return False - def FilterOutUnusedExpectations(self) -> typing.Dict[str, typing.Set[str]]: + def FilterOutUnusedExpectations(self) -> Dict[str, Set[str]]: """Filters out any unused Expectations from stored data. An Expectation is considered unused if its corresponding dictionary is @@ -618,7 +615,7 @@ def __setitem__(self, key: BaseExpectation, value: 'BuilderStepMap') -> None: assert isinstance(key, BaseExpectation) assert isinstance(value, self._value_type()) - super(ExpectationBuilderMap, self).__setitem__(key, value) + super().__setitem__(key, value) def _value_type(self) -> type: return BuilderStepMap @@ -630,14 +627,15 @@ def __setitem__(self, key: str, value: 'StepBuildStatsMap') -> None: assert IsStringType(key) assert isinstance(value, self._value_type()) - super(BuilderStepMap, self).__setitem__(key, value) + super().__setitem__(key, value) def _value_type(self) -> type: return StepBuildStatsMap - def SplitBuildStatsByPass(self, expectation: BaseExpectation) -> typing.Dict[ - str, typing. - Tuple['StepBuildStatsMap', 'StepBuildStatsMap', 'StepBuildStatsMap']]: + def SplitBuildStatsByPass( + self, expectation: BaseExpectation + ) -> Dict[str, Tuple['StepBuildStatsMap', 'StepBuildStatsMap', + 'StepBuildStatsMap']]: """Splits the underlying BuildStats data by passing-ness. Args: @@ -669,8 +667,7 @@ return retval def IterBuildStats( - self - ) -> typing.Generator[typing.Tuple[str, str, BaseBuildStats], None, None]: + self) -> Generator[Tuple[str, str, BaseBuildStats], None, None]: """Iterates over all BuildStats contained in the map. Returns: @@ -686,13 +683,13 @@ def __setitem__(self, key: str, value: BuildStats) -> None: assert IsStringType(key) assert isinstance(value, self._value_type()) - super(StepBuildStatsMap, self).__setitem__(key, value) + super().__setitem__(key, value) def _value_type(self) -> type: return BuildStats -class BuilderEntry(object): +class BuilderEntry(): """Simple container for defining a builder.""" def __init__(self, name: str, builder_type: str, is_internal_builder: bool): @@ -712,19 +709,19 @@ def project(self) -> str: return 'chrome' if self.is_internal_builder else 'chromium' - def __eq__(self, other: typing.Any) -> bool: + def __eq__(self, other: Any) -> bool: return (isinstance(other, BuilderEntry) and self.name == other.name and self.builder_type == other.builder_type and self.is_internal_builder == other.is_internal_builder) - def __ne__(self, other: typing.Any) -> bool: + def __ne__(self, other: Any) -> bool: return not self.__eq__(other) def __hash__(self) -> int: return hash((self.name, self.builder_type, self.is_internal_builder)) -def IsStringType(s: typing.Any) -> bool: +def IsStringType(s: Any) -> bool: return isinstance(s, six.string_types)
diff --git a/testing/unexpected_passes_common/data_types_unittest.py b/testing/unexpected_passes_common/data_types_unittest.py index 4f3225f..758759d 100755 --- a/testing/unexpected_passes_common/data_types_unittest.py +++ b/testing/unexpected_passes_common/data_types_unittest.py
@@ -8,6 +8,7 @@ import copy import sys import typing +from typing import Dict, List import unittest if sys.version_info[0] == 2: @@ -265,7 +266,7 @@ self._StringToMapHelper(data_types.TestExpectationMap, data_types.ExpectationBuilderMap) - def _GetSampleBuildStats(self) -> typing.List[data_types.BuildStats]: + def _GetSampleBuildStats(self) -> List[data_types.BuildStats]: build_stats = [] for i in range(8): bs = data_types.BuildStats() @@ -1239,8 +1240,7 @@ }), }) - def SideEffect(pass_map: typing.Dict[int, data_types.BuilderStepMap] - ) -> bool: + def SideEffect(pass_map: Dict[int, data_types.BuilderStepMap]) -> bool: return pass_map[data_types.FULL_PASS]['foo_builder'][ 'step1'] == uu.CreateStatsWithPassFails(1, 0)
diff --git a/testing/unexpected_passes_common/expectations.py b/testing/unexpected_passes_common/expectations.py index 4259a72..89a6105 100644 --- a/testing/unexpected_passes_common/expectations.py +++ b/testing/unexpected_passes_common/expectations.py
@@ -12,7 +12,7 @@ import re import subprocess import sys -import typing +from typing import Iterable, List, Optional, Set, Tuple, Union import six @@ -74,9 +74,8 @@ class Expectations(object): def CreateTestExpectationMap( - self, - expectation_files: typing.Optional[typing.Union[str, typing.List[str]]], - tests: typing.Optional[typing.Iterable[str]], + self, expectation_files: Optional[Union[str, List[str]]], + tests: Optional[Iterable[str]], grace_period: int) -> data_types.TestExpectationMap: """Creates an expectation map based off a file or list of tests. @@ -189,9 +188,10 @@ content += line_content return content - def RemoveExpectationsFromFile( - self, expectations: typing.List[data_types.Expectation], - expectation_file: str, removal_type: str) -> typing.Set[str]: + def RemoveExpectationsFromFile(self, + expectations: List[data_types.Expectation], + expectation_file: str, + removal_type: str) -> Set[str]: """Removes lines corresponding to |expectations| from |expectation_file|. Ignores any lines that match but are within a disable block or have an @@ -313,8 +313,7 @@ raise NotImplementedError() def ModifySemiStaleExpectations( - self, - stale_expectation_map: data_types.TestExpectationMap) -> typing.Set[str]: + self, stale_expectation_map: data_types.TestExpectationMap) -> Set[str]: """Modifies lines from |stale_expectation_map| in |expectation_file|. Prompts the user for each modification and provides debug information since @@ -384,10 +383,9 @@ modified_urls |= set(e.bug.split()) return modified_urls - def _GetExpectationLine( - self, expectation: data_types.Expectation, file_contents: str, - expectation_file: str - ) -> typing.Union[typing.Tuple[None, None], typing.Tuple[str, int]]: + def _GetExpectationLine(self, expectation: data_types.Expectation, + file_contents: str, expectation_file: str + ) -> Union[Tuple[None, None], Tuple[str, int]]: """Gets the line and line number of |expectation| in |file_contents|. Args: @@ -421,8 +419,7 @@ return line, line_number + 1 return None, None - def FindOrphanedBugs(self, - affected_urls: typing.Iterable[str]) -> typing.Set[str]: + def FindOrphanedBugs(self, affected_urls: Iterable[str]) -> Set[str]: """Finds cases where expectations for bugs no longer exist. Args: @@ -447,7 +444,7 @@ seen_bugs.add(url) return set(affected_urls) - seen_bugs - def GetExpectationFilepaths(self) -> typing.List[str]: + def GetExpectationFilepaths(self) -> List[str]: """Gets all the filepaths to expectation files of interest. Returns:
diff --git a/testing/unexpected_passes_common/multiprocessing_utils.py b/testing/unexpected_passes_common/multiprocessing_utils.py index 2ef3dee2..2344cd76 100644 --- a/testing/unexpected_passes_common/multiprocessing_utils.py +++ b/testing/unexpected_passes_common/multiprocessing_utils.py
@@ -4,12 +4,12 @@ from __future__ import print_function -import typing +from typing import Optional from pathos import pools -def GetProcessPool(nodes: typing.Optional[int] = None) -> pools.ProcessPool: +def GetProcessPool(nodes: Optional[int] = None) -> pools.ProcessPool: """Returns a pathos.pools.ProcessPool instance. Split out for ease of unittesting since pathos can still run into pickling
diff --git a/testing/unexpected_passes_common/queries.py b/testing/unexpected_passes_common/queries.py index 8ea8af3a6..d5fa852 100644 --- a/testing/unexpected_passes_common/queries.py +++ b/testing/unexpected_passes_common/queries.py
@@ -11,7 +11,7 @@ import subprocess import threading import time -import typing +from typing import Any, Dict, Iterable, List, Optional, Tuple, Union import six @@ -51,8 +51,8 @@ AND start_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)""" -QueryResult = typing.Dict[str, typing.Any] -QueryParameters = typing.Dict[str, typing.Dict[str, typing.Any]] +QueryResult = Dict[str, Any] +QueryParameters = Dict[str, Dict[str, Any]] # pylint: disable=super-with-arguments,useless-object-inheritance @@ -84,8 +84,8 @@ def FillExpectationMapForBuilders( self, expectation_map: data_types.TestExpectationMap, - builders: typing.Iterable[data_types.BuilderEntry] - ) -> typing.Dict[str, data_types.ResultListType]: + builders: Iterable[data_types.BuilderEntry] + ) -> Dict[str, data_types.ResultListType]: """Fills |expectation_map| with results from |builders|. Args: @@ -144,9 +144,10 @@ return all_unmatched_results - def _FilterOutInactiveBuilders( - self, builders: typing.Iterable[data_types.BuilderEntry], - builder_type: str) -> typing.List[data_types.BuilderEntry]: + def _FilterOutInactiveBuilders(self, + builders: Iterable[data_types.BuilderEntry], + builder_type: str + ) -> List[data_types.BuilderEntry]: """Filters out any builders that are not producing data. This helps save time on querying, as querying for the builder names is cheap @@ -189,10 +190,9 @@ return filtered_builders def _QueryAddCombined( - self, inputs: typing.Tuple[data_types.BuilderEntry, data_types. - TestExpectationMap] - ) -> typing.Tuple[data_types.ResultListType, str, data_types. - TestExpectationMap]: + self, + inputs: Tuple[data_types.BuilderEntry, data_types.TestExpectationMap] + ) -> Tuple[data_types.ResultListType, str, data_types.TestExpectationMap]: """Combines the query and add steps for use in a process pool. Args: @@ -215,8 +215,7 @@ return unmatched_results, prefixed_builder_name, expectation_map def QueryBuilder(self, builder: data_types.BuilderEntry - ) -> typing.Tuple[data_types.ResultListType, typing. - Optional[typing.List[str]]]: + ) -> Tuple[data_types.ResultListType, Optional[List[str]]]: """Queries ResultDB for results from |builder|. Args: @@ -314,8 +313,8 @@ step = json_result['step_name'] return data_types.Result(test_name, tags, actual_result, step, build_id) - def _GetRelevantExpectationFilesForQueryResult( - self, query_result: QueryResult) -> typing.Optional[typing.Iterable[str]]: + def _GetRelevantExpectationFilesForQueryResult(self, query_result: QueryResult + ) -> Optional[Iterable[str]]: """Gets the relevant expectation file names for a given query result. Args: @@ -341,7 +340,7 @@ return False def _GetQueryGeneratorForBuilder(self, builder: data_types.BuilderEntry - ) -> typing.Optional['BaseQueryGenerator']: + ) -> Optional['BaseQueryGenerator']: """Returns a BaseQueryGenerator instance to only include relevant tests. Args: @@ -353,9 +352,9 @@ """ raise NotImplementedError() - def _RunBigQueryCommandsForJsonOutput( - self, queries: typing.Union[str, typing.List[str]], - parameters: QueryParameters) -> typing.List[QueryResult]: + def _RunBigQueryCommandsForJsonOutput(self, queries: Union[str, List[str]], + parameters: QueryParameters + ) -> List[QueryResult]: """Runs the given BigQuery queries and returns their outputs as JSON. Args: @@ -377,7 +376,7 @@ processes = set() processes_lock = threading.Lock() - def run_cmd_in_thread(inputs: typing.Tuple[typing.List[str], str]) -> str: + def run_cmd_in_thread(inputs: Tuple[List[str], str]) -> str: cmd, query = inputs query = query.encode('utf-8') with open(os.devnull, 'w') as devnull: @@ -408,7 +407,7 @@ raise RuntimeError(error_msg) return stdout - def run_cmd(cmd: typing.List[str], tries: int) -> typing.List[str]: + def run_cmd(cmd: List[str], tries: int) -> List[str]: if tries >= MAX_QUERY_TRIES: raise RuntimeError('Query failed too many times, aborting') @@ -490,7 +489,7 @@ """Splits the query into more clauses/queries.""" raise NotImplementedError('SplitQuery must be overridden in a child class') - def GetClauses(self) -> typing.List[str]: + def GetClauses(self) -> List[str]: """Gets string representations of the test filters. Returns: @@ -499,7 +498,7 @@ """ raise NotImplementedError('GetClauses must be overridden in a child class') - def GetQueries(self) -> typing.List[str]: + def GetQueries(self) -> List[str]: """Gets string representations of the queries to run. Returns: @@ -525,7 +524,7 @@ raise QuerySplitError('Tried to split a query without any test IDs to use, ' 'use --large-query-mode') - def GetClauses(self) -> typing.List[str]: + def GetClauses(self) -> List[str]: return [self._test_filter] # pylint: enable=abstract-method @@ -534,8 +533,8 @@ class SplitQueryGenerator(BaseQueryGenerator): """Concrete test filter that can be split to a desired size.""" - def __init__(self, builder: data_types.BuilderEntry, - test_ids: typing.List[str], target_num_samples: int): + def __init__(self, builder: data_types.BuilderEntry, test_ids: List[str], + target_num_samples: int): """ Args: test_ids: A list of strings containing the test IDs to use in the test @@ -549,7 +548,7 @@ self._clauses = [] self._PerformInitialSplit(test_ids) - def _PerformInitialSplit(self, test_ids: typing.List[str]) -> None: + def _PerformInitialSplit(self, test_ids: List[str]) -> None: """Evenly splits |test_ids| into lists that are ~|_target_num_samples| long Only to be called from the constructor. @@ -580,7 +579,7 @@ self._clauses = test_filter_clauses def SplitQuery(self) -> None: - def _SplitListInHalf(l: list) -> typing.Tuple[list, list]: + def _SplitListInHalf(l: list) -> Tuple[list, list]: assert len(l) > 1 front = l[:len(l) // 2] back = l[len(l) // 2:] @@ -597,14 +596,14 @@ self._test_id_lists = tmp_test_id_lists self._GenerateClauses() - def GetClauses(self) -> typing.List[str]: + def GetClauses(self) -> List[str]: return self._clauses # pylint: enable=abstract-method def GenerateBigQueryCommand(project: str, parameters: QueryParameters, - batch: bool = True) -> typing.List[str]: + batch: bool = True) -> List[str]: """Generate a BigQuery commandline. Does not contain the actual query, as that is passed in via stdin.
diff --git a/testing/unexpected_passes_common/queries_unittest.py b/testing/unexpected_passes_common/queries_unittest.py index 0597bf2..45787eb 100755 --- a/testing/unexpected_passes_common/queries_unittest.py +++ b/testing/unexpected_passes_common/queries_unittest.py
@@ -7,13 +7,10 @@ import json import subprocess import sys -import typing +from typing import List, Tuple import unittest -if sys.version_info[0] == 2: - import mock -else: - import unittest.mock as mock +import unittest.mock as mock from unexpected_passes_common import builders from unexpected_passes_common import constants @@ -202,7 +199,7 @@ def testValidResultsMultipleSteps(self) -> None: """Tests functionality when results from multiple steps are present.""" - def SideEffect(result: queries.QueryResult) -> typing.List[str]: + def SideEffect(result: queries.QueryResult) -> List[str]: if result['step_name'] == 'a step name': return ['foo_expectations'] if result['step_name'] == 'another step name': @@ -348,7 +345,7 @@ """Tests functionality when valid results are returned by the query.""" def SideEffect(builder: data_types.BuilderEntry, - *args) -> typing.Tuple[data_types.ResultListType, None]: + *args) -> Tuple[data_types.ResultListType, None]: del args if builder.name == 'matched_builder': return ([
diff --git a/testing/unexpected_passes_common/result_output.py b/testing/unexpected_passes_common/result_output.py index e770073b..61fc5298a 100644 --- a/testing/unexpected_passes_common/result_output.py +++ b/testing/unexpected_passes_common/result_output.py
@@ -12,7 +12,7 @@ import logging import sys import tempfile -import typing +from typing import Any, Dict, IO, List, Optional, OrderedDict, Set, Union import six @@ -165,7 +165,7 @@ MAX_BUGS_PER_LINE = 5 MAX_CHARACTERS_PER_CL_LINE = 72 -ElementType = typing.Union[typing.Dict[str, typing.Any], typing.List[str], str] +ElementType = Union[Dict[str, Any], List[str], str] # Sample: # { # expectation_file: { @@ -188,13 +188,13 @@ # } # } # } -FullOrNeverPassValue = typing.List[str] -PartialPassValue = typing.Dict[str, typing.List[str]] -PassValue = typing.Union[FullOrNeverPassValue, PartialPassValue] -BuilderToPassMap = typing.Dict[str, typing.Dict[str, PassValue]] -ExpectationToBuilderMap = typing.Dict[str, BuilderToPassMap] -TestToExpectationMap = typing.Dict[str, ExpectationToBuilderMap] -ExpectationFileStringDict = typing.Dict[str, TestToExpectationMap] +FullOrNeverPassValue = List[str] +PartialPassValue = Dict[str, List[str]] +PassValue = Union[FullOrNeverPassValue, PartialPassValue] +BuilderToPassMap = Dict[str, Dict[str, PassValue]] +ExpectationToBuilderMap = Dict[str, BuilderToPassMap] +TestToExpectationMap = Dict[str, ExpectationToBuilderMap] +ExpectationFileStringDict = Dict[str, TestToExpectationMap] # Sample: # { # test_name: { @@ -210,9 +210,9 @@ # }, # ... # } -StepToResultsMap = typing.Dict[str, typing.List[str]] -BuilderToStepMap = typing.Dict[str, StepToResultsMap] -TestToBuilderStringDict = typing.Dict[str, BuilderToStepMap] +StepToResultsMap = Dict[str, List[str]] +BuilderToStepMap = Dict[str, StepToResultsMap] +TestToBuilderStringDict = Dict[str, BuilderToStepMap] # Sample: # { # result_output.FULL_PASS: { @@ -233,15 +233,15 @@ # }, # }, # } -FullOrNeverPassStepValue = typing.List[str] -PartialPassStepValue = typing.Dict[str, typing.List[str]] -PassStepValue = typing.Union[FullOrNeverPassStepValue, PartialPassStepValue] -OrderedPassStringDict = typing.OrderedDict[str, typing.Dict[str, PassStepValue]] +FullOrNeverPassStepValue = List[str] +PartialPassStepValue = Dict[str, List[str]] +PassStepValue = Union[FullOrNeverPassStepValue, PartialPassStepValue] +OrderedPassStringDict = OrderedDict[str, Dict[str, PassStepValue]] -UnmatchedResultsType = typing.Dict[str, data_types.ResultListType] -UnusedExpectation = typing.Dict[str, typing.List[data_types.Expectation]] +UnmatchedResultsType = Dict[str, data_types.ResultListType] +UnusedExpectation = Dict[str, List[data_types.Expectation]] -RemovedUrlsType = typing.Union[typing.List[str], typing.Set[str]] +RemovedUrlsType = Union[List[str], Set[str]] def OutputResults(stale_dict: data_types.TestExpectationMap, @@ -250,7 +250,7 @@ unmatched_results: UnmatchedResultsType, unused_expectations: UnusedExpectation, output_format: str, - file_handle: typing.Optional[typing.IO] = None) -> None: + file_handle: Optional[IO] = None) -> None: """Outputs script results to |file_handle|. Args: @@ -336,7 +336,7 @@ def RecursivePrintToFile(element: ElementType, depth: int, - file_handle: typing.IO) -> None: + file_handle: IO) -> None: """Recursively prints |element| as text to |file_handle|. Args: @@ -359,7 +359,7 @@ raise RuntimeError('Given unhandled type %s' % type(element)) -def _RecursiveHtmlToFile(element: ElementType, file_handle: typing.IO) -> None: +def _RecursiveHtmlToFile(element: ElementType, file_handle: IO) -> None: """Recursively outputs |element| as HTMl to |file_handle|. Iterables will be output as a collapsible section containing any of the @@ -528,8 +528,7 @@ def _ConvertUnusedExpectationsToStringDict( - unused_expectations: UnusedExpectation -) -> typing.Dict[str, typing.List[str]]: + unused_expectations: UnusedExpectation) -> Dict[str, List[str]]: """Converts |unused_expectations| to a dict of strings for reporting. Args: @@ -569,8 +568,7 @@ def OutputAffectedUrls(removed_urls: RemovedUrlsType, - orphaned_urls: typing.Optional[RemovedUrlsType] = None - ) -> None: + orphaned_urls: Optional[RemovedUrlsType] = None) -> None: """Outputs URLs of affected expectations for easier consumption by the user. Outputs the following: @@ -596,9 +594,9 @@ _OutputUrlsForClDescription(removed_urls, orphaned_urls) -def _OutputAffectedUrls(affected_urls: typing.List[str], - orphaned_urls: typing.List[str], - file_handle: typing.Optional[typing.IO] = None) -> None: +def _OutputAffectedUrls(affected_urls: List[str], + orphaned_urls: List[str], + file_handle: Optional[IO] = None) -> None: """Outputs |urls| for opening in a browser as affected bugs. Args: @@ -611,10 +609,9 @@ _OutputUrlsForCommandLine(orphaned_urls, "Closable bugs", file_handle) -def _OutputUrlsForCommandLine(urls: typing.List[str], +def _OutputUrlsForCommandLine(urls: List[str], description: str, - file_handle: typing.Optional[typing.IO] = None - ) -> None: + file_handle: Optional[IO] = None) -> None: """Outputs |urls| for opening in a browser. The output string is meant to be passed to a browser via the command line in @@ -636,10 +633,9 @@ file_handle.write('%s: %s\n' % (description, ' '.join(urls))) -def _OutputUrlsForClDescription(affected_urls: typing.List[str], - orphaned_urls: typing.List[str], - file_handle: typing.Optional[typing.IO] = None - ) -> None: +def _OutputUrlsForClDescription(affected_urls: List[str], + orphaned_urls: List[str], + file_handle: Optional[IO] = None) -> None: """Outputs |urls| for use in a CL description. Output adheres to the line length recommendation and max number of bugs per
diff --git a/testing/unexpected_passes_common/result_output_unittest.py b/testing/unexpected_passes_common/result_output_unittest.py index 6d74a3b..ba29791 100755 --- a/testing/unexpected_passes_common/result_output_unittest.py +++ b/testing/unexpected_passes_common/result_output_unittest.py
@@ -9,7 +9,7 @@ import itertools import sys import tempfile -import typing +from typing import Iterable, Set import unittest import six @@ -21,8 +21,7 @@ from unexpected_passes_common import unittest_utils as uu -def CreateTextOutputPermutations(text: str, inputs: typing.Iterable[str] - ) -> typing.Set[str]: +def CreateTextOutputPermutations(text: str, inputs: Iterable[str]) -> Set[str]: """Creates permutations of |text| filled with the contents of |inputs|. Some output ordering is not guaranteed, so this acts as a way to generate
diff --git a/testing/unexpected_passes_common/unittest_utils.py b/testing/unexpected_passes_common/unittest_utils.py index 4476f96..ebace62 100644 --- a/testing/unexpected_passes_common/unittest_utils.py +++ b/testing/unexpected_passes_common/unittest_utils.py
@@ -5,7 +5,7 @@ from __future__ import print_function -import typing +from typing import Any, Callable, Iterable, List, Optional, Tuple, Type import unittest.mock as mock from unexpected_passes_common import builders @@ -13,8 +13,6 @@ from unexpected_passes_common import data_types from unexpected_passes_common import queries as queries_module -# pylint: disable=useless-object-inheritance,super-with-arguments - def CreateStatsWithPassFails(passes: int, fails: int) -> data_types.BuildStats: stats = data_types.BuildStats() @@ -25,7 +23,7 @@ return stats -def _CreateSimpleQueries(clauses: typing.Iterable[str]) -> typing.List[str]: +def _CreateSimpleQueries(clauses: Iterable[str]) -> List[str]: queries = [] # Not actually a valid query since we don't specify the table, but it works. for c in clauses: @@ -37,12 +35,12 @@ class SimpleFixedQueryGenerator(queries_module.FixedQueryGenerator): - def GetQueries(self) -> typing.List[str]: + def GetQueries(self) -> List[str]: return _CreateSimpleQueries(self.GetClauses()) class SimpleSplitQueryGenerator(queries_module.SplitQueryGenerator): - def GetQueries(self) -> typing.List[str]: + def GetQueries(self) -> List[str]: return _CreateSimpleQueries(self.GetClauses()) @@ -64,11 +62,11 @@ def CreateGenericQuerier( - suite: typing.Optional[str] = None, - project: typing.Optional[str] = None, - num_samples: typing.Optional[int] = None, - large_query_mode: typing.Optional[bool] = None, - cls: typing.Optional[typing.Type[queries_module.BigQueryQuerier]] = None + suite: Optional[str] = None, + project: Optional[str] = None, + num_samples: Optional[int] = None, + large_query_mode: Optional[bool] = None, + cls: Optional[Type[queries_module.BigQueryQuerier]] = None ) -> queries_module.BigQueryQuerier: suite = suite or 'pixel' project = project or 'project' @@ -78,8 +76,8 @@ return cls(suite, project, num_samples, large_query_mode) -def GetArgsForMockCall(call_args_list: typing.List[tuple], - call_number: int) -> typing.Tuple[tuple, dict]: +def GetArgsForMockCall(call_args_list: List[tuple], + call_number: int) -> Tuple[tuple, dict]: """Helper to more sanely get call args from a mocked method. Args: @@ -96,7 +94,7 @@ return args, kwargs -class FakePool(object): +class FakePool(): """A fake pathos.pools.ProcessPool instance. Real pools don't like being given MagicMocks, so this allows testing of @@ -104,38 +102,37 @@ multiprocessing_utils.GetProcessPool(). """ - def map(self, f: typing.Callable[[typing.Any], typing.Any], - inputs: typing.Iterable[typing.Any]) -> typing.List[typing.Any]: + def map(self, f: Callable[[Any], Any], inputs: Iterable[Any]) -> List[Any]: retval = [] for i in inputs: retval.append(f(i)) return retval - def apipe(self, f: typing.Callable[[typing.Any], typing.Any], - inputs: typing.Iterable[typing.Any]) -> 'FakeAsyncResult': + def apipe(self, f: Callable[[Any], Any], + inputs: Iterable[Any]) -> 'FakeAsyncResult': return FakeAsyncResult(f(inputs)) -class FakeAsyncResult(object): +class FakeAsyncResult(): """A fake AsyncResult like the one from multiprocessing or pathos.""" - def __init__(self, result: typing.Any): + def __init__(self, result: Any): self._result = result def ready(self) -> bool: return True - def get(self) -> typing.Any: + def get(self) -> Any: return self._result -class FakeProcess(object): +class FakeProcess(): """A fake subprocess Process object.""" def __init__(self, - returncode: typing.Optional[int] = None, - stdout: typing.Optional[str] = None, - stderr: typing.Optional[str] = None, + returncode: Optional[int] = None, + stdout: Optional[str] = None, + stderr: Optional[str] = None, finish: bool = True): if finish: self.returncode = returncode or 0 @@ -145,7 +142,7 @@ self.stderr = stderr or '' self.finish = finish - def communicate(self, _) -> typing.Tuple[str, str]: + def communicate(self, _) -> Tuple[str, str]: return self.stdout, self.stderr def terminate(self) -> None: @@ -156,9 +153,9 @@ class GenericBuilders(builders.Builders): #pylint: disable=useless-super-delegation def __init__(self, - suite: typing.Optional[str] = None, + suite: Optional[str] = None, include_internal_builders: bool = False): - super(GenericBuilders, self).__init__(suite, include_internal_builders) + super().__init__(suite, include_internal_builders) #pylint: enable=useless-super-delegation def _BuilderRunsTestOfInterest(self, _test_map) -> bool:
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index be6e0a63..1b3b1ee1 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -2040,21 +2040,6 @@ ] } ], - "CacheDeprecatedSystemLocationSetting": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "CacheDeprecatedSystemLocationSetting" - ] - } - ] - } - ], "CacheFontFamilyMatching": [ { "platforms": [ @@ -6446,6 +6431,22 @@ ] } ], + "OptimizeGeolocationHeaderGeneration": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "CacheDeprecatedSystemLocationSetting", + "OptimizeGeolocationHeaderGeneration" + ] + } + ] + } + ], "OptimizeNetworkBuffers2": [ { "platforms": [
diff --git a/third_party/blink/PRESUBMIT.py b/third_party/blink/PRESUBMIT.py index a34c445..5c98c2df 100644 --- a/third_party/blink/PRESUBMIT.py +++ b/third_party/blink/PRESUBMIT.py
@@ -130,6 +130,7 @@ input_api, output_api, excluded_paths=_EXCLUDED_PATHS, + owners_check=False, maxlen=800, license_header=license_header, global_checks=False))
diff --git a/third_party/blink/common/manifest/manifest_util.cc b/third_party/blink/common/manifest/manifest_util.cc index b78bd6c..73aa0bae 100644 --- a/third_party/blink/common/manifest/manifest_util.cc +++ b/third_party/blink/common/manifest/manifest_util.cc
@@ -42,6 +42,8 @@ return "window-controls-overlay"; case blink::mojom::DisplayMode::kTabbed: return "tabbed"; + case blink::mojom::DisplayMode::kBorderless: + return "borderless"; } return ""; } @@ -59,6 +61,8 @@ return blink::mojom::DisplayMode::kWindowControlsOverlay; if (base::EqualsCaseInsensitiveASCII(display, "tabbed")) return blink::mojom::DisplayMode::kTabbed; + if (base::EqualsCaseInsensitiveASCII(display, "borderless")) + return blink::mojom::DisplayMode::kBorderless; return blink::mojom::DisplayMode::kUndefined; }
diff --git a/third_party/blink/common/manifest/manifest_util_unittest.cc b/third_party/blink/common/manifest/manifest_util_unittest.cc index 87bcae3..f3a1b64 100644 --- a/third_party/blink/common/manifest/manifest_util_unittest.cc +++ b/third_party/blink/common/manifest/manifest_util_unittest.cc
@@ -23,6 +23,7 @@ {blink::mojom::DisplayMode::kWindowControlsOverlay, "window-controls-overlay"}, {blink::mojom::DisplayMode::kTabbed, "tabbed"}, + {blink::mojom::DisplayMode::kBorderless, "borderless"}, }; for (const ReversibleConversion& conversion : reversible_conversions) {
diff --git a/third_party/blink/public/mojom/manifest/display_mode.mojom b/third_party/blink/public/mojom/manifest/display_mode.mojom index ba7be8b..62016df1 100644 --- a/third_party/blink/public/mojom/manifest/display_mode.mojom +++ b/third_party/blink/public/mojom/manifest/display_mode.mojom
@@ -28,6 +28,11 @@ // field of the web app manifest: https://github.com/w3c/manifest/issues/737 kTabbed, + // This is a non-standard value intended for use in the "display_override" + // field of the web app manifest: + // https://github.com/sonkkeli/borderless/blob/main/EXPLAINER.md. + kBorderless, + /** * This enum is persisted to logs, and therefore is append-only and should not be reordered. */
diff --git a/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom b/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom index b0cc28d..e82bb019 100644 --- a/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom +++ b/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom
@@ -3630,6 +3630,7 @@ kSendBeaconWithURLSearchParams = 4309, kSendBeaconWithUSVString = 4310, kReplacedElementPaintedWithOverflow = 4311, + kImageAd = 4312, // Add new features immediately above this line. Don't change assigned // numbers of any item, and don't reuse removed slots.
diff --git a/third_party/blink/renderer/bindings/generated_in_modules.gni b/third_party/blink/renderer/bindings/generated_in_modules.gni index 514327e..41c90d0 100644 --- a/third_party/blink/renderer/bindings/generated_in_modules.gni +++ b/third_party/blink/renderer/bindings/generated_in_modules.gni
@@ -531,8 +531,8 @@ "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_idb_version_change_event_init.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_identity_credential.cc", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_identity_credential.h", - "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_identity_credential_logout_rps_request.cc", - "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_identity_credential_logout_rps_request.h", + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_identity_credential_logout_r_ps_request.cc", + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_identity_credential_logout_r_ps_request.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_identity_credential_request_options.cc", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_identity_credential_request_options.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_identity_provider.cc",
diff --git a/third_party/blink/renderer/bindings/idl_in_modules.gni b/third_party/blink/renderer/bindings/idl_in_modules.gni index be41d979..7e5e551b 100644 --- a/third_party/blink/renderer/bindings/idl_in_modules.gni +++ b/third_party/blink/renderer/bindings/idl_in_modules.gni
@@ -162,7 +162,7 @@ "//third_party/blink/renderer/modules/credentialmanagement/federated_credential_init.idl", "//third_party/blink/renderer/modules/credentialmanagement/federated_credential_request_options.idl", "//third_party/blink/renderer/modules/credentialmanagement/identity_credential.idl", - "//third_party/blink/renderer/modules/credentialmanagement/identity_credential_logout_rps_request.idl", + "//third_party/blink/renderer/modules/credentialmanagement/identity_credential_logout_r_ps_request.idl", "//third_party/blink/renderer/modules/credentialmanagement/identity_credential_request_options.idl", "//third_party/blink/renderer/modules/credentialmanagement/identity_provider.idl", "//third_party/blink/renderer/modules/credentialmanagement/navigator_credentials.idl",
diff --git a/third_party/blink/renderer/core/html/track/html_track_element.cc b/third_party/blink/renderer/core/html/track/html_track_element.cc index cbb0160..2823b66 100644 --- a/third_party/blink/renderer/core/html/track/html_track_element.cc +++ b/third_party/blink/renderer/core/html/track/html_track_element.cc
@@ -180,7 +180,7 @@ // Also we will first check if the new URL is not equal with // the previous URL (there is an unclarified issue in spec // about it, see: https://github.com/whatwg/html/issues/2916) - if (url == url_ && getReadyState() != kNone) + if (url == url_ && getReadyState() != ReadyState::kNone) return; if (track_) @@ -191,7 +191,7 @@ // 6. [X] Set the text track readiness state to loading. // Step 7 does not depend on step 6, so they were reordered to grant // setting kLoading state after the equality check - SetReadyState(kLoading); + SetReadyState(ReadyState::kLoading); // 8. [X] If the track element's parent is a media element then let CORS mode // be the state of the parent media element's crossorigin content attribute. @@ -261,7 +261,7 @@ // must change the text track readiness state to failed to load and fire a // simple event named error at the track element. if (status == kFailure) { - SetReadyState(kError); + SetReadyState(ReadyState::kError); DispatchEvent(*Event::Create(event_type_names::kError)); return; } @@ -271,7 +271,7 @@ // source, after it has finished parsing the data, must change the text track // readiness state to loaded, and fire a simple event named load at the track // element. - SetReadyState(kLoaded); + SetReadyState(ReadyState::kLoaded); DispatchEvent(*Event::Create(event_type_names::kLoad)); } @@ -302,19 +302,19 @@ // NOTE: The values in the TextTrack::ReadinessState enum must stay in sync with // those in HTMLTrackElement::ReadyState. static_assert( - HTMLTrackElement::kNone == + HTMLTrackElement::ReadyState::kNone == static_cast<HTMLTrackElement::ReadyState>(TextTrack::kNotLoaded), "HTMLTrackElement::kNone should be in sync with TextTrack::NotLoaded"); static_assert( - HTMLTrackElement::kLoading == + HTMLTrackElement::ReadyState::kLoading == static_cast<HTMLTrackElement::ReadyState>(TextTrack::kLoading), "HTMLTrackElement::kLoading should be in sync with TextTrack::Loading"); static_assert( - HTMLTrackElement::kLoaded == + HTMLTrackElement::ReadyState::kLoaded == static_cast<HTMLTrackElement::ReadyState>(TextTrack::kLoaded), "HTMLTrackElement::kLoaded should be in sync with TextTrack::Loaded"); static_assert( - HTMLTrackElement::kError == + HTMLTrackElement::ReadyState::kError == static_cast<HTMLTrackElement::ReadyState>(TextTrack::kFailedToLoad), "HTMLTrackElement::kError should be in sync with TextTrack::FailedToLoad"); @@ -326,7 +326,8 @@ } HTMLTrackElement::ReadyState HTMLTrackElement::getReadyState() { - return track_ ? static_cast<ReadyState>(track_->GetReadinessState()) : kNone; + return track_ ? static_cast<ReadyState>(track_->GetReadinessState()) + : ReadyState::kNone; } const AtomicString& HTMLTrackElement::MediaElementCrossOriginAttribute() const {
diff --git a/third_party/blink/renderer/core/html/track/html_track_element.h b/third_party/blink/renderer/core/html/track/html_track_element.h index 54251ddd..693a867c 100644 --- a/third_party/blink/renderer/core/html/track/html_track_element.h +++ b/third_party/blink/renderer/core/html/track/html_track_element.h
@@ -47,7 +47,7 @@ const AtomicString& kind(); void setKind(const AtomicString&); - enum ReadyState { kNone = 0, kLoading = 1, kLoaded = 2, kError = 3 }; + enum class ReadyState { kNone = 0, kLoading = 1, kLoaded = 2, kError = 3 }; ReadyState getReadyState(); void ScheduleLoad();
diff --git a/third_party/blink/renderer/core/html/track/loadable_text_track.cc b/third_party/blink/renderer/core/html/track/loadable_text_track.cc index fca8256..0409840 100644 --- a/third_party/blink/renderer/core/html/track/loadable_text_track.cc +++ b/third_party/blink/renderer/core/html/track/loadable_text_track.cc
@@ -48,7 +48,7 @@ void LoadableTextTrack::setMode(const V8TextTrackMode& mode) { TextTrack::setMode(mode); - if (track_element_->getReadyState() == HTMLTrackElement::kNone) + if (track_element_->getReadyState() == HTMLTrackElement::ReadyState::kNone) track_element_->ScheduleLoad(); }
diff --git a/third_party/blink/renderer/core/layout/layout_image.cc b/third_party/blink/renderer/core/layout/layout_image.cc index 4a7ec12..a5828c00 100644 --- a/third_party/blink/renderer/core/layout/layout_image.cc +++ b/third_party/blink/renderer/core/layout/layout_image.cc
@@ -55,10 +55,7 @@ namespace blink { LayoutImage::LayoutImage(Element* element) - : LayoutReplaced(element, LayoutSize()), - did_increment_visually_non_empty_pixel_count_(false), - is_generated_content_(false), - image_device_pixel_ratio_(1.0f) {} + : LayoutReplaced(element, LayoutSize()) {} LayoutImage* LayoutImage::CreateAnonymous(PseudoElement& pseudo) { LayoutImage* image = MakeGarbageCollected<LayoutImage>(nullptr); @@ -471,6 +468,17 @@ if (auto* image_element = DynamicTo<HTMLImageElement>(node)) { media_element_parser_helpers::CheckUnsizedMediaViolation( this, image_element->IsDefaultIntrinsicSize()); + + // Scope to the outermost frame to avoid counting image ads that are + // (likely) already in ad iframes. Exclude image ads that are invisible or + // too small (e.g. tracking pixels). + if (!image_ad_use_counter_recorded_ && image_element->IsAdRelated() && + GetDocument().IsInOutermostMainFrame() && + image_element->LayoutBoxWidth() > 1 && + image_element->LayoutBoxHeight() > 1) { + UseCounter::Count(GetDocument(), WebFeature::kImageAd); + image_ad_use_counter_recorded_ = true; + } } else if (auto* video_element = DynamicTo<HTMLVideoElement>(node)) { media_element_parser_helpers::CheckUnsizedMediaViolation( this, video_element->IsDefaultIntrinsicSize());
diff --git a/third_party/blink/renderer/core/layout/layout_image.h b/third_party/blink/renderer/core/layout/layout_image.h index a4dfaa59..7193ab8 100644 --- a/third_party/blink/renderer/core/layout/layout_image.h +++ b/third_party/blink/renderer/core/layout/layout_image.h
@@ -176,11 +176,13 @@ // and thus is stored in ComputedStyle (see ContentData::image) that gets // propagated to the anonymous LayoutImage in LayoutObject::createObject. Member<LayoutImageResource> image_resource_; - bool did_increment_visually_non_empty_pixel_count_; + bool did_increment_visually_non_empty_pixel_count_ = false; // This field stores whether this image is generated with 'content'. - bool is_generated_content_; - float image_device_pixel_ratio_; + bool is_generated_content_ = false; + float image_device_pixel_ratio_ = 1.0f; + + bool image_ad_use_counter_recorded_ = false; }; template <>
diff --git a/third_party/blink/renderer/core/page/scrolling/main_thread_scrolling_reasons_test.cc b/third_party/blink/renderer/core/page/scrolling/main_thread_scrolling_reasons_test.cc index 3bc805b9..ab9b08c 100644 --- a/third_party/blink/renderer/core/page/scrolling/main_thread_scrolling_reasons_test.cc +++ b/third_party/blink/renderer/core/page/scrolling/main_thread_scrolling_reasons_test.cc
@@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "base/test/metrics/histogram_tester.h" #include "cc/input/main_thread_scrolling_reason.h" #include "cc/layers/picture_layer.h" #include "cc/trees/property_tree.h" @@ -102,15 +103,21 @@ ->GetScrollableArea(); } + base::Bucket BucketForReason(uint32_t reason) { + uint32_t bucket = 0; + while (reason >>= 1) + bucket++; + return base::Bucket(base::HistogramBase::Sample(bucket), 1); + } + protected: String base_url_; + frame_test_helpers::WebViewHelper helper_; private: static void ConfigureSettings(WebSettings* settings) { settings->SetPreferCompositingToLCDTextEnabled(true); } - - frame_test_helpers::WebViewHelper helper_; }; INSTANTIATE_PAINT_TEST_SUITE_P(MainThreadScrollingReasonsTest); @@ -234,6 +241,55 @@ GetMainThreadScrollingReasons(outer_scroll_layer)); } +TEST_P(MainThreadScrollingReasonsTest, ReportBackgroundAttachmentFixed) { + base::HistogramTester histogram_tester; + std::string html = R"HTML( + <style> + body { width: 900px; height: 900px; } + #bg { background: url('white-1x1.png') fixed; } + </style> + <div id=bg>x</div> + )HTML"; + + WebLocalFrameImpl* frame = helper_.LocalMainFrame(); + frame_test_helpers::LoadHTMLString(frame, html, + url_test_helpers::ToKURL("about:blank")); + + helper_.GetLayerTreeHost()->CompositeForTest(base::TimeTicks::Now(), false); + + auto CreateEvent = [](WebInputEvent::Type type) { + return WebGestureEvent(type, WebInputEvent::kNoModifiers, + base::TimeTicks::Now(), + WebGestureDevice::kTouchscreen); + }; + + WebGestureEvent scroll_begin = + CreateEvent(WebInputEvent::Type::kGestureScrollBegin); + WebGestureEvent scroll_update = + CreateEvent(WebInputEvent::Type::kGestureScrollUpdate); + WebGestureEvent scroll_end = + CreateEvent(WebInputEvent::Type::kGestureScrollEnd); + + scroll_begin.SetPositionInWidget(gfx::PointF(100, 100)); + scroll_update.SetPositionInWidget(gfx::PointF(100, 100)); + scroll_end.SetPositionInWidget(gfx::PointF(100, 100)); + + scroll_update.data.scroll_update.delta_y = -100; + + auto* widget = helper_.GetMainFrameWidget(); + widget->DispatchThroughCcInputHandler(scroll_begin); + widget->DispatchThroughCcInputHandler(scroll_update); + widget->DispatchThroughCcInputHandler(scroll_end); + + helper_.GetLayerTreeHost()->CompositeForTest(base::TimeTicks::Now(), false); + + uint32_t expected_reason = + cc::MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects; + EXPECT_THAT( + histogram_tester.GetAllSamples("Renderer4.MainThreadGestureScrollReason"), + testing::ElementsAre(BucketForReason(expected_reason))); +} + // Upon resizing the content size, the main thread scrolling reason // kHasBackgroundAttachmentFixedObjects should be updated on all frames TEST_P(MainThreadScrollingReasonsTest,
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object.cc b/third_party/blink/renderer/modules/accessibility/ax_object.cc index 3f6978d..88cf408 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_object.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_object.cc
@@ -2808,9 +2808,9 @@ AXObjectInclusion AXObject::DefaultObjectInclusion( IgnoredReasons* ignored_reasons) const { if (IsAriaHidden()) { - // Keep focusable elements that are aria-hidden in tree, so that they can - // still fire events such as focus and value changes. - if (!CanSetFocusAttribute()) { + // Keep keyboard focusable elements that are aria-hidden in tree, so that + // they can still fire events such as focus and value changes. + if (!IsKeyboardFocusable()) { if (ignored_reasons) ComputeIsAriaHidden(ignored_reasons); return kIgnoreObject; @@ -3537,6 +3537,21 @@ return false; } +// We can't use `Element::IsKeyboardFocusable()` since the downstream +// `Element::IsFocusableStyle()` call will reset the document lifecycle. +bool AXObject::IsKeyboardFocusable() const { + if (!CanSetFocusAttribute()) + return false; + + Element* element = GetElement(); + DCHECK(element) << "Cannot be focusable without an element: " + << ToString(true, true); + // TODO(jarhar) Scrollable containers should return true here if + // `RuntimeEnabledFeatures::KeyboardFocusableScrollersEnabled()` + // is true. + return element->tabIndex() >= 0 || IsRootEditableElement(*element); +} + // From ARIA 1.1. // 1. The value of aria-activedescendant refers to an element that is either a // descendant of the element with DOM focus or is a logical descendant as
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object.h b/third_party/blink/renderer/modules/accessibility/ax_object.h index 50a64df..561c6b3 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_object.h +++ b/third_party/blink/renderer/modules/accessibility/ax_object.h
@@ -467,6 +467,8 @@ // Is the element focusable? bool CanSetFocusAttribute() const; + // Is the element in the tab order? + bool IsKeyboardFocusable() const; // Whether objects are ignored, i.e. hidden from the AT. bool AccessibilityIsIgnored() const;
diff --git a/third_party/blink/renderer/modules/credentialmanagement/credential_manager_type_converters.cc b/third_party/blink/renderer/modules/credentialmanagement/credential_manager_type_converters.cc index de254a20..4b4f6a3 100644 --- a/third_party/blink/renderer/modules/credentialmanagement/credential_manager_type_converters.cc +++ b/third_party/blink/renderer/modules/credentialmanagement/credential_manager_type_converters.cc
@@ -19,7 +19,7 @@ #include "third_party/blink/renderer/bindings/modules/v8/v8_authenticator_selection_criteria.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_cable_authentication_data.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_cable_registration_data.h" -#include "third_party/blink/renderer/bindings/modules/v8/v8_identity_credential_logout_rps_request.h" +#include "third_party/blink/renderer/bindings/modules/v8/v8_identity_credential_logout_r_ps_request.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_public_key_credential_creation_options.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_public_key_credential_descriptor.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_public_key_credential_parameters.h" @@ -320,8 +320,8 @@ // static LogoutRpsRequestPtr -TypeConverter<LogoutRpsRequestPtr, blink::IdentityCredentialLogoutRpsRequest>:: - Convert(const blink::IdentityCredentialLogoutRpsRequest& request) { +TypeConverter<LogoutRpsRequestPtr, blink::IdentityCredentialLogoutRPsRequest>:: + Convert(const blink::IdentityCredentialLogoutRPsRequest& request) { auto mojo_request = LogoutRpsRequest::New(); mojo_request->url = blink::KURL(request.url());
diff --git a/third_party/blink/renderer/modules/credentialmanagement/credential_manager_type_converters.h b/third_party/blink/renderer/modules/credentialmanagement/credential_manager_type_converters.h index 54be558..751d070 100644 --- a/third_party/blink/renderer/modules/credentialmanagement/credential_manager_type_converters.h +++ b/third_party/blink/renderer/modules/credentialmanagement/credential_manager_type_converters.h
@@ -19,7 +19,7 @@ class CableAuthenticationData; class CableRegistrationData; class Credential; -class IdentityCredentialLogoutRpsRequest; +class IdentityCredentialLogoutRPsRequest; class PublicKeyCredentialCreationOptions; class PublicKeyCredentialDescriptor; class PublicKeyCredentialParameters; @@ -122,9 +122,9 @@ template <> struct TypeConverter<blink::mojom::blink::LogoutRpsRequestPtr, - blink::IdentityCredentialLogoutRpsRequest> { + blink::IdentityCredentialLogoutRPsRequest> { static blink::mojom::blink::LogoutRpsRequestPtr Convert( - const blink::IdentityCredentialLogoutRpsRequest&); + const blink::IdentityCredentialLogoutRPsRequest&); }; template <>
diff --git a/third_party/blink/renderer/modules/credentialmanagement/identity_credential.cc b/third_party/blink/renderer/modules/credentialmanagement/identity_credential.cc index fc8b8d6c..a4fd5f0 100644 --- a/third_party/blink/renderer/modules/credentialmanagement/identity_credential.cc +++ b/third_party/blink/renderer/modules/credentialmanagement/identity_credential.cc
@@ -8,7 +8,6 @@ #include "third_party/blink/public/mojom/webid/federated_auth_request.mojom-blink.h" #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_credential_request_options.h" -#include "third_party/blink/renderer/bindings/modules/v8/v8_identity_credential_logout_rps_request.h" #include "third_party/blink/renderer/core/dom/dom_exception.h" #include "third_party/blink/renderer/core/frame/csp/content_security_policy.h" #include "third_party/blink/renderer/modules/credentialmanagement/credential_manager_proxy.h" @@ -98,9 +97,9 @@ return true; } -ScriptPromise IdentityCredential::logoutRps( +ScriptPromise IdentityCredential::logoutRPs( ScriptState* script_state, - const HeapVector<Member<IdentityCredentialLogoutRpsRequest>>& + const HeapVector<Member<IdentityCredentialLogoutRPsRequest>>& logout_endpoints) { if (!RuntimeEnabledFeatures::FedCmIdpSignoutEnabled( ExecutionContext::From(script_state))) {
diff --git a/third_party/blink/renderer/modules/credentialmanagement/identity_credential.h b/third_party/blink/renderer/modules/credentialmanagement/identity_credential.h index aa03534..ceff7e0 100644 --- a/third_party/blink/renderer/modules/credentialmanagement/identity_credential.h +++ b/third_party/blink/renderer/modules/credentialmanagement/identity_credential.h
@@ -6,7 +6,7 @@ #define THIRD_PARTY_BLINK_RENDERER_MODULES_CREDENTIALMANAGEMENT_IDENTITY_CREDENTIAL_H_ #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h" -#include "third_party/blink/renderer/bindings/modules/v8/v8_identity_credential_logout_rps_request.h" +#include "third_party/blink/renderer/bindings/modules/v8/v8_identity_credential_logout_r_ps_request.h" #include "third_party/blink/renderer/modules/credentialmanagement/credential.h" #include "third_party/blink/renderer/modules/modules_export.h" #include "third_party/blink/renderer/platform/bindings/script_wrappable.h" @@ -33,9 +33,9 @@ // IdentityCredential.idl const String& token() const { return token_; } - static ScriptPromise logoutRps( + static ScriptPromise logoutRPs( ScriptState*, - const HeapVector<Member<IdentityCredentialLogoutRpsRequest>>&); + const HeapVector<Member<IdentityCredentialLogoutRPsRequest>>&); private: const String token_;
diff --git a/third_party/blink/renderer/modules/credentialmanagement/identity_credential.idl b/third_party/blink/renderer/modules/credentialmanagement/identity_credential.idl index f9047ab..b4124bf 100644 --- a/third_party/blink/renderer/modules/credentialmanagement/identity_credential.idl +++ b/third_party/blink/renderer/modules/credentialmanagement/identity_credential.idl
@@ -14,5 +14,5 @@ // Allows IDPs to logout the user out of all of the logged in RPs. [RuntimeEnabled=FedCmIdpSignout, CallWith=ScriptState, MeasureAs=FedCmLogoutRps] - static Promise<void> logoutRps(optional sequence<IdentityCredentialLogoutRpsRequest> logout_requests = []); + static Promise<void> logoutRPs(optional sequence<IdentityCredentialLogoutRPsRequest> logout_requests = []); };
diff --git a/third_party/blink/renderer/modules/credentialmanagement/identity_credential_logout_rps_request.idl b/third_party/blink/renderer/modules/credentialmanagement/identity_credential_logout_r_ps_request.idl similarity index 69% rename from third_party/blink/renderer/modules/credentialmanagement/identity_credential_logout_rps_request.idl rename to third_party/blink/renderer/modules/credentialmanagement/identity_credential_logout_r_ps_request.idl index 8b716fd..804bc03 100644 --- a/third_party/blink/renderer/modules/credentialmanagement/identity_credential_logout_rps_request.idl +++ b/third_party/blink/renderer/modules/credentialmanagement/identity_credential_logout_r_ps_request.idl
@@ -1,10 +1,10 @@ -// Copyright 2021 The Chromium Authors. All rights reserved. +// Copyright 2022 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // https://fedidcg.github.io/FedCM/#dictdef-identitycredentiallogoutrpsrequest -dictionary IdentityCredentialLogoutRpsRequest { +dictionary IdentityCredentialLogoutRPsRequest { required USVString url; required USVString accountId; };
diff --git a/third_party/blink/renderer/modules/manifest/manifest_manager.cc b/third_party/blink/renderer/modules/manifest/manifest_manager.cc index 2d44e83..69f10c27 100644 --- a/third_party/blink/renderer/modules/manifest/manifest_manager.cc +++ b/third_party/blink/renderer/modules/manifest/manifest_manager.cc
@@ -245,6 +245,8 @@ if (display_override == mojom::blink::DisplayMode::kWindowControlsOverlay) { UseCounter::Count(GetSupplementable(), WebFeature::kWebAppWindowControlsOverlay); + } else if (display_override == mojom::blink::DisplayMode::kBorderless) { + UseCounter::Count(GetSupplementable(), WebFeature::kWebAppBorderless); } }
diff --git a/third_party/blink/renderer/modules/manifest/manifest_parser.cc b/third_party/blink/renderer/modules/manifest/manifest_parser.cc index 7ce6abb1..87d653a 100644 --- a/third_party/blink/renderer/modules/manifest/manifest_parser.cc +++ b/third_party/blink/renderer/modules/manifest/manifest_parser.cc
@@ -550,6 +550,11 @@ display_enum = mojom::blink::DisplayMode::kUndefined; } + if (!base::FeatureList::IsEnabled(blink::features::kWebAppBorderless) && + display_enum == mojom::blink::DisplayMode::kBorderless) { + display_enum = mojom::blink::DisplayMode::kUndefined; + } + if (display_enum != mojom::blink::DisplayMode::kUndefined) display_override.push_back(display_enum); }
diff --git a/third_party/blink/renderer/modules/manifest/manifest_parser_unittest.cc b/third_party/blink/renderer/modules/manifest/manifest_parser_unittest.cc index de36e01..40d9d85 100644 --- a/third_party/blink/renderer/modules/manifest/manifest_parser_unittest.cc +++ b/third_party/blink/renderer/modules/manifest/manifest_parser_unittest.cc
@@ -718,6 +718,26 @@ EXPECT_EQ("inapplicable 'display' value ignored.", errors()[0]); } + // Parsing fails for 'borderless' when Borderless flag is disabled. + { + base::test::ScopedFeatureList feature_list; + feature_list.InitAndDisableFeature(blink::features::kWebAppBorderless); + auto& manifest = ParseManifest(R"({ "display": "borderless" })"); + EXPECT_EQ(manifest->display, blink::mojom::DisplayMode::kUndefined); + EXPECT_EQ(1u, GetErrorCount()); + EXPECT_EQ("inapplicable 'display' value ignored.", errors()[0]); + } + + // Parsing fails for 'borderless' when Borderless flag is enabled. + { + base::test::ScopedFeatureList feature_list; + feature_list.InitAndEnableFeature(blink::features::kWebAppBorderless); + auto& manifest = ParseManifest(R"({ "display": "borderless" })"); + EXPECT_EQ(manifest->display, blink::mojom::DisplayMode::kUndefined); + EXPECT_EQ(1u, GetErrorCount()); + EXPECT_EQ("inapplicable 'display' value ignored.", errors()[0]); + } + // Parsing fails for 'tabbed' when flag is disabled. { ScopedWebAppTabStripForTest tabbed(false); @@ -885,6 +905,29 @@ EXPECT_EQ(0u, GetErrorCount()); } + // Reject 'borderless' when Borderless flag is disabled. + { + base::test::ScopedFeatureList feature_list; + feature_list.InitAndDisableFeature(blink::features::kWebAppBorderless); + auto& manifest = + ParseManifest(R"({ "display_override": [ "borderless" ] })"); + EXPECT_TRUE(manifest->display_override.IsEmpty()); + EXPECT_EQ(0u, GetErrorCount()); + } + + // Accept 'borderless' when Borderless flag is enabled. + { + base::test::ScopedFeatureList feature_list; + feature_list.InitAndEnableFeature(blink::features::kWebAppBorderless); + auto& manifest = + ParseManifest(R"({ "display_override": [ "borderless" ] })"); + EXPECT_FALSE(manifest->display_override.IsEmpty()); + EXPECT_EQ(manifest->display_override[0], + blink::mojom::DisplayMode::kBorderless); + EXPECT_FALSE(IsManifestEmpty(manifest)); + EXPECT_EQ(0u, GetErrorCount()); + } + // Ignore 'tabbed' when flag is disabled. { ScopedWebAppTabStripForTest tabbed(false);
diff --git a/third_party/blink/renderer/platform/widget/input/frame_widget_input_handler_impl.cc b/third_party/blink/renderer/platform/widget/input/frame_widget_input_handler_impl.cc index 69241d1..cf3d3230 100644 --- a/third_party/blink/renderer/platform/widget/input/frame_widget_input_handler_impl.cc +++ b/third_party/blink/renderer/platform/widget/input/frame_widget_input_handler_impl.cc
@@ -153,8 +153,7 @@ if (handler) handler->ExecuteEditCommand(command, value); }, - main_thread_frame_widget_input_handler_, command.IsolatedCopy(), - value.IsolatedCopy())); + main_thread_frame_widget_input_handler_, command, value)); } void FrameWidgetInputHandlerImpl::Undo() { @@ -213,7 +212,7 @@ if (handler) handler->Replace(word); }, - main_thread_frame_widget_input_handler_, word.IsolatedCopy())); + main_thread_frame_widget_input_handler_, word)); } void FrameWidgetInputHandlerImpl::ReplaceMisspelling(const String& word) { @@ -223,7 +222,7 @@ if (handler) handler->ReplaceMisspelling(word); }, - main_thread_frame_widget_input_handler_, word.IsolatedCopy())); + main_thread_frame_widget_input_handler_, word)); } void FrameWidgetInputHandlerImpl::Delete() {
diff --git a/third_party/blink/renderer/platform/widget/input/input_handler_proxy.cc b/third_party/blink/renderer/platform/widget/input/input_handler_proxy.cc index 3ed77fc..65e68255 100644 --- a/third_party/blink/renderer/platform/widget/input/input_handler_proxy.cc +++ b/third_party/blink/renderer/platform/widget/input/input_handler_proxy.cc
@@ -424,7 +424,7 @@ // RecordScrollBegin and RecordScrollEnd but we should probably be avoiding // this if the scroll never starts. https://crbug.com/1082601. RecordMainThreadScrollingReasons(gesture_event->SourceDevice(), 0, false, - false); + 0); // If the main thread failed to return a scroller for whatever reason, // consider the ScrollBegin to be dropped. @@ -851,7 +851,7 @@ WebGestureDevice device, uint32_t reasons_from_scroll_begin, bool was_main_thread_hit_tested, - bool needs_main_thread_repaint) { + uint32_t main_thread_repaint_reasons) { if (device != WebGestureDevice::kTouchpad && device != WebGestureDevice::kScrollbar && device != WebGestureDevice::kTouchscreen) { @@ -869,7 +869,8 @@ const bool is_compositor_scroll = reasons_from_scroll_begin == cc::MainThreadScrollingReason::kNotScrollingOnMain && - !needs_main_thread_repaint; + main_thread_repaint_reasons == + cc::MainThreadScrollingReason::kNotScrollingOnMain; absl::optional<EventDisposition> disposition = (device == WebGestureDevice::kTouchpad ? mouse_wheel_result_ @@ -902,24 +903,11 @@ reportable_reasons |= cc::MainThreadScrollingReason::kFailedHitTest; } - if (needs_main_thread_repaint) { - // With scroll unification, most of the values in MainThreadScrollingReason - // aren't reflected in reasons_from_scroll_begin, since we are not scrolling - // "on main" from ThreadedInputHandler's perspective. But we still want to - // log a reason to UMA if the user will not see new pixels until the next - // BeginMainFrame. We use kNoScrollingLayer here to cover scenarios that - // were reported pre-unification as one of: - // - // kHasBackgroundAttachmentFixedObjects - // kThreadedScrollingDisabled - // kNonFastScrollableRegion - // kNotOpaqueForTextAndLCDText - // kCantPaintScrollingBackgroundAndLCDText - // - // TODO(crbug.com/1082590): Add new plumbing to distinguish between these in - // the post-unification world? - reportable_reasons |= cc::MainThreadScrollingReason::kNoScrollingLayer; - } + // With scroll unification, we never scroll "on main" from the perspective + // of cc::InputHandler, but we still want to log reasons if the user will not + // see new pixels until the next BeginMainFrame. These reasons are passed as + // main_thread_repaint_reasons instead of reasons_from_scroll_begin. + reportable_reasons |= main_thread_repaint_reasons; RecordScrollReasonsMetric(device, reportable_reasons); } @@ -1019,7 +1007,7 @@ RecordMainThreadScrollingReasons(gesture_event.SourceDevice(), scroll_status.main_thread_scrolling_reasons, scroll_state.is_main_thread_hit_tested(), - scroll_status.needs_main_thread_repaint); + scroll_status.main_thread_repaint_reasons); InputHandlerProxy::EventDisposition result = DID_NOT_HANDLE; scroll_sequence_ignored_ = false;
diff --git a/third_party/blink/renderer/platform/widget/input/input_handler_proxy.h b/third_party/blink/renderer/platform/widget/input/input_handler_proxy.h index 77ad841..ebe136b 100644 --- a/third_party/blink/renderer/platform/widget/input/input_handler_proxy.h +++ b/third_party/blink/renderer/platform/widget/input/input_handler_proxy.h
@@ -315,7 +315,7 @@ void RecordMainThreadScrollingReasons(blink::WebGestureDevice device, uint32_t reasons_from_scroll_begin, bool was_main_thread_hit_tested, - bool needs_main_thread_repaint); + uint32_t main_thread_repaint_reasons); bool HasQueuedEventsReadyForDispatch();
diff --git a/third_party/blink/renderer/platform/widget/input/input_handler_proxy_unittest.cc b/third_party/blink/renderer/platform/widget/input/input_handler_proxy_unittest.cc index 51a03e9..dbfc21a 100644 --- a/third_party/blink/renderer/platform/widget/input/input_handler_proxy_unittest.cc +++ b/third_party/blink/renderer/platform/widget/input/input_handler_proxy_unittest.cc
@@ -3726,7 +3726,8 @@ VERIFY_AND_RESET_MOCKS(); cc::InputHandler::ScrollStatus scroll_status = kImplThreadScrollState; - scroll_status.needs_main_thread_repaint = true; + scroll_status.main_thread_repaint_reasons = + cc::MainThreadScrollingReason::kNoScrollingLayer; EXPECT_CALL(mock_input_handler_, ScrollBegin(_, _)) .WillOnce(testing::Return(scroll_status));
diff --git a/third_party/blink/renderer/platform/widget/input/widget_input_handler_impl.cc b/third_party/blink/renderer/platform/widget/input/widget_input_handler_impl.cc index bd9928519..0a1fe76 100644 --- a/third_party/blink/renderer/platform/widget/input/widget_input_handler_impl.cc +++ b/third_party/blink/renderer/platform/widget/input/widget_input_handler_impl.cc
@@ -97,9 +97,9 @@ int32_t end, WidgetInputHandlerImpl::ImeSetCompositionCallback callback) { RunOnMainThread(base::BindOnce(&ImeSetCompositionOnMainThread, widget_, - base::ThreadTaskRunnerHandle::Get(), - text.IsolatedCopy(), ime_text_spans, range, - start, end, std::move(callback))); + base::ThreadTaskRunnerHandle::Get(), text, + ime_text_spans, range, start, end, + std::move(callback))); } static void ImeCommitTextOnMainThread( @@ -120,10 +120,10 @@ const gfx::Range& range, int32_t relative_cursor_position, ImeCommitTextCallback callback) { - RunOnMainThread(base::BindOnce( - &ImeCommitTextOnMainThread, widget_, base::ThreadTaskRunnerHandle::Get(), - text.IsolatedCopy(), ime_text_spans, range, relative_cursor_position, - std::move(callback))); + RunOnMainThread( + base::BindOnce(&ImeCommitTextOnMainThread, widget_, + base::ThreadTaskRunnerHandle::Get(), text, ime_text_spans, + range, relative_cursor_position, std::move(callback))); } void WidgetInputHandlerImpl::ImeFinishComposingText(bool keep_selection) {
diff --git a/third_party/blink/tools/blinkpy/tool/commands/pretty_diff.py b/third_party/blink/tools/blinkpy/tool/commands/pretty_diff.py index 1251692..da9e3d21 100644 --- a/third_party/blink/tools/blinkpy/tool/commands/pretty_diff.py +++ b/third_party/blink/tools/blinkpy/tool/commands/pretty_diff.py
@@ -92,14 +92,15 @@ @staticmethod def _pretty_diff_file(diff): - # Diffs can contain multiple text files of different encodings - # so we always deal with them as byte arrays, not unicode strings. - assert isinstance(diff, str) + # |diff|'s type is |bytes| because it can contain multiple text files + # of different encodings. + assert isinstance(diff, bytes) diff_file = tempfile.NamedTemporaryFile(suffix='.html') - diff_file.write(prettify_diff(diff)) + # We deocode |diff| as UTF-8 anyway because we generate a UTF-8 HTML. + diff_file.write(prettify_diff(diff.decode(errors='replace')).encode()) diff_file.flush() return diff_file def _open_pretty_diff(self, file_path): - url = 'file://%s' % urllib.quote(file_path) + url = 'file://%s' % urllib.parse.quote(file_path) self._tool.user.open_url(url)
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index d630ef8a..e9e2e72a 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -7106,10 +7106,7 @@ # Sheriff 2022-07-12 crbug.com/1343674 [ Linux ] editing/deleting/460938.html [ Failure Pass ] crbug.com/1343664 external/wpt/dom/events/non-cancelable-when-passive/non-passive-mousewheel-event-listener-on-document.html [ Failure Pass ] -crbug.com/1343651 [ Fuchsia ] external/wpt/credential-management/fedcm-network-requests.sub.https.html [ Crash Pass ] -crbug.com/1343651 [ Linux ] external/wpt/credential-management/fedcm-network-requests.sub.https.html [ Crash Pass ] -crbug.com/1343651 [ Mac ] external/wpt/credential-management/fedcm-network-requests.sub.https.html [ Crash Pass ] -crbug.com/1343651 [ Win11 ] external/wpt/credential-management/fedcm-network-requests.sub.https.html [ Crash Pass ] +crbug.com/1343651 external/wpt/credential-management/fedcm-network-requests.sub.https.html [ Failure Crash Pass ] crbug.com/1343698 [ Mac Release ] external/wpt/webmessaging/postMessage_asterisk_xorigin.sub.htm [ Failure Pass ] crbug.com/1343698 [ Release Win10.20h2 ] external/wpt/webmessaging/postMessage_asterisk_xorigin.sub.htm [ Failure Pass ] @@ -7149,6 +7146,5 @@ crbug.com/1345745 virtual/async-script-scheduling-first-paint-or-finished-parsing/wpt_internal/async-script-scheduling/execution-order.html [ Skip ] # Sheriff 2022-07-21 -crbug.com/1346043 crbug.com/626703 [ Win10.20h2 ] external/wpt/credential-management/fedcm-network-requests.sub.https.html [ Skip ] crbug.com/1346158 crbug.com/1346158 external/wpt/dom/events/non-cancelable-when-passive/non-passive-mousewheel-event-listener-on-window.html [ Failure Pass ] crbug.com/1310202 [ Mac11 ] wpt_internal/navigation-api/ordering-and-transition/navigate-cross-document-double.html [ Failure Pass ]
diff --git a/third_party/blink/web_tests/accessibility/aria-hidden-hides-all-elements.html b/third_party/blink/web_tests/accessibility/aria-hidden-hides-all-elements.html index 8e403b7..07ba441 100644 --- a/third_party/blink/web_tests/accessibility/aria-hidden-hides-all-elements.html +++ b/third_party/blink/web_tests/accessibility/aria-hidden-hides-all-elements.html
@@ -1,4 +1,4 @@ -<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> +<!DOCTYPE HTML> <html> <head> <script src="../resources/testharness.js"></script> @@ -45,7 +45,7 @@ assert_true(content.isIgnored); expectUnignoredChildren(content, [0, 1, 2, 3, 6]); - document.getElementById("ul").tabIndex = -1; + document.getElementById("ul").tabIndex = 0; assert_equals(content.childrenCount, 8, "Making list focusable should make it unignored"); assert_true(content.isIgnored);
diff --git a/third_party/blink/web_tests/external/wpt/credential-management/fedcm-logout-rps.https.html b/third_party/blink/web_tests/external/wpt/credential-management/fedcm-logout-rps.https.html index 6e97239..9c8d2c1 100644 --- a/third_party/blink/web_tests/external/wpt/credential-management/fedcm-logout-rps.https.html +++ b/third_party/blink/web_tests/external/wpt/credential-management/fedcm-logout-rps.https.html
@@ -1,6 +1,6 @@ <!DOCTYPE html> <meta charset="utf-8"> -<title>IdentityCredential.logoutRps() promise resolution</title> +<title>IdentityCredential.logoutRPs() promise resolution</title> <link rel="author" title="Peter Kotwicz" href="mailto:pkotwicz@chromium.org"> <link rel="help" href="https://wicg.github.io/FedCM/#browser-api-idp-sign-out"> <script src="/resources/testharness.js"></script> @@ -12,24 +12,24 @@ fedcm_test(async (t, mock) => { mock.logoutRpsReturn("kError"); return promise_rejects_dom(t, "NetworkError", - IdentityCredential.logoutRps([{ + IdentityCredential.logoutRPs([{ accountId: "1234", url: "https://rp.example/logout.php" }]) ); - }, "IdentityCredential.logoutRps() error."); + }, "IdentityCredential.logoutRPs() error."); fedcm_test(async (t, mock) => { mock.logoutRpsReturn("kSuccess"); - await IdentityCredential.logoutRps([{ + await IdentityCredential.logoutRPs([{ accountId: "1234", url: "https://rp.example/logout.php" }]); - }, "IdentityCredential.logoutRps() success."); + }, "IdentityCredential.logoutRPs() success."); fedcm_test(async (t, mock) => { return promise_rejects_dom(t, "NetworkError", - IdentityCredential.logoutRps([{ + IdentityCredential.logoutRPs([{ accountId: "1234", url: "https://other-rp.example/logout.php" }])
diff --git a/third_party/blink/web_tests/platform/generic/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/platform/generic/webexposed/global-interface-listing-expected.txt index 6df9e2e..609ffe5 100644 --- a/third_party/blink/web_tests/platform/generic/webexposed/global-interface-listing-expected.txt +++ b/third_party/blink/web_tests/platform/generic/webexposed/global-interface-listing-expected.txt
@@ -4766,7 +4766,7 @@ method constructor method getFrequencyResponse interface IdentityCredential : Credential - static method logoutRps + static method logoutRPs attribute @@toStringTag getter token method constructor
diff --git a/third_party/ipcz/src/BUILD.gn b/third_party/ipcz/src/BUILD.gn index 90b97fa6..155fa292 100644 --- a/third_party/ipcz/src/BUILD.gn +++ b/third_party/ipcz/src/BUILD.gn
@@ -320,6 +320,42 @@ include_dirs = [ "${ipcz_src_root}" ] } +ipcz_source_set("ipcz_test_support") { + testonly = true + public = [ + "test/mock_driver.h", + "test/multinode_test.h", + "test/test.h", + "test/test_base.h", + "test/test_transport_listener.h", + ] + + sources = [ + "test/mock_driver.cc", + "test/multinode_test.cc", + "test/test_base.cc", + "test/test_transport_listener.cc", + ] + + if (enable_multiprocess_tests) { + public += [ "test/test_child_launcher.h" ] + sources += [ "test/test_child_launcher.cc" ] + } + + deps = [ + "//testing/gmock", + "//testing/gtest", + "//third_party/abseil-cpp:absl", + ] + public_deps = [ ":test_buildflags" ] + ipcz_public_deps = [ + ":impl", + ":ipcz", + ":reference_drivers", + ":util", + ] +} + ipcz_source_set("ipcz_tests_sources") { testonly = true @@ -336,33 +372,23 @@ "ipcz/node_connector_test.cc", "ipcz/node_link_memory_test.cc", "ipcz/node_link_test.cc", + "ipcz/node_test.cc", "ipcz/parcel_queue_test.cc", "ipcz/ref_counted_fragment_test.cc", "ipcz/router_link_test.cc", "ipcz/sequenced_queue_test.cc", "reference_drivers/sync_reference_driver_test.cc", "remote_portal_test.cc", - "test/mock_driver.cc", - "test/mock_driver.h", - "test/multinode_test.cc", - "test/multinode_test.h", - "test/test.h", - "test/test_base.cc", - "test/test_base.h", - "test/test_transport_listener.cc", - "test/test_transport_listener.h", "trap_test.cc", "util/ref_counted_test.cc", "util/stack_trace_test.cc", ] if (enable_multiprocess_tests) { - public = [ "test/test_child_launcher.h" ] sources += [ "reference_drivers/memfd_memory_test.cc", "reference_drivers/multiprocess_reference_driver_test.cc", "reference_drivers/socket_transport_test.cc", - "test/test_child_launcher.cc", ] } @@ -371,13 +397,15 @@ "//testing/gtest", "//third_party/abseil-cpp:absl", ] - public_deps = [ ":test_buildflags" ] ipcz_deps = [ ":impl", ":ipcz", ":util", ] - ipcz_public_deps = [ ":reference_drivers" ] + ipcz_public_deps = [ + ":ipcz_test_support", + ":reference_drivers", + ] configs = [ ":ipcz_include_src_dir" ] }
diff --git a/third_party/ipcz/src/ipcz/driver_memory.cc b/third_party/ipcz/src/ipcz/driver_memory.cc index df404fb9..bc28fcdc 100644 --- a/third_party/ipcz/src/ipcz/driver_memory.cc +++ b/third_party/ipcz/src/ipcz/driver_memory.cc
@@ -63,4 +63,18 @@ return DriverMemoryMapping(*memory_.driver(), mapping_handle, address, size_); } +DriverMemoryWithMapping::DriverMemoryWithMapping() = default; + +DriverMemoryWithMapping::DriverMemoryWithMapping(DriverMemory memory, + DriverMemoryMapping mapping) + : memory(std::move(memory)), mapping(std::move(mapping)) {} + +DriverMemoryWithMapping::DriverMemoryWithMapping(DriverMemoryWithMapping&&) = + default; + +DriverMemoryWithMapping& DriverMemoryWithMapping::operator=( + DriverMemoryWithMapping&&) = default; + +DriverMemoryWithMapping::~DriverMemoryWithMapping() = default; + } // namespace ipcz
diff --git a/third_party/ipcz/src/ipcz/driver_memory.h b/third_party/ipcz/src/ipcz/driver_memory.h index 639b806b..3545418 100644 --- a/third_party/ipcz/src/ipcz/driver_memory.h +++ b/third_party/ipcz/src/ipcz/driver_memory.h
@@ -52,6 +52,19 @@ size_t size_ = 0; }; +// This pairs a DriverMemory object with a mapping of that same object, for +// convenience. +struct DriverMemoryWithMapping { + DriverMemoryWithMapping(); + DriverMemoryWithMapping(DriverMemory memory, DriverMemoryMapping mapping); + DriverMemoryWithMapping(DriverMemoryWithMapping&&); + DriverMemoryWithMapping& operator=(DriverMemoryWithMapping&&); + ~DriverMemoryWithMapping(); + + DriverMemory memory; + DriverMemoryMapping mapping; +}; + } // namespace ipcz #endif // IPCZ_SRC_IPCZ_DRIVER_MEMORY_H_
diff --git a/third_party/ipcz/src/ipcz/local_router_link.cc b/third_party/ipcz/src/ipcz/local_router_link.cc index 5b8f590b..43bb12c3 100644 --- a/third_party/ipcz/src/ipcz/local_router_link.cc +++ b/third_party/ipcz/src/ipcz/local_router_link.cc
@@ -91,11 +91,6 @@ return state_->GetRouter(side_.opposite()).get() == &router; } -bool LocalRouterLink::IsRemoteLinkTo(const NodeLink& node_link, - SublinkId sublink) { - return false; -} - void LocalRouterLink::AcceptParcel(Parcel& parcel) { if (Ref<Router> receiver = state_->GetRouter(side_.opposite())) { receiver->AcceptInboundParcel(parcel); @@ -108,6 +103,12 @@ } } +void LocalRouterLink::AcceptRouteDisconnected() { + if (Ref<Router> receiver = state_->GetRouter(side_.opposite())) { + receiver->AcceptRouteDisconnectedFrom(state_->type()); + } +} + void LocalRouterLink::MarkSideStable() { state_->link_state().SetSideStable(side_); }
diff --git a/third_party/ipcz/src/ipcz/local_router_link.h b/third_party/ipcz/src/ipcz/local_router_link.h index bfb58d4..ceb2b3f 100644 --- a/third_party/ipcz/src/ipcz/local_router_link.h +++ b/third_party/ipcz/src/ipcz/local_router_link.h
@@ -30,9 +30,9 @@ LinkType GetType() const override; RouterLinkState* GetLinkState() const override; bool HasLocalPeer(const Router& router) override; - bool IsRemoteLinkTo(const NodeLink& node_link, SublinkId sublink) override; void AcceptParcel(Parcel& parcel) override; void AcceptRouteClosure(SequenceNumber sequence_length) override; + void AcceptRouteDisconnected() override; void MarkSideStable() override; bool TryLockForBypass(const NodeName& bypass_request_source) override; bool TryLockForClosure() override;
diff --git a/third_party/ipcz/src/ipcz/node.cc b/third_party/ipcz/src/ipcz/node.cc index eb6f865..91d44f18 100644 --- a/third_party/ipcz/src/ipcz/node.cc +++ b/third_party/ipcz/src/ipcz/node.cc
@@ -4,11 +4,15 @@ #include "ipcz/node.h" +#include <utility> #include <vector> +#include "ipcz/driver_memory.h" #include "ipcz/ipcz.h" +#include "ipcz/link_side.h" #include "ipcz/node_connector.h" #include "ipcz/node_link.h" +#include "ipcz/node_link_memory.h" #include "ipcz/portal.h" #include "ipcz/router.h" #include "third_party/abseil-cpp/absl/base/macros.h" @@ -101,6 +105,15 @@ return false; } +Ref<NodeLink> Node::GetLink(const NodeName& name) { + absl::MutexLock lock(&mutex_); + auto it = node_links_.find(name); + if (it == node_links_.end()) { + return nullptr; + } + return it->second; +} + NodeName Node::GenerateRandomName() const { NodeName name; IpczResult result = @@ -117,6 +130,185 @@ callback(DriverMemory(driver_, size)); } +void Node::EstablishLink(const NodeName& name, EstablishLinkCallback callback) { + Ref<NodeLink> broker; + Ref<NodeLink> link; + { + absl::MutexLock lock(&mutex_); + broker = broker_link_; + auto it = node_links_.find(name); + if (it != node_links_.end()) { + link = it->second; + } else if (type_ == Type::kNormal && broker) { + auto [pending_it, inserted] = pending_introductions_.insert({name, {}}); + pending_it->second.push_back(std::move(callback)); + if (!inserted) { + // There's already an introduction request out for this node, so there's + // nothing more we need to do. + return; + } + } + } + + if (broker && !link) { + broker->RequestIntroduction(name); + } else { + callback(link.get()); + } +} + +void Node::HandleIntroductionRequest(NodeLink& from_node_link, + const NodeName& for_node) { + // NodeLink must never accept these requests on non-broker nodes. + ABSL_ASSERT(type_ == Type::kBroker); + + const NodeName requestor = from_node_link.remote_node_name(); + + DVLOG(4) << "Broker " << from_node_link.local_node_name().ToString() + << " received introduction request for " << for_node.ToString() + << " from " << requestor.ToString(); + + // A key which uniquely identifies the pair of nodes being introduced + // regardless of who requested the introduction. + const auto key = (requestor < for_node) + ? IntroductionKey(requestor, for_node) + : IntroductionKey(for_node, requestor); + + Ref<NodeLink> target_link; + { + absl::MutexLock lock(&mutex_); + auto it = node_links_.find(for_node); + if (it != node_links_.end()) { + target_link = it->second; + + auto [intro_it, inserted] = in_progress_introductions_.insert(key); + if (!inserted) { + // We're already introducing the same two nodes, so drop this request. + return; + } + } + } + + if (!target_link) { + from_node_link.RejectIntroduction(for_node); + return; + } + + DriverMemoryWithMapping buffer = NodeLinkMemory::AllocateMemory(driver_); + auto [transport_for_target, transport_for_requestor] = + DriverTransport::CreatePair(driver_, target_link->transport().get(), + from_node_link.transport().get()); + target_link->AcceptIntroduction( + requestor, LinkSide::kA, from_node_link.remote_protocol_version(), + std::move(transport_for_target), buffer.memory.Clone()); + from_node_link.AcceptIntroduction( + for_node, LinkSide::kB, target_link->remote_protocol_version(), + std::move(transport_for_requestor), std::move(buffer.memory)); + + absl::MutexLock lock(&mutex_); + in_progress_introductions_.erase(key); +} + +void Node::AcceptIntroduction(NodeLink& from_node_link, + const NodeName& name, + LinkSide side, + uint32_t remote_protocol_version, + Ref<DriverTransport> transport, + Ref<NodeLinkMemory> memory) { + // NodeLink should never dispatch this method to a node if the introduction + // didn't come from a broker, so this assertion should always hold. + ABSL_ASSERT(from_node_link.remote_node_type() == Node::Type::kBroker); + + const NodeName local_name = from_node_link.local_node_name(); + + DVLOG(4) << "Node " << local_name.ToString() << " received introduction to " + << name.ToString() << " from broker " + << from_node_link.remote_node_name().ToString(); + + Ref<NodeLink> new_link = NodeLink::Create( + WrapRefCounted(this), side, local_name, name, Type::kNormal, + remote_protocol_version, transport, std::move(memory)); + ABSL_ASSERT(new_link); + + std::vector<EstablishLinkCallback> callbacks; + { + absl::MutexLock lock(&mutex_); + auto [link_it, inserted] = node_links_.insert({name, new_link}); + if (!inserted) { + // If both nodes race to request an introduction to each other, the + // broker may send redundant introductions. It does however take care to + // ensure that they're ordered consistently across both nodes, so + // redundant introductions can be safely ignored by convention. + } + + // If this node requested this introduction, we may have callbacks to run. + // Note that it is not an error to receive an unrequested introduction, + // since it is only necessary for one of the introduced nodes to have + // requested it. + auto it = pending_introductions_.find(name); + if (it != pending_introductions_.end()) { + callbacks = std::move(it->second); + pending_introductions_.erase(it); + } + } + + if (transport) { + transport->Activate(); + } + + for (auto& callback : callbacks) { + callback(new_link.get()); + } +} + +bool Node::CancelIntroduction(const NodeName& name) { + std::vector<EstablishLinkCallback> callbacks; + { + absl::MutexLock lock(&mutex_); + auto it = pending_introductions_.find(name); + if (it == pending_introductions_.end()) { + return false; + } + callbacks = std::move(it->second); + pending_introductions_.erase(it); + } + + for (auto& callback : callbacks) { + callback(nullptr); + } + + return true; +} + +void Node::DropLink(const NodeName& name) { + Ref<NodeLink> link; + bool lost_broker = false; + { + absl::MutexLock lock(&mutex_); + auto it = node_links_.find(name); + if (it == node_links_.end()) { + return; + } + link = std::move(it->second); + node_links_.erase(it); + + DVLOG(4) << "Node " << link->local_node_name().ToString() << " dropping " + << " link to " << link->remote_node_name().ToString(); + if (link == broker_link_) { + DVLOG(4) << "Node " << link->local_node_name().ToString() + << " has lost its broker link"; + broker_link_.reset(); + lost_broker = true; + } + } + + link->Deactivate(); + + if (lost_broker) { + CancelAllIntroductions(); + } +} + void Node::ShutDown() { NodeLinkMap node_links; { @@ -128,6 +320,22 @@ for (const auto& entry : node_links) { entry.second->Deactivate(); } + + CancelAllIntroductions(); +} + +void Node::CancelAllIntroductions() { + PendingIntroductionMap introductions; + { + absl::MutexLock lock(&mutex_); + introductions.swap(pending_introductions_); + } + + for (auto& [name, callbacks] : introductions) { + for (auto& callback : callbacks) { + callback(nullptr); + } + } } } // namespace ipcz
diff --git a/third_party/ipcz/src/ipcz/node.h b/third_party/ipcz/src/ipcz/node.h index d5fc67db..7c6f542 100644 --- a/third_party/ipcz/src/ipcz/node.h +++ b/third_party/ipcz/src/ipcz/node.h
@@ -10,14 +10,17 @@ #include "ipcz/api_object.h" #include "ipcz/driver_memory.h" #include "ipcz/ipcz.h" +#include "ipcz/link_side.h" #include "ipcz/node_name.h" #include "third_party/abseil-cpp/absl/container/flat_hash_map.h" +#include "third_party/abseil-cpp/absl/container/flat_hash_set.h" #include "third_party/abseil-cpp/absl/synchronization/mutex.h" #include "third_party/abseil-cpp/absl/types/span.h" namespace ipcz { class NodeLink; +class NodeLinkMemory; // A Node controls creation and interconnection of a collection of routers which // can establish links to and from other routers in other nodes. Every node is @@ -86,6 +89,11 @@ // Registers a new NodeLink for the given `remote_node_name`. bool AddLink(const NodeName& remote_node_name, Ref<NodeLink> link); + // Returns a reference to the NodeLink used by this Node to communicate with + // the remote node identified by `name`; or null if this node has no NodeLink + // connected to that node. + Ref<NodeLink> GetLink(const NodeName& name); + // Generates a new random NodeName using this node's driver as a source of // randomness. NodeName GenerateRandomName() const; @@ -98,6 +106,42 @@ using AllocateSharedMemoryCallback = std::function<void(DriverMemory)>; void AllocateSharedMemory(size_t size, AllocateSharedMemoryCallback callback); + // Asynchronously attempts to establish a new NodeLink directly to the named + // node, invoking `callback` when complete. On success, this node will retain + // a new NodeLink to the named node, and `callback` will be invoked with a + // reference to that link. Otherwise `callback` will be invoked with a null + // reference. + // + // If the calling node already has a link to the named node, `callback` may + // be invoked synchronously with a link to that node before this method + // returns. + using EstablishLinkCallback = std::function<void(NodeLink*)>; + void EstablishLink(const NodeName& name, EstablishLinkCallback callback); + + // Handles an incoming introduction request. Must only be called on a broker + // node. If this broker has a NodeLink to the node named by `for_node`, it + // will introduce that node and the remote node on `from_node_link`. + void HandleIntroductionRequest(NodeLink& from_node_link, + const NodeName& for_node); + + // Accepts an introduction received from the broker. `transport` and `memory` + // can be used to establish a new NodeLink to the remote node, whose name is + // `name`. The NodeLink must assume a role as the given `side` of the link. + void AcceptIntroduction(NodeLink& from_node_link, + const NodeName& name, + LinkSide side, + uint32_t remote_protocol_version, + Ref<DriverTransport> transport, + Ref<NodeLinkMemory> memory); + + // Handles a rejected introduction from the broker. This is called on a + // non-broker node that previously requested an introduction to `name` if + // the broker could not satisfy the request. + bool CancelIntroduction(const NodeName& name); + + // Drops this node's link to the named node, if one exists. + void DropLink(const NodeName& name); + private: ~Node() override; @@ -105,6 +149,10 @@ // preparation for this node's imminent destruction. void ShutDown(); + // Resolves all pending introduction requests with a null link, implying + // failure. + void CancelAllIntroductions(); + const Type type_; const IpczDriver& driver_; const IpczDriverHandle driver_node_; @@ -127,6 +175,43 @@ // system. using NodeLinkMap = absl::flat_hash_map<NodeName, Ref<NodeLink>>; NodeLinkMap node_links_ ABSL_GUARDED_BY(mutex_); + + // A map of other nodes to which this node is waiting for an introduction from + // `broker_link_`. Once such an introduction is received, all callbacks for + // that NodeName are executed. + using PendingIntroductionMap = + absl::flat_hash_map<NodeName, std::vector<EstablishLinkCallback>>; + PendingIntroductionMap pending_introductions_ ABSL_GUARDED_BY(mutex_); + + // Nodes may race to request introductions to each other from the same broker. + // This can lead to redundant introductions being sent which the requesting + // nodes should be able to ignore. However, the following could occur on a + // broker which is processing a request from node A on Thread 1 while also + // processing a request from node B on thread 2: + // + // Thread 1 Thread 2 Time + // --- --- | + // A requests intro to B B requests intro to A v + // Send B intro X to A + // Send A intro Y to B + // Send A intro X to B + // Send B intro Y to A + // + // Each unique intro shares either end of a transport with its recipients, + // so both A and B must accept the same introduction (either X or Y). In this + // scenario however, A will first receive and accept intro X, and will ignore + // intro Y as redundant. But B will receive intro Y first and ignore intro X + // as redundant. This is bad. + // + // The set of `in_progress_introductions_` allows this (broker) node to guard + // against such interleaved introductions. Immediately before sending an intro + // to both recipients, a key identifying them is placed into the set. This key + // is removed immediately after both introductions are sent. If another thread + // is asked to introduce the same two nodes while the key is still present, it + // will ignore the request and send nothing. + using IntroductionKey = std::pair<NodeName, NodeName>; + absl::flat_hash_set<IntroductionKey> in_progress_introductions_ + ABSL_GUARDED_BY(mutex_); }; } // namespace ipcz
diff --git a/third_party/ipcz/src/ipcz/node_connector.cc b/third_party/ipcz/src/ipcz/node_connector.cc index 7186359e..a0d834a 100644 --- a/third_party/ipcz/src/ipcz/node_connector.cc +++ b/third_party/ipcz/src/ipcz/node_connector.cc
@@ -11,6 +11,7 @@ #include "ipcz/driver_transport.h" #include "ipcz/ipcz.h" #include "ipcz/link_side.h" +#include "ipcz/link_type.h" #include "ipcz/node_link.h" #include "ipcz/node_link_memory.h" #include "ipcz/portal.h" @@ -37,8 +38,9 @@ flags, std::move(waiting_portals), std::move(callback)), - link_memory_allocation_(NodeLinkMemory::Allocate(node_)) { - ABSL_ASSERT(link_memory_allocation_.node_link_memory); + link_memory_allocation_( + NodeLinkMemory::AllocateMemory(node_->driver())) { + ABSL_ASSERT(link_memory_allocation_.mapping.is_valid()); } ~NodeConnectorForBrokerToNonBroker() override = default; @@ -58,7 +60,7 @@ connect.params().num_initial_portals = checked_cast<uint32_t>(num_portals()); connect.params().buffer = connect.AppendDriverObject( - link_memory_allocation_.primary_buffer_memory.TakeDriverObject()); + link_memory_allocation_.memory.TakeDriverObject()); return IPCZ_RESULT_OK == transport_->Transmit(connect); } @@ -70,10 +72,11 @@ << new_remote_node_name_.ToString(); AcceptConnection( - NodeLink::Create(node_, LinkSide::kA, broker_name_, - new_remote_node_name_, Node::Type::kNormal, - connect.params().protocol_version, transport_, - std::move(link_memory_allocation_.node_link_memory)), + NodeLink::Create( + node_, LinkSide::kA, broker_name_, new_remote_node_name_, + Node::Type::kNormal, connect.params().protocol_version, transport_, + NodeLinkMemory::Create(node_, + std::move(link_memory_allocation_.mapping))), LinkSide::kA, connect.params().num_initial_portals); return true; } @@ -81,7 +84,7 @@ private: const NodeName broker_name_{node_->GetAssignedName()}; const NodeName new_remote_node_name_{node_->GenerateRandomName()}; - NodeLinkMemory::Allocation link_memory_allocation_; + DriverMemoryWithMapping link_memory_allocation_; }; class NodeConnectorForNonBrokerToBroker : public NodeConnector { @@ -122,11 +125,11 @@ return false; } - auto new_link = NodeLink::Create( - node_, LinkSide::kB, connect.params().receiver_name, - connect.params().broker_name, Node::Type::kBroker, - connect.params().protocol_version, transport_, - NodeLinkMemory::Adopt(node_, std::move(buffer_memory))); + auto new_link = + NodeLink::Create(node_, LinkSide::kB, connect.params().receiver_name, + connect.params().broker_name, Node::Type::kBroker, + connect.params().protocol_version, transport_, + NodeLinkMemory::Create(node_, buffer_memory.Map())); node_->SetAssignedName(connect.params().receiver_name); node_->SetBrokerLink(new_link); @@ -262,9 +265,14 @@ std::min(max_valid_portals, waiting_portals_.size()); for (size_t i = 0; i < num_valid_portals; ++i) { const Ref<Router> router = waiting_portals_[i]->router(); - router->SetOutwardLink(to_link->AddRemoteRouterLink( + Ref<RouterLink> link = to_link->AddRemoteRouterLink( SublinkId(i), to_link->memory().GetInitialRouterLinkState(i), - LinkType::kCentral, link_side, router)); + LinkType::kCentral, link_side, router); + if (link) { + router->SetOutwardLink(std::move(link)); + } else { + router->AcceptRouteDisconnectedFrom(LinkType::kCentral); + } } // Elicit immediate peer closure on any surplus portals that were established
diff --git a/third_party/ipcz/src/ipcz/node_link.cc b/third_party/ipcz/src/ipcz/node_link.cc index 7e08c643..be8860f 100644 --- a/third_party/ipcz/src/ipcz/node_link.cc +++ b/third_party/ipcz/src/ipcz/node_link.cc
@@ -125,6 +125,39 @@ Transmit(add); } +void NodeLink::RequestIntroduction(const NodeName& name) { + ABSL_ASSERT(remote_node_type_ == Node::Type::kBroker); + + msg::RequestIntroduction request; + request.params().name = name; + Transmit(request); +} + +void NodeLink::AcceptIntroduction(const NodeName& name, + LinkSide side, + uint32_t remote_protocol_version, + Ref<DriverTransport> transport, + DriverMemory memory) { + ABSL_ASSERT(node_->type() == Node::Type::kBroker); + + msg::AcceptIntroduction accept; + accept.params().name = name; + accept.params().link_side = side; + accept.params().remote_protocol_version = remote_protocol_version; + accept.params().transport = + accept.AppendDriverObject(transport->TakeDriverObject()); + accept.params().memory = accept.AppendDriverObject(memory.TakeDriverObject()); + Transmit(accept); +} + +void NodeLink::RejectIntroduction(const NodeName& name) { + ABSL_ASSERT(node_->type() == Node::Type::kBroker); + + msg::RejectIntroduction reject; + reject.params().name = name; + Transmit(reject); +} + void NodeLink::Deactivate() { { absl::MutexLock lock(&mutex_); @@ -158,6 +191,59 @@ 1, std::memory_order_relaxed)); } +bool NodeLink::OnRequestIntroduction(msg::RequestIntroduction& request) { + // TODO: Support broker-to-broker introduction requests. + if (remote_node_type_ != Node::Type::kNormal || + node()->type() != Node::Type::kBroker) { + return false; + } + + node()->HandleIntroductionRequest(*this, request.params().name); + return true; +} + +bool NodeLink::OnAcceptIntroduction(msg::AcceptIntroduction& accept) { + if (remote_node_type_ != Node::Type::kBroker) { + return false; + } + + if (node()->type() != Node::Type::kNormal) { + // TODO: Support broker-to-broker introductions. + return false; + } + + auto memory = DriverMemory(accept.TakeDriverObject(accept.params().memory)); + if (!memory.is_valid()) { + return false; + } + + auto mapping = memory.Map(); + if (!mapping.is_valid()) { + return false; + } + + auto transport = MakeRefCounted<DriverTransport>( + accept.TakeDriverObject(accept.params().transport)); + node()->AcceptIntroduction( + *this, accept.params().name, accept.params().link_side, + accept.params().remote_protocol_version, std::move(transport), + NodeLinkMemory::Create(node(), std::move(mapping))); + return true; +} + +bool NodeLink::OnRejectIntroduction(msg::RejectIntroduction& reject) { + if (remote_node_type_ != Node::Type::kBroker) { + return false; + } + + if (node()->type() != Node::Type::kNormal) { + // TODO: Support broker-to-broker introductions. + return false; + } + + return node()->CancelIntroduction(reject.params().name); +} + bool NodeLink::OnAddBlockBuffer(msg::AddBlockBuffer& add) { DriverMemory buffer(add.TakeDriverObject(add.params().buffer)); if (!buffer.is_valid()) { @@ -266,6 +352,19 @@ sublink->router_link->GetType(), route_closed.params().sequence_length); } +bool NodeLink::OnRouteDisconnected(msg::RouteDisconnected& route_closed) { + absl::optional<Sublink> sublink = GetSublink(route_closed.params().sublink); + if (!sublink) { + return true; + } + + DVLOG(4) << "Accepting RouteDisconnected at " + << sublink->router_link->Describe(); + + return sublink->receiver->AcceptRouteDisconnectedFrom( + sublink->router_link->GetType()); +} + bool NodeLink::OnSetRouterLinkState(msg::SetRouterLinkState& set) { if (set.params().descriptor.is_null()) { return false; @@ -294,8 +393,14 @@ } for (auto& [id, sublink] : sublinks) { - sublink.receiver->NotifyLinkDisconnected(*this, id); + DVLOG(4) << "NodeLink disconnection dropping " + << sublink.router_link->Describe() << " which is bound to router " + << sublink.receiver.get(); + sublink.receiver->NotifyLinkDisconnected(*sublink.router_link); } + + Ref<NodeLink> self = WrapRefCounted(this); + node_->DropLink(remote_node_name_); } NodeLink::Sublink::Sublink(Ref<RemoteRouterLink> router_link,
diff --git a/third_party/ipcz/src/ipcz/node_link.h b/third_party/ipcz/src/ipcz/node_link.h index d7d2292..a463fde 100644 --- a/third_party/ipcz/src/ipcz/node_link.h +++ b/third_party/ipcz/src/ipcz/node_link.h
@@ -106,6 +106,24 @@ // AllocateNewBufferId(). void AddBlockBuffer(BufferId id, uint32_t block_size, DriverMemory memory); + // Asks the broker on the other end of this link to introduce the local node + // to the node identified by `name`. This will always elicit a response from + // the broker in the form of either an AcceptIntroduction or + // RejectIntroduction message. + void RequestIntroduction(const NodeName& name); + + // Introduces the remote node to the node named `name`, with details needed to + // construct a new NodeLink to that node. + void AcceptIntroduction(const NodeName& name, + LinkSide side, + uint32_t remote_protocol_version, + Ref<DriverTransport> transport, + DriverMemory memory); + + // Rejects an introduction request previously sent by the remote node for the + // node identified by `name`. + void RejectIntroduction(const NodeName& name); + // Permanently deactivates this NodeLink. Once this call returns the NodeLink // will no longer receive transport messages. It may still be used to transmit // outgoing messages, but it cannot be reactivated. Transmissions over a @@ -132,9 +150,13 @@ SequenceNumber GenerateOutgoingSequenceNumber(); // NodeMessageListener overrides: + bool OnRequestIntroduction(msg::RequestIntroduction& request) override; + bool OnAcceptIntroduction(msg::AcceptIntroduction& accept) override; + bool OnRejectIntroduction(msg::RejectIntroduction& reject) override; bool OnAddBlockBuffer(msg::AddBlockBuffer& add) override; bool OnAcceptParcel(msg::AcceptParcel& accept) override; bool OnRouteClosed(msg::RouteClosed& route_closed) override; + bool OnRouteDisconnected(msg::RouteDisconnected& route_disconnected) override; bool OnSetRouterLinkState(msg::SetRouterLinkState& set) override; bool OnFlushRouter(msg::FlushRouter& flush) override; void OnTransportError() override;
diff --git a/third_party/ipcz/src/ipcz/node_link_memory.cc b/third_party/ipcz/src/ipcz/node_link_memory.cc index 6bf92d05..52f2617 100644 --- a/third_party/ipcz/src/ipcz/node_link_memory.cc +++ b/third_party/ipcz/src/ipcz/node_link_memory.cc
@@ -150,6 +150,7 @@ // Consistency check here, because PrimaryBuffer is private to NodeLinkMemory. static_assert(sizeof(PrimaryBuffer) <= kPrimaryBufferSize, "PrimaryBuffer structure is too large."); + ABSL_HARDENING_ASSERT(primary_buffer_memory_.size() >= kPrimaryBufferSize); const BlockAllocator allocators[] = { primary_buffer_.block_allocator_64(), @@ -171,16 +172,16 @@ } // static -NodeLinkMemory::Allocation NodeLinkMemory::Allocate(Ref<Node> node) { - DriverMemory primary_buffer_memory(node->driver(), sizeof(PrimaryBuffer)); - if (!primary_buffer_memory.is_valid()) { - return {.node_link_memory = nullptr, .primary_buffer_memory = {}}; +DriverMemoryWithMapping NodeLinkMemory::AllocateMemory( + const IpczDriver& driver) { + DriverMemory memory(driver, kPrimaryBufferSize); + if (!memory.is_valid()) { + return {}; } - auto memory = AdoptRef( - new NodeLinkMemory(std::move(node), primary_buffer_memory.Map())); - - PrimaryBuffer& primary_buffer = memory->primary_buffer_; + DriverMemoryMapping mapping = memory.Map(); + PrimaryBuffer& primary_buffer = + *reinterpret_cast<PrimaryBuffer*>(mapping.bytes().data()); // The first allocable BufferId is 1, because the primary buffer uses 0. primary_buffer.header.next_buffer_id.store(1, std::memory_order_relaxed); @@ -201,17 +202,13 @@ primary_buffer.block_allocator_1024().InitializeRegion(); primary_buffer.block_allocator_2048().InitializeRegion(); - return { - .node_link_memory = std::move(memory), - .primary_buffer_memory = std::move(primary_buffer_memory), - }; + return {std::move(memory), std::move(mapping)}; } // static -Ref<NodeLinkMemory> NodeLinkMemory::Adopt(Ref<Node> node, - DriverMemory primary_buffer_memory) { - return AdoptRef( - new NodeLinkMemory(std::move(node), primary_buffer_memory.Map())); +Ref<NodeLinkMemory> NodeLinkMemory::Create(Ref<Node> node, + DriverMemoryMapping memory) { + return AdoptRef(new NodeLinkMemory(std::move(node), std::move(memory))); } BufferId NodeLinkMemory::AllocateNewBufferId() {
diff --git a/third_party/ipcz/src/ipcz/node_link_memory.h b/third_party/ipcz/src/ipcz/node_link_memory.h index be6770b2..d5e5095 100644 --- a/third_party/ipcz/src/ipcz/node_link_memory.h +++ b/third_party/ipcz/src/ipcz/node_link_memory.h
@@ -41,24 +41,6 @@ // reserved for use by initial portals. static constexpr size_t kMaxInitialPortals = 12; - NodeLinkMemory(NodeLinkMemory&&); - - // Returned by Allocate(). - struct Allocation { - // The NodeLinkMemory created by a succesful call to Allocate(), or null if - // memory could not be allocated. This memory is initialized with a - // primary buffer (BufferId 0) whose contents have also been appropriately - // initialized. This object is ready for immediate use by a new NodeLink on - // the `node` passed to Allocate(). - Ref<NodeLinkMemory> node_link_memory; - - // A handle to the region underlying the new NodeLinkMemory's primary - // buffer. This should be shared with the corresponding NodeLink's remote - // node, where it can be passed to Adopt() to establish a new NodeLinkMemory - // there. - DriverMemory primary_buffer_memory; - }; - // Sets a reference to the NodeLink using this NodeLinkMemory. This is called // by the NodeLink itself before any other methods can be called on the // NodeLinkMemory, and it's only reset to null once the NodeLink is @@ -67,16 +49,16 @@ // memory pool as this one. void SetNodeLink(Ref<NodeLink> link); - // Constructs a new NodeLinkMemory over a newly allocated DriverMemory object. - // The new DriverMemory is returned in `primary_buffer_memory`, while the - // returned NodeLinkMemory internally retains a mapping of that memory. - static Allocation Allocate(Ref<Node> node); + // Allocates a new DriverMemory object and initializes its contents to be + // suitable as the primary buffer of a new NodeLinkMemory. Returns the memory + // along with a mapping of it. + static DriverMemoryWithMapping AllocateMemory(const IpczDriver& driver); // Constructs a new NodeLinkMemory with BufferId 0 (the primary buffer) mapped - // from `primary_buffer_memory`. The buffer must have been created and - // initialized by a prior call to Allocate() above. - static Ref<NodeLinkMemory> Adopt(Ref<Node> node, - DriverMemory primary_buffer_memory); + // as `primary_buffer_memory`. The buffer must have been created and + // initialized by a prior call to AllocateMemory() above. + static Ref<NodeLinkMemory> Create(Ref<Node> node, + DriverMemoryMapping primary_buffer_memory); // Returns a new BufferId which should still be unused by any buffer in this // NodeLinkMemory's BufferPool, or that of its peer NodeLinkMemory. When @@ -152,7 +134,10 @@ private: struct PrimaryBuffer; - NodeLinkMemory(Ref<Node> node, DriverMemoryMapping primary_buffer); + // Constructs a new NodeLinkMemory over `mapping`, which must correspond to + // a DriverMemory whose contents have already been initialized as a + // NodeLinkMemory primary buffer. + NodeLinkMemory(Ref<Node> node, DriverMemoryMapping mapping); ~NodeLinkMemory() override; // Indicates whether the NodeLinkMemory should be allowed to expand its
diff --git a/third_party/ipcz/src/ipcz/node_link_memory_test.cc b/third_party/ipcz/src/ipcz/node_link_memory_test.cc index f7c37bae..8e99fb97 100644 --- a/third_party/ipcz/src/ipcz/node_link_memory_test.cc +++ b/third_party/ipcz/src/ipcz/node_link_memory_test.cc
@@ -7,6 +7,7 @@ #include <utility> #include <vector> +#include "ipcz/driver_memory.h" #include "ipcz/driver_transport.h" #include "ipcz/ipcz.h" #include "ipcz/link_side.h" @@ -33,15 +34,16 @@ void SetUp() override { auto transports = DriverTransport::CreatePair(kTestDriver); - auto alloc = NodeLinkMemory::Allocate(node_a_); - link_a_ = - NodeLink::Create(node_a_, LinkSide::kA, kTestBrokerName, - kTestNonBrokerName, Node::Type::kNormal, 0, - transports.first, std::move(alloc.node_link_memory)); + DriverMemoryWithMapping buffer = + NodeLinkMemory::AllocateMemory(kTestDriver); + link_a_ = NodeLink::Create( + node_a_, LinkSide::kA, kTestBrokerName, kTestNonBrokerName, + Node::Type::kNormal, 0, transports.first, + NodeLinkMemory::Create(node_a_, std::move(buffer.mapping))); link_b_ = NodeLink::Create( node_b_, LinkSide::kB, kTestNonBrokerName, kTestBrokerName, Node::Type::kBroker, 0, transports.second, - NodeLinkMemory::Adopt(node_b_, std::move(alloc.primary_buffer_memory))); + NodeLinkMemory::Create(node_b_, buffer.memory.Map())); node_a_->AddLink(kTestNonBrokerName, link_a_); node_b_->AddLink(kTestBrokerName, link_b_); link_a_->transport()->Activate();
diff --git a/third_party/ipcz/src/ipcz/node_link_test.cc b/third_party/ipcz/src/ipcz/node_link_test.cc index 0eff3791..94e91c1 100644 --- a/third_party/ipcz/src/ipcz/node_link_test.cc +++ b/third_party/ipcz/src/ipcz/node_link_test.cc
@@ -6,6 +6,7 @@ #include <utility> +#include "ipcz/driver_memory.h" #include "ipcz/link_side.h" #include "ipcz/link_type.h" #include "ipcz/node_link_memory.h" @@ -35,19 +36,18 @@ auto transport1 = MakeRefCounted<DriverTransport>(DriverObject(kDriver, handle1)); - NodeLinkMemory::Allocation allocation = NodeLinkMemory::Allocate(broker); - ABSL_ASSERT(allocation.node_link_memory); + DriverMemoryWithMapping buffer = NodeLinkMemory::AllocateMemory(kDriver); + ABSL_ASSERT(buffer.mapping.is_valid()); const NodeName non_broker_name = broker->GenerateRandomName(); - auto link0 = - NodeLink::Create(broker, LinkSide::kA, broker->GetAssignedName(), - non_broker_name, Node::Type::kNormal, 0, transport0, - std::move(allocation.node_link_memory)); + auto link0 = NodeLink::Create( + broker, LinkSide::kA, broker->GetAssignedName(), non_broker_name, + Node::Type::kNormal, 0, transport0, + NodeLinkMemory::Create(broker, std::move(buffer.mapping))); auto link1 = NodeLink::Create( non_broker, LinkSide::kB, non_broker_name, broker->GetAssignedName(), Node::Type::kNormal, 0, transport1, - NodeLinkMemory::Adopt(non_broker, - std::move(allocation.primary_buffer_memory))); + NodeLinkMemory::Create(non_broker, buffer.memory.Map())); transport0->Activate(); transport1->Activate();
diff --git a/third_party/ipcz/src/ipcz/node_messages.h b/third_party/ipcz/src/ipcz/node_messages.h index 30867ff..ed92d7a 100644 --- a/third_party/ipcz/src/ipcz/node_messages.h +++ b/third_party/ipcz/src/ipcz/node_messages.h
@@ -11,6 +11,7 @@ #include "ipcz/driver_object.h" #include "ipcz/driver_transport.h" #include "ipcz/handle_type.h" +#include "ipcz/link_side.h" #include "ipcz/message.h" #include "ipcz/node_name.h" #include "ipcz/router_descriptor.h"
diff --git a/third_party/ipcz/src/ipcz/node_messages_generator.h b/third_party/ipcz/src/ipcz/node_messages_generator.h index 6cdbf72..71511434 100644 --- a/third_party/ipcz/src/ipcz/node_messages_generator.h +++ b/third_party/ipcz/src/ipcz/node_messages_generator.h
@@ -54,6 +54,50 @@ IPCZ_MSG_PARAM(uint32_t, num_initial_portals) IPCZ_MSG_END() +// Sent by a non-broker node to a broker node, asking the broker to introduce +// the non-broker to the node identified by `name`. If the broker is willing and +// able to comply with this request, it will send an AcceptIntroduction message +// (see below) to both the sender of this message and the node identified by +// `name`. +// +// If the broker does not know the node named `name`, it will send only a +// RejectIntroduction message back to the sender to indicate failure. +IPCZ_MSG_BEGIN(RequestIntroduction, IPCZ_MSG_ID(10), IPCZ_MSG_VERSION(0)) + IPCZ_MSG_PARAM(NodeName, name) +IPCZ_MSG_END() + +// Introduces one node to another. Sent only by broker nodes and must only be +// accepted from broker nodes. +IPCZ_MSG_BEGIN(AcceptIntroduction, IPCZ_MSG_ID(11), IPCZ_MSG_VERSION(0)) + // The name of the node being introduced to the recipient of this message. + IPCZ_MSG_PARAM(NodeName, name) + + // Indicates which nominal side of the link (A or B) the recipient must assume + // for the NodeLink it will establish over `transport`. + IPCZ_MSG_PARAM(LinkSide, link_side) + + // Indicates the highest ipcz protocol version which the remote side of + // `transport` able and willing to use according to the broker. + IPCZ_MSG_PARAM(uint32_t, remote_protocol_version) + + // The DriverTransport which should be used by the recipient to establish a + // new NodeLink to the named node. The transport's peer endpoint will be + // given by the broker to the node identified by `name`. + IPCZ_MSG_PARAM_DRIVER_OBJECT(transport) + + // A DriverMemory object which should adopted for the NodeLinkMemory instance + // of the newly established NodeLink. This becomes the new NodeLinkMemory's + // primary buffer. + IPCZ_MSG_PARAM_DRIVER_OBJECT(memory) +IPCZ_MSG_END() + +// Sent back to a non-broker if the broker did not recognzie the subject of an +// introduction request. +IPCZ_MSG_BEGIN(RejectIntroduction, IPCZ_MSG_ID(12), IPCZ_MSG_VERSION(0)) + // The name of the node whose introduction cannot be fulfilled. + IPCZ_MSG_PARAM(NodeName, name) +IPCZ_MSG_END() + // Shares a new buffer to support allocation of blocks of `block_size` bytes. // The sender must initialize an appropriate BlockAllocator within the buffer's // memory before sending this message. @@ -117,10 +161,18 @@ IPCZ_MSG_PARAM(SequenceNumber, sequence_length) IPCZ_MSG_END() +// Notifies a specific router that its route from the direction of this link has +// been unexpectedly disconnected (e.g. due to a node crashing). This is +// essentially the same as route closure but without respect for complete parcel +// sequence delivery. +IPCZ_MSG_BEGIN(RouteDisconnected, IPCZ_MSG_ID(23), IPCZ_MSG_VERSION(0)) + IPCZ_MSG_PARAM(SublinkId, sublink) +IPCZ_MSG_END() + // Notifies a node that the Router it has bound to `sublink` (on the // transmitting NodeLink) now has an allocated RouterLinkState in the fragment // identified by `descriptor`. -IPCZ_MSG_BEGIN(SetRouterLinkState, IPCZ_MSG_ID(23), IPCZ_MSG_VERSION(0)) +IPCZ_MSG_BEGIN(SetRouterLinkState, IPCZ_MSG_ID(24), IPCZ_MSG_VERSION(0)) IPCZ_MSG_PARAM(SublinkId, sublink) IPCZ_MSG_PARAM(FragmentDescriptor, descriptor) IPCZ_MSG_END()
diff --git a/third_party/ipcz/src/ipcz/node_test.cc b/third_party/ipcz/src/ipcz/node_test.cc new file mode 100644 index 0000000..8c4685c5 --- /dev/null +++ b/third_party/ipcz/src/ipcz/node_test.cc
@@ -0,0 +1,195 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ipcz/node.h" + +#include <utility> + +#include "ipcz/driver_memory.h" +#include "ipcz/driver_transport.h" +#include "ipcz/ipcz.h" +#include "ipcz/link_side.h" +#include "ipcz/node_link.h" +#include "ipcz/node_link_memory.h" +#include "ipcz/node_name.h" +#include "reference_drivers/sync_reference_driver.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "util/ref_counted.h" + +namespace ipcz { +namespace { + +const IpczDriver& kTestDriver = reference_drivers::kSyncReferenceDriver; + +constexpr NodeName kNodeAName(0, 1); +constexpr NodeName kNodeBName(1, 2); +constexpr NodeName kNodeCName(3, 5); + +class NodeTest : public testing::Test { + public: + void SetUp() override { + ConnectBrokerToNode(node_a_, kNodeAName); + ConnectBrokerToNode(node_b_, kNodeBName); + } + + void TearDown() override { + node_b_->Close(); + node_a_->Close(); + broker_->Close(); + } + + Node& broker() { return *broker_; } + NodeName broker_name() { return broker_->GetAssignedName(); } + Node& node_a() { return *node_a_; } + Node& node_b() { return *node_b_; } + + private: + void ConnectBrokerToNode(Ref<Node> node, const NodeName& name) { + auto transports = DriverTransport::CreatePair(kTestDriver); + DriverMemoryWithMapping buffer = + NodeLinkMemory::AllocateMemory(kTestDriver); + const NodeName broker_name = broker_->GetAssignedName(); + auto broker_link = NodeLink::Create( + broker_, LinkSide::kA, broker_name, name, Node::Type::kNormal, 0, + transports.first, + NodeLinkMemory::Create(broker_, std::move(buffer.mapping))); + auto node_link = NodeLink::Create( + node, LinkSide::kB, name, broker_name, Node::Type::kBroker, 0, + transports.second, NodeLinkMemory::Create(node, buffer.memory.Map())); + node->SetAssignedName(name); + broker_->AddLink(name, broker_link); + node->AddLink(broker_name, node_link); + node->SetBrokerLink(node_link); + broker_link->transport()->Activate(); + node_link->transport()->Activate(); + } + + const Ref<Node> broker_{MakeRefCounted<Node>(Node::Type::kBroker, + kTestDriver, + IPCZ_INVALID_DRIVER_HANDLE)}; + const Ref<Node> node_a_{MakeRefCounted<Node>(Node::Type::kNormal, + kTestDriver, + IPCZ_INVALID_DRIVER_HANDLE)}; + const Ref<Node> node_b_{MakeRefCounted<Node>(Node::Type::kNormal, + kTestDriver, + IPCZ_INVALID_DRIVER_HANDLE)}; +}; + +TEST_F(NodeTest, EstablishExistingLinks) { + // When the requested node is already known, EstablishLink() responds + // immediately with the existing NodeLink. + + bool called = false; + auto expect_link = [&called](Ref<NodeLink>& expected) { + return [expected = expected.get(), &called](NodeLink* link) { + EXPECT_EQ(expected, link); + called = true; + }; + }; + + Ref<NodeLink> broker_to_a = broker().GetLink(kNodeAName); + EXPECT_TRUE(broker_to_a); + broker().EstablishLink(kNodeAName, expect_link(broker_to_a)); + EXPECT_TRUE(called); + called = false; + + Ref<NodeLink> broker_to_b = broker().GetLink(kNodeBName); + EXPECT_TRUE(broker_to_b); + broker().EstablishLink(kNodeBName, expect_link(broker_to_b)); + EXPECT_TRUE(called); + called = false; + + Ref<NodeLink> a_to_broker = node_a().GetLink(broker_name()); + EXPECT_TRUE(a_to_broker); + node_a().EstablishLink(broker_name(), expect_link(a_to_broker)); + EXPECT_TRUE(called); + called = false; + + Ref<NodeLink> b_to_broker = node_b().GetLink(broker_name()); + EXPECT_TRUE(b_to_broker); + node_b().EstablishLink(broker_name(), expect_link(b_to_broker)); + EXPECT_TRUE(called); + called = false; +} + +TEST_F(NodeTest, EstablishNewLinks) { + // When the requested node is not yet known to the caller but is known to + // their broker, EstablishLink() coordinates with the broker to get the + // two nodes introduced to each other. + + NodeLink* established_link = nullptr; + EXPECT_FALSE(node_a().GetLink(kNodeBName)); + EXPECT_FALSE(node_b().GetLink(kNodeAName)); + node_a().EstablishLink(kNodeBName, [&established_link](NodeLink* link) { + established_link = link; + }); + EXPECT_TRUE(established_link); + + Ref<NodeLink> a_to_b = node_a().GetLink(kNodeBName); + Ref<NodeLink> b_to_a = node_b().GetLink(kNodeAName); + EXPECT_TRUE(a_to_b); + EXPECT_TRUE(b_to_a); + EXPECT_EQ(a_to_b.get(), established_link); + + // A redundant EstablishLink() changes nothing, even from the other side. + node_a().EstablishLink( + kNodeBName, [&a_to_b](NodeLink* link) { EXPECT_EQ(a_to_b.get(), link); }); + node_b().EstablishLink( + kNodeAName, [&b_to_a](NodeLink* link) { EXPECT_EQ(b_to_a.get(), link); }); + EXPECT_EQ(a_to_b, node_a().GetLink(kNodeBName)); + EXPECT_EQ(b_to_a, node_b().GetLink(kNodeAName)); + + // Verify that the new links are managing a common buffer pool. + constexpr uint64_t kMagic = 0x1123581321345589; + const Fragment a_fragment = a_to_b->memory().AllocateFragment(8); + EXPECT_TRUE(a_fragment.is_addressable()); + *static_cast<uint64_t*>(a_fragment.address()) = kMagic; + + const Fragment b_fragment = + b_to_a->memory().GetFragment(a_fragment.descriptor()); + EXPECT_TRUE(b_fragment.is_addressable()); + EXPECT_EQ(kMagic, *static_cast<uint64_t*>(b_fragment.address())); + *static_cast<uint64_t*>(b_fragment.address()) = 0; + EXPECT_EQ(0u, *static_cast<uint64_t*>(a_fragment.address())); +} + +TEST_F(NodeTest, EstablishLinkFailureFromNonBroker) { + // If the named node is unknown to the broker, a link can't be established by + // a non-broker. + bool failed = false; + EXPECT_FALSE(broker().GetLink(kNodeCName)); + EXPECT_FALSE(node_a().GetLink(kNodeCName)); + node_a().EstablishLink(kNodeCName, [&](NodeLink* link) { + EXPECT_FALSE(link); + failed = true; + }); + EXPECT_TRUE(failed); +} + +TEST_F(NodeTest, EstablishLinkFailureFromBroker) { + // New links can't be automatically established by the broker. + bool failed = false; + EXPECT_FALSE(broker().GetLink(kNodeCName)); + broker().EstablishLink(kNodeCName, [&](NodeLink* link) { + EXPECT_FALSE(link); + failed = true; + }); + EXPECT_TRUE(failed); +} + +TEST_F(NodeTest, EstablishLinkFailureWithoutBrokerLink) { + // A node with no broker link can't be introduced to anyone. + bool failed = false; + const Ref<Node> node_c = MakeRefCounted<Node>( + Node::Type::kNormal, kTestDriver, IPCZ_INVALID_DRIVER_HANDLE); + EXPECT_TRUE(broker().GetLink(kNodeAName)); + node_c->EstablishLink(kNodeAName, [&](NodeLink* link) { + EXPECT_FALSE(link); + failed = true; + }); + EXPECT_TRUE(failed); +} + +} // namespace +} // namespace ipcz
diff --git a/third_party/ipcz/src/ipcz/ref_counted_fragment_test.cc b/third_party/ipcz/src/ipcz/ref_counted_fragment_test.cc index 3690f48..ed33e61 100644 --- a/third_party/ipcz/src/ipcz/ref_counted_fragment_test.cc +++ b/third_party/ipcz/src/ipcz/ref_counted_fragment_test.cc
@@ -7,6 +7,7 @@ #include <atomic> #include <tuple> +#include "ipcz/driver_memory.h" #include "ipcz/fragment.h" #include "ipcz/fragment_ref.h" #include "ipcz/node.h" @@ -160,7 +161,9 @@ TEST_F(RefCountedFragmentTest, Free) { auto node = MakeRefCounted<Node>(Node::Type::kNormal, kTestDriver, IPCZ_INVALID_DRIVER_HANDLE); - auto memory = NodeLinkMemory::Allocate(std::move(node)).node_link_memory; + DriverMemoryWithMapping buffer = NodeLinkMemory::AllocateMemory(kTestDriver); + auto memory = + NodeLinkMemory::Create(std::move(node), std::move(buffer.mapping)); // Allocate a ton of fragments and let them be released by FragmentRef on // destruction. If the fragments aren't freed properly, allocations will fail
diff --git a/third_party/ipcz/src/ipcz/remote_router_link.cc b/third_party/ipcz/src/ipcz/remote_router_link.cc index 6fba386..98dab6b3 100644 --- a/third_party/ipcz/src/ipcz/remote_router_link.cc +++ b/third_party/ipcz/src/ipcz/remote_router_link.cc
@@ -112,11 +112,6 @@ return false; } -bool RemoteRouterLink::IsRemoteLinkTo(const NodeLink& node_link, - SublinkId sublink) { - return node_link_.get() == &node_link && sublink_ == sublink; -} - void RemoteRouterLink::AcceptParcel(Parcel& parcel) { const absl::Span<Ref<APIObject>> objects = parcel.objects_view(); @@ -225,6 +220,12 @@ node_link()->Transmit(route_closed); } +void RemoteRouterLink::AcceptRouteDisconnected() { + msg::RouteDisconnected route_disconnected; + route_disconnected.params().sublink = sublink_; + node_link()->Transmit(route_disconnected); +} + void RemoteRouterLink::MarkSideStable() { side_is_stable_.store(true, std::memory_order_release); if (RouterLinkState* state = GetLinkState()) {
diff --git a/third_party/ipcz/src/ipcz/remote_router_link.h b/third_party/ipcz/src/ipcz/remote_router_link.h index a5c3aeb..e84e092 100644 --- a/third_party/ipcz/src/ipcz/remote_router_link.h +++ b/third_party/ipcz/src/ipcz/remote_router_link.h
@@ -69,9 +69,9 @@ LinkType GetType() const override; RouterLinkState* GetLinkState() const override; bool HasLocalPeer(const Router& router) override; - bool IsRemoteLinkTo(const NodeLink& node_link, SublinkId sublink) override; void AcceptParcel(Parcel& parcel) override; void AcceptRouteClosure(SequenceNumber sequence_length) override; + void AcceptRouteDisconnected() override; void MarkSideStable() override; bool TryLockForBypass(const NodeName& bypass_request_source) override; bool TryLockForClosure() override;
diff --git a/third_party/ipcz/src/ipcz/router.cc b/third_party/ipcz/src/ipcz/router.cc index 279ffc5..afb2585 100644 --- a/third_party/ipcz/src/ipcz/router.cc +++ b/third_party/ipcz/src/ipcz/router.cc
@@ -59,6 +59,11 @@ Ref<RouterLink> link; { absl::MutexLock lock(&mutex_); + if (inbound_parcels_.final_sequence_length()) { + // If the inbound sequence is finalized, the peer portal must be gone. + return IPCZ_RESULT_NOT_FOUND; + } + const SequenceNumber sequence_number = outbound_parcels_.GetCurrentSequenceLength(); parcel.set_sequence_number(sequence_number); @@ -90,10 +95,8 @@ Ref<RouterLink> link; { absl::MutexLock lock(&mutex_); - bool ok = outbound_parcels_.SetFinalSequenceLength( + outbound_parcels_.SetFinalSequenceLength( outbound_parcels_.GetCurrentSequenceLength()); - ABSL_ASSERT(ok); - traps_.RemoveAll(dispatcher); } @@ -101,10 +104,22 @@ } void Router::SetOutwardLink(Ref<RouterLink> link) { + ABSL_ASSERT(link); + { absl::MutexLock lock(&mutex_); ABSL_ASSERT(!outward_link_); - outward_link_ = std::move(link); + + if (!is_disconnected_) { + outward_link_ = std::move(link); + } + } + + if (link) { + // If the link wasn't adopted, this Router has already been disconnected. + link->AcceptRouteDisconnected(); + link->Deactivate(); + return; } Flush(); @@ -116,7 +131,9 @@ absl::MutexLock lock(&mutex_); const SequenceNumber sequence_number = parcel.sequence_number(); if (!inbound_parcels_.Push(sequence_number, std::move(parcel))) { - return false; + // Unexpected route disconnection can cut off inbound sequences, so don't + // treat an out-of-bounds parcel as a validation failure. + return true; } status_.num_local_parcels = inbound_parcels_.GetNumAvailableElements(); @@ -144,7 +161,9 @@ // that tracks complete sequences from potentially fragmented contributions. const SequenceNumber sequence_number = parcel.sequence_number(); if (!outbound_parcels_.Push(sequence_number, std::move(parcel))) { - return false; + // Unexpected route disconnection can cut off outbound sequences, so don't + // treat an out-of-bounds parcel as a validation failure. + return true; } } @@ -152,16 +171,17 @@ return true; } -bool Router::AcceptRouteClosureFrom( - LinkType link_type, - absl::optional<SequenceNumber> sequence_length) { +bool Router::AcceptRouteClosureFrom(LinkType link_type, + SequenceNumber sequence_length) { TrapEventDispatcher dispatcher; { absl::MutexLock lock(&mutex_); if (link_type.is_outward()) { - if (!inbound_parcels_.SetFinalSequenceLength(sequence_length.value_or( - inbound_parcels_.GetCurrentSequenceLength()))) { - return false; + if (!inbound_parcels_.SetFinalSequenceLength(sequence_length)) { + // Ignore if and only if the sequence was terminated early. + DVLOG(4) << "Discarding inbound route closure notification"; + return inbound_parcels_.final_sequence_length().has_value() && + *inbound_parcels_.final_sequence_length() <= sequence_length; } if (!inward_link_) { @@ -173,9 +193,11 @@ dispatcher); } } else if (link_type.is_peripheral_inward()) { - if (!outbound_parcels_.SetFinalSequenceLength(sequence_length.value_or( - outbound_parcels_.GetCurrentSequenceLength()))) { - return false; + if (!outbound_parcels_.SetFinalSequenceLength(sequence_length)) { + // Ignore if and only if the sequence was terminated early. + DVLOG(4) << "Discarding outbound route closure notification"; + return outbound_parcels_.final_sequence_length().has_value() && + *outbound_parcels_.final_sequence_length() <= sequence_length; } } } @@ -184,6 +206,49 @@ return true; } +bool Router::AcceptRouteDisconnectedFrom(LinkType link_type) { + TrapEventDispatcher dispatcher; + absl::InlinedVector<Ref<RouterLink>, 4> forwarding_links; + { + absl::MutexLock lock(&mutex_); + + DVLOG(4) << "Router " << this << " disconnected from " + << link_type.ToString() << "link"; + + is_disconnected_ = true; + if (link_type.is_peripheral_inward()) { + outbound_parcels_.ForceTerminateSequence(); + } else { + inbound_parcels_.ForceTerminateSequence(); + } + + // Wipe out all remaining links and propagate the disconnection over them. + forwarding_links.push_back(std::move(outward_link_)); + forwarding_links.push_back(std::move(inward_link_)); + + if (!inward_link_) { + // Terminal routers may have trap events to fire. + status_.flags |= IPCZ_PORTAL_STATUS_PEER_CLOSED; + if (inbound_parcels_.IsSequenceFullyConsumed()) { + status_.flags |= IPCZ_PORTAL_STATUS_DEAD; + } + traps_.UpdatePortalStatus(status_, TrapSet::UpdateReason::kPeerClosed, + dispatcher); + } + } + + for (const Ref<RouterLink>& link : forwarding_links) { + if (link) { + DVLOG(4) << "Forwarding disconnection over " << link->Describe(); + link->AcceptRouteDisconnected(); + link->Deactivate(); + } + } + + Flush(); + return true; +} + IpczResult Router::GetNextInboundParcel(IpczGetFlags flags, void* data, size_t* num_bytes, @@ -248,6 +313,7 @@ // static Ref<Router> Router::Deserialize(const RouterDescriptor& descriptor, NodeLink& from_node_link) { + bool disconnected = false; auto router = MakeRefCounted<Router>(); { absl::MutexLock lock(&router->mutex_); @@ -280,11 +346,15 @@ // The new portal is DOA, either because the associated NodeLink is dead, // or the sublink ID was already in use. The latter implies a bug or bad // behavior, but it should be harmless to ignore beyond this point. - router->AcceptRouteClosureFrom(LinkType::kPeripheralOutward, - descriptor.next_incoming_sequence_number); + disconnected = true; } } + if (disconnected) { + DVLOG(4) << "Disconnected new Router immediately after deserialization"; + router->AcceptRouteDisconnectedFrom(LinkType::kPeripheralOutward); + } + router->Flush(); return router; } @@ -336,39 +406,27 @@ // Acquire a reference to the RemoteRouterLink created by an earlier call to // SerializeNewRouter(). If the NodeLink has already been disconnected, this // may be null. - Ref<RemoteRouterLink> new_router_link; if (auto new_sublink = to_node_link.GetSublink(descriptor.new_sublink)) { - new_router_link = new_sublink->router_link; - } + Ref<RemoteRouterLink> new_router_link = new_sublink->router_link; + { + absl::MutexLock lock(&mutex_); + ABSL_ASSERT(!inward_link_); - bool deactivate_link = false; - if (new_router_link) { - absl::MutexLock lock(&mutex_); - ABSL_ASSERT(!inward_link_); - - // It's possible that the new router was already closed and we've already - // received a notification about this and forwarded any parcels it may have - // sent. In that case it would be pointless to establish an inward link, so - // we'll just drop it instead. - if (outbound_parcels_.IsSequenceFullyConsumed()) { - deactivate_link = true; - } else { - // TODO: Initiate proxy removal ASAP now that we're proxying. - inward_link_ = new_router_link; + // If the new router has already been closed or disconnected, we will + // discard the new link to it. + if (!outbound_parcels_.final_sequence_length() && !is_disconnected_) { + // TODO: Initiate proxy removal ASAP now that we're proxying. + inward_link_ = std::move(new_router_link); + } } - } - if (deactivate_link) { - new_router_link->Deactivate(); - return; - } - - if (!to_node_link.GetSublink(descriptor.new_sublink)) { - // If the NodeLink was disconnected since we entered this method but before - // `inward_link_` was set above, disconnection will not have been propagated - // inward. Remedy that. - AcceptRouteClosureFrom(LinkType::kPeripheralInward); - return; + if (new_router_link) { + // The link was not adopted, so deactivate and discard it. + DVLOG(4) << "Dropping link to new router " << new_router_link->Describe(); + new_router_link->AcceptRouteDisconnected(); + new_router_link->Deactivate(); + return; + } } // We may have inbound parcels queued which need to be forwarded to the new @@ -376,32 +434,20 @@ Flush(); } -void Router::NotifyLinkDisconnected(const NodeLink& node_link, - SublinkId sublink) { - Ref<RouterLink> dead_outward_link; - SequenceNumber inbound_sequence_length; - Ref<RouterLink> dead_inward_link; - SequenceNumber outbound_sequence_length; +void Router::NotifyLinkDisconnected(RemoteRouterLink& link) { { absl::MutexLock lock(&mutex_); - if (outward_link_ && outward_link_->IsRemoteLinkTo(node_link, sublink)) { - dead_outward_link = std::move(outward_link_); - inbound_sequence_length = inbound_parcels_.GetCurrentSequenceLength(); - } else if (inward_link_ && - inward_link_->IsRemoteLinkTo(node_link, sublink)) { - dead_inward_link = std::move(inward_link_); - outbound_sequence_length = outbound_parcels_.GetCurrentSequenceLength(); + if (outward_link_ == &link) { + outward_link_.reset(); + } else if (inward_link_ == &link) { + inward_link_.reset(); } } - if (dead_outward_link) { - AcceptRouteClosureFrom(dead_outward_link->GetType(), - inbound_sequence_length); - } - - if (dead_inward_link) { - AcceptRouteClosureFrom(dead_inward_link->GetType(), - outbound_sequence_length); + if (link.GetType().is_outward()) { + AcceptRouteDisconnectedFrom(LinkType::kPeripheralOutward); + } else { + AcceptRouteDisconnectedFrom(LinkType::kPeripheralInward); } }
diff --git a/third_party/ipcz/src/ipcz/router.h b/third_party/ipcz/src/ipcz/router.h index d132947..cd98e30 100644 --- a/third_party/ipcz/src/ipcz/router.h +++ b/third_party/ipcz/src/ipcz/router.h
@@ -21,6 +21,7 @@ namespace ipcz { class NodeLink; +class RemoteRouterLink; // The Router is the main primitive responsible for routing parcels between ipcz // portals. This class is thread-safe. @@ -92,13 +93,19 @@ bool AcceptOutboundParcel(Parcel& parcel); // Accepts notification that the other end of the route has been closed and - // that the close end transmitted a total of `sequence_length` parcels before - // closing. If `sequence_length` is unknown and omitted (due to closure being - // forced by disconnection), the current sequence length in the appropriate - // direction is used. - bool AcceptRouteClosureFrom( - LinkType link_type, - absl::optional<SequenceNumber> sequence_length = absl::nullopt); + // that the closed end transmitted a total of `sequence_length` parcels before + // closing. + bool AcceptRouteClosureFrom(LinkType link_type, + SequenceNumber sequence_length); + + // Accepts notification from a link bound to this Router that some node along + // the route (in the direction of that link) has been disconnected, e.g. due + // to a crash, and that the route is no longer functional as a result. This is + // similar to route closure, except no effort can realistically be made to + // deliver the complete sequence of parcels transmitted from that end of the + // route. `link_type` specifies the type of link which is propagating the + // notification to this rouer. + bool AcceptRouteDisconnectedFrom(LinkType link_type); // Retrieves the next available inbound parcel from this Router, if present. IpczResult GetNextInboundParcel(IpczGetFlags flags, @@ -131,10 +138,10 @@ void BeginProxyingToNewRouter(NodeLink& to_node_link, const RouterDescriptor& descriptor); - // Notifies this Router that one of its links has been disconnected from a - // remote node. The link is identified by a combination of a specific NodeLink - // and SublinkId. - void NotifyLinkDisconnected(const NodeLink& node_link, SublinkId sublink); + // Notifies this router that the given RemoteRouterLink has been disconnected + // due to an underlying NodeLink disconnection. This is only called for + // RemoteRouterLinks which are associated with this Router. + void NotifyLinkDisconnected(RemoteRouterLink& link); // Flushes any inbound or outbound parcels, as well as any route closure // notifications. RouterLinks which are no longer needed for the operation of @@ -184,6 +191,10 @@ // present when received, and they are forwarded along `outward_link_` as soon // as possible. ParcelQueue outbound_parcels_ ABSL_GUARDED_BY(mutex_); + + // Tracks whether this router has been unexpectedly disconnected from its + // links. This may be used to prevent additional links from being established. + bool is_disconnected_ ABSL_GUARDED_BY(mutex_) = false; }; } // namespace ipcz
diff --git a/third_party/ipcz/src/ipcz/router_link.h b/third_party/ipcz/src/ipcz/router_link.h index a682e18..b08942f3 100644 --- a/third_party/ipcz/src/ipcz/router_link.h +++ b/third_party/ipcz/src/ipcz/router_link.h
@@ -40,10 +40,6 @@ // Returns true iff this is a LocalRouterLink whose peer router is `router`. virtual bool HasLocalPeer(const Router& router) = 0; - // Returns true iff this is a RemoteRouterLink routing over `node_link` via - // `sublink`. - virtual bool IsRemoteLinkTo(const NodeLink& node_link, SublinkId sublink) = 0; - // Passes a parcel to the Router on the other side of this link to be queued // and/or router further. virtual void AcceptParcel(Parcel& parcel) = 0; @@ -53,6 +49,12 @@ // transmitted from the closed side before it was closed. virtual void AcceptRouteClosure(SequenceNumber sequence_length) = 0; + // Notifies the Router on the other side of the link that the route has been + // unexpectedly disconnected from this side. Unlike clean route closure above, + // in this case we don't know the final sequence length and can't guarantee + // delivery of any further parcels. + virtual void AcceptRouteDisconnected() = 0; + // Signals that this side of the link is in a stable state suitable for one // side or the other to lock the link, either for bypass or closure // propagation. Only once both sides are marked stable can either side lock
diff --git a/third_party/ipcz/src/ipcz/router_link_test.cc b/third_party/ipcz/src/ipcz/router_link_test.cc index 38057ba..f89f1d4 100644 --- a/third_party/ipcz/src/ipcz/router_link_test.cc +++ b/third_party/ipcz/src/ipcz/router_link_test.cc
@@ -48,15 +48,16 @@ public: TestNodePair() { auto transports = DriverTransport::CreatePair(kTestDriver); - auto alloc = NodeLinkMemory::Allocate(node_a_); - node_link_a_ = - NodeLink::Create(node_a_, LinkSide::kA, kTestBrokerName, - kTestNonBrokerName, Node::Type::kNormal, 0, - transports.first, std::move(alloc.node_link_memory)); + DriverMemoryWithMapping buffer = + NodeLinkMemory::AllocateMemory(kTestDriver); + node_link_a_ = NodeLink::Create( + node_a_, LinkSide::kA, kTestBrokerName, kTestNonBrokerName, + Node::Type::kNormal, 0, transports.first, + NodeLinkMemory::Create(node_a_, std::move(buffer.mapping))); node_link_b_ = NodeLink::Create( node_b_, LinkSide::kB, kTestNonBrokerName, kTestBrokerName, Node::Type::kBroker, 0, transports.second, - NodeLinkMemory::Adopt(node_b_, std::move(alloc.primary_buffer_memory))); + NodeLinkMemory::Create(node_b_, buffer.memory.Map())); node_a_->AddLink(kTestNonBrokerName, node_link_a_); node_b_->AddLink(kTestBrokerName, node_link_b_); }
diff --git a/third_party/ipcz/src/ipcz/sequenced_queue.h b/third_party/ipcz/src/ipcz/sequenced_queue.h index ddf67ca..c2de7f7 100644 --- a/third_party/ipcz/src/ipcz/sequenced_queue.h +++ b/third_party/ipcz/src/ipcz/sequenced_queue.h
@@ -161,6 +161,25 @@ return Reallocate(length); } + // Forcibly sets the final length of this queue's sequence to its currently + // available length. This means that if there is a gap in the available + // elements, the queue is cut off just before the gap and all elements beyond + // the gap are destroyed. If the final sequence length had already been set on + // this queue, this overrides that. + void ForceTerminateSequence() { + final_sequence_length_ = GetCurrentSequenceLength(); + num_entries_ = GetNumAvailableElements(); + if (num_entries_ == 0) { + storage_.clear(); + entries_ = {}; + return; + } + + const size_t entries_offset = entries_.data() - storage_.data(); + storage_.resize(entries_offset + num_entries_); + entries_ = EntryView(storage_.data() + entries_offset, num_entries_); + } + // Indicates whether this queue is still expecting to have more elements // pushed. This is always true if the final sequence length has not been set // yet.
diff --git a/third_party/ipcz/src/ipcz/sequenced_queue_test.cc b/third_party/ipcz/src/ipcz/sequenced_queue_test.cc index 8c9bad95..54ed16f9 100644 --- a/third_party/ipcz/src/ipcz/sequenced_queue_test.cc +++ b/third_party/ipcz/src/ipcz/sequenced_queue_test.cc
@@ -69,6 +69,33 @@ EXPECT_FALSE(q.HasNextElement()); } +TEST(SequencedQueueTest, ForceTerminateSequence) { + TestQueue q; + q.SetFinalSequenceLength(SequenceNumber(3)); + EXPECT_TRUE(q.ExpectsMoreElements()); + EXPECT_FALSE(q.HasNextElement()); + + // Push elements 0 and 2, leaving the current sequence length at 1, due to the + // gap in element 1. + EXPECT_TRUE(q.Push(SequenceNumber(0), "woot.")); + EXPECT_TRUE(q.Push(SequenceNumber(2), "woot!")); + EXPECT_TRUE(q.ExpectsMoreElements()); + EXPECT_TRUE(q.HasNextElement()); + EXPECT_EQ(SequenceNumber(1), q.GetCurrentSequenceLength()); + + // We can't normally change the final sequence length once set. + EXPECT_FALSE(q.SetFinalSequenceLength(SequenceNumber(4))); + EXPECT_FALSE(q.SetFinalSequenceLength(SequenceNumber(0))); + EXPECT_FALSE(q.SetFinalSequenceLength(SequenceNumber(1))); + + // But we can still force it to terminate at its current length. Now the gap + // at element 1 is irrelevant, and element 0 alone is the complete sequence. + q.ForceTerminateSequence(); + EXPECT_FALSE(q.ExpectsMoreElements()); + EXPECT_TRUE(q.HasNextElement()); + EXPECT_FALSE(q.Push(SequenceNumber(1), "woot?")); +} + TEST(SequencedQueueTest, SequenceTooLow) { TestQueue q;
diff --git a/third_party/libwebp/BUILD.gn b/third_party/libwebp/BUILD.gn index bed7f4f9..09f5dda 100644 --- a/third_party/libwebp/BUILD.gn +++ b/third_party/libwebp/BUILD.gn
@@ -464,13 +464,6 @@ ] } -config("libwebp_utils_warnings") { - if (is_clang) { - # See https://code.google.com/p/webp/issues/detail?id=253. - cflags = [ "-Wno-incompatible-pointer-types" ] - } -} - static_library("libwebp_utils") { sources = [ "src/src/utils/bit_reader_inl_utils.h", @@ -510,8 +503,6 @@ all_dependent_configs = [ ":libwebp_config" ] - public_configs = [ ":libwebp_utils_warnings" ] - deps = [ ":libwebp_dsp_headers", ":libwebp_webp",
diff --git a/tools/json_schema_compiler/cpp_util.py b/tools/json_schema_compiler/cpp_util.py index 1af4525..4f96f36e 100644 --- a/tools/json_schema_compiler/cpp_util.py +++ b/tools/json_schema_compiler/cpp_util.py
@@ -134,6 +134,7 @@ return (('%s__' % file_path).upper() .replace('\\', '_') .replace('/', '_') + .replace('-', '_') .replace('.', '_'))
diff --git a/tools/metrics/actions/actions.xml b/tools/metrics/actions/actions.xml index 7bfcce7..67789c8b 100644 --- a/tools/metrics/actions/actions.xml +++ b/tools/metrics/actions/actions.xml
@@ -3721,6 +3721,15 @@ <description>Emitted when a user copies data to their clipboard.</description> </action> +<action name="Ash_Clipboard_PastedItem"> + <owner>ckincaid@chromium.org</owner> + <owner>multipaste@google.com</owner> + <description> + Emitted when a user pastes data from their clipboard through standard + mechanisms, i.e., not using the clipboard history menu. + </description> +</action> + <action name="Ash_ClipboardHistory_PastedItem1"> <owner>ckincaid@chromium.org</owner> <owner>multipaste@google.com</owner>
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 63b9a092..c9998b00 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -40873,6 +40873,7 @@ <int value="4309" label="SendBeaconWithURLSearchParams"/> <int value="4310" label="SendBeaconWithUSVString"/> <int value="4311" label="ReplacedElementPaintedWithOverflow"/> + <int value="4312" label="ImageAd"/> </enum> <enum name="FeaturePolicyAllowlistType"> @@ -59348,6 +59349,7 @@ <int value="354631905" label="RecoverFromNeverSaveAndroid:disabled"/> <int value="355367368" label="SharesheetCopyToClipboard:disabled"/> <int value="357138275" label="enable-floating-virtual-keyboard:disabled"/> + <int value="357165937" label="ShareToGoogleCollections:enabled"/> <int value="358399482" label="enable-high-dpi-fixed-position-compositing"/> <int value="358493847" label="BackgroundLoader:disabled"/> <int value="358906344" label="NotificationsRefresh:disabled"/> @@ -60045,6 +60047,7 @@ <int value="797344274" label="OmniboxTriggerForPrerender2:disabled"/> <int value="797924041" label="DeferredShaping:enabled"/> <int value="798696013" label="ImeInputLogicMozc:enabled"/> + <int value="798803191" label="ShareToGoogleCollections:disabled"/> <int value="799680074" label="ContextualSearchTranslationModel:enabled"/> <int value="801865174" label="NetworkServiceInProcess2:enabled"/> <int value="802463708" label="WebViewSurfaceControl:enabled"/> @@ -100069,6 +100072,7 @@ <int value="4" label="Fullscreen"/> <int value="5" label="WindowControlsOverlay"/> <int value="6" label="Tabbed"/> + <int value="7" label="Borderless"/> </enum> <enum name="WebAppIconsDownloadedResult">
diff --git a/tools/metrics/histograms/metadata/blink/histograms.xml b/tools/metrics/histograms/metadata/blink/histograms.xml index 40671b6..11d8d62 100644 --- a/tools/metrics/histograms/metadata/blink/histograms.xml +++ b/tools/metrics/histograms/metadata/blink/histograms.xml
@@ -3155,7 +3155,7 @@ </histogram> <histogram name="Blink.UseCounter.PermissionsPolicy.Violation.Enforce" - enum="FeaturePolicyFeature" expires_after="2022-08-28"> + enum="FeaturePolicyFeature" expires_after="2023-07-22"> <owner>iclelland@chromium.org</owner> <owner>feature-control@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/chromeos/histograms.xml b/tools/metrics/histograms/metadata/chromeos/histograms.xml index 526e316..5d12f6c 100644 --- a/tools/metrics/histograms/metadata/chromeos/histograms.xml +++ b/tools/metrics/histograms/metadata/chromeos/histograms.xml
@@ -995,6 +995,9 @@ <histogram name="ChromeOS.Intents.LinkCapturingEvent" enum="LinkCapturingEvent" expires_after="2022-12-01"> + <obsolete> + Replaced by ChromeOS.Intents.LinkCapturingEvent2 in M106. + </obsolete> <owner>vpao@google.com</owner> <owner>chromeos-apps-foundation-team@google.com</owner> <summary> @@ -1006,6 +1009,9 @@ <histogram name="ChromeOS.Intents.LinkCapturingEvent.{AppType}App" enum="LinkCapturingEvent" expires_after="2022-12-01"> + <obsolete> + Replaced by ChromeOS.Intents.LinkCapturingEvent2 in M106. + </obsolete> <owner>vpao@google.com</owner> <owner>chromeos-apps-foundation-team@google.com</owner> <summary> @@ -1020,6 +1026,39 @@ </token> </histogram> +<histogram name="ChromeOS.Intents.LinkCapturingEvent2" + enum="LinkCapturingEvent" expires_after="2022-12-01"> + <owner>vpao@google.com</owner> + <owner>chromeos-apps-foundation-team@google.com</owner> + <summary> + Records when the link capturing entry point is shown, when a link is + successfully captured and results in opening an app, and when the user + changes their settings to automatically capture similar links in the future. + + Replaces ChromeOS.Intents.LinkCapturingEvent, which incorrectly recorded + events when the user changed settings to stay in Chrome. + </summary> +</histogram> + +<histogram name="ChromeOS.Intents.LinkCapturingEvent2.{AppType}App" + enum="LinkCapturingEvent" expires_after="2022-12-01"> + <owner>vpao@google.com</owner> + <owner>chromeos-apps-foundation-team@google.com</owner> + <summary> + Records when the link capturing entry point is shown for the {AppType} app + type, when a link is successfully captured and results in opening a/ an + {AppType} app, and when the user changes their settings to automatically + capture similar links in the future. + + Replaces ChromeOS.Intents.LinkCapturingEvent.{AppType}App, which incorrectly + recorded events when the user changed settings to stay in Chrome. + </summary> + <token key="AppType"> + <variant name="Arc"/> + <variant name="Web"/> + </token> +</histogram> + <histogram name="ChromeOS.IsLacrosBrowser" enum="Boolean" expires_after="never"> <!-- expires-never: Used to identify lacros binary in metrics backend. -->
diff --git a/tools/metrics/histograms/metadata/geolocation/histograms.xml b/tools/metrics/histograms/metadata/geolocation/histograms.xml index df98234..54ee0b87 100644 --- a/tools/metrics/histograms/metadata/geolocation/histograms.xml +++ b/tools/metrics/histograms/metadata/geolocation/histograms.xml
@@ -34,6 +34,10 @@ <histogram base="true" name="Geolocation.Header.LocationAge" units="seconds" expires_after="M85"> + <obsolete> + Code for recording this histogram was removed in July 2022. Recording this + long-expired histogram was slowing down navigations. + </obsolete> <owner>kcarattini@chromium.org</owner> <owner>dominickn@chromium.org</owner> <summary> @@ -45,6 +49,10 @@ <histogram name="Geolocation.Header.PermissionState" enum="GeolocationHeaderPermissionState" expires_after="M85"> + <obsolete> + Code for recording this histogram was removed in July 2022. Recording this + long-expired histogram was slowing down navigations. + </obsolete> <owner>kcarattini@chromium.org</owner> <owner>dominickn@chromium.org</owner> <summary> @@ -56,6 +64,10 @@ <histogram base="true" name="Geolocation.Header.TimeListening" units="ms" expires_after="M85"> + <obsolete> + Code for recording this histogram was removed in July 2022. Recording this + long-expired histogram was slowing down navigations. + </obsolete> <owner>kcarattini@chromium.org</owner> <owner>dominickn@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/page/histograms.xml b/tools/metrics/histograms/metadata/page/histograms.xml index 3c3478f..27e2a3b 100644 --- a/tools/metrics/histograms/metadata/page/histograms.xml +++ b/tools/metrics/histograms/metadata/page/histograms.xml
@@ -1741,8 +1741,8 @@ </histogram> <histogram name="PageLoad.Experimental.PageVisitFinalStatus" - enum="PageVisitFinalStatus" expires_after="2022-08-30"> - <owner>npm@chromium.org</owner> + enum="PageVisitFinalStatus" expires_after="2023-07-22"> + <owner>iclelland@chromium.org</owner> <owner>speed-metrics-dev@chromium.org</owner> <summary> Determines the final status for this page load. That is, records whether the
diff --git a/tools/metrics/histograms/metadata/scheduler/histograms.xml b/tools/metrics/histograms/metadata/scheduler/histograms.xml index cf40b45..af4decb 100644 --- a/tools/metrics/histograms/metadata/scheduler/histograms.xml +++ b/tools/metrics/histograms/metadata/scheduler/histograms.xml
@@ -138,6 +138,36 @@ </summary> </histogram> +<histogram name="Scheduler.TaskQueueImpl.DelayedIncomingQueueSize" + units="tasks" expires_after="2022-09-30"> + <owner>yafroze@google.com</owner> + <owner>pmonette@chromium.org</owner> + <owner>catan-team@chromium.org</owner> + <summary> + The size of the |delayed_incoming_queue|. + + This is emitted pseudorandomly when a delayed task is enqueued on the + SequenceManager's main thread. + + Note: This metric merges from all named threads. + </summary> +</histogram> + +<histogram name="Scheduler.TaskQueueImpl.PostDelayedTaskDelay" units="ms" + expires_after="2022-09-30"> + <owner>yafroze@google.com</owner> + <owner>pmonette@chromium.org</owner> + <owner>catan-team@chromium.org</owner> + <summary> + The delay time for the delayed tasks posted to the sequence manager. + + This is emitted pseudorandomly when a delayed task is enqueued on the + SequenceManager's main thread. + + Note: This metric merges from all named threads. + </summary> +</histogram> + <histogram name="Scheduling.BeginImplFrameLatency2" units="microseconds" expires_after="M85"> <owner>stanisc@chromium.org</owner>
diff --git a/tools/metrics/ukm/ukm.xml b/tools/metrics/ukm/ukm.xml index 06029f7..2e6e7d22 100644 --- a/tools/metrics/ukm/ukm.xml +++ b/tools/metrics/ukm/ukm.xml
@@ -3096,6 +3096,13 @@ <summary> Records performance metrics for FedCM(Federated Credential Management) API. </summary> + <metric name="FedCmSessionID"> + <summary> + Records the session ID associated to the FedCM call for which this event + is recording metrics. Each FedCM call gets a random integer session id, + which helps group UKM events by the session id. + </summary> + </metric> <metric name="Status.RequestIdToken" enum="FedCmRequestIdTokenStatus"> <summary> Records the status of a request id token call to the FedCM API. @@ -3152,6 +3159,13 @@ This event uses the specific WEB_IDENTITY ukm_source_id which is generated from the identity provider's origin. </summary> + <metric name="FedCmSessionID"> + <summary> + Records the session ID associated to the FedCM call for which this event + is recording metrics. Each FedCM call gets a random integer session id, + which helps group UKM events by the session id. + </summary> + </metric> <metric name="Status.RequestIdToken" enum="FedCmRequestIdTokenStatus"> <summary> Records the status of a request id token call to the FedCM API.
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json index b74d198..e60beab 100644 --- a/tools/perf/core/perfetto_binary_roller/binary_deps.json +++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -13,16 +13,16 @@ "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux_arm/49b4b5dcbc312d8d2c3751cf29238b8efeb4e494/trace_processor_shell" }, "mac": { - "hash": "5458a59bb8e3176f0ba012cfffdea0fa41a88149", - "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/mac/361efbf9aab595e4dfa79ec48f242d9e722393c9/trace_processor_shell" + "hash": "089843aacd95210b425e410669c98cb1e00f93f2", + "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/mac/209791f79d097387b721b2121ae5b54c4d4facb3/trace_processor_shell" }, "mac_arm64": { "hash": "e1ad4861384b06d911a65f035317914b8cc975c6", "full_remote_path": "perfetto-luci-artifacts/v25.0/mac-arm64/trace_processor_shell" }, "linux": { - "hash": "c21d40b89142cf06456f64df5b23a7d00a274961", - "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/361efbf9aab595e4dfa79ec48f242d9e722393c9/trace_processor_shell" + "hash": "a8521c27577bae49cbc934a246eae4673a303f6d", + "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/209791f79d097387b721b2121ae5b54c4d4facb3/trace_processor_shell" } }, "power_profile.sql": {
diff --git a/tools/rust/README.md b/tools/rust/README.md index de65d4a..dc4aa4e 100644 --- a/tools/rust/README.md +++ b/tools/rust/README.md
@@ -4,6 +4,8 @@ Rust toolchain (the Rust compiler, and also C++/Rust FFI tools like [Crubit](https://github.com/google/crubit)). +[TOC] + ## Rolling Rust compiler and other Rust tools @@ -20,11 +22,9 @@ Steps to roll the Crubit tools (e.g. `rs_bindings_from_cc` tool) to a new version: -- Locally, update `CRUBIT_REVISION` in `build_crubit.py`. +- Locally, update `CRUBIT_REVISION` in `update_rust.py`. (Update `CRUBIT_SUB_REVISION` when the build or packaging is changed, but the upstream Rust revision we build from is not changed.) - TODO(https://crbug.com/1329611): Move `CRUBIT_REVISION` to - `update_rust.py` (see WIP CL: https://crrev.com/c/3718281). - Locally, update `crubit_revision` in `//DEPS`, so that it matches the revision from the previous bullet item. @@ -45,20 +45,19 @@ - Upload the CL to Gerrit. Ask [CQ](//docs/infra/cq.md) for Rust-specific tryjobs in the CL description: - `Cq-Include-Tryjobs: - luci.chromium.try:linux-rust-x64-rel,linux-rust-x64-dbg,android-rust-arm-rel,android-rust-arm-dbg`. + `Cq-Include-Trybots: luci.chromium.try:linux-rust-x64-rel,linux-rust-x64-dbg,android-rust-arm-rel,android-rust-arm-dbg`. - Run `linux_upload_clang` tryjob. This will run `package_rust.py` which will `build_rust.py` and then upload a new version of the Rust toolchain package to - the staging bucket. - TODO(https://crbug.com/1329611): In the future this will also run - `build_crubit.py` - we should update the docs once that happens. + the staging bucket. This step runs `build_crubit.py` but doesn't (yet) package + the built binaries. + TODO(https://crbug.com/1329611): Update the docs once Crubit also gets packaged. - Move the new toolchain package from staging to prod. (A small set of people have the permission for this. There are some Google-internal docs with more details.) -- Run CQ (see also `Cq-Include-Tryjobs` suggested above). +- Run CQ (see also `Cq-Include-Trybots` suggested above). This step will test that `gclient sync` can fetch the new Rust toolchain package + that the new package works fine in Chromium build. @@ -70,15 +69,37 @@ ### Prerequisites +#### LLVM/Clang build + `build_crubit.py` depends on having a locally-built LLVM/Clang: `tools/clang/scripts/build.py --bootstrap --without-android --without-fuchsia`. Among other things this prerequisite is required to generate `third_party/llvm-bootstrap-install` where `build_crubit.py` will look for LLVM/Clang libs and headers). +#### Bazel + `build_crubit.py` depends on Bazel. -TODO(https://crbug.com/1329611): Provide instructions for using `checkout_bazel` -in `.gclient` after https://crrev.com/c/3763581 lands. + +To get Bazel, ensure that you have `checkout_bazel` set in your `.gclient` file +and then rerun `gclient sync`: + +```sh +$ cat ../.gclient +solutions = [ + { + "name": "src", + "url": "https://chromium.googlesource.com/chromium/src.git", + ... + "custom_vars": { + "checkout_bazel": True, + "use_rust": True, + }, + }, +] +``` + +#### Supported host platforms So far `build_crubit.py` has only been tested on Linux hosts.
diff --git a/tools/rust/build_crubit.py b/tools/rust/build_crubit.py index ebb42123..98e23ec1 100755 --- a/tools/rust/build_crubit.py +++ b/tools/rust/build_crubit.py
@@ -31,24 +31,10 @@ from update import (CLANG_REVISION, CLANG_SUB_REVISION, LLVM_BUILD_DIR) from build import (LLVM_BOOTSTRAP_INSTALL_DIR, MaybeDownloadHostGcc) -from update_rust import (CHROMIUM_DIR, RUST_REVISION, RUST_SUB_REVISION, - STAGE0_JSON_SHA256, THIRD_PARTY_DIR, - GetPackageVersion) +from update_rust import (CHROMIUM_DIR, CRUBIT_REVISION, THIRD_PARTY_DIR) -# Trunk on 2022-07-14. -# -# The revision specified below should typically be the same as the -# `crubit_revision` specified in the //DEPS file. More details and roll -# instructions can be found in tools/rust/README.md. -# -# TODO(https://crbug.com/1329611): Move `CRUBIT_REVISION` to `update_rust.py` -# (see WIP CL: https://crrev.com/c/3718281). -CRUBIT_REVISION = 'd9b0ad4c09b46328dcc7a5ec28ce86cca56e0389' -CRUBIT_SUB_REVISION = 1 - -THIRD_PARTY_DIR = os.path.join(CHROMIUM_DIR, 'third_party') -CRUBIT_SRC_DIR = os.path.join(THIRD_PARTY_DIR, 'crubit', 'src') BAZEL_EXE = os.path.join(CHROMIUM_DIR, 'tools', 'bazel', 'bazel') +CRUBIT_SRC_DIR = os.path.join(THIRD_PARTY_DIR, 'crubit', 'src') def RunCommand(command, env=None, cwd=None, fail_hard=True): @@ -143,10 +129,11 @@ RunCommand(args + extra_args, env=env, cwd=CRUBIT_SRC_DIR) +def CleanBazel(): + RunCommand([BAZEL_EXE, "clean", "--expunge"], cwd=CRUBIT_SRC_DIR) + + def ShutdownBazel(): - # This needs to use the same arguments as BuildCrubit, because otherwise - # we get: WARNING: Running Bazel server needs to be killed, because the - # startup options are different. RunCommand([BAZEL_EXE, "shutdown"], cwd=CRUBIT_SRC_DIR) @@ -172,6 +159,7 @@ CheckoutCrubit(CRUBIT_REVISION, CRUBIT_SRC_DIR) try: + CleanBazel() BuildCrubit(args.gcc_toolchain) finally: ShutdownBazel()
diff --git a/tools/rust/package_rust.py b/tools/rust/package_rust.py index 7aefacbd..540f105 100755 --- a/tools/rust/package_rust.py +++ b/tools/rust/package_rust.py
@@ -24,6 +24,18 @@ RUST_TOOLCHAIN_PACKAGE_NAME = f'rust-toolchain-{PACKAGE_VERSION}.tgz' +def BuildCrubit(): + with open(os.path.join(THIRD_PARTY_DIR, BUILDLOG_NAME), 'w') as log: + build_cmd = [sys.executable, os.path.join(THIS_DIR, 'build_crubit.py')] + # TODO(lukasza): Default to `fail_hard` once we actually depend on the + # build step (i.e. once we start packaging Crubit). + TeeCmd(build_cmd, log, fail_hard=False) + + # TODO(lukasza): Rename this function to BuildAndInstallCrubit and actually + # install Crubit binaries into RUST_TOOLCHAIN_OUT_DIR/bin (once we gain + # confidence that Crubit continues to build uneventfully on the bots). + + def main(): parser = argparse.ArgumentParser(description='build and package Rust') parser.add_argument('--upload', @@ -46,6 +58,8 @@ build_cmd = [sys.executable, os.path.join(THIS_DIR, 'build_rust.py')] TeeCmd(build_cmd, log) + BuildCrubit() + with tarfile.open( os.path.join(THIRD_PARTY_DIR, RUST_TOOLCHAIN_PACKAGE_NAME), 'w:gz') as tar:
diff --git a/tools/rust/update_rust.py b/tools/rust/update_rust.py index 353bf6e..a4df137 100755 --- a/tools/rust/update_rust.py +++ b/tools/rust/update_rust.py
@@ -30,6 +30,14 @@ RUST_REVISION = 'f342bea9' RUST_SUB_REVISION = 1 +# Trunk on 2022-07-14. +# +# The revision specified below should typically be the same as the +# `crubit_revision` specified in the //DEPS file. More details and roll +# instructions can be found in tools/rust/README.md. +CRUBIT_REVISION = 'd9b0ad4c09b46328dcc7a5ec28ce86cca56e0389' +CRUBIT_SUB_REVISION = 1 + # Hash of src/stage0.json, which itself contains the stage0 toolchain hashes. # We trust the Rust build system checks, but to ensure it is not tampered with # itself check the hash. @@ -45,6 +53,9 @@ # Get the target version as specified above. def GetPackageVersion(): + # TODO(lukasza): Include CRUBIT_REVISION and CRUBIT_SUB_REVISION once we + # include Crubit binaries in the generated package. See also a TODO comment + # in BuildCrubit in package_rust.py. from update import (CLANG_REVISION, CLANG_SUB_REVISION) return '%s-%s-%s-%s' % (RUST_REVISION, RUST_SUB_REVISION, CLANG_REVISION, CLANG_SUB_REVISION)
diff --git a/ui/accessibility/ax_tree.cc b/ui/accessibility/ax_tree.cc index 5fc5590..ecb0283 100644 --- a/ui/accessibility/ax_tree.cc +++ b/ui/accessibility/ax_tree.cc
@@ -822,6 +822,7 @@ gfx::RectF bounds, bool* offscreen, bool clip_bounds, + bool skip_container_offset, bool allow_recursion) const { // If |bounds| is uninitialized, which is not the same as empty, // start with the node bounds. @@ -838,16 +839,17 @@ ui::AXNode* child = node->children()[i]; bool ignore_offscreen; - gfx::RectF child_bounds = RelativeToTreeBoundsInternal( - child, gfx::RectF(), &ignore_offscreen, clip_bounds, - /* allow_recursion = */ false); + gfx::RectF child_bounds = + RelativeToTreeBoundsInternal(child, gfx::RectF(), &ignore_offscreen, + clip_bounds, skip_container_offset, + /* allow_recursion = */ false); bounds.Union(child_bounds); } if (bounds.width() > 0 && bounds.height() > 0) { return bounds; } } - } else { + } else if (!skip_container_offset) { bounds.Offset(node->data().relative_bounds.bounds.x(), node->data().relative_bounds.bounds.y()); } @@ -863,7 +865,7 @@ GetFromId(node->data().relative_bounds.offset_container_id); if (!container && container != root()) container = root(); - if (!container || container == node) + if (!container || container == node || skip_container_offset) break; gfx::RectF container_bounds = container->data().relative_bounds.bounds; @@ -950,6 +952,7 @@ bool ignore_offscreen; ancestor_bounds = RelativeToTreeBoundsInternal( ancestor, gfx::RectF(), &ignore_offscreen, clip_bounds, + skip_container_offset, /* allow_recursion = */ false); gfx::RectF original_bounds = original_node->data().relative_bounds.bounds; @@ -971,10 +974,11 @@ gfx::RectF AXTree::RelativeToTreeBounds(const AXNode* node, gfx::RectF bounds, bool* offscreen, - bool clip_bounds) const { + bool clip_bounds, + bool skip_container_offset) const { bool allow_recursion = true; return RelativeToTreeBoundsInternal(node, bounds, offscreen, clip_bounds, - allow_recursion); + skip_container_offset, allow_recursion); } gfx::RectF AXTree::GetTreeBounds(const AXNode* node,
diff --git a/ui/accessibility/ax_tree.h b/ui/accessibility/ax_tree.h index d65e9a03..9f0870cc 100644 --- a/ui/accessibility/ax_tree.h +++ b/ui/accessibility/ax_tree.h
@@ -146,7 +146,8 @@ gfx::RectF RelativeToTreeBounds(const AXNode* node, gfx::RectF node_bounds, bool* offscreen = nullptr, - bool clip_bounds = true) const; + bool clip_bounds = true, + bool skip_container_offset = false) const; // Get the bounds of a node in the coordinate space of the tree. // If set, updates |offscreen| boolean to be true if the node is offscreen @@ -384,6 +385,7 @@ gfx::RectF node_bounds, bool* offscreen, bool clip_bounds, + bool skip_container_offset, bool allow_recursion) const; base::ObserverList<AXTreeObserver> observers_;
diff --git a/ui/base/cocoa/nsmenu_additions.mm b/ui/base/cocoa/nsmenu_additions.mm index 694e70d..d3f5bd49 100644 --- a/ui/base/cocoa/nsmenu_additions.mm +++ b/ui/base/cocoa/nsmenu_additions.mm
@@ -39,7 +39,8 @@ + (void)cr_setMenuItemForKeyEquivalentEventPreSearchBlock: (void (^)(void))block { - CHECK(g_pre_search_block == nil); + if (block != nil) + CHECK(g_pre_search_block == nil); g_pre_search_block = block; }
diff --git a/ui/chromeos/translations/ui_chromeos_strings_iw.xtb b/ui/chromeos/translations/ui_chromeos_strings_iw.xtb index 649b80f4..1d3aaf1a 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_iw.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_iw.xtb
@@ -185,6 +185,7 @@ <translation id="2544853746127077729">אישור האימות נדחה על ידי הרשת</translation> <translation id="255937426064304553">ארה"ב - בינלאומית</translation> <translation id="2563185590376525700">צפרדע</translation> +<translation id="2570012981255377263">הקבצים האחרונים יופיעו כאן</translation> <translation id="2578394532502990878">טמילית פונטית</translation> <translation id="2579959351793446050">אודיה</translation> <translation id="2593644851255584939">יש דרישה מהאדמין להשבית את נעילת ה-SIM.</translation> @@ -549,6 +550,7 @@ <translation id="5625294776298156701">טמילית עם מקלדת Tamil99</translation> <translation id="5633226425545095130">לאחר העברת הפריט הזה, הוא ישותף עם כל מי שיכול לראות את התיקייה המשותפת '<ph name="DESTINATION_NAME" />'.</translation> <translation id="5649768706273821470">האזנה</translation> +<translation id="5665074015635552640">הסרטונים האחרונים יופיעו כאן</translation> <translation id="5669691691057771421">הזנת קוד האימות החדש</translation> <translation id="5678784840044122290">אפליקציית Linux תהיה זמינה דרך המסוף שלך, ובחלק מהמקרים הסמל שלה יופיע במרכז האפליקציות.</translation> <translation id="5686799162999241776"><ph name="BEGIN_BOLD" />לא ניתן להתנתק מהארכיון או מהדיסק הווירטואלי<ph name="END_BOLD" /> @@ -693,6 +695,7 @@ נמצאו <ph name="FILE_COUNT" /></translation> <translation id="6935521024859866267">פרפר הפוך</translation> <translation id="6943836128787782965">פעולת get של HTTP נכשלה</translation> +<translation id="6945604978460872381">המסמכים האחרונים יופיעו כאן</translation> <translation id="6949408524333579394">תעתיק סרבית</translation> <translation id="6954309393500027528">האפשרות להדביק את הקובץ הזה חסומה על ידי האדמין</translation> <translation id="6960565108681981554">הרשת לא פעילה. עליך לפנות לספק חבילת הסלולר שלך.</translation> @@ -740,6 +743,7 @@ <translation id="7295662345261934369">שיתוף עם אחרים</translation> <translation id="7297443947353982503">שם משתמש/סיסמה שגויים, או שאימות EAP נכשל</translation> <translation id="7309413087278791451">גרמנית (בלגיה)</translation> +<translation id="7313374447885864533">קובצי האודיו האחרונים יופיעו כאן</translation> <translation id="7339898014177206373">חלון חדש</translation> <translation id="7343393116438664539">וייטנאמית Telex</translation> <translation id="7357762654218998920">סוג הקובץ הזה אינו נתמך. <ph name="BEGIN_LINK_HELP" />לרשותך מידע נוסף<ph name="END_LINK_HELP" /> על פתיחת קבצים ב-ChromeOS.</translation> @@ -873,6 +877,7 @@ <translation id="8342318071240498787">קובץ או ספרייה עם אותו שם כבר קיימים.</translation> <translation id="8372369524088641025">מקש WEP גרוע</translation> <translation id="8372852072747894550">יוונית</translation> +<translation id="8384716930968677505">התמונות האחרונות יופיעו כאן</translation> <translation id="8386903983509584791">הסריקה הושלמה</translation> <translation id="8387733224523483503">הקובץ <ph name="FILE_NAME" /> חולץ.</translation> <translation id="8395901698320285466">מידות</translation>
diff --git a/ui/display/manager/configure_displays_task.cc b/ui/display/manager/configure_displays_task.cc index 98653ce..e7b15db 100644 --- a/ui/display/manager/configure_displays_task.cc +++ b/ui/display/manager/configure_displays_task.cc
@@ -272,7 +272,7 @@ is_first_attempt ? &ConfigureDisplaysTask::OnFirstAttemptConfigured : &ConfigureDisplaysTask::OnRetryConfigured; - uint32_t modeset_flags = display::kTestModeset | display::kCommitModeset; + uint32_t modeset_flags = display::kTestModeset; if (configuration_type_ == kConfigurationTypeSeamless) modeset_flags |= display::kSeamlessModeset; delegate_->Configure( @@ -309,15 +309,22 @@ } // This code execute only when the first modeset attempt fully succeeds. - // Update the displays' status and report success. - for (const DisplayConfigureRequest& request : requests_) { - request.display->set_current_mode(request.mode); - request.display->set_origin(request.origin); - final_requests_status_.emplace_back(std::make_pair(&request, true)); + // Submit the current |requests_| for modeset. + std::vector<display::DisplayConfigurationParams> config_requests; + for (const auto& request : requests_) { + final_requests_status_.emplace_back(&request, true); + + config_requests.emplace_back(request.display->display_id(), request.origin, + request.mode); } - UpdateFinalStatusUma(final_requests_status_); - std::move(callback_).Run(task_status_); + uint32_t modeset_flags = display::kCommitModeset; + if (configuration_type_ == kConfigurationTypeSeamless) + modeset_flags |= display::kSeamlessModeset; + delegate_->Configure(config_requests, + base::BindOnce(&ConfigureDisplaysTask::OnConfigured, + weak_ptr_factory_.GetWeakPtr()), + modeset_flags); } void ConfigureDisplaysTask::OnRetryConfigured(bool config_success) { @@ -339,19 +346,21 @@ pair.request->mode = nullptr; task_status_ = ERROR; } + } else { + // This configuration attempt passed test-modeset. Cache it so we can use it + // to modeset the displays once we are done testing, or if no other future + // attempts succeed. + last_successful_config_parameters_.clear(); + for (const auto& request : requests_) { + last_successful_config_parameters_.emplace_back( + request.display->display_id(), request.origin, request.mode); + } } // This code executes only when this display group request fully succeeds or // fails to modeset. Update the final status of this group. - for (const auto& pair : pending_display_group_requests_.front()) { - const DisplayConfigureRequest* request = pair.request; - final_requests_status_.emplace_back( - std::make_pair(request, config_success)); - if (config_success) { - request->display->set_current_mode(request->mode); - request->display->set_origin(request->origin); - } - } + for (const auto& pair : pending_display_group_requests_.front()) + final_requests_status_.emplace_back(pair.request, config_success); // Subsequent modeset attempts will be done on the next pending display group, // if one exists. @@ -364,7 +373,38 @@ return; } - // No more display groups to retry. + if (task_status_ == ERROR) { + LOG(WARNING) << "One or more of the connected display groups failed to " + "pass test-modeset entirely and will be disabled."; + + if (last_successful_config_parameters_.empty()) { + LOG(ERROR) << "Display configuration failed. No modeset was attempted."; + + UpdateFinalStatusUma(final_requests_status_); + std::move(callback_).Run(task_status_); + return; + } + } + + // Configure the displays using the last successful configuration parameter + // list. + uint32_t modeset_flags = display::kCommitModeset; + if (configuration_type_ == kConfigurationTypeSeamless) + modeset_flags |= display::kSeamlessModeset; + delegate_->Configure(last_successful_config_parameters_, + base::BindOnce(&ConfigureDisplaysTask::OnConfigured, + weak_ptr_factory_.GetWeakPtr()), + modeset_flags); +} + +void ConfigureDisplaysTask::OnConfigured(bool config_success) { + if (config_success) { + for (const DisplayConfigureRequest& request : requests_) { + request.display->set_current_mode(request.mode); + request.display->set_origin(request.origin); + } + } + UpdateFinalStatusUma(final_requests_status_); std::move(callback_).Run(task_status_); }
diff --git a/ui/display/manager/configure_displays_task.h b/ui/display/manager/configure_displays_task.h index 77dd865..08abd45 100644 --- a/ui/display/manager/configure_displays_task.h +++ b/ui/display/manager/configure_displays_task.h
@@ -14,6 +14,7 @@ #include "base/containers/queue.h" #include "base/memory/weak_ptr.h" #include "ui/display/manager/display_manager_export.h" +#include "ui/display/types/display_configuration_params.h" #include "ui/display/types/display_constants.h" #include "ui/display/types/native_display_observer.h" #include "ui/gfx/geometry/point.h" @@ -104,7 +105,7 @@ // Upon failure, partitions the original request from Ash into smaller // requests where the displays are grouped by the physical connector they // connect to and initiates the retry sequence. - void OnFirstAttemptConfigured(bool config_status); + void OnFirstAttemptConfigured(bool config_success); // Deals with the aftermath of a configuration retry, which attempts to // configure a subset of the displays grouped together by the physical @@ -115,7 +116,11 @@ // If any of the display groups entirely fail to modeset (i.e. exhaust all // available modes during retry), the configuration will fail as a whole, but // will continue to try to modeset the remaining display groups. - void OnRetryConfigured(bool config_status); + void OnRetryConfigured(bool config_success); + + // Finalizes the configuration after a modeset attempt was made (as opposed to + // test-modeset). + void OnConfigured(bool config_success); // Partition |requests_| by their base connector id (i.e. the physical // connector the displays are connected to) and populate the result in @@ -143,6 +148,11 @@ // request fails to modeset and a the fallback logic is triggered. PartitionedRequestsQueue pending_display_group_requests_; + // The last configuration parameter request list that passed modeset test + // during retry, which will be used for modeset once we are done testing. + std::vector<display::DisplayConfigurationParams> + last_successful_config_parameters_; + // The final requests and their configuration status for UMA. std::vector<RequestAndStatusList> final_requests_status_;
diff --git a/ui/display/manager/configure_displays_task_unittest.cc b/ui/display/manager/configure_displays_task_unittest.cc index fe9cbb7c..aea6e2b9 100644 --- a/ui/display/manager/configure_displays_task_unittest.cc +++ b/ui/display/manager/configure_displays_task_unittest.cc
@@ -116,8 +116,15 @@ EXPECT_TRUE(callback_called_); EXPECT_EQ(ConfigureDisplaysTask::SUCCESS, status_); - EXPECT_EQ(GetCrtcAction({displays_[0]->display_id(), gfx::Point(), - displays_[0]->native_mode()}), + EXPECT_EQ(JoinActions(kTestModesetStr, + GetCrtcAction({displays_[0]->display_id(), gfx::Point(), + displays_[0]->native_mode()}) + .c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcAction({displays_[0]->display_id(), gfx::Point(), + displays_[0]->native_mode()}) + .c_str(), + kModesetOutcomeSuccess, nullptr), log_.GetActionsAndClear()); } @@ -137,13 +144,21 @@ EXPECT_TRUE(callback_called_); EXPECT_EQ(ConfigureDisplaysTask::SUCCESS, status_); - EXPECT_EQ(JoinActions(GetCrtcAction({displays_[0]->display_id(), gfx::Point(), + EXPECT_EQ(JoinActions(kTestModesetStr, + GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), GetCrtcAction({displays_[1]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), - nullptr), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcAction({displays_[0]->display_id(), gfx::Point(), + displays_[0]->native_mode()}) + .c_str(), + GetCrtcAction({displays_[1]->display_id(), gfx::Point(), + &big_mode_60hz_}) + .c_str(), + kModesetOutcomeSuccess, nullptr), log_.GetActionsAndClear()); } @@ -162,8 +177,15 @@ EXPECT_TRUE(callback_called_); EXPECT_EQ(ConfigureDisplaysTask::SUCCESS, status_); - EXPECT_EQ(GetCrtcAction({displays_[1]->display_id(), gfx::Point(), - displays_[1]->native_mode()}), + EXPECT_EQ(JoinActions(kTestModesetStr, + GetCrtcAction({displays_[1]->display_id(), gfx::Point(), + displays_[1]->native_mode()}) + .c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcAction({displays_[1]->display_id(), gfx::Point(), + displays_[1]->native_mode()}) + .c_str(), + kModesetOutcomeSuccess, nullptr), log_.GetActionsAndClear()); } @@ -201,13 +223,21 @@ EXPECT_TRUE(callback_called_); EXPECT_EQ(ConfigureDisplaysTask::SUCCESS, status_); - EXPECT_EQ(JoinActions(GetCrtcAction({displays_[0]->display_id(), gfx::Point(), + EXPECT_EQ(JoinActions(kTestModesetStr, + GetCrtcAction({displays_[0]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), GetCrtcAction({displays_[1]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), - nullptr), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcAction({displays_[0]->display_id(), gfx::Point(), + &big_mode_60hz_}) + .c_str(), + GetCrtcAction({displays_[1]->display_id(), gfx::Point(), + &big_mode_60hz_}) + .c_str(), + kModesetOutcomeSuccess, nullptr), log_.GetActionsAndClear()); } @@ -249,7 +279,8 @@ EXPECT_TRUE(callback_called_); EXPECT_EQ(ConfigureDisplaysTask::SUCCESS, status_); - EXPECT_EQ(JoinActions(GetCrtcAction({displays_[0]->display_id(), gfx::Point(), + EXPECT_EQ(JoinActions(kTestModesetStr, + GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), GetCrtcAction({displays_[1]->display_id(), gfx::Point(), @@ -261,7 +292,20 @@ GetCrtcAction({displays_[3]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), - nullptr), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcAction({displays_[0]->display_id(), gfx::Point(), + displays_[0]->native_mode()}) + .c_str(), + GetCrtcAction({displays_[1]->display_id(), gfx::Point(), + &big_mode_60hz_}) + .c_str(), + GetCrtcAction({displays_[2]->display_id(), gfx::Point(), + &big_mode_60hz_}) + .c_str(), + GetCrtcAction({displays_[3]->display_id(), gfx::Point(), + &big_mode_60hz_}) + .c_str(), + kModesetOutcomeSuccess, nullptr), log_.GetActionsAndClear()); } @@ -283,13 +327,16 @@ EXPECT_TRUE(callback_called_); EXPECT_EQ(ConfigureDisplaysTask::ERROR, status_); - EXPECT_EQ(JoinActions( - // Initial modeset fails. Initiate retry logic. - GetDisableCrtcAction(displays_[0]).c_str(), - // There is no way to downgrade a disable request. Configuration - // fails. - GetDisableCrtcAction(displays_[0]).c_str(), nullptr), - log_.GetActionsAndClear()); + EXPECT_EQ( + JoinActions(kTestModesetStr, + // Initial test-modeset fails. Initiate retry logic. + GetDisableCrtcAction(displays_[0]).c_str(), + kModesetOutcomeFailure, + // There is no way to downgrade a disable request. + // Configuration fails. + kTestModesetStr, GetDisableCrtcAction(displays_[0]).c_str(), + kModesetOutcomeFailure, nullptr), + log_.GetActionsAndClear()); } // Tests that the internal display does not attempt to fallback to alternative @@ -309,17 +356,20 @@ EXPECT_TRUE(callback_called_); EXPECT_EQ(ConfigureDisplaysTask::ERROR, status_); EXPECT_EQ(JoinActions( - // Initial modeset fails. Initiate retry logic. + kTestModesetStr, + // Initial test-modeset fails. Initiate retry logic. GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), + kModesetOutcomeFailure, // Retry logic fails to modeset internal display. Since internal // displays are restricted to their preferred mode, there are no // other modes to try. The configuration fails completely. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), - nullptr), + kModesetOutcomeFailure, nullptr), log_.GetActionsAndClear()); } @@ -343,24 +393,30 @@ EXPECT_EQ(ConfigureDisplaysTask::ERROR, status_); EXPECT_EQ( JoinActions( + kTestModesetStr, // Initial modeset fails. Initiate retry logic. GetCrtcAction( {displays_[1]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, // External display will fail, downgrade twice, and fail completely. + kTestModesetStr, GetCrtcAction( {displays_[1]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, kTestModesetStr, GetCrtcAction( {displays_[1]->display_id(), gfx::Point(), &big_mode_29_97hz_}) .c_str(), + kModesetOutcomeFailure, kTestModesetStr, GetCrtcAction( {displays_[1]->display_id(), gfx::Point(), &small_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, kTestModesetStr, GetCrtcAction( {displays_[1]->display_id(), gfx::Point(), &small_mode_30hz_}) .c_str(), - nullptr), + kModesetOutcomeFailure, nullptr), log_.GetActionsAndClear()); } @@ -402,6 +458,7 @@ EXPECT_EQ(ConfigureDisplaysTask::ERROR, status_); EXPECT_EQ( JoinActions( + kTestModesetStr, // All displays will fail to modeset together. Initiate retry logic. GetCrtcAction( {displays_[0]->display_id(), gfx::Point(), &big_mode_60hz_}) @@ -409,29 +466,41 @@ GetCrtcAction( {displays_[1]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), - // We first modeset the |displays_[0] with all other displays + kModesetOutcomeFailure, + // We first test-modeset |displays_[0] with all other displays // disabled. It will fail and downgrade once before passing. + kTestModesetStr, GetCrtcAction( {displays_[0]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), - GetDisableCrtcAction(displays_[1]).c_str(), + GetDisableCrtcAction(displays_[1]).c_str(), kModesetOutcomeFailure, + kTestModesetStr, GetCrtcAction( {displays_[0]->display_id(), gfx::Point(), &small_mode_60hz_}) .c_str(), - GetDisableCrtcAction(displays_[1]).c_str(), + GetDisableCrtcAction(displays_[1]).c_str(), kModesetOutcomeSuccess, // |displays_[1]| will fail, downgrade once, and fail completely. + kTestModesetStr, GetCrtcAction( {displays_[0]->display_id(), gfx::Point(), &small_mode_60hz_}) .c_str(), GetCrtcAction( {displays_[1]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, kTestModesetStr, GetCrtcAction( {displays_[0]->display_id(), gfx::Point(), &small_mode_60hz_}) .c_str(), GetCrtcAction( {displays_[1]->display_id(), gfx::Point(), &medium_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, + // We commit the last passing test-modeset configuration. + kCommitModesetStr, + GetCrtcAction( + {displays_[0]->display_id(), gfx::Point(), &small_mode_60hz_}) + .c_str(), + GetDisableCrtcAction(displays_[1]).c_str(), kModesetOutcomeSuccess, nullptr), log_.GetActionsAndClear()); } @@ -477,42 +546,51 @@ EXPECT_EQ( JoinActions( // All displays will fail to modeset together. Initiate retry logic. + kTestModesetStr, GetCrtcAction( {displays_[0]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), GetCrtcAction( {displays_[1]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, // MST displays will be tested (and fail) together. + kTestModesetStr, GetCrtcAction( {displays_[0]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), GetCrtcAction( {displays_[1]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, // |displays_[0]| will downgrade first. Configuration will fail. + kTestModesetStr, GetCrtcAction( {displays_[0]->display_id(), gfx::Point(), &small_mode_60hz_}) .c_str(), GetCrtcAction( {displays_[1]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, // |displays_[1] will downgrade next. Configuration still fails. + kTestModesetStr, GetCrtcAction( {displays_[0]->display_id(), gfx::Point(), &small_mode_60hz_}) .c_str(), GetCrtcAction( {displays_[1]->display_id(), gfx::Point(), &medium_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, // Since |displays_[1]| is still the largest and has one more mode, it // downgrades again. Configuration fails completely. + kTestModesetStr, GetCrtcAction( {displays_[0]->display_id(), gfx::Point(), &small_mode_60hz_}) .c_str(), GetCrtcAction( {displays_[1]->display_id(), gfx::Point(), &small_mode_60hz_}) .c_str(), - nullptr), + kModesetOutcomeFailure, nullptr), log_.GetActionsAndClear()); } @@ -540,39 +618,45 @@ EXPECT_EQ( JoinActions( // All displays will fail to modeset together. Initiate retry logic. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), GetCrtcAction( {displays_[1]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, // We first attempt to modeset the internal display with all other // displays disabled, which will fail. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), - GetDisableCrtcAction(displays_[1]).c_str(), + GetDisableCrtcAction(displays_[1]).c_str(), kModesetOutcomeFailure, // Since internal displays are restricted to their preferred mode, // there are no other modes to try. Disable the internal display so we // can attempt to modeset displays that are connected to other // connectors. Next, the external display will attempt to modeset. - GetDisableCrtcAction(displays_[0]).c_str(), + kTestModesetStr, GetDisableCrtcAction(displays_[0]).c_str(), GetCrtcAction( {displays_[1]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, kTestModesetStr, GetDisableCrtcAction(displays_[0]).c_str(), GetCrtcAction( {displays_[1]->display_id(), gfx::Point(), &big_mode_29_97hz_}) .c_str(), + kModesetOutcomeFailure, kTestModesetStr, GetDisableCrtcAction(displays_[0]).c_str(), GetCrtcAction( {displays_[1]->display_id(), gfx::Point(), &small_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, kTestModesetStr, GetDisableCrtcAction(displays_[0]).c_str(), GetCrtcAction( {displays_[1]->display_id(), gfx::Point(), &small_mode_30hz_}) .c_str(), - nullptr), + kModesetOutcomeFailure, nullptr), log_.GetActionsAndClear()); } @@ -616,31 +700,43 @@ EXPECT_EQ( JoinActions( // All displays will fail to modeset together. Initiate retry logic. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), GetCrtcAction( {displays_[1]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), - // We first attempt to modeset the internal display with all other - // displays disabled, which will succeed. + kModesetOutcomeFailure, + // We first test-modeset the internal display with all other displays + // disabled, which will succeed. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), - GetDisableCrtcAction(displays_[1]).c_str(), + GetDisableCrtcAction(displays_[1]).c_str(), kModesetOutcomeSuccess, // External display fails, downgrades once, and fails completely. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), GetCrtcAction( {displays_[1]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), GetCrtcAction( {displays_[1]->display_id(), gfx::Point(), &medium_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, + // We commit the last passing test-modeset configuration. + kCommitModesetStr, + GetCrtcAction({displays_[0]->display_id(), gfx::Point(), + displays_[0]->native_mode()}) + .c_str(), + GetDisableCrtcAction(displays_[1]).c_str(), kModesetOutcomeSuccess, nullptr), log_.GetActionsAndClear()); } @@ -678,6 +774,7 @@ EXPECT_EQ( JoinActions( // All displays will fail to modeset together. Initiate retry logic. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -687,25 +784,28 @@ GetCrtcAction( {displays_[2]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, // We first attempt to modeset the internal display with all other // displays disabled, which will fail. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), GetDisableCrtcAction(displays_[1]).c_str(), - GetDisableCrtcAction(displays_[2]).c_str(), + GetDisableCrtcAction(displays_[2]).c_str(), kModesetOutcomeFailure, // Since internal displays are restricted to their preferred mode, // there are no other modes to try. Disable the internal display so we // can attempt to modeset displays that are connected to other // connectors. Next, modeset the external displays which are connected // to the same port via MST. - GetDisableCrtcAction(displays_[0]).c_str(), + kTestModesetStr, GetDisableCrtcAction(displays_[0]).c_str(), GetCrtcAction( {displays_[1]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), GetCrtcAction( {displays_[2]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, kTestModesetStr, // |displays_[1] & displays_[2] will cycle through all available // modes, but configuration will eventually completely fail. GetDisableCrtcAction(displays_[0]).c_str(), @@ -715,6 +815,7 @@ GetCrtcAction( {displays_[2]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, kTestModesetStr, GetDisableCrtcAction(displays_[0]).c_str(), GetCrtcAction( {displays_[1]->display_id(), gfx::Point(), &big_mode_29_97hz_}) @@ -722,6 +823,7 @@ GetCrtcAction( {displays_[2]->display_id(), gfx::Point(), &small_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, kTestModesetStr, GetDisableCrtcAction(displays_[0]).c_str(), GetCrtcAction( {displays_[1]->display_id(), gfx::Point(), &small_mode_60hz_}) @@ -729,6 +831,7 @@ GetCrtcAction( {displays_[2]->display_id(), gfx::Point(), &small_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, kTestModesetStr, GetDisableCrtcAction(displays_[0]).c_str(), GetCrtcAction( {displays_[1]->display_id(), gfx::Point(), &small_mode_30hz_}) @@ -736,7 +839,7 @@ GetCrtcAction( {displays_[2]->display_id(), gfx::Point(), &small_mode_60hz_}) .c_str(), - nullptr), + kModesetOutcomeFailure, nullptr), log_.GetActionsAndClear()); } @@ -788,6 +891,7 @@ EXPECT_EQ( JoinActions( // All displays will fail to modeset together. Initiate retry logic. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -797,15 +901,18 @@ GetCrtcAction( {displays_[2]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), - // We first attempt to modeset the internal display with all other - // displays disabled, which will succeed. + kModesetOutcomeFailure, + // We first test-modeset the internal display with all other displays + // disabled, which will succeed. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), GetDisableCrtcAction(displays_[1]).c_str(), - GetDisableCrtcAction(displays_[2]).c_str(), - // Next, MST displays will attempt to modeset, downgrade, and - // eventually fail completely. + GetDisableCrtcAction(displays_[2]).c_str(), kModesetOutcomeSuccess, + // Next, MST displays will test-modeset, downgrade, and eventually + // fail completely. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -815,6 +922,7 @@ GetCrtcAction( {displays_[2]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -824,6 +932,7 @@ GetCrtcAction( {displays_[2]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -833,6 +942,14 @@ GetCrtcAction( {displays_[2]->display_id(), gfx::Point(), &medium_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, + // We commit the last successful test-modeset configuration. + kCommitModesetStr, + GetCrtcAction({displays_[0]->display_id(), gfx::Point(), + displays_[0]->native_mode()}) + .c_str(), + GetDisableCrtcAction(displays_[1]).c_str(), + GetDisableCrtcAction(displays_[2]).c_str(), kModesetOutcomeSuccess, nullptr), log_.GetActionsAndClear()); } @@ -884,6 +1001,7 @@ EXPECT_EQ( JoinActions( // All displays will fail to modeset together. Initiate retry logic. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -896,98 +1014,105 @@ GetCrtcAction( {displays_[3]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, // We first attempt to modeset the internal display with all other // displays disabled, which will fail. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), GetDisableCrtcAction(displays_[1]).c_str(), GetDisableCrtcAction(displays_[2]).c_str(), - GetDisableCrtcAction(displays_[3]).c_str(), + GetDisableCrtcAction(displays_[3]).c_str(), kModesetOutcomeFailure, // Since internal displays are restricted to their preferred mode, // there are no other modes to try. Disable the internal display so we // can attempt to modeset displays that are connected to other // connectors. Next, the two displays connected via MST will attempt // to modeset and fail. - GetDisableCrtcAction(displays_[0]).c_str(), + kTestModesetStr, GetDisableCrtcAction(displays_[0]).c_str(), GetCrtcAction( {displays_[1]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), GetCrtcAction( {displays_[2]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), - GetDisableCrtcAction(displays_[3]).c_str(), - GetDisableCrtcAction(displays_[0]).c_str(), + GetDisableCrtcAction(displays_[3]).c_str(), kModesetOutcomeFailure, + kTestModesetStr, GetDisableCrtcAction(displays_[0]).c_str(), GetCrtcAction( {displays_[1]->display_id(), gfx::Point(), &big_mode_29_97hz_}) .c_str(), GetCrtcAction( {displays_[2]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), - GetDisableCrtcAction(displays_[3]).c_str(), - GetDisableCrtcAction(displays_[0]).c_str(), + GetDisableCrtcAction(displays_[3]).c_str(), kModesetOutcomeFailure, + kTestModesetStr, GetDisableCrtcAction(displays_[0]).c_str(), GetCrtcAction( {displays_[1]->display_id(), gfx::Point(), &big_mode_29_97hz_}) .c_str(), GetCrtcAction( {displays_[2]->display_id(), gfx::Point(), &small_mode_60hz_}) .c_str(), - GetDisableCrtcAction(displays_[3]).c_str(), - GetDisableCrtcAction(displays_[0]).c_str(), + GetDisableCrtcAction(displays_[3]).c_str(), kModesetOutcomeFailure, + kTestModesetStr, GetDisableCrtcAction(displays_[0]).c_str(), GetCrtcAction( {displays_[1]->display_id(), gfx::Point(), &small_mode_60hz_}) .c_str(), GetCrtcAction( {displays_[2]->display_id(), gfx::Point(), &small_mode_60hz_}) .c_str(), - GetDisableCrtcAction(displays_[3]).c_str(), - GetDisableCrtcAction(displays_[0]).c_str(), + GetDisableCrtcAction(displays_[3]).c_str(), kModesetOutcomeFailure, + kTestModesetStr, GetDisableCrtcAction(displays_[0]).c_str(), GetCrtcAction( {displays_[1]->display_id(), gfx::Point(), &small_mode_30hz_}) .c_str(), GetCrtcAction( {displays_[2]->display_id(), gfx::Point(), &small_mode_60hz_}) .c_str(), - GetDisableCrtcAction(displays_[3]).c_str(), + GetDisableCrtcAction(displays_[3]).c_str(), kModesetOutcomeFailure, // Next, the HDMI display will attempt to modeset and cycle through // its six available modes. - GetDisableCrtcAction(displays_[0]).c_str(), + kTestModesetStr, GetDisableCrtcAction(displays_[0]).c_str(), GetDisableCrtcAction(displays_[1]).c_str(), GetDisableCrtcAction(displays_[2]).c_str(), GetCrtcAction( {displays_[3]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, kTestModesetStr, GetDisableCrtcAction(displays_[0]).c_str(), GetDisableCrtcAction(displays_[1]).c_str(), GetDisableCrtcAction(displays_[2]).c_str(), GetCrtcAction( {displays_[3]->display_id(), gfx::Point(), &big_mode_29_97hz_}) .c_str(), + kModesetOutcomeFailure, kTestModesetStr, GetDisableCrtcAction(displays_[0]).c_str(), GetDisableCrtcAction(displays_[1]).c_str(), GetDisableCrtcAction(displays_[2]).c_str(), GetCrtcAction( {displays_[3]->display_id(), gfx::Point(), &medium_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, kTestModesetStr, GetDisableCrtcAction(displays_[0]).c_str(), GetDisableCrtcAction(displays_[1]).c_str(), GetDisableCrtcAction(displays_[2]).c_str(), GetCrtcAction( {displays_[3]->display_id(), gfx::Point(), &medium_mode_29_98hz_}) .c_str(), + kModesetOutcomeFailure, kTestModesetStr, GetDisableCrtcAction(displays_[0]).c_str(), GetDisableCrtcAction(displays_[1]).c_str(), GetDisableCrtcAction(displays_[2]).c_str(), GetCrtcAction( {displays_[3]->display_id(), gfx::Point(), &small_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, kTestModesetStr, GetDisableCrtcAction(displays_[0]).c_str(), GetDisableCrtcAction(displays_[1]).c_str(), GetDisableCrtcAction(displays_[2]).c_str(), GetCrtcAction( {displays_[3]->display_id(), gfx::Point(), &small_mode_30hz_}) .c_str(), - nullptr), + kModesetOutcomeFailure, nullptr), log_.GetActionsAndClear()); } @@ -1037,6 +1162,7 @@ EXPECT_EQ( JoinActions( // All displays will fail to modeset together. Initiate retry logic. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -1049,16 +1175,19 @@ GetCrtcAction( {displays_[3]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), - // We first attempt to modeset the internal display with all other - // displays disabled, which will pass. + kModesetOutcomeFailure, + // We first test-modeset the internal display with all other displays + // disabled, which will pass. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), GetDisableCrtcAction(displays_[1]).c_str(), GetDisableCrtcAction(displays_[2]).c_str(), - GetDisableCrtcAction(displays_[3]).c_str(), + GetDisableCrtcAction(displays_[3]).c_str(), kModesetOutcomeSuccess, // MST displays will be tested next with the HDMI display disabled. // They will fail. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -1068,7 +1197,8 @@ GetCrtcAction( {displays_[2]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), - GetDisableCrtcAction(displays_[3]).c_str(), + GetDisableCrtcAction(displays_[3]).c_str(), kModesetOutcomeFailure, + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -1078,7 +1208,8 @@ GetCrtcAction( {displays_[2]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), - GetDisableCrtcAction(displays_[3]).c_str(), + GetDisableCrtcAction(displays_[3]).c_str(), kModesetOutcomeFailure, + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -1088,7 +1219,8 @@ GetCrtcAction( {displays_[2]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), - GetDisableCrtcAction(displays_[3]).c_str(), + GetDisableCrtcAction(displays_[3]).c_str(), kModesetOutcomeFailure, + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -1098,9 +1230,10 @@ GetCrtcAction( {displays_[2]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), - GetDisableCrtcAction(displays_[3]).c_str(), + GetDisableCrtcAction(displays_[3]).c_str(), kModesetOutcomeFailure, // HDMI display attempts to modeset, fails, downgrades twice, and // passes modeset. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -1109,6 +1242,7 @@ GetCrtcAction( {displays_[3]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -1117,6 +1251,7 @@ GetCrtcAction( {displays_[3]->display_id(), gfx::Point(), &big_mode_29_97hz_}) .c_str(), + kModesetOutcomeFailure, kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -1125,7 +1260,19 @@ GetCrtcAction( {displays_[3]->display_id(), gfx::Point(), &medium_mode_60hz_}) .c_str(), - nullptr), + kModesetOutcomeSuccess, + // We commit the last successful test-modeset configuration, which + // enables the internal display together with the HDMI display. + kCommitModesetStr, + GetCrtcAction({displays_[0]->display_id(), gfx::Point(), + displays_[0]->native_mode()}) + .c_str(), + GetDisableCrtcAction(displays_[1]).c_str(), + GetDisableCrtcAction(displays_[2]).c_str(), + GetCrtcAction( + {displays_[3]->display_id(), gfx::Point(), &medium_mode_60hz_}) + .c_str(), + kModesetOutcomeSuccess, nullptr), log_.GetActionsAndClear()); } @@ -1177,6 +1324,7 @@ EXPECT_EQ( JoinActions( // All displays will fail to modeset together. Initiate retry logic. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -1189,15 +1337,18 @@ GetCrtcAction( {displays_[3]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), - // We first attempt to modeset the internal display with all other - // displays disabled, which will succeed. + kModesetOutcomeFailure, + // We first test-modeset the internal display with all other displays + // disabled, which will succeed. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), GetDisableCrtcAction(displays_[1]).c_str(), GetDisableCrtcAction(displays_[2]).c_str(), - GetDisableCrtcAction(displays_[3]).c_str(), + GetDisableCrtcAction(displays_[3]).c_str(), kModesetOutcomeSuccess, // MST displays will be tested and pass together. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -1207,9 +1358,10 @@ GetCrtcAction( {displays_[2]->display_id(), gfx::Point(), &medium_mode_60hz_}) .c_str(), - GetDisableCrtcAction(displays_[3]).c_str(), + GetDisableCrtcAction(displays_[3]).c_str(), kModesetOutcomeSuccess, // HDMI display will fail modeset, but since there are no other modes // available for fallback configuration fails completely. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -1222,6 +1374,20 @@ GetCrtcAction( {displays_[3]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, + // We commit the last successful test-modeset configuration, which + // enables the internal display together with the two MST displays. + kCommitModesetStr, + GetCrtcAction({displays_[0]->display_id(), gfx::Point(), + displays_[0]->native_mode()}) + .c_str(), + GetCrtcAction( + {displays_[1]->display_id(), gfx::Point(), &medium_mode_60hz_}) + .c_str(), + GetCrtcAction( + {displays_[2]->display_id(), gfx::Point(), &medium_mode_60hz_}) + .c_str(), + GetDisableCrtcAction(displays_[3]).c_str(), kModesetOutcomeSuccess, nullptr), log_.GetActionsAndClear()); } @@ -1267,6 +1433,7 @@ EXPECT_EQ( JoinActions( // All displays will fail to modeset together. Initiate retry logic. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -1276,16 +1443,19 @@ GetCrtcAction( {displays_[2]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), - // We first attempt to modeset the internal display with all other - // displays disabled, which will succeed. + kModesetOutcomeFailure, + // We first test-modeset the internal display with all other displays + // disabled, which will succeed. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), GetDisableCrtcAction(displays_[1]).c_str(), - GetDisableCrtcAction(displays_[2]).c_str(), + GetDisableCrtcAction(displays_[2]).c_str(), kModesetOutcomeSuccess, // displays_[1] and displays_[2] will be tested and fail together // under connector kInvalidConnectorId. Since neither expose any // alternative modes to try, configuration completely fails. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -1295,6 +1465,15 @@ GetCrtcAction( {displays_[2]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, + // We commit the last successful test-modeset configuration, which + // only enables the internal display. + kCommitModesetStr, + GetCrtcAction({displays_[0]->display_id(), gfx::Point(), + displays_[0]->native_mode()}) + .c_str(), + GetDisableCrtcAction(displays_[1]).c_str(), + GetDisableCrtcAction(displays_[2]).c_str(), kModesetOutcomeSuccess, nullptr), log_.GetActionsAndClear()); } @@ -1360,6 +1539,7 @@ EXPECT_EQ( JoinActions( // All displays will fail to modeset together. Initiate retry logic. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -1375,17 +1555,20 @@ GetCrtcAction( {displays_[4]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), - // We first attempt to modeset the internal display with all other - // displays disabled, which will succeed. + kModesetOutcomeFailure, + // We first test-modeset the internal display with all other displays + // disabled, which will succeed. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), GetDisableCrtcAction(displays_[1]).c_str(), GetDisableCrtcAction(displays_[2]).c_str(), GetDisableCrtcAction(displays_[3]).c_str(), - GetDisableCrtcAction(displays_[4]).c_str(), + GetDisableCrtcAction(displays_[4]).c_str(), kModesetOutcomeSuccess, // displays_[1-4] will be tested and downgraded as a group, since they // share kInvalidConnectorId due to bad MST hubs. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -1401,8 +1584,10 @@ GetCrtcAction( {displays_[4]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, // displays_[2] will downgrade first, since it is the next largest // display with available alternative modes. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -1418,7 +1603,9 @@ GetCrtcAction( {displays_[4]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, // displays_[3] will downgrade next, and fail. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -1434,8 +1621,10 @@ GetCrtcAction( {displays_[4]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, // Same downgrade process as above will repeat for displays_[2] and // displays_[3] before failing completely. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -1451,6 +1640,7 @@ GetCrtcAction( {displays_[4]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -1466,6 +1656,17 @@ GetCrtcAction( {displays_[4]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, + // We commit the last successful test-modeset configuration, which + // only enables the internal display. + kCommitModesetStr, + GetCrtcAction({displays_[0]->display_id(), gfx::Point(), + displays_[0]->native_mode()}) + .c_str(), + GetDisableCrtcAction(displays_[1]).c_str(), + GetDisableCrtcAction(displays_[2]).c_str(), + GetDisableCrtcAction(displays_[3]).c_str(), + GetDisableCrtcAction(displays_[4]).c_str(), kModesetOutcomeSuccess, nullptr), log_.GetActionsAndClear()); } @@ -1495,38 +1696,53 @@ EXPECT_EQ( JoinActions( // All displays will fail to modeset together. Initiate retry logic. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), GetCrtcAction( {displays_[1]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, // We first attempt to modeset the internal display with all other // displays disabled, which will succeed. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), - GetDisableCrtcAction(displays_[1]).c_str(), + GetDisableCrtcAction(displays_[1]).c_str(), kModesetOutcomeSuccess, // Last display will fail, downgrade twice, and pass. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), GetCrtcAction( {displays_[1]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), GetCrtcAction( {displays_[1]->display_id(), gfx::Point(), &big_mode_29_97hz_}) .c_str(), + kModesetOutcomeFailure, kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), GetCrtcAction( {displays_[1]->display_id(), gfx::Point(), &small_mode_60hz_}) .c_str(), - nullptr), + kModesetOutcomeSuccess, + // Commit the last successful test-modeset configuration. + kCommitModesetStr, + GetCrtcAction({displays_[0]->display_id(), gfx::Point(), + displays_[0]->native_mode()}) + .c_str(), + GetCrtcAction( + {displays_[1]->display_id(), gfx::Point(), &small_mode_60hz_}) + .c_str(), + kModesetOutcomeSuccess, nullptr), log_.GetActionsAndClear()); } @@ -1559,6 +1775,7 @@ EXPECT_EQ( JoinActions( // All displays will fail to modeset together. Initiate retry logic. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -1568,36 +1785,42 @@ GetCrtcAction( {displays_[2]->display_id(), gfx::Point(), &small_mode_60hz_}) .c_str(), - // We first attempt to modeset the internal display with all other - // displays disabled, which will succeed. + kModesetOutcomeFailure, + // We first test-modeset the internal display with all other displays + // disabled, which will succeed. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), GetDisableCrtcAction(displays_[1]).c_str(), - GetDisableCrtcAction(displays_[2]).c_str(), + GetDisableCrtcAction(displays_[2]).c_str(), kModesetOutcomeSuccess, // Second display will downgrade twice and pass. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), GetCrtcAction( {displays_[1]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), - GetDisableCrtcAction(displays_[2]).c_str(), + GetDisableCrtcAction(displays_[2]).c_str(), kModesetOutcomeFailure, + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), GetCrtcAction( {displays_[1]->display_id(), gfx::Point(), &big_mode_29_97hz_}) .c_str(), - GetDisableCrtcAction(displays_[2]).c_str(), + GetDisableCrtcAction(displays_[2]).c_str(), kModesetOutcomeFailure, + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), GetCrtcAction( {displays_[1]->display_id(), gfx::Point(), &small_mode_60hz_}) .c_str(), - GetDisableCrtcAction(displays_[2]).c_str(), + GetDisableCrtcAction(displays_[2]).c_str(), kModesetOutcomeSuccess, // Third external display will succeed to modeset on first attempt. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -1607,7 +1830,19 @@ GetCrtcAction( {displays_[2]->display_id(), gfx::Point(), &small_mode_60hz_}) .c_str(), - nullptr), + kModesetOutcomeSuccess, + // Commit the last successful test-modeset configuration. + kCommitModesetStr, + GetCrtcAction({displays_[0]->display_id(), gfx::Point(), + displays_[0]->native_mode()}) + .c_str(), + GetCrtcAction( + {displays_[1]->display_id(), gfx::Point(), &small_mode_60hz_}) + .c_str(), + GetCrtcAction( + {displays_[2]->display_id(), gfx::Point(), &small_mode_60hz_}) + .c_str(), + kModesetOutcomeSuccess, nullptr), log_.GetActionsAndClear()); } @@ -1643,6 +1878,7 @@ EXPECT_EQ( JoinActions( // All displays will fail to modeset together. Initiate retry logic. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -1652,14 +1888,17 @@ GetCrtcAction( {displays_[2]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), - // We first attempt to modeset the internal display with all other + kModesetOutcomeFailure, + // We first test-modeset the internal display with all other // displays disabled, which will succeed. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), GetDisableCrtcAction(displays_[1]).c_str(), - GetDisableCrtcAction(displays_[2]).c_str(), + GetDisableCrtcAction(displays_[2]).c_str(), kModesetOutcomeSuccess, // MST displays will be tested (and fail) together. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -1669,7 +1908,9 @@ GetCrtcAction( {displays_[2]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, // |displays_[1]| will downgrade first. Configuration will fail. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -1679,7 +1920,9 @@ GetCrtcAction( {displays_[2]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, // |displays_[2] will downgrade next. Configuration will fail. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -1689,7 +1932,9 @@ GetCrtcAction( {displays_[2]->display_id(), gfx::Point(), &small_mode_60hz_}) .c_str(), - // |displays_[1]| will downgrade again. Configuration succeeds. + kModesetOutcomeFailure, + // |displays_[1]| will downgrade again and pass test-modeset. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -1699,7 +1944,19 @@ GetCrtcAction( {displays_[2]->display_id(), gfx::Point(), &small_mode_60hz_}) .c_str(), - nullptr), + kModesetOutcomeSuccess, + // Commit the last successful test-modeset configuration. + kCommitModesetStr, + GetCrtcAction({displays_[0]->display_id(), gfx::Point(), + displays_[0]->native_mode()}) + .c_str(), + GetCrtcAction( + {displays_[1]->display_id(), gfx::Point(), &small_mode_60hz_}) + .c_str(), + GetCrtcAction( + {displays_[2]->display_id(), gfx::Point(), &small_mode_60hz_}) + .c_str(), + kModesetOutcomeSuccess, nullptr), log_.GetActionsAndClear()); } @@ -1747,6 +2004,7 @@ EXPECT_EQ( JoinActions( // All displays will fail to modeset together. Initiate retry logic. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -1759,15 +2017,18 @@ GetCrtcAction( {displays_[3]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), - // We first attempt to modeset the internal display with all other - // displays disabled, which will succeed. + kModesetOutcomeFailure, + // We first test-modeset the internal display with all other displays + // disabled, which will succeed. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), GetDisableCrtcAction(displays_[1]).c_str(), GetDisableCrtcAction(displays_[2]).c_str(), - GetDisableCrtcAction(displays_[3]).c_str(), + GetDisableCrtcAction(displays_[3]).c_str(), kModesetOutcomeSuccess, // Both MST displays will be tested (and fail) together. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -1777,8 +2038,9 @@ GetCrtcAction( {displays_[2]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), - GetDisableCrtcAction(displays_[3]).c_str(), + GetDisableCrtcAction(displays_[3]).c_str(), kModesetOutcomeFailure, // |displays_[1]| will downgrade first. Configuration will fail. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -1788,8 +2050,9 @@ GetCrtcAction( {displays_[2]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), - GetDisableCrtcAction(displays_[3]).c_str(), + GetDisableCrtcAction(displays_[3]).c_str(), kModesetOutcomeFailure, // |displays_[2] will downgrade next. Configuration still fails. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -1799,8 +2062,9 @@ GetCrtcAction( {displays_[2]->display_id(), gfx::Point(), &small_mode_60hz_}) .c_str(), - GetDisableCrtcAction(displays_[3]).c_str(), - // |displays_[1]| will downgrade again. Configuration succeeds. + GetDisableCrtcAction(displays_[3]).c_str(), kModesetOutcomeFailure, + // |displays_[1]| will downgrade again and pass test-modeset. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -1810,9 +2074,9 @@ GetCrtcAction( {displays_[2]->display_id(), gfx::Point(), &small_mode_60hz_}) .c_str(), - GetDisableCrtcAction(displays_[3]).c_str(), - // HDMI display will fail modeset and downgrade once. Configuration - // will then succeed. + GetDisableCrtcAction(displays_[3]).c_str(), kModesetOutcomeSuccess, + // HDMI display will fail test-modeset, downgrade once and pass. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -1825,6 +2089,7 @@ GetCrtcAction( {displays_[3]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -1837,7 +2102,22 @@ GetCrtcAction( {displays_[3]->display_id(), gfx::Point(), &medium_mode_60hz_}) .c_str(), - nullptr), + kModesetOutcomeSuccess, + // Commit the last successful test-modeset configuration. + kCommitModesetStr, + GetCrtcAction({displays_[0]->display_id(), gfx::Point(), + displays_[0]->native_mode()}) + .c_str(), + GetCrtcAction( + {displays_[1]->display_id(), gfx::Point(), &small_mode_60hz_}) + .c_str(), + GetCrtcAction( + {displays_[2]->display_id(), gfx::Point(), &small_mode_60hz_}) + .c_str(), + GetCrtcAction( + {displays_[3]->display_id(), gfx::Point(), &medium_mode_60hz_}) + .c_str(), + kModesetOutcomeSuccess, nullptr), log_.GetActionsAndClear()); } @@ -1876,7 +2156,8 @@ EXPECT_TRUE(callback_called_); EXPECT_EQ(ConfigureDisplaysTask::SUCCESS, status_); EXPECT_EQ( - JoinActions(GetCrtcAction({displays_[0]->display_id(), gfx::Point(), + JoinActions(kTestModesetStr, + GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), GetCrtcAction({displays_[1]->display_id(), gfx::Point(), @@ -1885,7 +2166,17 @@ GetCrtcAction({displays_[2]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), - nullptr), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcAction({displays_[0]->display_id(), gfx::Point(), + displays_[0]->native_mode()}) + .c_str(), + GetCrtcAction({displays_[1]->display_id(), gfx::Point(), + &big_mode_60hz_}) + .c_str(), + GetCrtcAction({displays_[2]->display_id(), gfx::Point(), + &big_mode_60hz_}) + .c_str(), + kModesetOutcomeSuccess, nullptr), log_.GetActionsAndClear()); } @@ -1925,6 +2216,7 @@ EXPECT_EQ( JoinActions( // All displays will fail to modeset together. Initiate retry logic. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -1937,15 +2229,18 @@ GetCrtcAction( {displays_[3]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), - // We first attempt to modeset the internal display with all other + kModesetOutcomeFailure, + // We first test-modeset the internal display with all other // displays disabled, which will succeed. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), GetDisableCrtcAction(displays_[1]).c_str(), GetDisableCrtcAction(displays_[2]).c_str(), - GetDisableCrtcAction(displays_[3]).c_str(), - // All MST displays will fail modeset together. + GetDisableCrtcAction(displays_[3]).c_str(), kModesetOutcomeSuccess, + // All MST displays will fail test-modeset together. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -1958,9 +2253,11 @@ GetCrtcAction( {displays_[3]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, // displays_[1] will downgrade first, then displays_[2], followed by // displays_[3], and finally displays_[1] will downgrade one last - // time. Then the configuration will pass modeset. + // time. Then the configuration will pass test-modeset. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -1973,6 +2270,7 @@ GetCrtcAction( {displays_[3]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -1985,6 +2283,7 @@ GetCrtcAction( {displays_[3]->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -1997,6 +2296,7 @@ GetCrtcAction( {displays_[3]->display_id(), gfx::Point(), &small_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), displays_[0]->native_mode()}) .c_str(), @@ -2009,7 +2309,22 @@ GetCrtcAction( {displays_[3]->display_id(), gfx::Point(), &small_mode_60hz_}) .c_str(), - nullptr), + kModesetOutcomeSuccess, + // Commit the last successful test-modeset configuration. + kCommitModesetStr, + GetCrtcAction({displays_[0]->display_id(), gfx::Point(), + displays_[0]->native_mode()}) + .c_str(), + GetCrtcAction( + {displays_[1]->display_id(), gfx::Point(), &small_mode_60hz_}) + .c_str(), + GetCrtcAction( + {displays_[2]->display_id(), gfx::Point(), &small_mode_60hz_}) + .c_str(), + GetCrtcAction( + {displays_[3]->display_id(), gfx::Point(), &small_mode_60hz_}) + .c_str(), + kModesetOutcomeSuccess, nullptr), log_.GetActionsAndClear()); } } @@ -2036,41 +2351,57 @@ EXPECT_TRUE(callback_called_); EXPECT_EQ(ConfigureDisplaysTask::PARTIAL_SUCCESS, status_); - EXPECT_EQ(JoinActions( - // All displays will fail to modeset together. - GetCrtcAction({displays_[0]->display_id(), gfx::Point(), - displays_[0]->native_mode()}) - .c_str(), - GetCrtcAction( - {displays_[1]->display_id(), gfx::Point(), &big_mode_60hz_}) - .c_str(), - // We first attempt to modeset the internal display with all - // other displays disabled, which will succeed. - GetCrtcAction({displays_[0]->display_id(), gfx::Point(), - displays_[0]->native_mode()}) - .c_str(), - GetDisableCrtcAction(displays_[1]).c_str(), - // External display will fail twice, downgrade, and pass. - GetCrtcAction({displays_[0]->display_id(), gfx::Point(), - displays_[0]->native_mode()}) - .c_str(), - GetCrtcAction( - {displays_[1]->display_id(), gfx::Point(), &big_mode_60hz_}) - .c_str(), - GetCrtcAction({displays_[0]->display_id(), gfx::Point(), - displays_[0]->native_mode()}) - .c_str(), - GetCrtcAction({displays_[1]->display_id(), gfx::Point(), - &big_mode_29_97hz_}) - .c_str(), - GetCrtcAction({displays_[0]->display_id(), gfx::Point(), - displays_[0]->native_mode()}) - .c_str(), - GetCrtcAction({displays_[1]->display_id(), gfx::Point(), - &small_mode_60hz_}) - .c_str(), - nullptr), - log_.GetActionsAndClear()); + EXPECT_EQ( + JoinActions( + // All displays will fail to modeset together. + kTestModesetStr, + GetCrtcAction({displays_[0]->display_id(), gfx::Point(), + displays_[0]->native_mode()}) + .c_str(), + GetCrtcAction( + {displays_[1]->display_id(), gfx::Point(), &big_mode_60hz_}) + .c_str(), + kModesetOutcomeFailure, + // We first test-modeset the internal display with all other + // displays disabled, which will succeed. + kTestModesetStr, + GetCrtcAction({displays_[0]->display_id(), gfx::Point(), + displays_[0]->native_mode()}) + .c_str(), + GetDisableCrtcAction(displays_[1]).c_str(), kModesetOutcomeSuccess, + // External display will fail twice, downgrade, and pass. + kTestModesetStr, + GetCrtcAction({displays_[0]->display_id(), gfx::Point(), + displays_[0]->native_mode()}) + .c_str(), + GetCrtcAction( + {displays_[1]->display_id(), gfx::Point(), &big_mode_60hz_}) + .c_str(), + kModesetOutcomeFailure, kTestModesetStr, + GetCrtcAction({displays_[0]->display_id(), gfx::Point(), + displays_[0]->native_mode()}) + .c_str(), + GetCrtcAction( + {displays_[1]->display_id(), gfx::Point(), &big_mode_29_97hz_}) + .c_str(), + kModesetOutcomeFailure, kTestModesetStr, + GetCrtcAction({displays_[0]->display_id(), gfx::Point(), + displays_[0]->native_mode()}) + .c_str(), + GetCrtcAction( + {displays_[1]->display_id(), gfx::Point(), &small_mode_60hz_}) + .c_str(), + kModesetOutcomeSuccess, + // Commit the last successful test-modeset configuration. + kCommitModesetStr, + GetCrtcAction({displays_[0]->display_id(), gfx::Point(), + displays_[0]->native_mode()}) + .c_str(), + GetCrtcAction( + {displays_[1]->display_id(), gfx::Point(), &small_mode_60hz_}) + .c_str(), + kModesetOutcomeSuccess, nullptr), + log_.GetActionsAndClear()); } // Tests requiring a resources cleanup for an internal display to succeed after @@ -2148,14 +2479,23 @@ ConfigureDisplaysTask close_lid(&delegate_, requests, std::move(callback)); close_lid.Run(); EXPECT_EQ(ConfigureDisplaysTask::SUCCESS, status_); - EXPECT_EQ(JoinActions(GetDisableCrtcAction(internal_display).c_str(), + EXPECT_EQ(JoinActions(kTestModesetStr, + GetDisableCrtcAction(internal_display).c_str(), GetCrtcAction({external_display1->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), GetCrtcAction({external_display2->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), - nullptr), + kModesetOutcomeSuccess, kCommitModesetStr, + GetDisableCrtcAction(internal_display).c_str(), + GetCrtcAction({external_display1->display_id(), + gfx::Point(), &big_mode_60hz_}) + .c_str(), + GetCrtcAction({external_display2->display_id(), + gfx::Point(), &big_mode_60hz_}) + .c_str(), + kModesetOutcomeSuccess, nullptr), log_.GetActionsAndClear()); // Simulate opening the lid as the 2 external displays are already running at @@ -2174,6 +2514,7 @@ ASSERT_EQ(ConfigureDisplaysTask::PARTIAL_SUCCESS, status_); EXPECT_EQ(JoinActions( // Attempt to turn everything on with the highest mode. + kTestModesetStr, GetCrtcAction({internal_display->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), @@ -2183,14 +2524,18 @@ GetCrtcAction({external_display2->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), - // We first attempt to modeset the internal display with all - // other displays disabled, which will succeed. + kModesetOutcomeFailure, + // We first test-modeset the internal display with all other + // displays disabled, which will succeed. + kTestModesetStr, GetCrtcAction({internal_display->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), GetDisableCrtcAction(external_display1).c_str(), GetDisableCrtcAction(external_display2).c_str(), + kModesetOutcomeSuccess, // External displays will attempt to be turned on at big mode. + kTestModesetStr, GetCrtcAction({internal_display->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), @@ -2200,7 +2545,9 @@ GetCrtcAction({external_display2->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, // Fallback until success as small mode. + kTestModesetStr, GetCrtcAction({internal_display->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), @@ -2210,6 +2557,7 @@ GetCrtcAction({external_display2->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), + kModesetOutcomeFailure, kTestModesetStr, GetCrtcAction({internal_display->display_id(), gfx::Point(), &big_mode_60hz_}) .c_str(), @@ -2219,7 +2567,19 @@ GetCrtcAction({external_display2->display_id(), gfx::Point(), &small_mode_60hz_}) .c_str(), - nullptr), + kModesetOutcomeSuccess, + // Commit the last successful test-modeset configuration. + kCommitModesetStr, + GetCrtcAction({internal_display->display_id(), gfx::Point(), + &big_mode_60hz_}) + .c_str(), + GetCrtcAction({external_display1->display_id(), gfx::Point(), + &small_mode_60hz_}) + .c_str(), + GetCrtcAction({external_display2->display_id(), gfx::Point(), + &small_mode_60hz_}) + .c_str(), + kModesetOutcomeSuccess, nullptr), log_.GetActionsAndClear()); }
diff --git a/ui/display/manager/display_configurator_unittest.cc b/ui/display/manager/display_configurator_unittest.cc index 9a71729..ae3544f 100644 --- a/ui/display/manager/display_configurator_unittest.cc +++ b/ui/display/manager/display_configurator_unittest.cc
@@ -327,9 +327,15 @@ EXPECT_EQ(kNoActions, log_->GetActionsAndClear()); configurator_.ForceInitialConfigure(); std::string actions = GetCrtcActions(DisplayConfig::kStack, modes...); - EXPECT_EQ( - actions.empty() ? kInit : JoinActions(kInit, actions.c_str(), nullptr), - log_->GetActionsAndClear()); + EXPECT_EQ(actions.empty() + ? kInit + : JoinActions( + kInit, kTestModesetStr, + GetCrtcActions(DisplayConfig::kStack, modes...).c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(DisplayConfig::kStack, modes...).c_str(), + kModesetOutcomeSuccess, nullptr), + log_->GetActionsAndClear()); } template <typename... Modes> @@ -467,22 +473,38 @@ state_controller_.set_state(MULTIPLE_DISPLAY_STATE_MULTI_EXTENDED); UpdateOutputs(2, true); - EXPECT_EQ(GetCrtcActions(&small_mode_, &big_mode_), + EXPECT_EQ(JoinActions(kTestModesetStr, + GetCrtcActions(&small_mode_, &big_mode_).c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(&small_mode_, &big_mode_).c_str(), + kModesetOutcomeSuccess, nullptr), log_->GetActionsAndClear()); EXPECT_FALSE(mirroring_controller_.SoftwareMirroringEnabled()); EXPECT_EQ(1, observer_.num_changes()); observer_.Reset(); configurator_.SetDisplayMode(MULTIPLE_DISPLAY_STATE_MULTI_MIRROR); - EXPECT_EQ(GetCrtcActions(DisplayConfig::kMirror, &small_mode_, &small_mode_), - log_->GetActionsAndClear()); + EXPECT_EQ( + JoinActions( + kTestModesetStr, + GetCrtcActions(DisplayConfig::kMirror, &small_mode_, &small_mode_) + .c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(DisplayConfig::kMirror, &small_mode_, &small_mode_) + .c_str(), + kModesetOutcomeSuccess, nullptr), + log_->GetActionsAndClear()); EXPECT_FALSE(mirroring_controller_.SoftwareMirroringEnabled()); EXPECT_EQ(1, observer_.num_changes()); // Disconnect the second output. observer_.Reset(); UpdateOutputs(1, true); - EXPECT_EQ(GetCrtcActions(&small_mode_), log_->GetActionsAndClear()); + EXPECT_EQ(JoinActions(kTestModesetStr, GetCrtcActions(&small_mode_).c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(&small_mode_).c_str(), + kModesetOutcomeSuccess, nullptr), + log_->GetActionsAndClear()); EXPECT_FALSE(mirroring_controller_.SoftwareMirroringEnabled()); EXPECT_EQ(1, observer_.num_changes()); @@ -497,7 +519,11 @@ state_controller_.set_state(MULTIPLE_DISPLAY_STATE_MULTI_EXTENDED); UpdateOutputs(2, true); - EXPECT_EQ(GetCrtcActions(&small_mode_, &big_mode_), + EXPECT_EQ(JoinActions(kTestModesetStr, + GetCrtcActions(&small_mode_, &big_mode_).c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(&small_mode_, &big_mode_).c_str(), + kModesetOutcomeSuccess, nullptr), log_->GetActionsAndClear()); EXPECT_FALSE(mirroring_controller_.SoftwareMirroringEnabled()); @@ -529,7 +555,11 @@ // Disconnect the second output. observer_.Reset(); UpdateOutputs(1, true); - EXPECT_EQ(GetCrtcActions(&small_mode_), log_->GetActionsAndClear()); + EXPECT_EQ(JoinActions(kTestModesetStr, GetCrtcActions(&small_mode_).c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(&small_mode_).c_str(), + kModesetOutcomeSuccess, nullptr), + log_->GetActionsAndClear()); EXPECT_FALSE(mirroring_controller_.SoftwareMirroringEnabled()); EXPECT_EQ(1, observer_.num_changes()); } @@ -540,8 +570,16 @@ state_controller_.set_state(MULTIPLE_DISPLAY_STATE_MULTI_MIRROR); observer_.Reset(); UpdateOutputs(2, true); - EXPECT_EQ(GetCrtcActions(DisplayConfig::kMirror, &small_mode_, &small_mode_), - log_->GetActionsAndClear()); + EXPECT_EQ( + JoinActions( + kTestModesetStr, + GetCrtcActions(DisplayConfig::kMirror, &small_mode_, &small_mode_) + .c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(DisplayConfig::kMirror, &small_mode_, &small_mode_) + .c_str(), + kModesetOutcomeSuccess, nullptr), + log_->GetActionsAndClear()); EXPECT_FALSE(mirroring_controller_.SoftwareMirroringEnabled()); EXPECT_EQ(1, observer_.num_changes()); @@ -555,7 +593,12 @@ config_waiter_.on_configuration_callback()); EXPECT_EQ(kNoDelay, config_waiter_.Wait()); EXPECT_EQ(CALLBACK_SUCCESS, config_waiter_.callback_result()); - EXPECT_EQ(GetCrtcActions(nullptr, &big_mode_), log_->GetActionsAndClear()); + EXPECT_EQ( + JoinActions(kTestModesetStr, GetCrtcActions(nullptr, &big_mode_).c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(nullptr, &big_mode_).c_str(), + kModesetOutcomeSuccess, nullptr), + log_->GetActionsAndClear()); EXPECT_EQ(MULTIPLE_DISPLAY_STATE_SINGLE, configurator_.display_state()); EXPECT_EQ(1, observer_.num_changes()); @@ -568,8 +611,13 @@ config_waiter_.on_configuration_callback()); EXPECT_EQ(kNoDelay, config_waiter_.Wait()); EXPECT_EQ(CALLBACK_SUCCESS, config_waiter_.callback_result()); - EXPECT_EQ(GetCrtcActions(DisplayConfig::kOff, nullptr, nullptr), - log_->GetActionsAndClear()); + EXPECT_EQ( + JoinActions(kTestModesetStr, + GetCrtcActions(DisplayConfig::kOff, nullptr, nullptr).c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(DisplayConfig::kOff, nullptr, nullptr).c_str(), + kModesetOutcomeSuccess, nullptr), + log_->GetActionsAndClear()); EXPECT_EQ(MULTIPLE_DISPLAY_STATE_MULTI_MIRROR, configurator_.display_state()); EXPECT_FALSE(mirroring_controller_.SoftwareMirroringEnabled()); EXPECT_EQ(1, observer_.num_changes()); @@ -582,8 +630,16 @@ config_waiter_.on_configuration_callback()); EXPECT_EQ(kNoDelay, config_waiter_.Wait()); EXPECT_EQ(CALLBACK_SUCCESS, config_waiter_.callback_result()); - EXPECT_EQ(GetCrtcActions(DisplayConfig::kMirror, &small_mode_, &small_mode_), - log_->GetActionsAndClear()); + EXPECT_EQ( + JoinActions( + kTestModesetStr, + GetCrtcActions(DisplayConfig::kMirror, &small_mode_, &small_mode_) + .c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(DisplayConfig::kMirror, &small_mode_, &small_mode_) + .c_str(), + kModesetOutcomeSuccess, nullptr), + log_->GetActionsAndClear()); EXPECT_EQ(MULTIPLE_DISPLAY_STATE_MULTI_MIRROR, configurator_.display_state()); EXPECT_FALSE(mirroring_controller_.SoftwareMirroringEnabled()); EXPECT_EQ(1, observer_.num_changes()); @@ -601,7 +657,11 @@ observer_.Reset(); UpdateOutputs(2, true); - EXPECT_EQ(GetCrtcActions(&small_mode_, &big_mode_), + EXPECT_EQ(JoinActions(kTestModesetStr, + GetCrtcActions(&small_mode_, &big_mode_).c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(&small_mode_, &big_mode_).c_str(), + kModesetOutcomeSuccess, nullptr), log_->GetActionsAndClear()); EXPECT_EQ(MULTIPLE_DISPLAY_STATE_MULTI_EXTENDED, configurator_.display_state()); @@ -618,7 +678,12 @@ config_waiter_.on_configuration_callback()); EXPECT_EQ(kNoDelay, config_waiter_.Wait()); EXPECT_EQ(CALLBACK_SUCCESS, config_waiter_.callback_result()); - EXPECT_EQ(GetCrtcActions(nullptr, &big_mode_), log_->GetActionsAndClear()); + EXPECT_EQ( + JoinActions(kTestModesetStr, GetCrtcActions(nullptr, &big_mode_).c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(nullptr, &big_mode_).c_str(), + kModesetOutcomeSuccess, nullptr), + log_->GetActionsAndClear()); EXPECT_EQ(MULTIPLE_DISPLAY_STATE_SINGLE, configurator_.display_state()); EXPECT_FALSE(mirroring_controller_.SoftwareMirroringEnabled()); EXPECT_EQ(1, observer_.num_changes()); @@ -632,8 +697,14 @@ config_waiter_.on_configuration_callback()); EXPECT_EQ(kNoDelay, config_waiter_.Wait()); EXPECT_EQ(CALLBACK_SUCCESS, config_waiter_.callback_result()); - EXPECT_EQ(GetCrtcActions(DisplayConfig::kOff, &small_mode_, &big_mode_), - log_->GetActionsAndClear()); + EXPECT_EQ( + JoinActions( + kTestModesetStr, + GetCrtcActions(DisplayConfig::kOff, &small_mode_, &big_mode_).c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(DisplayConfig::kOff, &small_mode_, &big_mode_).c_str(), + kModesetOutcomeSuccess, nullptr), + log_->GetActionsAndClear()); EXPECT_EQ(MULTIPLE_DISPLAY_STATE_MULTI_EXTENDED, configurator_.display_state()); EXPECT_TRUE(mirroring_controller_.SoftwareMirroringEnabled()); @@ -647,7 +718,11 @@ config_waiter_.on_configuration_callback()); EXPECT_EQ(kNoDelay, config_waiter_.Wait()); EXPECT_EQ(CALLBACK_SUCCESS, config_waiter_.callback_result()); - EXPECT_EQ(GetCrtcActions(&small_mode_, &big_mode_), + EXPECT_EQ(JoinActions(kTestModesetStr, + GetCrtcActions(&small_mode_, &big_mode_).c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(&small_mode_, &big_mode_).c_str(), + kModesetOutcomeSuccess, nullptr), log_->GetActionsAndClear()); EXPECT_EQ(MULTIPLE_DISPLAY_STATE_MULTI_EXTENDED, configurator_.display_state()); @@ -671,14 +746,22 @@ configurator_.SuspendDisplays(config_waiter_.on_configuration_callback()); EXPECT_EQ(kNoDelay, config_waiter_.Wait()); EXPECT_EQ(CALLBACK_SUCCESS, config_waiter_.callback_result()); - EXPECT_EQ(GetCrtcActions(nullptr), log_->GetActionsAndClear()); + EXPECT_EQ(JoinActions(kTestModesetStr, GetCrtcActions(nullptr).c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(nullptr).c_str(), kModesetOutcomeSuccess, + nullptr), + log_->GetActionsAndClear()); // No resume delay in single display mode. config_waiter_.Reset(); configurator_.ResumeDisplays(); // The timer should not be running. EXPECT_EQ(base::TimeDelta::Max(), config_waiter_.Wait()); - EXPECT_EQ(GetCrtcActions(&small_mode_), log_->GetActionsAndClear()); + EXPECT_EQ(JoinActions(kTestModesetStr, GetCrtcActions(&small_mode_).c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(&small_mode_).c_str(), + kModesetOutcomeSuccess, nullptr), + log_->GetActionsAndClear()); // Now turn the display off before suspending and check that the // configurator turns it back on and syncs with the server. @@ -688,7 +771,11 @@ config_waiter_.on_configuration_callback()); EXPECT_EQ(kNoDelay, config_waiter_.Wait()); EXPECT_EQ(CALLBACK_SUCCESS, config_waiter_.callback_result()); - EXPECT_EQ(GetCrtcActions(nullptr), log_->GetActionsAndClear()); + EXPECT_EQ(JoinActions(kTestModesetStr, GetCrtcActions(nullptr).c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(nullptr).c_str(), kModesetOutcomeSuccess, + nullptr), + log_->GetActionsAndClear()); config_waiter_.Reset(); configurator_.SuspendDisplays(config_waiter_.on_configuration_callback()); @@ -708,12 +795,24 @@ config_waiter_.on_configuration_callback()); EXPECT_EQ(kNoDelay, config_waiter_.Wait()); EXPECT_EQ(CALLBACK_SUCCESS, config_waiter_.callback_result()); - EXPECT_EQ(GetCrtcActions(&small_mode_), log_->GetActionsAndClear()); + EXPECT_EQ(JoinActions(kTestModesetStr, GetCrtcActions(&small_mode_).c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(&small_mode_).c_str(), + kModesetOutcomeSuccess, nullptr), + log_->GetActionsAndClear()); state_controller_.set_state(MULTIPLE_DISPLAY_STATE_MULTI_MIRROR); UpdateOutputs(2, true); - EXPECT_EQ(GetCrtcActions(DisplayConfig::kMirror, &small_mode_, &small_mode_), - log_->GetActionsAndClear()); + EXPECT_EQ( + JoinActions( + kTestModesetStr, + GetCrtcActions(DisplayConfig::kMirror, &small_mode_, &small_mode_) + .c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(DisplayConfig::kMirror, &small_mode_, &small_mode_) + .c_str(), + kModesetOutcomeSuccess, nullptr), + log_->GetActionsAndClear()); config_waiter_.Reset(); configurator_.SetDisplayPower(chromeos::DISPLAY_POWER_ALL_OFF, @@ -722,8 +821,13 @@ EXPECT_EQ(kNoDelay, config_waiter_.Wait()); EXPECT_EQ(CALLBACK_SUCCESS, config_waiter_.callback_result()); EXPECT_EQ(MULTIPLE_DISPLAY_STATE_MULTI_MIRROR, configurator_.display_state()); - EXPECT_EQ(GetCrtcActions(DisplayConfig::kOff, nullptr, nullptr), - log_->GetActionsAndClear()); + EXPECT_EQ( + JoinActions(kTestModesetStr, + GetCrtcActions(DisplayConfig::kOff, nullptr, nullptr).c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(DisplayConfig::kOff, nullptr, nullptr).c_str(), + kModesetOutcomeSuccess, nullptr), + log_->GetActionsAndClear()); // No delay in suspend. config_waiter_.Reset(); @@ -752,7 +856,11 @@ EXPECT_EQ(CALLBACK_NOT_CALLED, config_waiter_.callback_result()); EXPECT_EQ(kLongDelay, config_waiter_.Wait()); EXPECT_EQ(CALLBACK_SUCCESS, config_waiter_.callback_result()); - EXPECT_EQ(GetCrtcActions(&small_mode_), log_->GetActionsAndClear()); + EXPECT_EQ(JoinActions(kTestModesetStr, GetCrtcActions(&small_mode_).c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(&small_mode_).c_str(), + kModesetOutcomeSuccess, nullptr), + log_->GetActionsAndClear()); } TEST_F(DisplayConfiguratorTest, Headless) { @@ -786,7 +894,11 @@ .Build(); UpdateOutputs(1, true); - EXPECT_EQ(GetCrtcActions(&big_mode_), log_->GetActionsAndClear()); + EXPECT_EQ(JoinActions(kTestModesetStr, GetCrtcActions(&big_mode_).c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(&big_mode_).c_str(), + kModesetOutcomeSuccess, nullptr), + log_->GetActionsAndClear()); UpdateOutputs(0, true); EXPECT_EQ(kNoActions, log_->GetActionsAndClear()); @@ -800,12 +912,16 @@ state_controller_.set_state(MULTIPLE_DISPLAY_STATE_MULTI_MIRROR); configurator_.ForceInitialConfigure(); - EXPECT_EQ(JoinActions(kInit, - GetCrtcActions(DisplayConfig::kMirror, &small_mode_, - &small_mode_) - .c_str(), - nullptr), - log_->GetActionsAndClear()); + EXPECT_EQ( + JoinActions( + kInit, kTestModesetStr, + GetCrtcActions(DisplayConfig::kMirror, &small_mode_, &small_mode_) + .c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(DisplayConfig::kMirror, &small_mode_, &small_mode_) + .c_str(), + kModesetOutcomeSuccess, nullptr), + log_->GetActionsAndClear()); } TEST_F(DisplayConfiguratorTest, InvalidMultipleDisplayStates) { @@ -900,7 +1016,11 @@ configurator_.SuspendDisplays(config_waiter_.on_configuration_callback()); EXPECT_EQ(kNoDelay, config_waiter_.Wait()); EXPECT_EQ(CALLBACK_SUCCESS, config_waiter_.callback_result()); - EXPECT_EQ(GetCrtcActions(nullptr), log_->GetActionsAndClear()); + EXPECT_EQ(JoinActions(kTestModesetStr, GetCrtcActions(nullptr).c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(nullptr).c_str(), kModesetOutcomeSuccess, + nullptr), + log_->GetActionsAndClear()); // The configuration timer should not be started when the displays // are suspended. @@ -923,12 +1043,24 @@ config_waiter_.on_configuration_callback()); EXPECT_EQ(kNoDelay, config_waiter_.Wait()); EXPECT_EQ(CALLBACK_SUCCESS, config_waiter_.callback_result()); - EXPECT_EQ(GetCrtcActions(&small_mode_), log_->GetActionsAndClear()); + EXPECT_EQ(JoinActions(kTestModesetStr, GetCrtcActions(&small_mode_).c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(&small_mode_).c_str(), + kModesetOutcomeSuccess, nullptr), + log_->GetActionsAndClear()); UpdateOutputs(2, false); configurator_.SetDisplayMode(MULTIPLE_DISPLAY_STATE_MULTI_MIRROR); - EXPECT_EQ(GetCrtcActions(DisplayConfig::kMirror, &small_mode_, &small_mode_), - log_->GetActionsAndClear()); + EXPECT_EQ( + JoinActions( + kTestModesetStr, + GetCrtcActions(DisplayConfig::kMirror, &small_mode_, &small_mode_) + .c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(DisplayConfig::kMirror, &small_mode_, &small_mode_) + .c_str(), + kModesetOutcomeSuccess, nullptr), + log_->GetActionsAndClear()); // The DisplayConfigurator should do nothing at resume time if there is no // state change. @@ -945,7 +1077,11 @@ configurator_.SuspendDisplays(config_waiter_.on_configuration_callback()); EXPECT_EQ(kNoDelay, config_waiter_.Wait()); EXPECT_EQ(CALLBACK_SUCCESS, config_waiter_.callback_result()); - EXPECT_EQ(GetCrtcActions(nullptr), log_->GetActionsAndClear()); + EXPECT_EQ(JoinActions(kTestModesetStr, GetCrtcActions(nullptr).c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(nullptr).c_str(), kModesetOutcomeSuccess, + nullptr), + log_->GetActionsAndClear()); EXPECT_FALSE(test_api_.TriggerConfigureTimeout()); EXPECT_EQ(kNoActions, log_->GetActionsAndClear()); @@ -953,7 +1089,11 @@ configurator_.ResumeDisplays(); // The timer should not be running. EXPECT_EQ(base::TimeDelta::Max(), config_waiter_.Wait()); - EXPECT_EQ(GetCrtcActions(&small_mode_), log_->GetActionsAndClear()); + EXPECT_EQ(JoinActions(kTestModesetStr, GetCrtcActions(&small_mode_).c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(&small_mode_).c_str(), + kModesetOutcomeSuccess, nullptr), + log_->GetActionsAndClear()); } TEST_F(DisplayConfiguratorTest, HandleConfigureCrtcFailure) { @@ -992,15 +1132,18 @@ EXPECT_EQ(JoinActions( // Initial attempt fails. + kTestModesetStr, GetCrtcAction({outputs_[0]->display_id(), gfx::Point(0, 0), outputs_[0]->native_mode()}) .c_str(), + kModesetOutcomeFailure, // Initiate retry logic, which fails since it cannot downgrade // the internal display. + kTestModesetStr, GetCrtcAction({outputs_[0]->display_id(), gfx::Point(0, 0), outputs_[0]->native_mode()}) .c_str(), - nullptr), + kModesetOutcomeFailure, nullptr), log_->GetActionsAndClear()); outputs_[0] = FakeDisplaySnapshot::Builder() @@ -1023,24 +1166,37 @@ EXPECT_EQ(JoinActions( // Initial attempt fails. + kTestModesetStr, GetCrtcAction({outputs_[0]->display_id(), gfx::Point(0, 0), modes[0].get()}) .c_str(), + kModesetOutcomeFailure, // Initiate retry logic. + kTestModesetStr, GetCrtcAction({outputs_[0]->display_id(), gfx::Point(0, 0), modes[0].get()}) .c_str(), + kModesetOutcomeFailure, // Retry attempts trying all available modes. + kTestModesetStr, GetCrtcAction({outputs_[0]->display_id(), gfx::Point(0, 0), modes[3].get()}) .c_str(), + kModesetOutcomeFailure, kTestModesetStr, GetCrtcAction({outputs_[0]->display_id(), gfx::Point(0, 0), modes[4].get()}) .c_str(), + kModesetOutcomeFailure, + // Test-modeset passes for this mode. + kTestModesetStr, GetCrtcAction({outputs_[0]->display_id(), gfx::Point(0, 0), modes[2].get()}) .c_str(), - nullptr), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcAction({outputs_[0]->display_id(), gfx::Point(0, 0), + modes[2].get()}) + .c_str(), + kModesetOutcomeSuccess, nullptr), log_->GetActionsAndClear()); outputs_[0] = FakeDisplaySnapshot::Builder() @@ -1079,52 +1235,71 @@ EXPECT_EQ( JoinActions( // Initial attempt fails. Initiate retry logic. + kTestModesetStr, GetCrtcAction({outputs_[0]->display_id(), gfx::Point(0, 0), outputs_[0]->native_mode()}) .c_str(), GetCrtcAction( {outputs_[1]->display_id(), gfx::Point(0, 0), modes[0].get()}) .c_str(), - // We first attempt to modeset the internal display with all - // other displays disabled, which will fail. + kModesetOutcomeFailure, + // We first test-modeset the internal display with all other displays + // disabled, which will fail. + kTestModesetStr, GetCrtcAction({outputs_[0]->display_id(), gfx::Point(0, 0), outputs_[0]->native_mode()}) .c_str(), GetCrtcAction({outputs_[1]->display_id(), gfx::Point(0, 0), nullptr}) .c_str(), + kModesetOutcomeFailure, // Since internal displays are restricted to their preferred mode, // there are no other modes to try. Disable the internal display so we // can attempt to modeset displays that are connected to other // connectors. Next, the external display will cycle through all its // available modes before failing completely. + kTestModesetStr, GetCrtcAction({outputs_[0]->display_id(), gfx::Point(0, 0), nullptr}) .c_str(), GetCrtcAction( {outputs_[1]->display_id(), gfx::Point(0, 0), modes[0].get()}) .c_str(), + kModesetOutcomeFailure, kTestModesetStr, GetCrtcAction({outputs_[0]->display_id(), gfx::Point(0, 0), nullptr}) .c_str(), GetCrtcAction( {outputs_[1]->display_id(), gfx::Point(0, 0), modes[3].get()}) .c_str(), + kModesetOutcomeFailure, kTestModesetStr, GetCrtcAction({outputs_[0]->display_id(), gfx::Point(0, 0), nullptr}) .c_str(), GetCrtcAction( {outputs_[1]->display_id(), gfx::Point(0, 0), modes[4].get()}) .c_str(), + kModesetOutcomeFailure, kTestModesetStr, GetCrtcAction({outputs_[0]->display_id(), gfx::Point(0, 0), nullptr}) .c_str(), GetCrtcAction( {outputs_[1]->display_id(), gfx::Point(0, 0), modes[2].get()}) .c_str(), + kModesetOutcomeFailure, + // This configuration still passes intermediate test-modeset. + kTestModesetStr, GetCrtcAction({outputs_[0]->display_id(), gfx::Point(0, 0), nullptr}) .c_str(), GetCrtcAction( {outputs_[1]->display_id(), gfx::Point(0, 0), modes[1].get()}) .c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcAction({outputs_[0]->display_id(), gfx::Point(0, 0), nullptr}) + .c_str(), + GetCrtcAction( + {outputs_[1]->display_id(), gfx::Point(0, 0), modes[1].get()}) + .c_str(), + kModesetOutcomeSuccess, // Since mirror mode configuration failed it should now attempt to // configure in extended mode. However, initial attempt fails. // Initiate retry logic. + kTestModesetStr, GetCrtcAction({outputs_[0]->display_id(), gfx::Point(0, 0), outputs_[0]->native_mode()}) .c_str(), @@ -1133,8 +1308,10 @@ DisplayConfigurator::kVerticalGap), modes[0].get()}) .c_str(), - // We first attempt to modeset the internal display with all - // other displays disabled, which will fail. + kModesetOutcomeFailure, + // We first test-modeset the internal display with all other displays + // disabled, which will fail. + kTestModesetStr, GetCrtcAction({outputs_[0]->display_id(), gfx::Point(0, 0), outputs_[0]->native_mode()}) .c_str(), @@ -1143,8 +1320,10 @@ DisplayConfigurator::kVerticalGap), nullptr}) .c_str(), + kModesetOutcomeFailure, // The configuration fails completely but still attempts to modeset // the external display. + kTestModesetStr, GetCrtcAction({outputs_[0]->display_id(), gfx::Point(0, 0), nullptr}) .c_str(), GetCrtcAction({outputs_[1]->display_id(), @@ -1152,6 +1331,7 @@ DisplayConfigurator::kVerticalGap), modes[0].get()}) .c_str(), + kModesetOutcomeFailure, kTestModesetStr, GetCrtcAction({outputs_[0]->display_id(), gfx::Point(0, 0), nullptr}) .c_str(), GetCrtcAction({outputs_[1]->display_id(), @@ -1159,6 +1339,7 @@ DisplayConfigurator::kVerticalGap), modes[3].get()}) .c_str(), + kModesetOutcomeFailure, kTestModesetStr, GetCrtcAction({outputs_[0]->display_id(), gfx::Point(0, 0), nullptr}) .c_str(), GetCrtcAction({outputs_[1]->display_id(), @@ -1166,6 +1347,7 @@ DisplayConfigurator::kVerticalGap), modes[4].get()}) .c_str(), + kModesetOutcomeFailure, kTestModesetStr, GetCrtcAction({outputs_[0]->display_id(), gfx::Point(0, 0), nullptr}) .c_str(), GetCrtcAction({outputs_[1]->display_id(), @@ -1173,6 +1355,9 @@ DisplayConfigurator::kVerticalGap), modes[2].get()}) .c_str(), + kModesetOutcomeFailure, + // This configuration passes test-modeset. + kTestModesetStr, GetCrtcAction({outputs_[0]->display_id(), gfx::Point(0, 0), nullptr}) .c_str(), GetCrtcAction({outputs_[1]->display_id(), @@ -1180,7 +1365,15 @@ DisplayConfigurator::kVerticalGap), modes[1].get()}) .c_str(), - nullptr), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcAction({outputs_[0]->display_id(), gfx::Point(0, 0), nullptr}) + .c_str(), + GetCrtcAction({outputs_[1]->display_id(), + gfx::Point(0, modes[0]->size().height() + + DisplayConfigurator::kVerticalGap), + modes[1].get()}) + .c_str(), + kModesetOutcomeSuccess, nullptr), log_->GetActionsAndClear()); } @@ -1224,7 +1417,11 @@ // than the earlier DISPLAY_POWER_INTERNAL_OFF_EXTERNAL_ON state. native_display_delegate_->set_max_configurable_pixels(0); UpdateOutputs(1, true); - EXPECT_EQ(GetCrtcActions(&small_mode_), log_->GetActionsAndClear()); + EXPECT_EQ(JoinActions(kTestModesetStr, GetCrtcActions(&small_mode_).c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(&small_mode_).c_str(), + kModesetOutcomeSuccess, nullptr), + log_->GetActionsAndClear()); } // Tests that the SetDisplayPowerState() task posted by HandleResume() doesn't @@ -1247,8 +1444,14 @@ EXPECT_EQ(CALLBACK_SUCCESS, config_waiter_.callback_result()); EXPECT_EQ(1, observer_.num_changes()); EXPECT_EQ(0, observer_.num_failures()); - EXPECT_EQ(GetCrtcActions(DisplayConfig::kMirror, nullptr, &big_mode_), - log_->GetActionsAndClear()); + EXPECT_EQ( + JoinActions( + kTestModesetStr, + GetCrtcActions(DisplayConfig::kMirror, nullptr, &big_mode_).c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(DisplayConfig::kMirror, nullptr, &big_mode_).c_str(), + kModesetOutcomeSuccess, nullptr), + log_->GetActionsAndClear()); // Suspend and resume the system. Resuming should restore the previous power // state and force a probe. Suspend should turn off the displays since an @@ -1258,8 +1461,13 @@ EXPECT_EQ(kNoDelay, config_waiter_.Wait()); EXPECT_EQ(CALLBACK_SUCCESS, config_waiter_.callback_result()); EXPECT_EQ(2, observer_.num_changes()); - EXPECT_EQ(GetCrtcActions(DisplayConfig::kOff, nullptr, nullptr), - log_->GetActionsAndClear()); + EXPECT_EQ( + JoinActions(kTestModesetStr, + GetCrtcActions(DisplayConfig::kOff, nullptr, nullptr).c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(DisplayConfig::kOff, nullptr, nullptr).c_str(), + kModesetOutcomeSuccess, nullptr), + log_->GetActionsAndClear()); // Before the task runs, exit docked mode. config_waiter_.Reset(); @@ -1270,8 +1478,16 @@ EXPECT_EQ(CALLBACK_SUCCESS, config_waiter_.callback_result()); EXPECT_EQ(3, observer_.num_changes()); EXPECT_EQ(0, observer_.num_failures()); - EXPECT_EQ(GetCrtcActions(DisplayConfig::kMirror, &small_mode_, &small_mode_), - log_->GetActionsAndClear()); + EXPECT_EQ( + JoinActions( + kTestModesetStr, + GetCrtcActions(DisplayConfig::kMirror, &small_mode_, &small_mode_) + .c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(DisplayConfig::kMirror, &small_mode_, &small_mode_) + .c_str(), + kModesetOutcomeSuccess, nullptr), + log_->GetActionsAndClear()); // Check that the display states are not changed after resuming. config_waiter_.Reset(); @@ -1284,8 +1500,16 @@ EXPECT_EQ(kNoActions, log_->GetActionsAndClear()); // Now trigger that delayed configuration. EXPECT_EQ(kLongDelay, config_waiter_.Wait()); - EXPECT_EQ(GetCrtcActions(DisplayConfig::kMirror, &small_mode_, &small_mode_), - log_->GetActionsAndClear()); + EXPECT_EQ( + JoinActions( + kTestModesetStr, + GetCrtcActions(DisplayConfig::kMirror, &small_mode_, &small_mode_) + .c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(DisplayConfig::kMirror, &small_mode_, &small_mode_) + .c_str(), + kModesetOutcomeSuccess, nullptr), + log_->GetActionsAndClear()); } TEST_F(DisplayConfiguratorTest, ExternalControl) { @@ -1303,16 +1527,21 @@ base::BindOnce(&DisplayConfiguratorTest::OnDisplayControlUpdated, base::Unretained(this))); EXPECT_EQ(CALLBACK_SUCCESS, PopDisplayControlResult()); - EXPECT_EQ(JoinActions(GetCrtcActions(nullptr).c_str(), + EXPECT_EQ(JoinActions(kTestModesetStr, GetCrtcActions(nullptr).c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(nullptr).c_str(), kModesetOutcomeSuccess, kRelinquishDisplayControl, nullptr), log_->GetActionsAndClear()); configurator_.TakeControl( base::BindOnce(&DisplayConfiguratorTest::OnDisplayControlUpdated, base::Unretained(this))); EXPECT_EQ(CALLBACK_SUCCESS, PopDisplayControlResult()); - EXPECT_EQ(JoinActions(kTakeDisplayControl, - GetCrtcActions(&small_mode_).c_str(), nullptr), - log_->GetActionsAndClear()); + EXPECT_EQ( + JoinActions(kTakeDisplayControl, kTestModesetStr, + GetCrtcActions(&small_mode_).c_str(), kModesetOutcomeSuccess, + kCommitModesetStr, GetCrtcActions(&small_mode_).c_str(), + kModesetOutcomeSuccess, nullptr), + log_->GetActionsAndClear()); } TEST_F(DisplayConfiguratorTest, @@ -1342,8 +1571,14 @@ EXPECT_EQ(1, observer_.num_changes()); EXPECT_EQ(0, observer_.num_failures()); - EXPECT_EQ(GetCrtcActions(DisplayConfig::kOff, &small_mode_, &big_mode_), - log_->GetActionsAndClear()); + EXPECT_EQ( + JoinActions( + kTestModesetStr, + GetCrtcActions(DisplayConfig::kOff, &small_mode_, &big_mode_).c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(DisplayConfig::kOff, &small_mode_, &big_mode_).c_str(), + kModesetOutcomeSuccess, nullptr), + log_->GetActionsAndClear()); config_waiter_.Reset(); EXPECT_EQ(base::Milliseconds(DisplayConfigurator::kConfigureDelayMs), @@ -1354,7 +1589,11 @@ EXPECT_EQ(2, observer_.num_changes()); EXPECT_EQ(0, observer_.num_failures()); - EXPECT_EQ(GetCrtcActions(&small_mode_, &big_mode_), + EXPECT_EQ(JoinActions(kTestModesetStr, + GetCrtcActions(&small_mode_, &big_mode_).c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(&small_mode_, &big_mode_).c_str(), + kModesetOutcomeSuccess, nullptr), log_->GetActionsAndClear()); } @@ -1381,10 +1620,13 @@ EXPECT_EQ( JoinActions( + kTestModesetStr, GetCrtcActions(DisplayConfig::kOff, &small_mode_, &big_mode_).c_str(), + kModesetOutcomeFailure, kTestModesetStr, GetCrtcActions(DisplayConfig::kOff, &small_mode_, &big_mode_).c_str(), + kModesetOutcomeFailure, kTestModesetStr, GetCrtcActions(DisplayConfig::kOff, &small_mode_, &big_mode_).c_str(), - nullptr), + kModesetOutcomeFailure, nullptr), log_->GetActionsAndClear()); // This configuration should trigger a display configuration since the @@ -1399,19 +1641,22 @@ EXPECT_EQ(2, observer_.num_failures()); EXPECT_EQ( JoinActions( - GetCrtcActions(&small_mode_, &big_mode_).c_str(), + kTestModesetStr, GetCrtcActions(&small_mode_, &big_mode_).c_str(), + kModesetOutcomeFailure, // We first attempt to modeset the internal display with all // other displays disabled, which will fail. - GetCrtcActions(&small_mode_).c_str(), + kTestModesetStr, GetCrtcActions(&small_mode_).c_str(), GetCrtcAction({outputs_[1]->display_id(), gfx::Point(0, small_mode_.size().height() + DisplayConfigurator::kVerticalGap), nullptr}) .c_str(), + kModesetOutcomeFailure, // Since internal displays are restricted to their preferred mode, // there are no other modes to try. Disable the internal display while // we attempt to modeset displays that are connected to other // connectors. Configuration will fail. + kTestModesetStr, GetCrtcAction({outputs_[0]->display_id(), gfx::Point(0, 0), nullptr}) .c_str(), GetCrtcAction({outputs_[1]->display_id(), @@ -1419,6 +1664,7 @@ DisplayConfigurator::kVerticalGap), &big_mode_}) .c_str(), + kModesetOutcomeFailure, kTestModesetStr, GetCrtcAction({outputs_[0]->display_id(), gfx::Point(0, 0), nullptr}) .c_str(), GetCrtcAction({outputs_[1]->display_id(), @@ -1426,7 +1672,7 @@ DisplayConfigurator::kVerticalGap), &small_mode_}) .c_str(), - nullptr), + kModesetOutcomeFailure, nullptr), log_->GetActionsAndClear()); // Allow configuration to succeed. @@ -1440,7 +1686,11 @@ EXPECT_EQ(1, observer_.num_changes()); EXPECT_EQ(2, observer_.num_failures()); - EXPECT_EQ(GetCrtcActions(&small_mode_, &big_mode_), + EXPECT_EQ(JoinActions(kTestModesetStr, + GetCrtcActions(&small_mode_, &big_mode_).c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(&small_mode_, &big_mode_).c_str(), + kModesetOutcomeSuccess, nullptr), log_->GetActionsAndClear()); } @@ -1455,7 +1705,12 @@ UpdateOutputs(3, true); state_controller_.set_state(MULTIPLE_DISPLAY_STATE_MULTI_EXTENDED); - EXPECT_EQ(GetCrtcActions(&small_mode_, &big_mode_, &small_mode_), + EXPECT_EQ(JoinActions( + kTestModesetStr, + GetCrtcActions(&small_mode_, &big_mode_, &small_mode_).c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(&small_mode_, &big_mode_, &small_mode_).c_str(), + kModesetOutcomeSuccess, nullptr), log_->GetActionsAndClear()); // Verify that turning the power off works. @@ -1465,8 +1720,15 @@ config_waiter_.on_configuration_callback()); EXPECT_EQ(kNoDelay, config_waiter_.Wait()); EXPECT_EQ(CALLBACK_SUCCESS, config_waiter_.callback_result()); - EXPECT_EQ(GetCrtcActions(DisplayConfig::kOff, &small_mode_, &big_mode_, - &small_mode_), + EXPECT_EQ(JoinActions(kTestModesetStr, + GetCrtcActions(DisplayConfig::kOff, &small_mode_, + &big_mode_, &small_mode_) + .c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(DisplayConfig::kOff, &small_mode_, + &big_mode_, &small_mode_) + .c_str(), + kModesetOutcomeSuccess, nullptr), log_->GetActionsAndClear()); config_waiter_.Reset(); @@ -1475,14 +1737,23 @@ config_waiter_.on_configuration_callback()); EXPECT_EQ(kNoDelay, config_waiter_.Wait()); EXPECT_EQ(CALLBACK_SUCCESS, config_waiter_.callback_result()); - EXPECT_EQ(GetCrtcActions(&small_mode_, &big_mode_, &small_mode_), + EXPECT_EQ(JoinActions( + kTestModesetStr, + GetCrtcActions(&small_mode_, &big_mode_, &small_mode_).c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(&small_mode_, &big_mode_, &small_mode_).c_str(), + kModesetOutcomeSuccess, nullptr), log_->GetActionsAndClear()); // Disconnect the third output. observer_.Reset(); state_controller_.set_state(MULTIPLE_DISPLAY_STATE_MULTI_EXTENDED); UpdateOutputs(2, true); - EXPECT_EQ(GetCrtcActions(&small_mode_, &big_mode_), + EXPECT_EQ(JoinActions(kTestModesetStr, + GetCrtcActions(&small_mode_, &big_mode_).c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(&small_mode_, &big_mode_).c_str(), + kModesetOutcomeSuccess, nullptr), log_->GetActionsAndClear()); } @@ -1506,7 +1777,11 @@ EXPECT_EQ(chromeos::DISPLAY_POWER_ALL_ON, configurator_.current_power_state()); - EXPECT_EQ(GetCrtcActions(&small_mode_, &big_mode_), + EXPECT_EQ(JoinActions(kTestModesetStr, + GetCrtcActions(&small_mode_, &big_mode_).c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(&small_mode_, &big_mode_).c_str(), + kModesetOutcomeSuccess, nullptr), log_->GetActionsAndClear()); // Suspending displays should result in an immediate configuration without @@ -1519,8 +1794,14 @@ configurator_.current_power_state()); EXPECT_EQ(MULTIPLE_DISPLAY_STATE_MULTI_EXTENDED, configurator_.display_state()); - EXPECT_EQ(GetCrtcActions(DisplayConfig::kOff, &small_mode_, &big_mode_), - log_->GetActionsAndClear()); + EXPECT_EQ( + JoinActions( + kTestModesetStr, + GetCrtcActions(DisplayConfig::kOff, &small_mode_, &big_mode_).c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(DisplayConfig::kOff, &small_mode_, &big_mode_).c_str(), + kModesetOutcomeSuccess, nullptr), + log_->GetActionsAndClear()); // Resuming from suspend with dual displays. Configuration should be done // after a long delay. Afterwards, we should still expect to be in a dual @@ -1532,7 +1813,11 @@ configurator_.current_power_state()); EXPECT_EQ(MULTIPLE_DISPLAY_STATE_MULTI_EXTENDED, configurator_.display_state()); - EXPECT_EQ(GetCrtcActions(&small_mode_, &big_mode_), + EXPECT_EQ(JoinActions(kTestModesetStr, + GetCrtcActions(&small_mode_, &big_mode_).c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(&small_mode_, &big_mode_).c_str(), + kModesetOutcomeSuccess, nullptr), log_->GetActionsAndClear()); // Suspend displays and disconnect one of them while in suspend. @@ -1544,8 +1829,14 @@ configurator_.display_state()); EXPECT_EQ(chromeos::DISPLAY_POWER_ALL_OFF, configurator_.current_power_state()); - EXPECT_EQ(GetCrtcActions(DisplayConfig::kOff, &small_mode_, &big_mode_), - log_->GetActionsAndClear()); + EXPECT_EQ( + JoinActions( + kTestModesetStr, + GetCrtcActions(DisplayConfig::kOff, &small_mode_, &big_mode_).c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(DisplayConfig::kOff, &small_mode_, &big_mode_).c_str(), + kModesetOutcomeSuccess, nullptr), + log_->GetActionsAndClear()); UpdateOutputs(1, false); EXPECT_EQ(kNoActions, log_->GetActionsAndClear()); @@ -1558,7 +1849,11 @@ EXPECT_EQ(chromeos::DISPLAY_POWER_ALL_ON, configurator_.current_power_state()); EXPECT_EQ(MULTIPLE_DISPLAY_STATE_SINGLE, configurator_.display_state()); - EXPECT_EQ(GetCrtcActions(&small_mode_), log_->GetActionsAndClear()); + EXPECT_EQ(JoinActions(kTestModesetStr, GetCrtcActions(&small_mode_).c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions(&small_mode_).c_str(), + kModesetOutcomeSuccess, nullptr), + log_->GetActionsAndClear()); // Verify that the above is the exact same behavior for 3+ displays. UpdateOutputs(3, true); @@ -1661,8 +1956,17 @@ observer_.Reset(); configurator_.SetDisplayMode(MULTIPLE_DISPLAY_STATE_MULTI_MIRROR); EXPECT_EQ( - GetCrtcActions(DisplayConfig::kMirror, expected_mirror_mode.get(), - expected_mirror_mode.get(), expected_mirror_mode.get()), + JoinActions(kTestModesetStr, + GetCrtcActions( + DisplayConfig::kMirror, expected_mirror_mode.get(), + expected_mirror_mode.get(), expected_mirror_mode.get()) + .c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcActions( + DisplayConfig::kMirror, expected_mirror_mode.get(), + expected_mirror_mode.get(), expected_mirror_mode.get()) + .c_str(), + kModesetOutcomeSuccess, nullptr), log_->GetActionsAndClear()); EXPECT_FALSE(mirroring_controller_.SoftwareMirroringEnabled()); EXPECT_EQ(1, observer_.num_changes());
diff --git a/ui/display/manager/test/test_native_display_delegate.cc b/ui/display/manager/test/test_native_display_delegate.cc index 4492df2..7a0ef7b7 100644 --- a/ui/display/manager/test/test_native_display_delegate.cc +++ b/ui/display/manager/test/test_native_display_delegate.cc
@@ -6,6 +6,7 @@ #include "base/bind.h" #include "base/location.h" +#include "base/strings/strcat.h" #include "base/task/single_thread_task_runner.h" #include "base/threading/thread_task_runner_handle.h" #include "ui/display/manager/test/action_logger.h" @@ -17,6 +18,21 @@ namespace display { namespace test { +std::string GetModesetFlag(uint32_t flag) { + std::string flags_str; + if (flag & kTestModeset) + flags_str = base::StrCat({flags_str, kTestModesetStr, ", "}); + if (flag & kCommitModeset) + flags_str = base::StrCat({flags_str, kCommitModesetStr, ", "}); + if (flag & kSeamlessModeset) + flags_str = base::StrCat({flags_str, kSeamlessModesetStr, ", "}); + + // Remove trailing comma and space. + if (!flags_str.empty()) + flags_str.resize(flags_str.size() - 2); + return flags_str; +} + TestNativeDisplayDelegate::TestNativeDisplayDelegate(ActionLogger* log) : max_configurable_pixels_(0), get_hdcp_expectation_(true), @@ -110,6 +126,7 @@ const std::vector<display::DisplayConfigurationParams>& config_requests, ConfigureCallback callback, uint32_t modeset_flag) { + log_->AppendAction(GetModesetFlag(modeset_flag)); bool config_success = true; for (const auto& config : config_requests) config_success &= Configure(config); @@ -119,6 +136,10 @@ if (config_success) SaveCurrentConfigSystemBandwidth(config_requests); + std::string config_outcome = "outcome: "; + config_outcome += config_success ? "success" : "failure"; + log_->AppendAction(config_outcome); + if (run_async_) { base::ThreadTaskRunnerHandle::Get()->PostTask( FROM_HERE, base::BindOnce(std::move(callback), config_success));
diff --git a/ui/display/manager/test/test_native_display_delegate.h b/ui/display/manager/test/test_native_display_delegate.h index bb6c520c..4d3624b 100644 --- a/ui/display/manager/test/test_native_display_delegate.h +++ b/ui/display/manager/test/test_native_display_delegate.h
@@ -23,6 +23,12 @@ namespace test { +constexpr char kTestModesetStr[] = "test-modeset"; +constexpr char kCommitModesetStr[] = "commit-modeset"; +constexpr char kSeamlessModesetStr[] = "seamless-modeset"; +constexpr char kModesetOutcomeFailure[] = "outcome: failure"; +constexpr char kModesetOutcomeSuccess[] = "outcome: success"; + class TestNativeDisplayDelegate : public NativeDisplayDelegate { public: // Ownership of |log| remains with the caller.
diff --git a/ui/display/manager/update_display_configuration_task_unittest.cc b/ui/display/manager/update_display_configuration_task_unittest.cc index d546295..a012a62 100644 --- a/ui/display/manager/update_display_configuration_task_unittest.cc +++ b/ui/display/manager/update_display_configuration_task_unittest.cc
@@ -265,10 +265,15 @@ EXPECT_TRUE(configuration_status_); EXPECT_EQ(MULTIPLE_DISPLAY_STATE_SINGLE, display_state_); EXPECT_EQ(chromeos::DISPLAY_POWER_ALL_ON, power_state_); - EXPECT_EQ(JoinActions(GetCrtcAction({displays_[0]->display_id(), gfx::Point(), + EXPECT_EQ(JoinActions(kTestModesetStr, + GetCrtcAction({displays_[0]->display_id(), gfx::Point(), &small_mode_}) .c_str(), - nullptr), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcAction({displays_[0]->display_id(), gfx::Point(), + &small_mode_}) + .c_str(), + kModesetOutcomeSuccess, nullptr), log_.GetActionsAndClear()); } @@ -290,14 +295,23 @@ EXPECT_EQ(MULTIPLE_DISPLAY_STATE_MULTI_EXTENDED, display_state_); EXPECT_EQ(chromeos::DISPLAY_POWER_ALL_ON, power_state_); EXPECT_EQ( - JoinActions(GetCrtcAction( + JoinActions(kTestModesetStr, + GetCrtcAction( {displays_[0]->display_id(), gfx::Point(), &small_mode_}) .c_str(), GetCrtcAction({displays_[1]->display_id(), gfx::Point(0, small_mode_.size().height()), &big_mode_}) .c_str(), - nullptr), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcAction( + {displays_[0]->display_id(), gfx::Point(), &small_mode_}) + .c_str(), + GetCrtcAction({displays_[1]->display_id(), + gfx::Point(0, small_mode_.size().height()), + &big_mode_}) + .c_str(), + kModesetOutcomeSuccess, nullptr), log_.GetActionsAndClear()); } @@ -318,13 +332,21 @@ EXPECT_TRUE(configuration_status_); EXPECT_EQ(MULTIPLE_DISPLAY_STATE_MULTI_MIRROR, display_state_); EXPECT_EQ(chromeos::DISPLAY_POWER_ALL_ON, power_state_); - EXPECT_EQ(JoinActions(GetCrtcAction({displays_[0]->display_id(), gfx::Point(), + EXPECT_EQ(JoinActions(kTestModesetStr, + GetCrtcAction({displays_[0]->display_id(), gfx::Point(), &small_mode_}) .c_str(), GetCrtcAction({displays_[1]->display_id(), gfx::Point(), &small_mode_}) .c_str(), - nullptr), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcAction({displays_[0]->display_id(), gfx::Point(), + &small_mode_}) + .c_str(), + GetCrtcAction({displays_[1]->display_id(), gfx::Point(), + &small_mode_}) + .c_str(), + kModesetOutcomeSuccess, nullptr), log_.GetActionsAndClear()); } @@ -366,6 +388,7 @@ EXPECT_EQ( JoinActions( // All displays will fail to modeset together. Initiate retry logic. + kTestModesetStr, GetCrtcAction( {displays_[0]->display_id(), gfx::Point(), &small_mode_}) .c_str(), @@ -373,33 +396,38 @@ gfx::Point(0, small_mode_.size().height()), &big_mode_}) .c_str(), + kModesetOutcomeFailure, // We first attempt to modeset the internal display with all // other displays disabled, which will fail. + kTestModesetStr, GetCrtcAction( {displays_[0]->display_id(), gfx::Point(), &small_mode_}) .c_str(), GetCrtcAction({displays_[1]->display_id(), gfx::Point(0, small_mode_.size().height()), nullptr}) .c_str(), + kModesetOutcomeFailure, // Since internal displays are restricted to their preferred mode, // there are no other modes to try. Disable the internal display when // we attempt to modeset displays that are connected to other // connectors. Regardless of what happens next, the configuration will // still fail completely. External display fail modeset, downgrade // once, and then fail completely. + kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), nullptr}) .c_str(), GetCrtcAction({displays_[1]->display_id(), gfx::Point(0, small_mode_.size().height()), &big_mode_}) .c_str(), + kModesetOutcomeFailure, kTestModesetStr, GetCrtcAction({displays_[0]->display_id(), gfx::Point(), nullptr}) .c_str(), GetCrtcAction({displays_[1]->display_id(), gfx::Point(0, small_mode_.size().height()), &small_mode_}) .c_str(), - nullptr), + kModesetOutcomeFailure, nullptr), log_.GetActionsAndClear()); } @@ -420,10 +448,15 @@ EXPECT_TRUE(configuration_status_); EXPECT_EQ(MULTIPLE_DISPLAY_STATE_SINGLE, display_state_); EXPECT_EQ(chromeos::DISPLAY_POWER_ALL_ON, power_state_); - EXPECT_EQ(JoinActions(GetCrtcAction({displays_[0]->display_id(), gfx::Point(), + EXPECT_EQ(JoinActions(kTestModesetStr, + GetCrtcAction({displays_[0]->display_id(), gfx::Point(), &small_mode_}) .c_str(), - nullptr), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcAction({displays_[0]->display_id(), gfx::Point(), + &small_mode_}) + .c_str(), + kModesetOutcomeSuccess, nullptr), log_.GetActionsAndClear()); // Turn power off @@ -440,11 +473,16 @@ EXPECT_TRUE(configuration_status_); EXPECT_EQ(MULTIPLE_DISPLAY_STATE_SINGLE, display_state_); EXPECT_EQ(chromeos::DISPLAY_POWER_ALL_OFF, power_state_); - EXPECT_EQ(JoinActions(GetCrtcAction( - {displays_[0]->display_id(), gfx::Point(), nullptr}) - .c_str(), - nullptr), - log_.GetActionsAndClear()); + EXPECT_EQ( + JoinActions( + kTestModesetStr, + GetCrtcAction({displays_[0]->display_id(), gfx::Point(), nullptr}) + .c_str(), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcAction({displays_[0]->display_id(), gfx::Point(), nullptr}) + .c_str(), + kModesetOutcomeSuccess, nullptr), + log_.GetActionsAndClear()); } TEST_F(UpdateDisplayConfigurationTaskTest, NoopSoftwareMirrorConfiguration) { @@ -516,14 +554,23 @@ EXPECT_TRUE(layout_manager_.GetSoftwareMirroringController() ->SoftwareMirroringEnabled()); EXPECT_EQ( - JoinActions(GetCrtcAction( + JoinActions(kTestModesetStr, + GetCrtcAction( {displays_[0]->display_id(), gfx::Point(), &small_mode_}) .c_str(), GetCrtcAction({displays_[1]->display_id(), gfx::Point(0, small_mode_.size().height()), &big_mode_}) .c_str(), - nullptr), + kModesetOutcomeSuccess, kCommitModesetStr, + GetCrtcAction( + {displays_[0]->display_id(), gfx::Point(), &small_mode_}) + .c_str(), + GetCrtcAction({displays_[1]->display_id(), + gfx::Point(0, small_mode_.size().height()), + &big_mode_}) + .c_str(), + kModesetOutcomeSuccess, nullptr), log_.GetActionsAndClear()); }
diff --git a/ui/gl/gl_display_manager.cc b/ui/gl/gl_display_manager.cc index ed233f4..c1cb2a0a 100644 --- a/ui/gl/gl_display_manager.cc +++ b/ui/gl/gl_display_manager.cc
@@ -6,10 +6,10 @@ namespace gl { #if defined(USE_EGL) -template class GLDisplayManager<GLDisplayEGL>; +template class EXPORT_TEMPLATE_DEFINE(GL_EXPORT) GLDisplayManager<GLDisplayEGL>; #endif #if defined(USE_GLX) -template class GLDisplayManager<GLDisplayX11>; +template class EXPORT_TEMPLATE_DEFINE(GL_EXPORT) GLDisplayManager<GLDisplayX11>; #endif } // namespace gl
diff --git a/ui/gl/gl_display_manager.h b/ui/gl/gl_display_manager.h index 3225c7d..cd925dd 100644 --- a/ui/gl/gl_display_manager.h +++ b/ui/gl/gl_display_manager.h
@@ -10,6 +10,7 @@ #include <vector> #include "base/check.h" +#include "base/export_template.h" #include "base/no_destructor.h" #include "base/synchronization/lock.h" #include "base/thread_annotations.h" @@ -20,7 +21,7 @@ namespace gl { template <typename GLDisplayPlatform> -class GL_EXPORT GLDisplayManager { +class GLDisplayManager { public: // Getter for the singleton. This will return nullptr on failure. // This should only be called inside the ui/gl module. In component build, @@ -95,10 +96,16 @@ #if defined(USE_EGL) using GLDisplayManagerEGL = GLDisplayManager<GLDisplayEGL>; + +extern template class EXPORT_TEMPLATE_DECLARE(GL_EXPORT) + GLDisplayManager<GLDisplayEGL>; #endif #if defined(USE_GLX) using GLDisplayManagerX11 = GLDisplayManager<GLDisplayX11>; + +extern template class EXPORT_TEMPLATE_DECLARE(GL_EXPORT) + GLDisplayManager<GLDisplayX11>; #endif } // namespace gl
diff --git a/ui/strings/translations/ui_strings_as.xtb b/ui/strings/translations/ui_strings_as.xtb index d1b1cab..0eee44a 100644 --- a/ui/strings/translations/ui_strings_as.xtb +++ b/ui/strings/translations/ui_strings_as.xtb
@@ -103,6 +103,7 @@ <translation id="4289300219472526559">কথা কওক</translation> <translation id="4289540628985791613">ৰূপৰেখা</translation> <translation id="4306392492252714209">ক্লিপব’ৰ্ডৰ পৰা আঁতৰাওক।</translation> +<translation id="4311195029067684288">পূৰ্ণ</translation> <translation id="4491109536499578614">প্ৰতিচ্ছবি</translation> <translation id="4565377596337484307">পাছৱৰ্ড লুকুৱাওক</translation> <translation id="4588090240171750605">সোঁফাললৈ স্ক্ৰ’ল কৰক</translation> @@ -110,8 +111,10 @@ <translation id="4746179598275229723">এক্সটেনশ্বন আনপিন কৰা আছে</translation> <translation id="4788285488841504513">{MONTHS,plural, =1{১ মাহ বাকী আছে}one{# মাহ বাকী আছে}other{# মাহ বাকী আছে}}</translation> <translation id="4888938634149558681">কল কৰক</translation> +<translation id="4937657825850660613">আধা</translation> <translation id="4968171027979920686">{SECONDS,plural, =1{১ ছেকেণ্ড}one{# ছেকেণ্ড}other{# ছেকেণ্ড}}</translation> <translation id="4971687151119236543">মিডিয়াৰ পৰৱর্তী ট্ৰেক</translation> +<translation id="4971925105143343452">আংশিক</translation> <translation id="5046499563572181734">ইয়াত টিপক</translation> <translation id="5076340679995252485">&পেষ্ট কৰক</translation> <translation id="5123162024343028706">ওপৰৰ অংশত ৰাখক</translation>
diff --git a/ui/strings/translations/ui_strings_be.xtb b/ui/strings/translations/ui_strings_be.xtb index b28b5828..55353dd0 100644 --- a/ui/strings/translations/ui_strings_be.xtb +++ b/ui/strings/translations/ui_strings_be.xtb
@@ -103,6 +103,7 @@ <translation id="4289300219472526559">Пачаць галасавы ўвод</translation> <translation id="4289540628985791613">Агляд</translation> <translation id="4306392492252714209">Выдаліць з буфера абмену.</translation> +<translation id="4311195029067684288">Поўнасцю</translation> <translation id="4491109536499578614">Відарыс</translation> <translation id="4565377596337484307">Схаваць пароль</translation> <translation id="4588090240171750605">Прагартаць управа</translation> @@ -110,8 +111,10 @@ <translation id="4746179598275229723">Пашырэнне адмацавана</translation> <translation id="4788285488841504513">{MONTHS,plural, =1{Застаўся 1 месяц}one{Застаўся # месяц}few{Засталося # месяцы}many{Засталося # месяцаў}other{Засталося # месяца}}</translation> <translation id="4888938634149558681">Зрабіць выклік</translation> +<translation id="4937657825850660613">Напалавіну</translation> <translation id="4968171027979920686">{SECONDS,plural, =1{1 секунда}one{# секунда}few{# секунды}many{# секунд}other{# секунды}}</translation> <translation id="4971687151119236543">Папярэдні трэк</translation> +<translation id="4971925105143343452">Часткова</translation> <translation id="5046499563572181734">Дакраніцеся тут</translation> <translation id="5076340679995252485">&Уставіць</translation> <translation id="5123162024343028706">Замацаваць наверсе</translation>
diff --git a/ui/strings/translations/ui_strings_ca.xtb b/ui/strings/translations/ui_strings_ca.xtb index 12d9e95..38ff8c4 100644 --- a/ui/strings/translations/ui_strings_ca.xtb +++ b/ui/strings/translations/ui_strings_ca.xtb
@@ -111,6 +111,7 @@ <translation id="4746179598275229723">L'extensió s'ha deixat de fixar</translation> <translation id="4788285488841504513">{MONTHS,plural, =1{D'aquí a 1 mes}other{D'aquí a # mesos}}</translation> <translation id="4888938634149558681">Fes una trucada</translation> +<translation id="4937657825850660613">Meitat</translation> <translation id="4968171027979920686">{SECONDS,plural, =1{1 segon}other{# segons}}</translation> <translation id="4971687151119236543">Fitxer multimèdia: pista anterior</translation> <translation id="4971925105143343452">Parcial</translation>
diff --git a/ui/strings/translations/ui_strings_da.xtb b/ui/strings/translations/ui_strings_da.xtb index ace7bc58..a674d38 100644 --- a/ui/strings/translations/ui_strings_da.xtb +++ b/ui/strings/translations/ui_strings_da.xtb
@@ -111,6 +111,7 @@ <translation id="4746179598275229723">Udvidelsen er frigjort</translation> <translation id="4788285488841504513">{MONTHS,plural, =1{Der er 1 måned tilbage}one{Der er # måned tilbage}other{Der er # måneder tilbage}}</translation> <translation id="4888938634149558681">Ring op</translation> +<translation id="4937657825850660613">Halver</translation> <translation id="4968171027979920686">{SECONDS,plural, =1{1 sekund}one{# sekunder}other{# sekunder}}</translation> <translation id="4971687151119236543">Medie: Forrige nummer</translation> <translation id="4971925105143343452">Delvis</translation>
diff --git a/ui/strings/translations/ui_strings_es-419.xtb b/ui/strings/translations/ui_strings_es-419.xtb index 047e27a5..d1d1d6e 100644 --- a/ui/strings/translations/ui_strings_es-419.xtb +++ b/ui/strings/translations/ui_strings_es-419.xtb
@@ -111,6 +111,7 @@ <translation id="4746179598275229723">Se dejó de fijar la extensión</translation> <translation id="4788285488841504513">{MONTHS,plural, =1{Queda 1 mes}other{Quedan # meses}}</translation> <translation id="4888938634149558681">Realizar llamada</translation> +<translation id="4937657825850660613">Mitad</translation> <translation id="4968171027979920686">{SECONDS,plural, =1{1 segundo}other{# segundos}}</translation> <translation id="4971687151119236543">Pista multimedia anterior</translation> <translation id="4971925105143343452">Parcial</translation>
diff --git a/ui/strings/translations/ui_strings_fr.xtb b/ui/strings/translations/ui_strings_fr.xtb index b3e90b0..042940f 100644 --- a/ui/strings/translations/ui_strings_fr.xtb +++ b/ui/strings/translations/ui_strings_fr.xtb
@@ -111,6 +111,7 @@ <translation id="4746179598275229723">Extension retirée</translation> <translation id="4788285488841504513">{MONTHS,plural, =1{1 mois restant}one{# mois restant}other{# mois restants}}</translation> <translation id="4888938634149558681">Passer un appel</translation> +<translation id="4937657825850660613">Moitié</translation> <translation id="4968171027979920686">{SECONDS,plural, =1{1 seconde}one{# seconde}other{# secondes}}</translation> <translation id="4971687151119236543">Contenu multimédia : titre précédent</translation> <translation id="4971925105143343452">Partielle</translation>
diff --git a/ui/strings/translations/ui_strings_is.xtb b/ui/strings/translations/ui_strings_is.xtb index 863a566d..f8d070c 100644 --- a/ui/strings/translations/ui_strings_is.xtb +++ b/ui/strings/translations/ui_strings_is.xtb
@@ -103,6 +103,7 @@ <translation id="4289300219472526559">Byrja að tala</translation> <translation id="4289540628985791613">Yfirlit</translation> <translation id="4306392492252714209">Fjarlægja af klippiborði</translation> +<translation id="4311195029067684288">Allur</translation> <translation id="4491109536499578614">Mynd</translation> <translation id="4565377596337484307">Fela aðgangsorð</translation> <translation id="4588090240171750605">Fletta til hægri</translation> @@ -110,8 +111,10 @@ <translation id="4746179598275229723">Viðbót losuð</translation> <translation id="4788285488841504513">{MONTHS,plural, =1{Einn mánuður eftir}one{# mánuður eftir}other{# mánuðir eftir}}</translation> <translation id="4888938634149558681">Hringja</translation> +<translation id="4937657825850660613">Hálfur</translation> <translation id="4968171027979920686">{SECONDS,plural, =1{1 sekúnda}one{# sekúnda}other{# sekúndur}}</translation> <translation id="4971687151119236543">Fyrra lag</translation> +<translation id="4971925105143343452">Hluti</translation> <translation id="5046499563572181734">Ýttu hér</translation> <translation id="5076340679995252485">Líma</translation> <translation id="5123162024343028706">Fljóta efst</translation>
diff --git a/ui/strings/translations/ui_strings_kn.xtb b/ui/strings/translations/ui_strings_kn.xtb index 8525b7e..2f7f67f 100644 --- a/ui/strings/translations/ui_strings_kn.xtb +++ b/ui/strings/translations/ui_strings_kn.xtb
@@ -111,6 +111,7 @@ <translation id="4746179598275229723">ವಿಸ್ತರಣೆಯನ್ನು ಅನ್ಪಿನ್ ಮಾಡಲಾಗಿದೆ</translation> <translation id="4788285488841504513">{MONTHS,plural, =1{1 ತಿಂಗಳು ಉಳಿದಿದೆ}one{# ತಿಂಗಳುಗಳು ಉಳಿದಿವೆ}other{# ತಿಂಗಳುಗಳು ಉಳಿದಿವೆ}}</translation> <translation id="4888938634149558681">ಕರೆ ಮಾಡಿ</translation> +<translation id="4937657825850660613">ಅರ್ಧ</translation> <translation id="4968171027979920686">{SECONDS,plural, =1{1 ಸೆಕೆಂಡ್}one{# ಸೆಕೆಂಡುಗಳು}other{# ಸೆಕೆಂಡುಗಳು}}</translation> <translation id="4971687151119236543">ಮೀಡಿಯಾದ ಹಿಂದಿನ ಟ್ರ್ಯಾಕ್</translation> <translation id="4971925105143343452">ಭಾಗಶಃ</translation>
diff --git a/ui/strings/translations/ui_strings_lo.xtb b/ui/strings/translations/ui_strings_lo.xtb index 187ebf0..ae2ef1cc 100644 --- a/ui/strings/translations/ui_strings_lo.xtb +++ b/ui/strings/translations/ui_strings_lo.xtb
@@ -103,6 +103,7 @@ <translation id="4289300219472526559">ເລີ່ມຕົ້ນເວົ້າ</translation> <translation id="4289540628985791613">ພາບລວມ</translation> <translation id="4306392492252714209">ລຶບອອກຈາກຄລິບບອດ.</translation> +<translation id="4311195029067684288">ເຕັມ</translation> <translation id="4491109536499578614">ຮູບ</translation> <translation id="4565377596337484307">ເຊື່ອງລະຫັດຜ່ານ</translation> <translation id="4588090240171750605">ເລື່ອນໄປທາງຂວາ</translation> @@ -110,8 +111,10 @@ <translation id="4746179598275229723">ຖອນໝຸດສ່ວນຂະຫຍາຍແລ້ວ</translation> <translation id="4788285488841504513">{MONTHS,plural, =1{ຍັງເຫຼືອ 1 ເດືອນ}other{ຍັງເຫຼືອ # ເດືອນ}}</translation> <translation id="4888938634149558681">ໂທອອກ</translation> +<translation id="4937657825850660613">ເຄິ່ງໜຶ່ງ</translation> <translation id="4968171027979920686">{SECONDS,plural, =1{1 ວິນາທີ}other{# ວິນາທີ}}</translation> <translation id="4971687151119236543">ເພງຜ່ານມາຂອງມີເດຍ</translation> +<translation id="4971925105143343452">ບາງສ່ວນ</translation> <translation id="5046499563572181734">ແຕະບ່ອນນີ້</translation> <translation id="5076340679995252485">ແປະໃສ່</translation> <translation id="5123162024343028706">ລອຍຢູ່ທາງເທິງ</translation>
diff --git a/ui/strings/translations/ui_strings_ml.xtb b/ui/strings/translations/ui_strings_ml.xtb index a29207a..be91544 100644 --- a/ui/strings/translations/ui_strings_ml.xtb +++ b/ui/strings/translations/ui_strings_ml.xtb
@@ -111,6 +111,7 @@ <translation id="4746179598275229723">വിപുലീകരണം അൺപിൻ ചെയ്തു</translation> <translation id="4788285488841504513">{MONTHS,plural, =1{ഒരു മാസം ശേഷിക്കുന്നു}other{# മാസം ശേഷിക്കുന്നു}}</translation> <translation id="4888938634149558681">കോൾ ചെയ്യുക</translation> +<translation id="4937657825850660613">പകുതി</translation> <translation id="4968171027979920686">{SECONDS,plural, =1{ഒരു സെക്കന്ഡ്}other{# സെക്കൻഡ്}}</translation> <translation id="4971687151119236543">മുമ്പത്തെ മീഡിയാ ട്രാക്ക്</translation> <translation id="4971925105143343452">ഭാഗികം</translation>
diff --git a/ui/strings/translations/ui_strings_pa.xtb b/ui/strings/translations/ui_strings_pa.xtb index 2720465..971d8e45 100644 --- a/ui/strings/translations/ui_strings_pa.xtb +++ b/ui/strings/translations/ui_strings_pa.xtb
@@ -103,6 +103,7 @@ <translation id="4289300219472526559">ਬੋਲਣਾ ਸ਼ੁਰੂ ਕਰੋ</translation> <translation id="4289540628985791613">ਓਵਰਵਿਊ</translation> <translation id="4306392492252714209">ਕਲਿੱਪਬੋਰਡ ਵਿੱਚੋਂ ਹਟਾਓ।</translation> +<translation id="4311195029067684288">ਪੂਰੀ ਸਕ੍ਰੀਨ</translation> <translation id="4491109536499578614">ਚਿੱਤਰ</translation> <translation id="4565377596337484307">ਪਾਸਵਰਡ ਲੁਕਾਓ</translation> <translation id="4588090240171750605">ਸੱਜੇ ਪਾਸੇ ਸਕ੍ਰੌਲ ਕਰੋ</translation> @@ -110,8 +111,10 @@ <translation id="4746179598275229723">ਐਕਸਟੈਂਸ਼ਨ ਨੂੰ ਅਣਪਿੰਨ ਕੀਤਾ ਗਿਆ</translation> <translation id="4788285488841504513">{MONTHS,plural, =1{1 ਮਹੀਨਾ ਬਾਕੀ}one{# ਮਹੀਨਾ ਬਾਕੀ}other{# ਮਹੀਨੇ ਬਾਕੀ}}</translation> <translation id="4888938634149558681">ਕਾਲ ਕਰੋ</translation> +<translation id="4937657825850660613">ਸਕ੍ਰੀਨ ਨੂੰ ਅੱਧੇ ਹਿੱਸੇ ਵਿੱਚ ਵੰਡੋ</translation> <translation id="4968171027979920686">{SECONDS,plural, =1{1 ਸਕਿੰਟ}one{# ਸਕਿੰਟ }other{# ਸਕਿੰਟ }}</translation> <translation id="4971687151119236543">ਮੀਡੀਆ ਪਿਛਲਾ ਟਰੈਕ</translation> +<translation id="4971925105143343452">ਅੰਸ਼ਕ ਸਕ੍ਰੀਨ</translation> <translation id="5046499563572181734">ਇੱਥੇ ਟੈਪ ਕਰੋ</translation> <translation id="5076340679995252485">&ਪੇਸਟ ਕਰੋ</translation> <translation id="5123162024343028706">ਸਿਖਰ 'ਤੇ ਲਿਜਾਓ</translation>
diff --git a/ui/strings/translations/ui_strings_si.xtb b/ui/strings/translations/ui_strings_si.xtb index 831917c..e97497a 100644 --- a/ui/strings/translations/ui_strings_si.xtb +++ b/ui/strings/translations/ui_strings_si.xtb
@@ -103,6 +103,7 @@ <translation id="4289300219472526559">කතා කිරීම අරඹන්න</translation> <translation id="4289540628985791613">දළ විශ්ලේෂණය</translation> <translation id="4306392492252714209">පසුරු පුවරුවෙන් ඉවත් කරන්න.</translation> +<translation id="4311195029067684288">පූර්ණ</translation> <translation id="4491109536499578614">රූපය</translation> <translation id="4565377596337484307">මුරපදය සඟවන්න</translation> <translation id="4588090240171750605">දකුණට අනුචලනය කරන්න</translation> @@ -110,8 +111,10 @@ <translation id="4746179598275229723">දිගුව ඇමිණීම ඉවත් කරන ලදි</translation> <translation id="4788285488841504513">{MONTHS,plural, =1{මාස 1ක් ඉතිරියි}one{මාස #ක් ඉතිරියි}other{මාස #ක් ඉතිරියි}}</translation> <translation id="4888938634149558681">ඇමතුම් කරන්න</translation> +<translation id="4937657825850660613">භාගය</translation> <translation id="4968171027979920686">{SECONDS,plural, =1{තත්පර 1}one{තත්පර #}other{තත්පර #}}</translation> <translation id="4971687151119236543">මාධ්ය පෙර ගීතය</translation> +<translation id="4971925105143343452">අර්ධ</translation> <translation id="5046499563572181734">මෙහි තට්ටු කරන්න</translation> <translation id="5076340679995252485">&අලවන්න</translation> <translation id="5123162024343028706">මතුපිට පාවීම</translation>
diff --git a/ui/strings/translations/ui_strings_sk.xtb b/ui/strings/translations/ui_strings_sk.xtb index bab68996..9ea6b7f 100644 --- a/ui/strings/translations/ui_strings_sk.xtb +++ b/ui/strings/translations/ui_strings_sk.xtb
@@ -111,6 +111,7 @@ <translation id="4746179598275229723">Rozšírenie bolo odopnuté</translation> <translation id="4788285488841504513">{MONTHS,plural, =1{zostáva 1 mesiac}few{zostávajú # mesiace}many{zostáva # mesiaca}other{zostáva # mesiacov}}</translation> <translation id="4888938634149558681">Volať</translation> +<translation id="4937657825850660613">Polovica</translation> <translation id="4968171027979920686">{SECONDS,plural, =1{1 sekunda}few{# sekundy}many{# sekundy}other{# sekúnd}}</translation> <translation id="4971687151119236543">Média – predchádzajúca stopa</translation> <translation id="4971925105143343452">Čiastočné</translation>
diff --git a/ui/strings/translations/ui_strings_sq.xtb b/ui/strings/translations/ui_strings_sq.xtb index 948741e..8c027a32 100644 --- a/ui/strings/translations/ui_strings_sq.xtb +++ b/ui/strings/translations/ui_strings_sq.xtb
@@ -103,6 +103,7 @@ <translation id="4289300219472526559">Fillo të flasësh</translation> <translation id="4289540628985791613">Përmbledhje</translation> <translation id="4306392492252714209">Hiqe nga kujtesa e fragmenteve.</translation> +<translation id="4311195029067684288">I plotë</translation> <translation id="4491109536499578614">Imazh</translation> <translation id="4565377596337484307">Fshih fjalëkalimin</translation> <translation id="4588090240171750605">Lëvize djathtas</translation> @@ -110,8 +111,10 @@ <translation id="4746179598275229723">Shtesa u zhgozhdua</translation> <translation id="4788285488841504513">{MONTHS,plural, =1{1 muaj i mbetur}other{# muaj të mbetur}}</translation> <translation id="4888938634149558681">Bëj një telefonatë</translation> +<translation id="4937657825850660613">Gjysmë</translation> <translation id="4968171027979920686">{SECONDS,plural, =1{1 sekondë}other{# sekonda}}</translation> <translation id="4971687151119236543">Gjurma e mëparshme e medias</translation> +<translation id="4971925105143343452">I pjesshëm</translation> <translation id="5046499563572181734">Trokit këtu</translation> <translation id="5076340679995252485">&Ngjit</translation> <translation id="5123162024343028706">Plusko në krye</translation>
diff --git a/ui/strings/translations/ui_strings_sv.xtb b/ui/strings/translations/ui_strings_sv.xtb index 8407289..7d682821 100644 --- a/ui/strings/translations/ui_strings_sv.xtb +++ b/ui/strings/translations/ui_strings_sv.xtb
@@ -111,6 +111,7 @@ <translation id="4746179598275229723">Tillägget har lossats</translation> <translation id="4788285488841504513">{MONTHS,plural, =1{1 månad kvar}other{# månader kvar}}</translation> <translation id="4888938634149558681">Ring</translation> +<translation id="4937657825850660613">Halvskärm</translation> <translation id="4968171027979920686">{SECONDS,plural, =1{1 sekund}other{# sekunder}}</translation> <translation id="4971687151119236543">Föregående spår</translation> <translation id="4971925105143343452">Delvis</translation>
diff --git a/ui/strings/translations/ui_strings_ta.xtb b/ui/strings/translations/ui_strings_ta.xtb index 1a478a78..739c947 100644 --- a/ui/strings/translations/ui_strings_ta.xtb +++ b/ui/strings/translations/ui_strings_ta.xtb
@@ -111,6 +111,7 @@ <translation id="4746179598275229723">நீட்டிப்பு அகற்றப்பட்டது</translation> <translation id="4788285488841504513">{MONTHS,plural, =1{1 மாதம் உள்ளது}other{# மாதங்கள் உள்ளன}}</translation> <translation id="4888938634149558681">அழை</translation> +<translation id="4937657825850660613">அரைப்பகுதி</translation> <translation id="4968171027979920686">{SECONDS,plural, =1{1 நொடி}other{# நொடிகள்}}</translation> <translation id="4971687151119236543">ஊடகத்தின் முந்தைய டிராக்</translation> <translation id="4971925105143343452">பகுதி சார்ந்த</translation>
diff --git a/ui/strings/translations/ui_strings_ur.xtb b/ui/strings/translations/ui_strings_ur.xtb index 3b00629..948fca8c 100644 --- a/ui/strings/translations/ui_strings_ur.xtb +++ b/ui/strings/translations/ui_strings_ur.xtb
@@ -103,6 +103,7 @@ <translation id="4289300219472526559">بولنا شروع کریں</translation> <translation id="4289540628985791613">عمومی جائزہ</translation> <translation id="4306392492252714209">کلپ بورڈ سے ہٹائیں۔</translation> +<translation id="4311195029067684288">مکمل</translation> <translation id="4491109536499578614">تصویر</translation> <translation id="4565377596337484307">پاس ورڈ چھپائیں</translation> <translation id="4588090240171750605">دائیں سکرول کریں</translation> @@ -110,8 +111,10 @@ <translation id="4746179598275229723">ایکسٹینشن کا پن ہٹایا گیا</translation> <translation id="4788285488841504513">{MONTHS,plural, =1{1 مہینہ باقی}other{# مہینے باقی}}</translation> <translation id="4888938634149558681">کال کریں</translation> +<translation id="4937657825850660613">ہاف</translation> <translation id="4968171027979920686">{SECONDS,plural, =1{1 سیکنڈ}other{# سیکنڈ}}</translation> <translation id="4971687151119236543">میڈیا پچھلا ٹریک</translation> +<translation id="4971925105143343452">جزوی</translation> <translation id="5046499563572181734">یہاں تھپتھپائیں</translation> <translation id="5076340679995252485">&پیسٹ کریں</translation> <translation id="5123162024343028706">اوپر دکھائيں</translation>
diff --git a/ui/strings/translations/ui_strings_zh-CN.xtb b/ui/strings/translations/ui_strings_zh-CN.xtb index 2887d5c9..11a164e0 100644 --- a/ui/strings/translations/ui_strings_zh-CN.xtb +++ b/ui/strings/translations/ui_strings_zh-CN.xtb
@@ -111,6 +111,7 @@ <translation id="4746179598275229723">已取消固定该扩展程序</translation> <translation id="4788285488841504513">{MONTHS,plural, =1{还有 1 个月的时间}other{还有 # 个月的时间}}</translation> <translation id="4888938634149558681">致电</translation> +<translation id="4937657825850660613">分成两半</translation> <translation id="4968171027979920686">{SECONDS,plural, =1{1 秒}other{# 秒}}</translation> <translation id="4971687151119236543">媒体上一曲</translation> <translation id="4971925105143343452">局部</translation>
diff --git a/ui/webui/resources/cr_components/customize_themes/customize_themes.html b/ui/webui/resources/cr_components/customize_themes/customize_themes.html index b03b9484..511ea11a 100644 --- a/ui/webui/resources/cr_components/customize_themes/customize_themes.html +++ b/ui/webui/resources/cr_components/customize_themes/customize_themes.html
@@ -147,7 +147,8 @@ </cr-button> </div> </div> -<cr-grid id="themesContainer" columns="6" role="radiogroup"> +<cr-grid id="themesContainer" aria-label="[[i18n('themesContainerLabel')]]" + columns="6" role="radiogroup"> <div aria-label="[[i18n('colorPickerLabel')]]" tabindex$="[[getTabIndex_('autogenerated', selectedTheme)]]" on-click="onAutogeneratedThemeClick_" role="radio"