diff --git a/DEPS b/DEPS index b29863a6..a92e2b9 100644 --- a/DEPS +++ b/DEPS
@@ -312,7 +312,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. - 'v8_revision': '0c8fb68906cead85cb3d5cabba70952d4035a9eb', + 'v8_revision': 'c67d3ca33324c285890dae598cd55b096d10b73f', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling ANGLE # and whatever else without interference from each other. @@ -387,7 +387,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': '40c2330efb906276a8ddb9e06a509ba81dcc0a2b', + 'devtools_frontend_revision': '8a924636318e6612c9d48e2903a13ba631b44ac2', # 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. @@ -423,7 +423,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'dawn_revision': 'a32ce7d8a081747e067a53ab93f2268c463bc5bf', + 'dawn_revision': '3e1501af29365c74b18b7c9090a46b779a204bfb', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -447,7 +447,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling nearby # and whatever else without interference from each other. - 'nearby_revision': '7350643c36c76866f47a7cba479179c3793c14b9', + 'nearby_revision': '4bd0337c105c502de845ba9501ad6e0350f613b9', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling securemessage # and whatever else without interference from each other. @@ -491,7 +491,7 @@ # If you change this, also update the libc++ revision in # //buildtools/deps_revisions.gni. - 'libcxx_revision': '625a5eb4c70878cdd35a1eb3958035c756a35fd8', + 'libcxx_revision': 'bac95aa2e352b64f784bea6fb2ffa4b34603b551', # GN CIPD package version. 'gn_version': 'git_revision:b9c6c19be95a3863e02f00f1fe403b2502e345b6', @@ -907,7 +907,7 @@ 'packages': [ { 'package': 'chromium/rts/model/linux-amd64', - 'version': 'YsvIVIjuPmrZHuliFL4lIJ0GNqEy6j4J-VuagxVG1NsC', + 'version': 'm3m-IfPLI78fDQSCLjKg_NCEYfPUlAzCwbG9nqDpYa4C', }, ], 'dep_type': 'cipd', @@ -918,7 +918,7 @@ 'packages': [ { 'package': 'chromium/rts/model/mac-amd64', - 'version': 'k6HorxFEFrAX9c0RlDu60opkhWWQs58IHFzpOHWWviIC', + 'version': 'snYRY60Q2P5psR5ej5NJSKJlKlrl5wG_8u0VHQ4DSsAC', }, ], 'dep_type': 'cipd', @@ -929,7 +929,7 @@ 'packages': [ { 'package': 'chromium/rts/model/windows-amd64', - 'version': 'Mhg0afTNJ7W3Ec1vAJ2XKNiDX3itfD7WO57ynYmfHpEC', + 'version': 'QwZKU9qmfRM0hiDn2z9KHnwXq3yxBSCA6v7VMmFj4KAC', }, ], 'dep_type': 'cipd', @@ -1230,7 +1230,7 @@ # For Linux and Chromium OS. 'src/third_party/cros_system_api': { - 'url': Var('chromium_git') + '/chromiumos/platform2/system_api.git' + '@' + '8aaa4f264715898c16091c2b92ca750c728c5e09', + 'url': Var('chromium_git') + '/chromiumos/platform2/system_api.git' + '@' + '8d53310032f956e82f1b5a1101623721434e639d', 'condition': 'checkout_linux', }, @@ -1246,7 +1246,7 @@ Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'), 'src/third_party/devtools-frontend-internal': { - 'url': 'https://chrome-internal.googlesource.com/devtools/devtools-internal.git' + '@' + 'a3a7f7933fcebc9ef8ebc271881fda2108fdf0eb', + 'url': 'https://chrome-internal.googlesource.com/devtools/devtools-internal.git' + '@' + '74d8415f20e9f334070ce023a00d0c637b693c2a', 'condition': 'checkout_src_internal', }, @@ -1806,7 +1806,7 @@ 'dep_type': 'cipd', }, - 'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@b8a1b66505f175089378580833f925a3cd34e4f2', + 'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@5f5bc7d1f02f06c7f3d207aa25f552b935106708', 'src/third_party/vulkan_memory_allocator': Var('chromium_git') + '/external/github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git' + '@' + 'ebe84bec02c041d28f902da0214bf442743fc907', @@ -1846,7 +1846,7 @@ Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '74b1f15354f71608a0c08416b21988423e13b65b', 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + '9d9c2d57951e97206748944efe0152007a62918e', + Var('webrtc_git') + '/src.git' + '@' + 'ca7616f061763c668ce09b82a4e7ba49d9dc0fc3', # Wuffs' canonical repository is at github.com/google/wuffs, but we use # Skia's mirror of Wuffs, the same as in upstream Skia's DEPS file. @@ -1946,7 +1946,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/help_app/app', - 'version': 'lhlN-LOjCQgLbyLIPBtTJAot9ia0-BjaG3lpGPSFxXEC', + 'version': 'f8ylwl_7HqTWTqihQRH3WL8iS0xuAWqrigwpSJJfwIYC', }, ], 'condition': 'checkout_chromeos and checkout_src_internal', @@ -1957,7 +1957,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/media_app/app', - 'version': 'v6JMrVps0HpKkElhb1rXD9zEWrg-mdbaiDBnOthjUNUC', + 'version': 'poyb3e4WUvmoxcwMmpwfEcu7Fjd5Dbt1HzHlSLFZT58C', }, ], 'condition': 'checkout_chromeos and checkout_src_internal', @@ -1968,7 +1968,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/projector_app/app', - 'version': 'pUD2EzZ9b5RTD4G4d0V7AE5GgByWpMWC9lLIy2mLWl4C', + 'version': 'fOPFXhlcio6ln-pWXAl5mjzBhbF88ooEtWFBfCFylk4C', }, ], 'condition': 'checkout_chromeos and checkout_src_internal',
diff --git a/ash/BUILD.gn b/ash/BUILD.gn index cd20ec4..93c4e523 100644 --- a/ash/BUILD.gn +++ b/ash/BUILD.gn
@@ -1619,6 +1619,8 @@ "system/privacy_hub/microphone_privacy_switch_controller.h", "system/privacy_hub/privacy_hub_controller.cc", "system/privacy_hub/privacy_hub_controller.h", + "system/privacy_hub/privacy_hub_metrics.cc", + "system/privacy_hub/privacy_hub_metrics.h", "system/privacy_screen/privacy_screen_feature_pod_controller.cc", "system/privacy_screen/privacy_screen_feature_pod_controller.h", "system/privacy_screen/privacy_screen_toast_controller.cc",
diff --git a/ash/constants/ash_features.cc b/ash/constants/ash_features.cc index 7e2ef43..6fab762e 100644 --- a/ash/constants/ash_features.cc +++ b/ash/constants/ash_features.cc
@@ -1630,6 +1630,12 @@ // Enable or disable quick settings revamped view. BASE_FEATURE(kQsRevamp, "QsRevamp", base::FEATURE_DISABLED_BY_DEFAULT); +// Controls whether the Projector Viewer supports the user experience for +// secondary account. +BASE_FEATURE(kProjectorViewerUseSecondaryAccount, + "ProjectorViewerUseSecondaryAccount", + base::FEATURE_DISABLED_BY_DEFAULT); + // Controls whether the quick dim prototype is enabled. BASE_FEATURE(kQuickDim, "QuickDim", base::FEATURE_ENABLED_BY_DEFAULT); @@ -2854,6 +2860,12 @@ return base::FeatureList::IsEnabled(kQsRevamp); } +bool IsProjectorViewerUseSecondaryAccountEnabled() { + // TODO(b/250646696): enable this feature based on + // ProjectorBleedingEdgeExperience when it is ready to be tested. + return base::FeatureList::IsEnabled(kProjectorViewerUseSecondaryAccount); +} + bool IsQuickDimEnabled() { return base::FeatureList::IsEnabled(kQuickDim) && ash::switches::HasHps(); }
diff --git a/ash/constants/ash_features.h b/ash/constants/ash_features.h index eab3ff57..f3e8d51 100644 --- a/ash/constants/ash_features.h +++ b/ash/constants/ash_features.h
@@ -463,6 +463,8 @@ BASE_DECLARE_FEATURE(kProjectorBleedingEdgeExperience); COMPONENT_EXPORT(ASH_CONSTANTS) BASE_DECLARE_FEATURE(kProjectorWebReportCrash); BASE_DECLARE_FEATURE(kProjectorUseApiKeyForTranslation); +COMPONENT_EXPORT(ASH_CONSTANTS) +BASE_DECLARE_FEATURE(kProjectorViewerUseSecondaryAccount); COMPONENT_EXPORT(ASH_CONSTANTS) BASE_DECLARE_FEATURE(kQsRevamp); COMPONENT_EXPORT(ASH_CONSTANTS) BASE_DECLARE_FEATURE(kQuickDim); COMPONENT_EXPORT(ASH_CONSTANTS) BASE_DECLARE_FEATURE(kVCBackgroundBlur); @@ -779,6 +781,8 @@ COMPONENT_EXPORT(ASH_CONSTANTS) bool IsProjectorUpdateIndexableTextEnabled(); COMPONENT_EXPORT(ASH_CONSTANTS) bool IsProjectorUseOAuthForGetVideoInfoEnabled(); +COMPONENT_EXPORT(ASH_CONSTANTS) +bool IsProjectorViewerUseSecondaryAccountEnabled(); COMPONENT_EXPORT(ASH_CONSTANTS) bool IsProjectorWebReportCrashEnabled(); COMPONENT_EXPORT(ASH_CONSTANTS) bool IsProjectorUseApiKeyForTranslationEnabled();
diff --git a/ash/quick_pair/pairing/fast_pair/fast_pair_pairer_impl.cc b/ash/quick_pair/pairing/fast_pair/fast_pair_pairer_impl.cc index c90483ab..dd1a38db 100644 --- a/ash/quick_pair/pairing/fast_pair/fast_pair_pairer_impl.cc +++ b/ash/quick_pair/pairing/fast_pair/fast_pair_pairer_impl.cc
@@ -193,6 +193,7 @@ QP_LOG(WARNING) << __func__ << ": Handshake failed with " << device << " because: " << failure.value(); std::move(pair_failed_callback_).Run(device_, failure.value()); + // |this| may be destroyed after this line. return; } @@ -201,6 +202,7 @@ QP_LOG(WARNING) << __func__ << ": Device lost during handshake."; std::move(pair_failed_callback_) .Run(device_, PairFailure::kPairingDeviceLost); + // |this| may be destroyed after this line. return; } @@ -281,6 +283,7 @@ "device due to error: " << error.value(); std::move(pair_failed_callback_).Run(device_, PairFailure::kPairingConnect); + // |this| may be destroyed after this line. RecordPairDeviceErrorReason(error.value()); return; } @@ -301,6 +304,7 @@ QP_LOG(WARNING) << __func__ << " " << error_message; RecordConnectDeviceResult(/*success=*/false); std::move(pair_failed_callback_).Run(device_, PairFailure::kAddressConnect); + // |this| may be destroyed after this line. } void FastPairPairerImpl::ConfirmPasskey(device::BluetoothDevice* device, @@ -346,6 +350,7 @@ << ": Failed to write passkey. Error: " << failure.value(); RecordWritePasskeyCharacteristicPairFailure(failure.value()); std::move(pair_failed_callback_).Run(device_, failure.value()); + // |this| may be destroyed after this line. return; } @@ -362,6 +367,7 @@ QP_LOG(WARNING) << "Missing decrypted passkey from parse."; std::move(pair_failed_callback_) .Run(device_, PairFailure::kPasskeyDecryptFailure); + // |this| may be destroyed after this line. RecordPasskeyCharacteristicDecryptResult(/*success=*/false); return; } @@ -373,6 +379,7 @@ << ". Actual: " << MessageTypeToString(passkey->message_type); std::move(pair_failed_callback_) .Run(device_, PairFailure::kIncorrectPasskeyResponseType); + // |this| may be destroyed after this line. RecordPasskeyCharacteristicDecryptResult(/*success=*/false); return; } @@ -382,6 +389,7 @@ << ". Actual: " << passkey->passkey; std::move(pair_failed_callback_) .Run(device_, PairFailure::kPasskeyMismatch); + // |this| may be destroyed after this line. RecordPasskeyCharacteristicDecryptResult(/*success=*/false); return; } @@ -399,6 +407,7 @@ QP_LOG(ERROR) << "Bluetooth pairing device lost during write to passkey."; std::move(pair_failed_callback_) .Run(device_, PairFailure::kPairingDeviceLost); + // |this| may be destroyed after this line. return; }
diff --git a/ash/shelf/login_shelf_view_pixeltest.cc b/ash/shelf/login_shelf_view_pixeltest.cc index 83fc960..68df0a7 100644 --- a/ash/shelf/login_shelf_view_pixeltest.cc +++ b/ash/shelf/login_shelf_view_pixeltest.cc
@@ -3,6 +3,9 @@ // found in the LICENSE file. #include "ash/focus_cycler.h" +#include "ash/login/ui/lock_contents_view.h" +#include "ash/login/ui/lock_screen.h" +#include "ash/login/ui/login_big_user_view.h" #include "ash/login/ui/login_test_base.h" #include "ash/shelf/login_shelf_view.h" #include "ash/shelf/shelf.h" @@ -32,7 +35,13 @@ ShowLoginScreen(/*set_wallpaper=*/false); SetUserCount(1); + primary_big_user_view_ = + LockContentsView::TestApi( + LockScreen::TestApi(LockScreen::Get()).contents_view()) + .primary_big_view(); } + + views::View* primary_big_user_view_ = nullptr; }; class LoginShelfViewPixelTest : public LoginShelfViewPixelTestBase { @@ -47,24 +56,29 @@ // to the login shelf works as expected. TEST_F(LoginShelfViewPixelTest, FocusTraversalFromLockContents) { // Trigger the tab key. Verify that the login user expand button is focused. + aura::Window* primary_shelf_window = GetPrimaryShelf()->GetWindow(); PressAndReleaseKey(ui::VKEY_TAB); - EXPECT_TRUE(GetPixelDiffer()->ComparePrimaryFullScreen( - "focus_on_login_user_expand_button")); + EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( + "focus_on_login_user_expand_button", primary_big_user_view_, + primary_shelf_window)); // Trigger the tab key. Check that the login shelf shutdown button is focused. PressAndReleaseKey(ui::VKEY_TAB); - EXPECT_TRUE( - GetPixelDiffer()->ComparePrimaryFullScreen("focus_on_shutdown_button")); + EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( + "focus_on_shutdown_button", primary_big_user_view_, + primary_shelf_window)); // Trigger the tab key. Check that the browser as guest button is focused. PressAndReleaseKey(ui::VKEY_TAB); - EXPECT_TRUE(GetPixelDiffer()->ComparePrimaryFullScreen( - "focus_on_browser_as_guest_button")); + EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( + "focus_on_browser_as_guest_button", primary_big_user_view_, + primary_shelf_window)); // Trigger the tab key. Check that the add person button is focused. PressAndReleaseKey(ui::VKEY_TAB); - EXPECT_TRUE( - GetPixelDiffer()->ComparePrimaryFullScreen("focus_on_add_person_button")); + EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( + "focus_on_add_person_button", primary_big_user_view_, + primary_shelf_window)); } // Used to verify the login shelf features with a policy wallpaper. @@ -120,9 +134,9 @@ // works as expected (see https://crbug.com/1197052). TEST_P(LoginShelfWithPolicyWallpaperPixelTestWithRTL, FocusOnShutdownButton) { FocusOnShutdownButton(); - EXPECT_TRUE(GetPixelDiffer()->ComparePrimaryFullScreen( - GetParam() ? "focus_on_shutdown_button_rtl" - : "focus_on_shutdown_button")); + EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( + GetParam() ? "focus_on_shutdown_button_rtl" : "focus_on_shutdown_button", + primary_big_user_view_, GetPrimaryShelf()->GetWindow())); } } // namespace ash
diff --git a/ash/shelf/scrollable_shelf_view_pixeltest.cc b/ash/shelf/scrollable_shelf_view_pixeltest.cc index edfdd95..24420a7 100644 --- a/ash/shelf/scrollable_shelf_view_pixeltest.cc +++ b/ash/shelf/scrollable_shelf_view_pixeltest.cc
@@ -3,9 +3,13 @@ // found in the LICENSE file. #include "ash/shelf/scrollable_shelf_view.h" +#include "ash/shelf/shelf_menu_model_adapter.h" +#include "ash/shelf/shelf_widget.h" #include "ash/shelf/test/scrollable_shelf_test_base.h" #include "ash/test/ash_pixel_diff_test_helper.h" #include "ash/test/ash_pixel_test_init_params.h" +#include "ui/views/controls/menu/menu_item_view.h" +#include "ui/views/controls/menu/submenu_view.h" namespace ash { @@ -74,8 +78,16 @@ GetEventGenerator()->MoveMouseTo(shelf_center); GetEventGenerator()->PressRightButton(); - EXPECT_TRUE(GetPixelDiffer()->ComparePrimaryFullScreen( - GetParam() ? "shelf_context_menu_in_guest_mode" : "shelf_context_menu")); + // Verify the shelf context menu and the shelf. + EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( + GetParam() ? "shelf_context_menu_in_guest_mode" : "shelf_context_menu", + GetPrimaryShelf() + ->shelf_widget() + ->shelf_view_for_testing() + ->shelf_menu_model_adapter_for_testing() + ->root_for_testing() + ->GetSubmenu(), + GetPrimaryShelf()->GetWindow())); } } // namespace ash
diff --git a/ash/strings/ash_strings_ca.xtb b/ash/strings/ash_strings_ca.xtb index b6f74a1..af7140d 100644 --- a/ash/strings/ash_strings_ca.xtb +++ b/ash/strings/ash_strings_ca.xtb
@@ -290,7 +290,7 @@ <translation id="2620436844016719705">Sistema</translation> <translation id="2621713457727696555">Segura</translation> <translation id="263399434338050016">"Selecciona-ho tot"</translation> -<translation id="2645435784669275700">Chrome OS</translation> +<translation id="2645435784669275700">ChromeOS</translation> <translation id="2653019840645008922">Captura de la finestra</translation> <translation id="2653659639078652383">Envia</translation> <translation id="2658778018866295321">Fes clic i arrossega</translation>
diff --git a/ash/strings/ash_strings_da.xtb b/ash/strings/ash_strings_da.xtb index bbd3bea..c1981fb 100644 --- a/ash/strings/ash_strings_da.xtb +++ b/ash/strings/ash_strings_da.xtb
@@ -211,7 +211,7 @@ <translation id="2107914222138020205">Dit USB-C-kabel understøtter ikke Thunderbolt. Enhedens ydeevne kan være begrænset.</translation> <translation id="2108303511227308752">Tastaturgenvejen Alt+Backspace er blevet ændret. Hvis du vil bruge Delete-knappen, skal du trykke på tasten <ph name="LAUNCHER_KEY_NAME" />+Backspace.</translation> <translation id="211328683600082144">SLÅ MIKROFON TIL</translation> -<translation id="2123115117533398272">Chrome OS viser forslag til nyt indhold, du kan tjekke ud. Der sendes kun statistik til forbedring af forslag, hvis du har valgt at dele dine brugsdata. <ph name="MANAGE_SETTINGS" /></translation> +<translation id="2123115117533398272">ChromeOS viser forslag til nyt indhold, du kan tjekke ud. Der sendes kun statistik til forbedring af forslag, hvis du har valgt at dele dine brugsdata. <ph name="MANAGE_SETTINGS" /></translation> <translation id="2126242104232412123">Nyt skrivebord</translation> <translation id="2132302418721800944">Optag hele skærmen</translation> <translation id="2135456203358955318">Fastgjort lupvindue</translation> @@ -290,7 +290,7 @@ <translation id="2620436844016719705">System</translation> <translation id="2621713457727696555">Beskyttet</translation> <translation id="263399434338050016">"Vælg alle"</translation> -<translation id="2645435784669275700">Chrome OS</translation> +<translation id="2645435784669275700">ChromeOS</translation> <translation id="2653019840645008922">Tag et screenshot af et vindue</translation> <translation id="2653659639078652383">Send</translation> <translation id="2658778018866295321">Klik og træk</translation>
diff --git a/ash/strings/ash_strings_en-GB.xtb b/ash/strings/ash_strings_en-GB.xtb index 13c7f83..777bb80 100644 --- a/ash/strings/ash_strings_en-GB.xtb +++ b/ash/strings/ash_strings_en-GB.xtb
@@ -340,6 +340,7 @@ <translation id="2865888419503095837">Network info</translation> <translation id="2872961005593481000">Shut down</translation> <translation id="2878884018241093801">No recent items</translation> +<translation id="2885950158625301909">Learn more</translation> <translation id="2891209721153296020">'Unselect'</translation> <translation id="2894949423239620203">Cable may impact performance</translation> <translation id="2903844815300039659">Connected to <ph name="NAME" />, <ph name="STRENGTH" /></translation> @@ -1051,6 +1052,7 @@ <translation id="6961121602502368900">Silence phone is not available on work profile</translation> <translation id="6961840794482373852">The Alt + up arrow keyboard shortcut has changed. To use the page up key, press the <ph name="LAUNCHER_KEY_NAME" /> key + up arrow.</translation> <translation id="696267987219125751">Camera framing is off.</translation> +<translation id="6964690557625666701">All pinned items are partying</translation> <translation id="6965382102122355670">OK</translation> <translation id="6972754398087986839">Get started</translation> <translation id="6979158407327259162">Google Drive</translation> @@ -1360,6 +1362,8 @@ <translation id="8734991477317290293">It may be attempting to steal your keystrokes</translation> <translation id="8735678380411481005">Keyboard backlight colour</translation> <translation id="8735953464173050365">Show keyboard settings. <ph name="KEYBOARD_NAME" /> is selected</translation> +<translation id="8747464587821437069"><ph name="CAMERA_AND_MICROPHONE_ACCESS_STATUS" />, + <ph name="SCREEN_SHARE_STATUS" /></translation> <translation id="8752416742247198423">Turn on camera access to allow apps and web pages with the camera permission to use the camera(s) connected to this device.</translation> <translation id="8755498163081687682">Verify your identity: <ph name="ORIGIN_NAME" /> would like to confirm that it's you</translation> <translation id="875593634123171288">Show VPN settings</translation>
diff --git a/ash/strings/ash_strings_mn.xtb b/ash/strings/ash_strings_mn.xtb index 10f3c3b..1680cd7 100644 --- a/ash/strings/ash_strings_mn.xtb +++ b/ash/strings/ash_strings_mn.xtb
@@ -159,6 +159,15 @@ <translation id="1797271123677381264">Нууц үгээ мартсан</translation> <translation id="181103072419391116">Дохионы хүч <ph name="SIGNAL_STRENGTH" />, таны администратор удирддаг</translation> <translation id="1812997170047690955">Миний дэлгэцэд юу байна вэ?</translation> +<translation id="1823280932251546115">Төлөвийн мэдээллийн хэсэг, цаг <ph name="TIME" />, + <ph name="BATTERY" /> + <ph name="CHANNEL" /> + <ph name="NETWORK" />, + <ph name="PRIVACY" />, + <ph name="MANAGED" /> + <ph name="NOTIFICATION" />, + <ph name="IME" /> + <ph name="LOCALE" /></translation> <translation id="1823873187264960516">Этернет: <ph name="ADDRESS" /></translation> <translation id="1830308660060964064"><ph name="ITEM_TITLE" />-г тогтоосныг болиуллаа</translation> <translation id="1836215606488044471">Туслах (ачаалж байна...)</translation> @@ -459,6 +468,8 @@ <translation id="3600061223661453002">Унтраах</translation> <translation id="3604801046548457007"><ph name="DESK_TITILE" /> дэлгэц үүсгэлээ</translation> <translation id="3606978283550408104">Брайль дэлгэц холбогдсон.</translation> +<translation id="3609301425104788351"><ph name="MIC" />, + <ph name="CAMERA" /></translation> <translation id="3615926715408477684">Мобайл датаг идэвхжүүлснээр Bluetooth-г мөн идэвхжүүлнэ</translation> <translation id="3616883743181209306">Цэсийг дэлгэцийн баруун дээд булан руу зөөсөн.</translation> <translation id="3619536907358025872">Дэлгэцийн зураг авах горимын тохиргоо</translation>
diff --git a/ash/strings/ash_strings_pt-BR.xtb b/ash/strings/ash_strings_pt-BR.xtb index b7c4cc2b..60d16431 100644 --- a/ash/strings/ash_strings_pt-BR.xtb +++ b/ash/strings/ash_strings_pt-BR.xtb
@@ -159,6 +159,15 @@ <translation id="1797271123677381264">Esqueci minha senha</translation> <translation id="181103072419391116"><ph name="SIGNAL_STRENGTH" /> de intensidade de sinal , gerenciada pelo seu administrador</translation> <translation id="1812997170047690955">O que está na minha tela?</translation> +<translation id="1823280932251546115">Bandeja de status, horário <ph name="TIME" />, + <ph name="BATTERY" /> + <ph name="CHANNEL" />, + <ph name="NETWORK" />, + <ph name="PRIVACY" />, + <ph name="MANAGED" />, + <ph name="NOTIFICATION" /> + <ph name="IME" /> + <ph name="LOCALE" /></translation> <translation id="1823873187264960516">Ethernet: <ph name="ADDRESS" /></translation> <translation id="1830308660060964064">O <ph name="ITEM_TITLE" /> foi liberado</translation> <translation id="1836215606488044471">Assistente (carregando…)</translation> @@ -459,6 +468,8 @@ <translation id="3600061223661453002">Apagar</translation> <translation id="3604801046548457007">Espaço de trabalho <ph name="DESK_TITILE" /> criado</translation> <translation id="3606978283550408104">Display em braille conectado.</translation> +<translation id="3609301425104788351"><ph name="MIC" />, + <ph name="CAMERA" /></translation> <translation id="3615926715408477684">A ativação dos dados móveis também ativará o Bluetooth</translation> <translation id="3616883743181209306">O menu foi movido para o canto superior direito da tela.</translation> <translation id="3619536907358025872">Configurações da Captura de tela</translation>
diff --git a/ash/strings/ash_strings_ro.xtb b/ash/strings/ash_strings_ro.xtb index 1a1aa895..e1c2b81d 100644 --- a/ash/strings/ash_strings_ro.xtb +++ b/ash/strings/ash_strings_ro.xtb
@@ -159,6 +159,15 @@ <translation id="1797271123677381264">Am uitat parola</translation> <translation id="181103072419391116">Puterea semnalului: <ph name="SIGNAL_STRENGTH" />, gestionată de administratorul tău</translation> <translation id="1812997170047690955">Ce este pe ecranul meu?</translation> +<translation id="1823280932251546115">Bara de stare, ora: <ph name="TIME" />, + <ph name="BATTERY" /> + <ph name="CHANNEL" />, + <ph name="NETWORK" />, + <ph name="PRIVACY" />, + <ph name="MANAGED" />, + <ph name="NOTIFICATION" /> + <ph name="IME" /> + <ph name="LOCALE" /></translation> <translation id="1823873187264960516">Ethernet: <ph name="ADDRESS" /></translation> <translation id="1830308660060964064">Fixarea pentru <ph name="ITEM_TITLE" /> a fost anulată</translation> <translation id="1836215606488044471">Asistent (se încarcă...)</translation> @@ -459,6 +468,8 @@ <translation id="3600061223661453002">Dezactivat</translation> <translation id="3604801046548457007">A fost creat desktopul <ph name="DESK_TITILE" /></translation> <translation id="3606978283550408104">Afișajul Braille este conectat.</translation> +<translation id="3609301425104788351"><ph name="MIC" />, + <ph name="CAMERA" /></translation> <translation id="3615926715408477684">Dacă activezi datele mobile, se va activa Bluetooth</translation> <translation id="3616883743181209306">Meniul a fost mutat în colțul din dreapta sus al ecranului.</translation> <translation id="3619536907358025872">Setări pentru capturile de ecran</translation>
diff --git a/ash/strings/ash_strings_si.xtb b/ash/strings/ash_strings_si.xtb index fcd55f04..8440d62 100644 --- a/ash/strings/ash_strings_si.xtb +++ b/ash/strings/ash_strings_si.xtb
@@ -159,6 +159,15 @@ <translation id="1797271123677381264">මුරපදය අමතකයි</translation> <translation id="181103072419391116">සංඥා ප්රබලතාව <ph name="SIGNAL_STRENGTH" />, ඔබේ පරිපාලකයා විසින් කළමනාකරණය කරයි</translation> <translation id="1812997170047690955">මගේ තිරය මත ඇත්තේ මොනවා ද?</translation> +<translation id="1823280932251546115">තත්ත්ව තැටිය, වේලාව <ph name="TIME" />, + <ph name="BATTERY" /> + <ph name="CHANNEL" /> + <ph name="NETWORK" />, + <ph name="PRIVACY" />, + <ph name="MANAGED" /> + <ph name="NOTIFICATION" />, + <ph name="IME" /> + <ph name="LOCALE" /></translation> <translation id="1823873187264960516">ඊතර්නෙට්: <ph name="ADDRESS" /></translation> <translation id="1830308660060964064"><ph name="ITEM_TITLE" /> නො-අමුණා ඇත</translation> <translation id="1836215606488044471">සහායක (පූරණය වේ...)</translation> @@ -459,6 +468,8 @@ <translation id="3600061223661453002">අක්රිය</translation> <translation id="3604801046548457007"><ph name="DESK_TITILE" /> මේසය සාදන ලදි</translation> <translation id="3606978283550408104">බ්රේල් ප්රදර්ශකය සම්බන්ධ කර ඇත.</translation> +<translation id="3609301425104788351"><ph name="MIC" />, + <ph name="CAMERA" /></translation> <translation id="3615926715408477684">ජංගම දත්ත සබල කිරීම බ්ලූටූත් සබල කරනු ඇත</translation> <translation id="3616883743181209306">මෙනුව තිරයේ ඉහළ දකුණු කොණට ගෙන ගියා.</translation> <translation id="3619536907358025872">තිර ග්රහණ සැකසීම්</translation>
diff --git a/ash/strings/ash_strings_sk.xtb b/ash/strings/ash_strings_sk.xtb index 227c244..7830fd6 100644 --- a/ash/strings/ash_strings_sk.xtb +++ b/ash/strings/ash_strings_sk.xtb
@@ -159,6 +159,15 @@ <translation id="1797271123677381264">Zabudnuté heslo</translation> <translation id="181103072419391116">Sila signálu <ph name="SIGNAL_STRENGTH" />, ovládané správcom</translation> <translation id="1812997170047690955">Čo je na obrazovke?</translation> +<translation id="1823280932251546115">Stavový panel, čas <ph name="TIME" />, + <ph name="BATTERY" /> + <ph name="CHANNEL" /> + <ph name="NETWORK" />, + <ph name="PRIVACY" />, + <ph name="MANAGED" /> + <ph name="NOTIFICATION" />, + <ph name="IME" /> + <ph name="LOCALE" /></translation> <translation id="1823873187264960516">Ethernet: <ph name="ADDRESS" /></translation> <translation id="1830308660060964064">Položka <ph name="ITEM_TITLE" /> bola odopnutá</translation> <translation id="1836215606488044471">Asistent (načítava sa...)</translation> @@ -459,6 +468,8 @@ <translation id="3600061223661453002">Vypnuté</translation> <translation id="3604801046548457007">Bola vytvorená plocha <ph name="DESK_TITILE" /></translation> <translation id="3606978283550408104">Bola pripojená Braillova obrazovka.</translation> +<translation id="3609301425104788351"><ph name="MIC" />, + <ph name="CAMERA" /></translation> <translation id="3615926715408477684">Zapnutím mobilných dát aktivujete Bluetooth</translation> <translation id="3616883743181209306">Ponuka bola presunutá do pravého horného rohu obrazovky.</translation> <translation id="3619536907358025872">Nastavenia záznamu obrazovky</translation>
diff --git a/ash/strings/ash_strings_zu.xtb b/ash/strings/ash_strings_zu.xtb index 62484d3..4fce505 100644 --- a/ash/strings/ash_strings_zu.xtb +++ b/ash/strings/ash_strings_zu.xtb
@@ -159,6 +159,15 @@ <translation id="1797271123677381264">Ukhohlwe iphasiwedi</translation> <translation id="181103072419391116">Amandla esignali <ph name="SIGNAL_STRENGTH" />, Kuphethwe umlawuli wakho</translation> <translation id="1812997170047690955">Yini ekusikrini sami?</translation> +<translation id="1823280932251546115">Isimo sethreyi, isikhathi <ph name="TIME" />, + <ph name="BATTERY" /> + <ph name="CHANNEL" />, + <ph name="NETWORK" />, + <ph name="PRIVACY" />, + <ph name="MANAGED" /> + <ph name="NOTIFICATION" />, + <ph name="IME" /> + <ph name="LOCALE" /></translation> <translation id="1823873187264960516">I-Ethernet: <ph name="ADDRESS" /></translation> <translation id="1830308660060964064"><ph name="ITEM_TITLE" /> isuswe ukuphina</translation> <translation id="1836215606488044471">Umsizi (uyalayisha...)</translation> @@ -459,6 +468,8 @@ <translation id="3600061223661453002">Valiwe</translation> <translation id="3604801046548457007">Ideski <ph name="DESK_TITILE" /> lidaliwe</translation> <translation id="3606978283550408104">Isibonisi se-Braille sixhunyiwe.</translation> +<translation id="3609301425104788351"><ph name="MIC" />, + <ph name="CAMERA" /></translation> <translation id="3615926715408477684">Ukunika amandla idatha yeselula kuzonika amandla i-Bluetooth</translation> <translation id="3616883743181209306">Imenyu iyiswe phezulu ekhoneni elingakwesokudla sesikrini.</translation> <translation id="3619536907358025872">Amasethingi wokuthwebula iskrini</translation>
diff --git a/ash/system/microphone_mute/microphone_mute_notification_controller.cc b/ash/system/microphone_mute/microphone_mute_notification_controller.cc index 94668ac..295fcca 100644 --- a/ash/system/microphone_mute/microphone_mute_notification_controller.cc +++ b/ash/system/microphone_mute/microphone_mute_notification_controller.cc
@@ -11,6 +11,7 @@ #include "ash/public/cpp/microphone_mute_notification_delegate.h" #include "ash/public/cpp/notification_utils.h" #include "ash/strings/grit/ash_strings.h" +#include "ash/system/privacy_hub/privacy_hub_metrics.h" #include "base/bind.h" #include "base/strings/utf_string_conversions.h" #include "components/vector_icons/vector_icons.h" @@ -124,6 +125,7 @@ if (!button_index) return; CrasAudioHandler::Get()->SetInputMute(false); + privacy_hub_metrics::LogMicrophoneEnabledFromNotification(true); })); }
diff --git a/ash/system/privacy_hub/camera_privacy_switch_controller.cc b/ash/system/privacy_hub/camera_privacy_switch_controller.cc index 97b370b..f9f2b11 100644 --- a/ash/system/privacy_hub/camera_privacy_switch_controller.cc +++ b/ash/system/privacy_hub/camera_privacy_switch_controller.cc
@@ -14,6 +14,7 @@ #include "ash/shell.h" #include "ash/strings/grit/ash_strings.h" #include "ash/system/privacy_hub/privacy_hub_controller.h" +#include "ash/system/privacy_hub/privacy_hub_metrics.h" #include "base/bind.h" #include "base/check.h" #include "components/prefs/pref_service.h" @@ -171,6 +172,8 @@ if (pref_service) { pref_service->SetBoolean(prefs::kUserCameraAllowed, camera_enabled); + privacy_hub_metrics::LogCameraEnabledFromNotification( + camera_enabled); } }, action_enables_camera));
diff --git a/ash/system/privacy_hub/privacy_hub_metrics.cc b/ash/system/privacy_hub/privacy_hub_metrics.cc new file mode 100644 index 0000000..b0ccc4e --- /dev/null +++ b/ash/system/privacy_hub/privacy_hub_metrics.cc
@@ -0,0 +1,44 @@ +// Copyright 2022 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ash/system/privacy_hub/privacy_hub_metrics.h" + +#include "base/metrics/histogram_functions.h" + +namespace ash::privacy_hub_metrics { + +namespace { + +constexpr char kPrivacyHubMicrophoneEnabledFromSettingsHistogram[] = + "ChromeOS.PrivacyHub.Microphone.Settings.Enabled"; +constexpr char kPrivacyHubMicrophoneEnabledFromNotificationHistogram[] = + "ChromeOS.PrivacyHub.Microphone.Notification.Enabled"; +constexpr char kPrivacyHubCameraEnabledFromSettingsHistogram[] = + "ChromeOS.PrivacyHub.Camera.Settings.Enabled"; +constexpr char kPrivacyHubCameraEnabledFromNotificationHistogram[] = + "ChromeOS.PrivacyHub.Camera.Notification.Enabled"; + +} // namespace + +void LogMicrophoneEnabledFromSettings(bool enabled) { + base::UmaHistogramBoolean(kPrivacyHubMicrophoneEnabledFromSettingsHistogram, + enabled); +} + +void LogMicrophoneEnabledFromNotification(bool enabled) { + base::UmaHistogramBoolean( + kPrivacyHubMicrophoneEnabledFromNotificationHistogram, enabled); +} + +void LogCameraEnabledFromSettings(bool enabled) { + base::UmaHistogramBoolean(kPrivacyHubCameraEnabledFromSettingsHistogram, + enabled); +} + +void LogCameraEnabledFromNotification(bool enabled) { + base::UmaHistogramBoolean(kPrivacyHubCameraEnabledFromNotificationHistogram, + enabled); +} + +} // namespace ash::privacy_hub_metrics
diff --git a/ash/system/privacy_hub/privacy_hub_metrics.h b/ash/system/privacy_hub/privacy_hub_metrics.h new file mode 100644 index 0000000..a7b77b3 --- /dev/null +++ b/ash/system/privacy_hub/privacy_hub_metrics.h
@@ -0,0 +1,20 @@ +// Copyright 2022 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef ASH_SYSTEM_PRIVACY_HUB_PRIVACY_HUB_METRICS_H_ +#define ASH_SYSTEM_PRIVACY_HUB_PRIVACY_HUB_METRICS_H_ + +namespace ash::privacy_hub_metrics { + +// Report microphone mute events from system and notifications. +void LogMicrophoneEnabledFromSettings(bool enabled); +void LogMicrophoneEnabledFromNotification(bool enabled); + +// Report camera mute events from system and notifications. +void LogCameraEnabledFromSettings(bool enabled); +void LogCameraEnabledFromNotification(bool enabled); + +} // namespace ash::privacy_hub_metrics + +#endif // ASH_SYSTEM_PRIVACY_HUB_PRIVACY_HUB_METRICS_H_
diff --git a/ash/test/ash_pixel_diff_test_helper.cc b/ash/test/ash_pixel_diff_test_helper.cc index c03ef2f..f2afad1 100644 --- a/ash/test/ash_pixel_diff_test_helper.cc +++ b/ash/test/ash_pixel_diff_test_helper.cc
@@ -17,13 +17,6 @@ AshPixelDiffTestHelper::~AshPixelDiffTestHelper() = default; -bool AshPixelDiffTestHelper::ComparePrimaryFullScreen( - const std::string& screenshot_name) { - aura::Window* primary_root_window = Shell::Get()->GetPrimaryRootWindow(); - return pixel_diff_.CompareNativeWindowScreenshot( - screenshot_name, primary_root_window, primary_root_window->bounds()); -} - bool AshPixelDiffTestHelper::ComparePrimaryScreenshotInRects( const std::string& screenshot_name, const std::vector<gfx::Rect>& rects_in_screen) { @@ -56,4 +49,11 @@ /*algorithm=*/nullptr, rects_in_pixel); } +bool AshPixelDiffTestHelper::ComparePrimaryFullScreen( + const std::string& screenshot_name) { + aura::Window* primary_root_window = Shell::Get()->GetPrimaryRootWindow(); + return pixel_diff_.CompareNativeWindowScreenshot( + screenshot_name, primary_root_window, primary_root_window->bounds()); +} + } // namespace ash
diff --git a/ash/test/ash_pixel_diff_test_helper.h b/ash/test/ash_pixel_diff_test_helper.h index 5b26c1f..70a3ce1c 100644 --- a/ash/test/ash_pixel_diff_test_helper.h +++ b/ash/test/ash_pixel_diff_test_helper.h
@@ -10,6 +10,7 @@ #include "ui/views/test/view_skia_gold_pixel_diff.h" namespace ash { +class DemoAshPixelDiffTest; // A helper class that provides utility functions for performing pixel diff // tests via the Skia Gold. @@ -24,13 +25,6 @@ AshPixelDiffTestHelper& operator=(const AshPixelDiffTestHelper&) = delete; ~AshPixelDiffTestHelper(); - // Takes a screenshot of the primary fullscreen then uploads it to the Skia - // Gold to perform pixel comparison. `screenshot_name` specifies the benchmark - // image. Returns the comparison result. - // NOTE: use this function only when necessary. Otherwise, a tiny UI change - // may break many pixel tests. - bool ComparePrimaryFullScreen(const std::string& screenshot_name); - // Similar to `ComparePrimaryFullScreen()` but with the difference that only // the pixels within the screen bounds of `ui_components` are compared. The // function caller has the duty to choose suitable `ui_components` in their @@ -61,6 +55,15 @@ } private: + friend DemoAshPixelDiffTest; + + // Takes a screenshot of the primary fullscreen then uploads it to the Skia + // Gold to perform pixel comparison. `screenshot_name` specifies the benchmark + // image. Returns the comparison result. + // NOTE: use this function only when necessary. Otherwise, a tiny UI change + // may break many pixel tests. + bool ComparePrimaryFullScreen(const std::string& screenshot_name); + // Compares a screenshot of the primary screen with the specified benchmark // image. Only the pixels in `rects_in_screen` affect the comparison result. bool ComparePrimaryScreenshotInRects(
diff --git a/ash/test/demo_ash_pixel_diff_test.cc b/ash/test/demo_ash_pixel_diff_test.cc index ecf64ed..4aaf678f 100644 --- a/ash/test/demo_ash_pixel_diff_test.cc +++ b/ash/test/demo_ash_pixel_diff_test.cc
@@ -17,11 +17,15 @@ DemoAshPixelDiffTest(const DemoAshPixelDiffTest&) = delete; DemoAshPixelDiffTest& operator=(const DemoAshPixelDiffTest&) = delete; ~DemoAshPixelDiffTest() override = default; + + bool ComparePrimaryFullScreen(const std::string& screenshot_name) { + return GetPixelDiffer()->ComparePrimaryFullScreen(screenshot_name); + } }; // Verifies the primary display UI right after the ash pixel test sets up. TEST_F(DemoAshPixelDiffTest, VerifyDefaultPrimaryDisplay) { - EXPECT_TRUE(GetPixelDiffer()->ComparePrimaryFullScreen("primary_display")); + EXPECT_TRUE(ComparePrimaryFullScreen("primary_display")); } } // namespace ash
diff --git a/ash/webui/eche_app_ui/fake_apps_access_manager.h b/ash/webui/eche_app_ui/fake_apps_access_manager.h index ef7552f..4adc485 100644 --- a/ash/webui/eche_app_ui/fake_apps_access_manager.h +++ b/ash/webui/eche_app_ui/fake_apps_access_manager.h
@@ -8,11 +8,9 @@ #include "ash/components/phonehub/multidevice_feature_access_manager.h" #include "ash/webui/eche_app_ui/apps_access_manager.h" -namespace chromeos { -namespace settings { +namespace ash::settings { class MultideviceHandlerTest; -} // namespace settings -} // namespace chromeos +} namespace ash { namespace eche_app { @@ -35,7 +33,7 @@ void OnSetupRequested() override; private: - friend class chromeos::settings::MultideviceHandlerTest; + friend class ::ash::settings::MultideviceHandlerTest; // AppsAccessManager: void SetAccessStatusInternal(AccessStatus access_status) override; void NotifyAppsAccessCanceled() override;
diff --git a/ash/webui/projector_app/projector_message_handler.cc b/ash/webui/projector_app/projector_message_handler.cc index 4cb3d2d..c9875ddb 100644 --- a/ash/webui/projector_app/projector_message_handler.cc +++ b/ash/webui/projector_app/projector_message_handler.cc
@@ -7,6 +7,7 @@ #include <memory> #include <string> +#include "ash/constants/ash_features.h" #include "ash/constants/ash_pref_names.h" #include "ash/public/cpp/projector/projector_controller.h" #include "ash/public/cpp/projector/projector_new_screencast_precondition.h" @@ -360,7 +361,8 @@ // 5. A bool to indicate whether or not to use api key to authorize the // request. // 6. Additional headers objects. - DCHECK_EQ(func_args.size(), 6u); + // 7. The email address associated with the account + DCHECK_EQ(func_args.size(), 7u); const auto& url = func_args[0].GetString(); const auto& method = func_args[1].GetString(); @@ -370,16 +372,18 @@ bool use_credentials = func_args[3].is_bool() ? func_args[3].GetBool() : false; bool use_api_key = func_args[4].is_bool() ? func_args[4].GetBool() : false; + std::string account_email = + func_args[6].is_string() ? func_args[6].GetString() : std::string(); DCHECK(!url.empty()); DCHECK(!method.empty()); - xhr_sender_->Send( GURL(url), method, request_body, use_credentials, use_api_key, base::BindOnce(&ProjectorMessageHandler::OnXhrRequestCompleted, GetWeakPtr(), callback_id), func_args[5].is_dict() ? func_args[5].GetDict().Clone() - : base::Value::Dict()); + : base::Value::Dict(), + account_email); } void ProjectorMessageHandler::ShouldDownloadSoda( @@ -517,5 +521,4 @@ << "If there is no error message, then video should not be nullptr"; ResolveJavascriptCallback(base::Value(js_callback_id), video->ToValue()); } - } // namespace ash
diff --git a/ash/webui/projector_app/projector_xhr_sender.cc b/ash/webui/projector_app/projector_xhr_sender.cc index 5e06b4b..7e7e4ca 100644 --- a/ash/webui/projector_app/projector_xhr_sender.cc +++ b/ash/webui/projector_app/projector_xhr_sender.cc
@@ -6,6 +6,7 @@ #include <string> +#include "ash/constants/ash_features.h" #include "ash/webui/projector_app/projector_app_client.h" #include "base/bind.h" #include "base/strings/string_util.h" @@ -75,7 +76,8 @@ bool use_credentials, bool use_api_key, SendRequestCallback callback, - const base::Value::Dict& headers) { + const base::Value::Dict& headers, + const std::string& account_email) { if (!IsUrlAllowlisted(url.spec())) { std::move(callback).Run( /*success=*/false, @@ -83,13 +85,11 @@ /*error=*/"UNSUPPORTED_URL"); return; } - GURL request_url = url; if (use_api_key) { request_url = net::AppendQueryParameter(url, kApiKeyParam, google_apis::GetAPIKey()); } - if (use_credentials || use_api_key) { // Use end user credentials or API key to authorize the request. Doesn't // need to fetch OAuth token. @@ -98,13 +98,26 @@ return; } + if (ash::features::IsProjectorViewerUseSecondaryAccountEnabled() && + !IsValidEmail(account_email)) { + std::move(callback).Run( + /*success=*/false, + /*response_body=*/std::string(), + /*error=*/"INVALID_ACCOUNT_EMAIL"); + return; + } + + const std::string& email = + (ash::features::IsProjectorViewerUseSecondaryAccountEnabled() && + !account_email.empty()) + ? account_email + : ProjectorAppClient::Get() + ->GetIdentityManager() + ->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin) + .email; // Fetch OAuth token for authorizing the request. - // TODO(b/197366265): add support for secondary account. - auto primary_account = - ProjectorAppClient::Get()->GetIdentityManager()->GetPrimaryAccountInfo( - signin::ConsentLevel::kSignin); oauth_token_fetcher_.GetAccessTokenFor( - primary_account.email, + email, base::BindOnce(&ProjectorXhrSender::OnAccessTokenRequestCompleted, weak_factory_.GetWeakPtr(), request_url, method, request_body, headers.Clone(), std::move(callback))); @@ -201,4 +214,16 @@ loader_map_.erase(request_id); } +bool ProjectorXhrSender::IsValidEmail(const std::string& email) { + if (email.empty()) { + return true; + } + const std::vector<AccountInfo> accounts = oauth_token_fetcher_.GetAccounts(); + for (const auto& info : accounts) { + if (email == info.email) { + return true; + } + } + return false; +} } // namespace ash
diff --git a/ash/webui/projector_app/projector_xhr_sender.h b/ash/webui/projector_app/projector_xhr_sender.h index 910da8bc2..1c1fc4a 100644 --- a/ash/webui/projector_app/projector_xhr_sender.h +++ b/ash/webui/projector_app/projector_xhr_sender.h
@@ -50,13 +50,17 @@ virtual ~ProjectorXhrSender(); // Send XHR request and trigger the callback when complete. + // This will attempt to fetch OAuth token for the provided email address + // and fallback to primary account email if account_email is not provided + // or ProjectorViewerUseSecondaryAccount flag is disabled. virtual void Send(const GURL& url, const std::string& method, const std::string& request_body, bool use_credentials, bool use_api_key, SendRequestCallback callback, - const base::Value::Dict& headers = base::Value::Dict()); + const base::Value::Dict& headers = base::Value::Dict(), + const std::string& account_email = std::string()); private: // Triggered when an OAuth token fetch completed. @@ -81,6 +85,9 @@ SendRequestCallback callback, std::unique_ptr<std::string> response_body); + // Validate the email address provided with xhr request + bool IsValidEmail(const std::string& email); + ProjectorOAuthTokenFetcher oauth_token_fetcher_; network::mojom::URLLoaderFactory* url_loader_factory_ = nullptr;
diff --git a/ash/webui/projector_app/resources/app/trusted/projector_browser_proxy.js b/ash/webui/projector_app/resources/app/trusted/projector_browser_proxy.js index 09bab82..472c46b 100644 --- a/ash/webui/projector_app/resources/app/trusted/projector_browser_proxy.js +++ b/ash/webui/projector_app/resources/app/trusted/projector_browser_proxy.js
@@ -58,9 +58,12 @@ * @param {boolean=} useApiKey authorize the request with API key. Used for * translaton requests. * @param {Object=} headers additional headers. + * @param {string=} accountEmail the email associated with user account. * @return {!Promise<!projectorApp.XhrResponse>} */ - sendXhr(url, method, requestBody, useCredentials, useApiKey, headers) {} + sendXhr( + url, method, requestBody, useCredentials, useApiKey, headers, + accountEmail) {} /** * Returns true if the "install speech recognition" button should be shown to @@ -150,10 +153,18 @@ } /** @override */ - sendXhr(url, method, requestBody, useCredentials, useApiKey, headers) { - return sendWithPromise( - 'sendXhr', - [url, method, requestBody, useCredentials, useApiKey, headers]); + sendXhr( + url, method, requestBody, useCredentials, useApiKey, headers, + accountEmail) { + return sendWithPromise('sendXhr', [ + url, + method, + requestBody, + useCredentials, + useApiKey, + headers, + accountEmail, + ]); } /** @override */
diff --git a/ash/webui/projector_app/resources/app/trusted/trusted_app_comm_factory.js b/ash/webui/projector_app/resources/app/trusted/trusted_app_comm_factory.js index e8fcfc5..703b416b 100644 --- a/ash/webui/projector_app/resources/app/trusted/trusted_app_comm_factory.js +++ b/ash/webui/projector_app/resources/app/trusted/trusted_app_comm_factory.js
@@ -108,14 +108,15 @@ this.browserProxy_.onError(msg); }); this.registerMethod('sendXhr', (values) => { - if (!values || values.length != 6) { + if (!values || values.length != 7) { return { success: false, error: 'INVALID_ARGUMENTS', }; } return this.browserProxy_.sendXhr( - values[0], values[1], values[2], values[3], values[4], values[5]); + values[0], values[1], values[2], values[3], values[4], values[5], + values[6]); }); this.registerMethod('shouldDownloadSoda', (args) => { return this.browserProxy_.shouldDownloadSoda();
diff --git a/ash/webui/projector_app/resources/app/untrusted/untrusted_app_comm_factory.js b/ash/webui/projector_app/resources/app/untrusted/untrusted_app_comm_factory.js index eebb663..f5c02af 100644 --- a/ash/webui/projector_app/resources/app/untrusted/untrusted_app_comm_factory.js +++ b/ash/webui/projector_app/resources/app/untrusted/untrusted_app_comm_factory.js
@@ -127,9 +127,12 @@ * @param {boolean=} useApiKey authorize the request with API key. Used for * translaton requests. * @param {object=} additional headers. + * @param {string=} account email. * @return {!Promise<!projectorApp.XhrResponse>} */ - sendXhr(url, method, requestBody, useCredentials, useApiKey, headers) { + sendXhr( + url, method, requestBody, useCredentials, useApiKey, headers, + accountEmail) { return AppUntrustedCommFactory.getPostMessageAPIClient().callApiFn( 'sendXhr', [ url, @@ -138,6 +141,7 @@ !!useCredentials, !!useApiKey, headers, + accountEmail, ]); },
diff --git a/ash/webui/projector_app/resources/common/projector_app.externs.js b/ash/webui/projector_app/resources/common/projector_app.externs.js index a2c2e3ce..21d2c732 100644 --- a/ash/webui/projector_app/resources/common/projector_app.externs.js +++ b/ash/webui/projector_app/resources/common/projector_app.externs.js
@@ -323,10 +323,13 @@ * @param {boolean=} useApiKey authorize the request with API key. Used for * translation requests. * @param {Object=} additional headers. + * @param {string=} email associated with the user account to retrieve OAuth + * Token. * @return {!Promise<!projectorApp.XhrResponse>} */ projectorApp.ClientDelegate.prototype.sendXhr = function( - url, method, requestBody, useCredentials, useApiKey, headers) {}; + url, method, requestBody, useCredentials, useApiKey, headers, + accountEmail) {}; /** * Returns true if the device supports on device speech recognition.
diff --git a/ash/webui/projector_app/test/mock_xhr_sender.cc b/ash/webui/projector_app/test/mock_xhr_sender.cc index db76441c..fbe5883 100644 --- a/ash/webui/projector_app/test/mock_xhr_sender.cc +++ b/ash/webui/projector_app/test/mock_xhr_sender.cc
@@ -23,7 +23,8 @@ bool use_credentials, bool use_api_key, SendRequestCallback callback, - const base::Value::Dict& headers) { + const base::Value::Dict& headers, + const std::string& account_email) { std::move(quit_closure_).Run(url, method, request_body); } } // namespace ash
diff --git a/ash/webui/projector_app/test/mock_xhr_sender.h b/ash/webui/projector_app/test/mock_xhr_sender.h index d7f5d1f0..b1662692 100644 --- a/ash/webui/projector_app/test/mock_xhr_sender.h +++ b/ash/webui/projector_app/test/mock_xhr_sender.h
@@ -38,7 +38,8 @@ bool use_credentials, bool use_api_key, SendRequestCallback callback, - const base::Value::Dict& headers) override; + const base::Value::Dict& headers, + const std::string& account_email) override; private: // Quits the current run loop. Used to verify the MockXhrSender::Send getting
diff --git a/ash/webui/projector_app/test/projector_message_handler_unittest.cc b/ash/webui/projector_app/test/projector_message_handler_unittest.cc index 05068d3d..5b2f2da 100644 --- a/ash/webui/projector_app/test/projector_message_handler_unittest.cc +++ b/ash/webui/projector_app/test/projector_message_handler_unittest.cc
@@ -252,6 +252,59 @@ base::Value::Dict dict; dict.Set(kTestXhrHeaderKey, kTestXhrHeaderValue); args.Append(std::move(dict)); + args.Append(base::Value()); + list_args.Append(std::move(args)); + + mock_app_client().test_url_loader_factory().AddResponse(kTestXhrUrl, + test_response_body); + + base::RunLoop run_loop; + message_handler()->SetXhrRequestRunLoopQuitClosure(run_loop.QuitClosure()); + web_ui().HandleReceivedMessage("sendXhr", list_args); + run_loop.Run(); + + EXPECT_EQ(web_ui().call_data().size(), 1u); + + const content::TestWebUI::CallData& call_data = FetchCallData(0); + EXPECT_EQ(call_data.function_name(), kWebUIResponse); + EXPECT_EQ(call_data.arg1()->GetString(), kSendXhrCallback); + + // Whether the callback was rejected or not. + EXPECT_TRUE(call_data.arg2()->GetBool()); + ASSERT_TRUE(call_data.arg3()->is_dict()); + + // Verify that it is success. + EXPECT_TRUE(*call_data.arg3()->FindBoolPath(kXhrResponseSuccessPath)); + + // Verify the response. + const std::string* response = + call_data.arg3()->FindStringPath(kXhrResponseStringPath); + EXPECT_EQ(test_response_body, *response); + + // Verify error is empty. + const std::string* error = + call_data.arg3()->FindStringPath(kXhrResponseErrorPath); + EXPECT_TRUE(error->empty()); +} + +TEST_F(ProjectorMessageHandlerUnitTest, SendXhrWithEmail) { + const std::string& test_response_body = "{}"; + + base::Value::List list_args; + list_args.Append(kSendXhrCallback); + base::Value::List args; + args.Append(kTestXhrUrl); + args.Append(kTestXhrMethod); + args.Append(kTestXhrRequestBody); + // Add useCredentials. + args.Append(true); + // Add useApiKey. + args.Append(false); + // Add additional headers. + base::Value::Dict dict; + dict.Set(kTestXhrHeaderKey, kTestXhrHeaderValue); + args.Append(std::move(dict)); + args.Append(kTestUserEmail); list_args.Append(std::move(args)); mock_app_client().test_url_loader_factory().AddResponse(kTestXhrUrl, @@ -303,6 +356,7 @@ base::Value::Dict dict; dict.Set(kTestXhrHeaderKey, kTestXhrHeaderValue); args.Append(std::move(dict)); + args.Append(kTestUserEmail); list_args.Append(std::move(args)); mock_app_client().test_url_loader_factory().AddResponse( @@ -354,6 +408,7 @@ base::Value::Dict dict; dict.Set(kTestXhrHeaderKey, kTestXhrHeaderValue); args.Append(std::move(dict)); + args.Append(kTestUserEmail); list_args.Append(std::move(args)); base::RunLoop run_loop;
diff --git a/ash/webui/projector_app/test/projector_xhr_sender_unittest.cc b/ash/webui/projector_app/test/projector_xhr_sender_unittest.cc index f80b8325..d838fb9 100644 --- a/ash/webui/projector_app/test/projector_xhr_sender_unittest.cc +++ b/ash/webui/projector_app/test/projector_xhr_sender_unittest.cc
@@ -4,10 +4,12 @@ #include "ash/webui/projector_app/projector_xhr_sender.h" +#include "ash/constants/ash_features.h" #include "ash/webui/projector_app/test/mock_app_client.h" #include "base/bind.h" #include "base/callback.h" #include "base/run_loop.h" +#include "base/test/scoped_feature_list.h" #include "base/test/task_environment.h" #include "base/time/time.h" #include "google_apis/google_api_keys.h" @@ -19,6 +21,8 @@ namespace { const char kTestUserEmail[] = "testuser1@gmail.com"; +const char kTestUserSecondaryEmail[] = "testuser2@gmail.com"; +const char kInvalidTestUserEmail[] = "testuser0@gmail.com"; const base::TimeDelta kExpiryTimeFromNow = base::Minutes(10); constexpr char kTestDriveRequestUrl[] = "https://www.googleapis.com/drive/v3/files/fileID"; @@ -44,6 +48,7 @@ void SetUp() override { sender_ = std::make_unique<ProjectorXhrSender>( mock_app_client_.GetUrlLoaderFactory()); + mock_app_client_.AddSecondaryAccount(kTestUserSecondaryEmail); } ProjectorXhrSender* sender() { return sender_.get(); } @@ -229,4 +234,92 @@ run_loop.Run(); } +TEST_F(ProjectorXhrSenderTest, SuccessWithPrimaryEmail) { + base::test::ScopedFeatureList feature_list; + feature_list.InitWithFeatureState( + features::kProjectorViewerUseSecondaryAccount, true /* use */); + base::RunLoop run_loop; + + const std::string& test_response_body = "{}"; + sender()->Send( + GURL(kTestDriveRequestUrl), "GET", /*request_body=*/"", + /*use_credentials=*/false, + /*use_api_key=*/false, + base::BindOnce( + [](const std::string& expected_response_body, + base::RepeatingClosure quit_closure, bool success, + const std::string& response_body, const std::string& error) { + EXPECT_TRUE(success); + EXPECT_EQ(expected_response_body, response_body); + EXPECT_EQ("", error); + quit_closure.Run(); + }, + test_response_body, run_loop.QuitClosure()), + base::Value::Dict(), kTestUserEmail); + + mock_app_client().test_url_loader_factory().AddResponse(kTestDriveRequestUrl, + test_response_body); + + mock_app_client().GrantOAuthTokenFor( + kTestUserEmail, + /* expiry_time = */ base::Time::Now() + kExpiryTimeFromNow); + run_loop.Run(); +} + +TEST_F(ProjectorXhrSenderTest, InvalidAccountEmail) { + base::test::ScopedFeatureList feature_list; + feature_list.InitWithFeatureState( + features::kProjectorViewerUseSecondaryAccount, true /* use */); + base::RunLoop run_loop; + + sender()->Send( + GURL(kTestDriveRequestUrl), /*method=*/"GET", /*request_body=*/"", + /*use_credentials=*/false, /*use_api_key=*/false, + base::BindOnce( + [](base::RepeatingClosure quit_closure, bool success, + const std::string& response_body, const std::string& error) { + EXPECT_FALSE(success); + EXPECT_EQ("", response_body); + EXPECT_EQ("INVALID_ACCOUNT_EMAIL", error); + quit_closure.Run(); + }, + run_loop.QuitClosure()), + /*headers=*/base::Value::Dict(), + /*account_email*/ kInvalidTestUserEmail); + + run_loop.Run(); +} + +TEST_F(ProjectorXhrSenderTest, SuccessWithSecondaryEmail) { + base::test::ScopedFeatureList feature_list; + feature_list.InitWithFeatureState( + features::kProjectorViewerUseSecondaryAccount, true /* use */); + base::RunLoop run_loop; + + const std::string& test_response_body = "{}"; + sender()->Send( + GURL(kTestDriveRequestUrl), "GET", /*request_body=*/"", + /*use_credentials=*/false, + /*use_api_key=*/false, + base::BindOnce( + [](const std::string& expected_response_body, + base::RepeatingClosure quit_closure, bool success, + const std::string& response_body, const std::string& error) { + EXPECT_TRUE(success); + EXPECT_EQ(expected_response_body, response_body); + EXPECT_EQ("", error); + quit_closure.Run(); + }, + test_response_body, run_loop.QuitClosure()), + base::Value::Dict(), kTestUserSecondaryEmail); + + mock_app_client().test_url_loader_factory().AddResponse(kTestDriveRequestUrl, + test_response_body); + + mock_app_client().GrantOAuthTokenFor( + kTestUserSecondaryEmail, + /* expiry_time = */ base::Time::Now() + kExpiryTimeFromNow); + run_loop.Run(); +} + } // namespace ash
diff --git a/base/feature_list.h b/base/feature_list.h index 02db1a0..20973f568 100644 --- a/base/feature_list.h +++ b/base/feature_list.h
@@ -103,18 +103,11 @@ #endif // BUILDFLAG(ENABLE_BANNED_BASE_FEATURE_PREFIX) } -#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_WIN) || BUILDFLAG(IS_ANDROID) || \ - BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_APPLE) + // Non-copyable since: + // - there should be only one `Feature` instance per unique name. + // - a `Feature` contains internal cached state about the override state. Feature(const Feature&) = delete; Feature& operator=(const Feature&) = delete; -#else - // This object needs to be copyable because of some signatures in - // ScopedFeatureList, but generally isn't copied anywhere except unit tests. - // The `cached_value` doesn't get copied and copies will trigger a lookup if - // their state is queried. - Feature(const Feature& other) - : name(other.name), default_state(other.default_state), cached_value(0) {} -#endif // The name of the feature. This should be unique to each feature and is used // for enabling/disabling features via command line flags and experiments.
diff --git a/base/test/scoped_feature_list.cc b/base/test/scoped_feature_list.cc index 98e9df5..449e8df 100644 --- a/base/test/scoped_feature_list.cc +++ b/base/test/scoped_feature_list.cc
@@ -418,29 +418,6 @@ InitWithFeaturesImpl(enabled_features, {}, disabled_features); } -#if !BUILDFLAG(IS_LINUX) && !BUILDFLAG(IS_WIN) && !BUILDFLAG(IS_ANDROID) && \ - !BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(IS_APPLE) -void ScopedFeatureList::InitWithFeatures( - const std::vector<Feature>& enabled_features, - const std::vector<Feature>& disabled_features) { - std::vector<FeatureRef> enabled_features_as_refs(enabled_features.begin(), - enabled_features.end()); - std::vector<FeatureRef> disabled_features_as_refs(disabled_features.begin(), - disabled_features.end()); - InitWithFeaturesImpl(enabled_features_as_refs, {}, disabled_features_as_refs); -} - -void ScopedFeatureList::InitWithFeatures( - std::initializer_list<Feature> enabled_features, - std::initializer_list<Feature> disabled_features) { - std::vector<FeatureRef> enabled_features_as_refs(enabled_features.begin(), - enabled_features.end()); - std::vector<FeatureRef> disabled_features_as_refs(disabled_features.begin(), - disabled_features.end()); - InitWithFeaturesImpl(enabled_features_as_refs, {}, disabled_features_as_refs); -} -#endif - void ScopedFeatureList::InitAndEnableFeature(const Feature& feature) { InitWithFeaturesImpl({feature}, {}, {}); } @@ -512,25 +489,6 @@ InitWithFeaturesImpl({}, enabled_features, disabled_features); } -#if !BUILDFLAG(IS_LINUX) && !BUILDFLAG(IS_WIN) && !BUILDFLAG(IS_ANDROID) && \ - !BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(IS_APPLE) -void ScopedFeatureList::InitWithFeaturesAndParameters( - const std::vector<FeatureAndParams>& enabled_features, - const std::vector<Feature>& disabled_features) { - std::vector<FeatureRef> disabled_features_as_refs(disabled_features.begin(), - disabled_features.end()); - InitWithFeaturesImpl({}, enabled_features, disabled_features_as_refs); -} - -void ScopedFeatureList::InitWithFeaturesAndParameters( - const std::vector<FeatureAndParams>& enabled_features, - std::initializer_list<Feature> disabled_features) { - std::vector<FeatureRef> disabled_features_as_refs(disabled_features.begin(), - disabled_features.end()); - InitWithFeaturesImpl({}, enabled_features, disabled_features_as_refs); -} -#endif - void ScopedFeatureList::InitWithMergedFeatures( Features&& merged_features, bool create_associated_field_trials,
diff --git a/base/test/scoped_feature_list.h b/base/test/scoped_feature_list.h index e551133..b0d1af5 100644 --- a/base/test/scoped_feature_list.h +++ b/base/test/scoped_feature_list.h
@@ -17,7 +17,6 @@ #include "base/metrics/field_trial.h" #include "base/metrics/field_trial_params.h" #include "base/types/pass_key.h" -#include "build/build_config.h" #include "third_party/abseil-cpp/absl/base/attributes.h" namespace base { @@ -145,14 +144,6 @@ // interactions. void InitWithFeatures(const std::vector<FeatureRef>& enabled_features, const std::vector<FeatureRef>& disabled_features); -#if !BUILDFLAG(IS_LINUX) && !BUILDFLAG(IS_WIN) && !BUILDFLAG(IS_ANDROID) && \ - !BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(IS_APPLE) - // TODO(https://crbug.com/1370572): Remove these temporary forwarding helpers. - void InitWithFeatures(const std::vector<Feature>& enabled_features, - const std::vector<Feature>& disabled_features); - void InitWithFeatures(std::initializer_list<Feature> enabled_features, - std::initializer_list<Feature> disabled_features); -#endif // Initializes and registers a FeatureList instance based on the current // FeatureList and overridden with single enabled feature. @@ -175,16 +166,6 @@ void InitWithFeaturesAndParameters( const std::vector<FeatureAndParams>& enabled_features, const std::vector<FeatureRef>& disabled_features); -#if !BUILDFLAG(IS_LINUX) && !BUILDFLAG(IS_WIN) && !BUILDFLAG(IS_ANDROID) && \ - !BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(IS_APPLE) - // TODO(https://crbug.com/1370572): Remove these temporary forwarding helpers. - void InitWithFeaturesAndParameters( - const std::vector<FeatureAndParams>& enabled_features, - const std::vector<Feature>& disabled_features); - void InitWithFeaturesAndParameters( - const std::vector<FeatureAndParams>& enabled_features, - std::initializer_list<Feature> disabled_features); -#endif // Initializes and registers a FeatureList instance based on the current // FeatureList and overridden with single disabled feature.
diff --git a/build/fuchsia/linux_internal.sdk.sha1 b/build/fuchsia/linux_internal.sdk.sha1 index 10295c7..1ff4b5b 100644 --- a/build/fuchsia/linux_internal.sdk.sha1 +++ b/build/fuchsia/linux_internal.sdk.sha1
@@ -1 +1 @@ -9.20221008.3.1 +9.20221009.3.1
diff --git a/buildtools/deps_revisions.gni b/buildtools/deps_revisions.gni index 6ab8d2be..55abbd8 100644 --- a/buildtools/deps_revisions.gni +++ b/buildtools/deps_revisions.gni
@@ -5,5 +5,5 @@ declare_args() { # Used to cause full rebuilds on libc++ rolls. This should be kept in sync # with the libcxx_revision vars in //DEPS. - libcxx_revision = "625a5eb4c70878cdd35a1eb3958035c756a35fd8" + libcxx_revision = "bac95aa2e352b64f784bea6fb2ffa4b34603b551" }
diff --git a/chrome/VERSION b/chrome/VERSION index 2ce699e..1a2ca1b 100644 --- a/chrome/VERSION +++ b/chrome/VERSION
@@ -1,4 +1,4 @@ MAJOR=108 MINOR=0 -BUILD=5349 +BUILD=5352 PATCH=0
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_mn.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_mn.xtb index 9db0324..48e0e6c61 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_mn.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_mn.xtb
@@ -33,6 +33,7 @@ <translation id="3194464645767632461">үнэлгээ</translation> <translation id="3291470810748040983">Та нээлттэй табд илүү хямд үнэ байгаа тохиолдолд сэрэмжлүүлэг авна</translation> <translation id="3328308545011660196">Зөвлөмж: <ph name="NUMBER_OF_TABS" /> таб холбоотой бололтой. Эдгээрийг бүлэглэх үү?</translation> +<translation id="3499853001094440183">Табуудыг бүлэглэхээ болих</translation> <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation> <translation id="3819916404117584598">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> табыг хураах.}other{<ph name="TABS_COUNT_MANY" /> таб бүхий <ph name="TITLE_OF_GROUP" /> бүлэг табыг хураах.}}</translation> <translation id="3882834874697329510">Та нээлттэй табд илүү хямд үнэ байгаа тохиолдолд сэрэмжлүүлэг авахын тулд Тохиргоо хэсэгт мэдэгдлийг асаана уу.</translation> @@ -66,6 +67,8 @@ <translation id="6193448654517602979">Таб сонгох</translation> <translation id="6228793724645064692">(дэлгүүрийн үнэлгээ)</translation> <translation id="6333260925957816943">Энэ дэлгүүрийн талаарх мэдээлэл</translation> +<translation id="639823877092900621">{TABS_COUNT,plural, =1{Сонгосон <ph name="TABS_COUNT_ONE" /> табыг бүлэглэхээ болих}other{Сонгосон <ph name="TABS_COUNT_MANY" /> табыг бүлэглэхээ болих}}</translation> +<translation id="6422650314852876533">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> таб}other{<ph name="TABS_COUNT_MANY" /> таб}}</translation> <translation id="6510648526783655549">Tab мессежийг хаах</translation> <translation id="6549021453810473782">Дэлгүүрийн мэдээллийг үзэх</translation> <translation id="6562820390860419811">Табыг зүүн тийш зөөх</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pt-BR.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pt-BR.xtb index 48b572d..24d687a 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pt-BR.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pt-BR.xtb
@@ -33,6 +33,7 @@ <translation id="3194464645767632461">nota</translation> <translation id="3291470810748040983">Você receberá um alerta quando houver um preço menor em uma guia aberta</translation> <translation id="3328308545011660196">Sugestão: <ph name="NUMBER_OF_TABS" /> guias parecem ser relacionadas. Agrupá-las?</translation> +<translation id="3499853001094440183">Desagrupar guias</translation> <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation> <translation id="3819916404117584598">{TABS_COUNT,plural, =1{Recolher <ph name="TABS_COUNT_ONE" /> guia.}one{Recolher <ph name="TITLE_OF_GROUP" /> grupo de guias com <ph name="TABS_COUNT_MANY" /> guia.}other{Recolher <ph name="TITLE_OF_GROUP" /> grupo de guias com <ph name="TABS_COUNT_MANY" /> guias.}}</translation> <translation id="3882834874697329510">Para receber um alerta quando houver um preço menor em uma guia aberta, ative as notificações nas configurações.</translation> @@ -66,6 +67,8 @@ <translation id="6193448654517602979">Selecione as guias</translation> <translation id="6228793724645064692">(nota da loja)</translation> <translation id="6333260925957816943">Informações sobre a loja</translation> +<translation id="639823877092900621">{TABS_COUNT,plural, =1{Desagrupar <ph name="TABS_COUNT_ONE" /> guia selecionada}one{Desagrupar <ph name="TABS_COUNT_MANY" /> guia selecionada}other{Desagrupar <ph name="TABS_COUNT_MANY" /> guias selecionadas}}</translation> +<translation id="6422650314852876533">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> guia}one{<ph name="TABS_COUNT_MANY" /> guia}other{<ph name="TABS_COUNT_MANY" /> guias}}</translation> <translation id="6510648526783655549">Fechar barra de guias</translation> <translation id="6549021453810473782">Ver informações da loja</translation> <translation id="6562820390860419811">Mover guia para a esquerda</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ro.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ro.xtb index 2979b112..3edeb00 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ro.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ro.xtb
@@ -33,6 +33,7 @@ <translation id="3194464645767632461">evaluare</translation> <translation id="3291470810748040983">Vei primi o alertă atunci când scade prețul dintr-o filă deschisă.</translation> <translation id="3328308545011660196">Sugestie: <ph name="NUMBER_OF_TABS" /> file par similare. Vrei să le grupezi?</translation> +<translation id="3499853001094440183">Anulează gruparea filelor</translation> <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation> <translation id="3819916404117584598">{TABS_COUNT,plural, =1{Restrânge <ph name="TABS_COUNT_ONE" /> filă.}few{Restrânge grupul de file <ph name="TITLE_OF_GROUP" /> cu <ph name="TABS_COUNT_MANY" /> file.}other{Restrânge grupul de file <ph name="TITLE_OF_GROUP" /> cu <ph name="TABS_COUNT_MANY" /> de file.}}</translation> <translation id="3882834874697329510">Pentru a primi o alertă atunci când scade prețul dintr-o filă deschisă, activează notificările în Setări.</translation> @@ -66,6 +67,8 @@ <translation id="6193448654517602979">Selectează file</translation> <translation id="6228793724645064692">(evaluare a magazinului)</translation> <translation id="6333260925957816943">Informații despre magazin</translation> +<translation id="639823877092900621">{TABS_COUNT,plural, =1{Anulează <ph name="TABS_COUNT_ONE" /> filă selectată}few{Anulează <ph name="TABS_COUNT_MANY" /> file selectate}other{Anulează <ph name="TABS_COUNT_MANY" /> de file selectate}}</translation> +<translation id="6422650314852876533">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> filă}few{<ph name="TABS_COUNT_MANY" /> file}other{<ph name="TABS_COUNT_MANY" /> de file}}</translation> <translation id="6510648526783655549">Închide bara de file</translation> <translation id="6549021453810473782">Vezi informații despre magazin</translation> <translation id="6562820390860419811">Mută fila spre stânga</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_si.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_si.xtb index 7819a63..2f1af76 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_si.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_si.xtb
@@ -33,6 +33,7 @@ <translation id="3194464645767632461">ඇගයීම</translation> <translation id="3291470810748040983">විවෘත ටැබයක අඩු මිලක් ඇති විට ඔබට ඇඟවීමක් ලැබෙනු ඇත</translation> <translation id="3328308545011660196">යෝජනාව: පටිති <ph name="NUMBER_OF_TABS" /> ක් අදාළ බව පෙනේ. ඒවා සමූහ කරන්නද?</translation> +<translation id="3499853001094440183">පටිති සමූහගත නොකරන්න</translation> <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation> <translation id="3819916404117584598">{TABS_COUNT,plural, =1{ටැබ <ph name="TABS_COUNT_ONE" />ක් හකුළන්න.}one{<ph name="TITLE_OF_GROUP" /> ටැබ සමූහය ටැබ <ph name="TABS_COUNT_MANY" />ක් සමග හකුළන්න.}other{<ph name="TITLE_OF_GROUP" /> ටැබ සමූහය ටැබ <ph name="TABS_COUNT_MANY" />ක් සමග හකුළන්න.}}</translation> <translation id="3882834874697329510">විවෘත ටැබ් එකක අඩු මිලක් ඇති විට ඇඟවීමක් ලබා ගැනීමට, සැකසීම්වල දැනුම්දීම් ක්රියාත්මක කරන්න.</translation> @@ -66,6 +67,8 @@ <translation id="6193448654517602979">පටිති තෝරන්න</translation> <translation id="6228793724645064692">(වෙළඳසැල් ඇගයීම)</translation> <translation id="6333260925957816943">මෙම වෙළඳසැල පිළිබඳ තොරතුරු</translation> +<translation id="639823877092900621">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> තෝරන ලද පටිත්තක් සමූහගත නොකරන්න}one{තෝරන ලද පටිති <ph name="TABS_COUNT_MANY" /> සමූහගත නොකරන්න}other{තෝරන ලද පටිති <ph name="TABS_COUNT_MANY" /> සමූහගත නොකරන්න}}</translation> +<translation id="6422650314852876533">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> පටිත්තක්}one{පටිති <ph name="TABS_COUNT_MANY" />ක්}other{පටිති <ph name="TABS_COUNT_MANY" />ක්}}</translation> <translation id="6510648526783655549">ටැබ් තීරුව වසන්න</translation> <translation id="6549021453810473782">වෙළඳසැල් තොරතුරු බලන්න</translation> <translation id="6562820390860419811">පටිත්ත වමට ගෙන යන්න</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sk.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sk.xtb index 53a5fc9..f3119be 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sk.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sk.xtb
@@ -33,6 +33,7 @@ <translation id="3194464645767632461">hodnotenie</translation> <translation id="3291470810748040983">Keď bude na otvorenej karte nižšia cena, dostanete upozornenie</translation> <translation id="3328308545011660196">Návrh: Zdá, sa že niekoľko (<ph name="NUMBER_OF_TABS" />) kariet spolu súvisí. Chcete ich zoskupiť?</translation> +<translation id="3499853001094440183">Zrušiť zoskupenie kariet</translation> <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation> <translation id="3819916404117584598">{TABS_COUNT,plural, =1{Zbaliť <ph name="TABS_COUNT_ONE" /> kartu}few{Zbaliť skupinu <ph name="TITLE_OF_GROUP" /> s <ph name="TABS_COUNT_MANY" /> kartami}many{Collapse <ph name="TITLE_OF_GROUP" /> tab group with <ph name="TABS_COUNT_MANY" /> tabs.}other{Zbaliť skupinu <ph name="TITLE_OF_GROUP" /> s <ph name="TABS_COUNT_MANY" /> kartami}}</translation> <translation id="3882834874697329510">Ak chcete dostať upozornenie, keď sa na otvorenej karte zníži cena, zapnite upozornenia v Nastaveniach.</translation> @@ -66,6 +67,8 @@ <translation id="6193448654517602979">Vyberte karty</translation> <translation id="6228793724645064692">(hodnotenie obchodu)</translation> <translation id="6333260925957816943">Informácie o tomto obchode</translation> +<translation id="639823877092900621">{TABS_COUNT,plural, =1{Zrušiť zoskupenie <ph name="TABS_COUNT_ONE" /> vybranej karty}few{Zrušiť zoskupenie <ph name="TABS_COUNT_MANY" /> vybraných kariet}many{Ungroup <ph name="TABS_COUNT_MANY" /> selected tabs}other{Zrušiť zoskupenie <ph name="TABS_COUNT_MANY" /> vybraných kariet}}</translation> +<translation id="6422650314852876533">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> karta}few{<ph name="TABS_COUNT_MANY" /> karty}many{<ph name="TABS_COUNT_MANY" /> tabs}other{<ph name="TABS_COUNT_MANY" /> kariet}}</translation> <translation id="6510648526783655549">Zavrieť panel kariet</translation> <translation id="6549021453810473782">Zobraziť informácie o obchode</translation> <translation id="6562820390860419811">Presunúť kartu doľava</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zu.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zu.xtb index 60942e2b..459d340 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zu.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zu.xtb
@@ -33,6 +33,7 @@ <translation id="3194464645767632461">isilinganisela</translation> <translation id="3291470810748040983">Uzothola isexwayiso lapho kukhona intengo ephansi kuthebhu evuliwe</translation> <translation id="3328308545011660196">Isiphakamiso: amathebhu a-<ph name="NUMBER_OF_TABS" /> abonakala ahlobene. Wenze iqembu?</translation> +<translation id="3499853001094440183">Hlukanisa amathebhu</translation> <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation> <translation id="3819916404117584598">{TABS_COUNT,plural, =1{Goqa ithebhu engu-<ph name="TABS_COUNT_ONE" />.}one{Goqa iqembu lethebhu engu-<ph name="TITLE_OF_GROUP" /> enamathebhu angu-<ph name="TABS_COUNT_MANY" />.}other{Goqa iqembu lethebhu engu-<ph name="TITLE_OF_GROUP" /> enamathebhu angu-<ph name="TABS_COUNT_MANY" />.}}</translation> <translation id="3882834874697329510">Ukuze uthole isexwayiso lapho kukhona intengo ephansi kuthebhu evuliwe, vula izaziso kokuthi Amasethingi.</translation> @@ -66,6 +67,8 @@ <translation id="6193448654517602979">Khetha amathebhu</translation> <translation id="6228793724645064692">(isilinganiso sesitolo)</translation> <translation id="6333260925957816943">Ulwazi olumayelana nalesi sitolo</translation> +<translation id="639823877092900621">{TABS_COUNT,plural, =1{Hlukanisa ithebhu e-<ph name="TABS_COUNT_ONE" /> ekhethiwe}one{Hlukanisa amathebhu angu-<ph name="TABS_COUNT_MANY" /> akhethiwe}other{Hlukanisa amathebhu angu-<ph name="TABS_COUNT_MANY" /> akhethiwe}}</translation> +<translation id="6422650314852876533">{TABS_COUNT,plural, =1{Ithebhu e-<ph name="TABS_COUNT_ONE" />}one{Amathebhu angu-<ph name="TABS_COUNT_MANY" />}other{Amathebhu angu-<ph name="TABS_COUNT_MANY" />}}</translation> <translation id="6510648526783655549">Vala umugqa wamathebhu</translation> <translation id="6549021453810473782">Buka ulwazi lwesitolo</translation> <translation id="6562820390860419811">Hambisa ithebhu ngakwesokunxele</translation>
diff --git a/chrome/app/os_settings_strings.grdp b/chrome/app/os_settings_strings.grdp index 19010ae..e99b265 100644 --- a/chrome/app/os_settings_strings.grdp +++ b/chrome/app/os_settings_strings.grdp
@@ -744,6 +744,9 @@ <message name="IDS_SETTINGS_INPUT_METHOD_OPTIONS_JAPANESE_MANAGE_USER_DICTIONARY" desc="Label on the settings page which if the user clicks on, will bring up the Japaneses dictionary management page. There are multiple dictionary which the user can modify."> Manage user dictionaries </message> + <message name="IDS_SETTINGS_INPUT_METHOD_OPTIONS_JAPANESE_CLEAR_PERSONALIZATION_DATA" desc="The label for the button leading to the page within japanese input settings which can be used to clear personalization data for Japanese input. In Japanese, this should be '入力履歴の消去...'."> + Clear personalization data... + </message> <message name="IDS_SETTINGS_INPUT_METHOD_OPTIONS_JAPANESE_MANAGE_USER_DICTIONARY_SUBTITLE" desc="Subheading for the label on the settings page which if the user clicks on, will bring up the Japaneses dictionary management page. There are multiple dictionary which the user can modify."> Add your own words to the user dictionaries in order to customize the conversion candidates. </message>
diff --git a/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_INPUT_METHOD_OPTIONS_JAPANESE_CLEAR_PERSONALIZATION_DATA.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_INPUT_METHOD_OPTIONS_JAPANESE_CLEAR_PERSONALIZATION_DATA.png.sha1 new file mode 100644 index 0000000..efec6b7 --- /dev/null +++ b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_INPUT_METHOD_OPTIONS_JAPANESE_CLEAR_PERSONALIZATION_DATA.png.sha1
@@ -0,0 +1 @@ +f6cbcd696cbfad25e68818f38d53e05bae193934 \ No newline at end of file
diff --git a/chrome/app/resources/chromium_strings_en-GB.xtb b/chrome/app/resources/chromium_strings_en-GB.xtb index a682883..2bd5e2f0 100644 --- a/chrome/app/resources/chromium_strings_en-GB.xtb +++ b/chrome/app/resources/chromium_strings_en-GB.xtb
@@ -18,6 +18,7 @@ <translation id="1385859895174722837">Google Assistant in Chromium</translation> <translation id="1396446129537741364">Chromium is trying to show passwords.</translation> <translation id="1414495520565016063">You're signed in to Chromium!</translation> +<translation id="1493803763272692301">You can enjoy the most out of Chromium</translation> <translation id="1524282610922162960">Share a Chromium tab</translation> <translation id="1553461853655228091">Chromium needs permission to access your camera to create a 3D map of your surroundings</translation> <translation id="1607715478322902680">{COUNT,plural, =0{Your administrator requires that you relaunch Chromium to apply an update}=1{Your administrator requires that you relaunch Chromium to apply an update. Your Incognito window won't reopen.}other{Your administrator requires that you relaunch Chromium to apply an update. Your # Incognito windows won't reopen.}}</translation>
diff --git a/chrome/app/resources/chromium_strings_mn.xtb b/chrome/app/resources/chromium_strings_mn.xtb index 273e0946..a414c0f 100644 --- a/chrome/app/resources/chromium_strings_mn.xtb +++ b/chrome/app/resources/chromium_strings_mn.xtb
@@ -13,6 +13,7 @@ <translation id="1185134272377778587">Chromium-ийн тухай</translation> <translation id="1203500561924088507">Суулгасанд баярлалаа. Та <ph name="BUNDLE_NAME" />-г ашиглахаасаа өмнө хөтчөө дахин эхлүүлэх ёстой.</translation> <translation id="1231839967188101156">Асаалттай үед Chromium идэвхгүй табуудаас санах ойг чөлөөлнө. Энэ нь идэвхтэй табууд болон бусад аппад компьютерын илүү их нөөцийг өгч, Chromium-г хурдан байлгана. Таныг идэвхгүй табууд руугаа буцахад тэдгээр нь автоматаар дахин идэвхтэй болно. <ph name="BEGIN_LINK" />Нэмэлт мэдээлэл авах<ph name="END_LINK" /></translation> +<translation id="1261119230216066228">Санах ой хэмнэгч нь Chromium-г илүү хурдан болгосон</translation> <translation id="1315551408014407711">Chromium-н шинэ профайлаа тохируулах</translation> <translation id="1385859895174722837">Chromium-н Google Туслах</translation> <translation id="1396446129537741364">Chromium нь нууц үгийг үзүүлэхээр ачаалж байна.</translation> @@ -209,6 +210,7 @@ <translation id="6055895534982063517">Chromium-ийн шинэ хувилбар боломжтой байна. Хэзээ хэзээнээс ч хурдан.</translation> <translation id="6063093106622310249">&Chromium-д нээх</translation> <translation id="6072279588547424923"><ph name="EXTENSION_NAME" />-г Chromium-д нэмсэн</translation> +<translation id="6072463441809498330">Chromium-г илүү хурдан болгоорой</translation> <translation id="608006075545470555">Энэ хөтчид ажлын профайл нэмэх</translation> <translation id="6096348254544841612">Chromium-г тохируулж, хянана уу. Шинэчлэх боломжтой.</translation> <translation id="6119438414301547735">Өргөтгөлд Chromium-н самбарт хандах хүсэлт харуулахыг зөвшөөрнө үү</translation>
diff --git a/chrome/app/resources/chromium_strings_pt-BR.xtb b/chrome/app/resources/chromium_strings_pt-BR.xtb index 11351ae..ddc19a34 100644 --- a/chrome/app/resources/chromium_strings_pt-BR.xtb +++ b/chrome/app/resources/chromium_strings_pt-BR.xtb
@@ -11,6 +11,7 @@ <translation id="1185134272377778587">Sobre o Chromium</translation> <translation id="1203500561924088507">Agradecemos por fazer a instalação. É necessário reiniciar o navegador antes de utilizar o <ph name="BUNDLE_NAME" />.</translation> <translation id="1231839967188101156">Quando essa opção está ativada, o Chromium libera memória das guias inativas. Isso permite que guias ativas e outros apps usem mais recursos do computador e mantém o Chromium rápido. Suas guias inativas são reativadas automaticamente quando você volta a elas. <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /></translation> +<translation id="1261119230216066228">A Economia de memória tornou o Chromium mais rápido</translation> <translation id="1315551408014407711">Configure seu novo perfil do Chromium</translation> <translation id="1385859895174722837">Google Assistente no Chromium</translation> <translation id="1396446129537741364">O Chromium está tentando mostrar senhas.</translation> @@ -207,6 +208,7 @@ <translation id="6055895534982063517">Há uma nova versão ainda mais rápida do Chromium disponível.</translation> <translation id="6063093106622310249">&Abrir no Chromium</translation> <translation id="6072279588547424923">A extensão <ph name="EXTENSION_NAME" /> foi adicionada ao Chromium</translation> +<translation id="6072463441809498330">Deixe o Chromium mais rápido</translation> <translation id="608006075545470555">Adicionar um perfil de trabalho a este navegador</translation> <translation id="6096348254544841612">Personalize e controle o Chromium. Uma atualização está disponível.</translation> <translation id="6119438414301547735">Permitir que a extensão mostre solicitações de acesso na barra de ferramentas do Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_ro.xtb b/chrome/app/resources/chromium_strings_ro.xtb index c159999..d5ed75b 100644 --- a/chrome/app/resources/chromium_strings_ro.xtb +++ b/chrome/app/resources/chromium_strings_ro.xtb
@@ -11,6 +11,7 @@ <translation id="1185134272377778587">Despre Chromium</translation> <translation id="1203500561924088507">Mulțumim pentru instalare. Înainte să folosești <ph name="BUNDLE_NAME" /> trebuie să repornești browserul.</translation> <translation id="1231839967188101156">Când opțiunea este activată, Chromium eliberează memorie din filele inactive. Astfel, filele active și alte aplicații beneficiază de mai multe resurse ale computerului și Chromium funcționează rapid. Filele inactive se reactivează automat când revii la ele. <ph name="BEGIN_LINK" />Află mai multe<ph name="END_LINK" /></translation> +<translation id="1261119230216066228">Datorită Economisirii memoriei, Chromium este mai rapid</translation> <translation id="1315551408014407711">Configurează noul profil Chromium</translation> <translation id="1385859895174722837">Asistentul Google în Chromium</translation> <translation id="1396446129537741364">Chromium încearcă să afișeze parolele.</translation> @@ -209,6 +210,7 @@ <translation id="6055895534982063517">Este disponibilă o nouă versiune Chromium, iar aceasta este mai rapidă ca oricând.</translation> <translation id="6063093106622310249">&Deschide în Chromium</translation> <translation id="6072279588547424923">Extensia <ph name="EXTENSION_NAME" /> a fost adăugată la Chromium</translation> +<translation id="6072463441809498330">Crește eficiența în Chromium</translation> <translation id="608006075545470555">Adaugă un profil de serviciu în acest browser</translation> <translation id="6096348254544841612">Personalizează și controlează Chromium. Este disponibilă o actualizare.</translation> <translation id="6119438414301547735">Permite extensiei să afișeze solicitări de acces în bara de instrumente Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_si.xtb b/chrome/app/resources/chromium_strings_si.xtb index 894eb49bc..d24be0f 100644 --- a/chrome/app/resources/chromium_strings_si.xtb +++ b/chrome/app/resources/chromium_strings_si.xtb
@@ -13,6 +13,7 @@ <translation id="1185134272377778587">Chromium පිළිබඳ</translation> <translation id="1203500561924088507">ස්ථාපනය කිරීම වෙනුවෙන් ස්තුතියි. ඔබ <ph name="BUNDLE_NAME" /> භාවිත කිරීමට පෙර ඔබගේ බ්රවුසරය යළි ඇරඹිය යුතුය.</translation> <translation id="1231839967188101156">ක්රියාත්මක වන විට, Chromium අක්රිය පටිති වෙතින් මතකය නිදහස් කරයි. මෙය සක්රිය පටිති සහ අනෙකුත් යෙදුම්වලට වැඩි පරිගණක සම්පත් ලබා දෙන අතර Chromium වේගවත්ව තබා ගනී. ඔබ ඒවා වෙත ආපසු යන විට ඔබේ අක්රිය පටිති ස්වයංක්රීයව නැවත සක්රිය වේ. <ph name="BEGIN_LINK" />තව දැන ගන්න<ph name="END_LINK" /></translation> +<translation id="1261119230216066228">මතක සුරකිනය Chromium වේගවත් කරන ලදි</translation> <translation id="1315551408014407711">ඔබගේ නව Chromium පැතිකඩ පිහිටුවන්න</translation> <translation id="1385859895174722837">Chromium තුළ Google සහයක</translation> <translation id="1396446129537741364">Chromium මුරපද පෙන්වීමට උත්සාහ කරමින් සිටී.</translation> @@ -211,6 +212,7 @@ <translation id="6055895534982063517">Chromium හි නව සංස්කරණයක් පවතී, එය සැමදාටම වඩා වේගවත්.</translation> <translation id="6063093106622310249">&Chromium තුළ විවෘත කරන්න</translation> <translation id="6072279588547424923"><ph name="EXTENSION_NAME" /> Chromium වෙත එක් කර ඇත</translation> +<translation id="6072463441809498330">Chromium වේගවත් කරන්න</translation> <translation id="608006075545470555">මෙම බ්රව්සරයට කාර්යාල පැතිකඩ එක් කරන්න</translation> <translation id="6096348254544841612">Chromium අභිරුචිකරණය සහ පාලනය කරන්න. යාවත්කාලීන ලද හැකිය.</translation> <translation id="6119438414301547735">Chromium මෙවලම් තීරුවේ ප්රවේශ ඉල්ලීම් පෙන්වීමට දිගුවට ඉඩ දෙන්න</translation>
diff --git a/chrome/app/resources/chromium_strings_sk.xtb b/chrome/app/resources/chromium_strings_sk.xtb index 7eed7ed..107f144 100644 --- a/chrome/app/resources/chromium_strings_sk.xtb +++ b/chrome/app/resources/chromium_strings_sk.xtb
@@ -13,6 +13,7 @@ <translation id="1185134272377778587">Informácie o prehliadači Chromium</translation> <translation id="1203500561924088507">Ďakujeme za inštaláciu. Než začnete aplikáciu <ph name="BUNDLE_NAME" /> používať, musíte reštartovať prehliadač.</translation> <translation id="1231839967188101156">Keď je táto možnosť zapnutá, Chromium bude uvoľňovať pamäť z neaktívnych kariet. Aktívne karty a ďalšie aplikácie tak získajú viac zdrojov počítača a prehliadač Chromium zostane rýchly. Neaktívne karty sa automaticky znova aktivujú, keď na ne prejdete. <ph name="BEGIN_LINK" />Ďalšie informácie<ph name="END_LINK" /></translation> +<translation id="1261119230216066228">Šetrič pamäte zrýchlil Chromium</translation> <translation id="1315551408014407711">Nastavte si nový profil prehliadača Chromium</translation> <translation id="1385859895174722837">Asistent Google v prehliadači Chromium</translation> <translation id="1396446129537741364">Prehliadač Chromium sa snaží zobraziť heslá.</translation> @@ -211,6 +212,7 @@ <translation id="6055895534982063517">K dispozícii je nová verzia prehliadača Chromium, ktorá je rýchlejšia ako kedykoľvek predtým.</translation> <translation id="6063093106622310249">&Otvoriť v prehliadači Chromium</translation> <translation id="6072279588547424923">Rozšírenie <ph name="EXTENSION_NAME" /> bolo pridané do prehliadača Chromium</translation> +<translation id="6072463441809498330">Zrýchlite Chromium</translation> <translation id="608006075545470555">Pridanie pracovného profilu do tohto prehliadača</translation> <translation id="6096348254544841612">Prispôsobte si prehliadač Chromium a ovládajte ho. K dispozícii je aktualizácia.</translation> <translation id="6119438414301547735">Povoliť rozšíreniu zobrazovať požiadavky na prístup na paneli s nástrojmi prehliadača Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_zu.xtb b/chrome/app/resources/chromium_strings_zu.xtb index a98312de..7fbdd98a 100644 --- a/chrome/app/resources/chromium_strings_zu.xtb +++ b/chrome/app/resources/chromium_strings_zu.xtb
@@ -13,6 +13,7 @@ <translation id="1185134272377778587">Mayelana ne-Chromium</translation> <translation id="1203500561924088507">Siyabonga ngokufaka. Kufanele uqale kabusha ibhrawuza yakho ngaphambi kokusebenzisa i-<ph name="BUNDLE_NAME" />.</translation> <translation id="1231839967188101156">Uma ivuliwe, i-Chromium ikhulula inkumbulo kumathebhu angasebenzi. Lokhu kunikeza amathebhu asebenzayo namanye ama-app izinsiza zekhompyutha ezengeziwe futhi kugcina i-Chromium ishesha. Amathebhu akho angasebenzi aphinde asebenze ngokuzenzakalelayo uma ubuyela kuwo. <ph name="BEGIN_LINK" />Funda kabanzi<ph name="END_LINK" /></translation> +<translation id="1261119230216066228">Isilondolozi Senkumbulo Senze i-Chromium Yashesha</translation> <translation id="1315551408014407711">Setha iphrofayela yakho entsha ye-Chromium</translation> <translation id="1385859895174722837">I-Google Assistant ku-Chromium</translation> <translation id="1396446129537741364">I-Chromium izama ukubonisa amaphasiwedi.</translation> @@ -211,6 +212,7 @@ <translation id="6055895534982063517">Kukhona inguqulo entsha ye-Chromium etholakalayo, futhi ishesha kakhulu kunakuqala.</translation> <translation id="6063093106622310249">&Vula ku-Chromium</translation> <translation id="6072279588547424923">I-<ph name="EXTENSION_NAME" /> ingezwe ku-Chromium</translation> +<translation id="6072463441809498330">Yenza i-Chromium Isheshe</translation> <translation id="608006075545470555">Engeza Iphrofayela Yomsebenzi kulesi siphequluli</translation> <translation id="6096348254544841612">Enza ngendlela oyifisayo uphinde ulawule i-Chromium. Isibuyekezo siyatholakala.</translation> <translation id="6119438414301547735">Vumela isandiso ukuze ubonise izicelo zokufinyelela kubha yamathuluzi ye-Chromium</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb index 9fe293e..4ae51220 100644 --- a/chrome/app/resources/generated_resources_ca.xtb +++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -1799,7 +1799,7 @@ <translation id="2642111877055905627">Pilota de futbol</translation> <translation id="2643698698624765890">Per gestionar les extensions, feu clic a Extensions al menú Finestra.</translation> <translation id="2645047101481282803"><ph name="PROFILE_NAME" /> gestiona el teu dispositiu</translation> -<translation id="2645435784669275700">Chrome OS</translation> +<translation id="2645435784669275700">ChromeOS</translation> <translation id="2645515095874728277">Ja hi ha una contrasenya d'aquest compte emmagatzemada en aquest dispositiu</translation> <translation id="2649045351178520408">ASCII codificat en Base64, cadena de certificats</translation> <translation id="2652129567809778422">Selecciona una contrasenya</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb index 2ef77a49..5bfd4c2c 100644 --- a/chrome/app/resources/generated_resources_da.xtb +++ b/chrome/app/resources/generated_resources_da.xtb
@@ -416,7 +416,7 @@ <translation id="1397594434718759194">Da du er logget ind i Chrome på disse enheder, kan du bruge dem som sikkerhedsnøgler.</translation> <translation id="1398853756734560583">Maksimér</translation> <translation id="139911022479327130">Lås din telefon op, og bekræft din identitet</translation> -<translation id="1401308693935339022">Brug placering. Tillad, at apps og tjenester med placeringstilladelse kan bruge denne enheds lokation. Google kan jævnligt indsamle lokationsdata og bruge disse data på en anonym måde for at forbedre lokationernes nøjagtighed og lokationsbaserede tjenester.</translation> +<translation id="1401308693935339022">Brug placering. Tillad, at apps og tjenester med placeringstilladelse kan bruge denne enheds lokation. Google kan jævnligt indsamle lokationsdata og bruge disse data på en anonym måde for at forbedre lokationsnøjagtigheden og lokationsbaserede tjenester.</translation> <translation id="1403222014593521787">Der kunne ikke oprettes forbindelse til proxyserveren</translation> <translation id="1405779994569073824">Gået ned.</translation> <translation id="1406500794671479665">Bekræfter...</translation> @@ -1194,7 +1194,7 @@ <translation id="2090876986345970080">Indstillinger for systemsikkerhed</translation> <translation id="2092356157625807382"><ph name="BEGIN_H3" />Fejlretningsfunktioner<ph name="END_H3" /> <ph name="BR" /> - Du kan aktivere fejlretningsfunktionerne på din Chrome OS-enhed for at installere og teste tilpasset kode på din enhed. Dette giver dig mulighed for at:<ph name="BR" /> + Du kan aktivere fejlretningsfunktionerne på din ChromeOS-enhed for at installere og teste tilpasset kode på din enhed. Dette giver dig mulighed for at:<ph name="BR" /> <ph name="BEGIN_LIST" /> <ph name="LIST_ITEM" />Fjerne rootfs-bekræftelse, så du kan ændre OS-filer <ph name="LIST_ITEM" />Aktivere SSH-adgang til enheden ved hjælp af standardtestnøgler, så du kan få adgang til enheden ved hjælp af værktøjer som f.eks. <ph name="BEGIN_CODE" />"cros flash"<ph name="END_CODE" /> @@ -1202,7 +1202,7 @@ <ph name="LIST_ITEM" />Indstille adgangskoden til login for både "dev" og "system root" til en tilpasset værdi, så du manuelt kan få adgang til enheden via SSH <ph name="END_LIST" /> <ph name="BR" /> - Når fejlretningsfunktionerne er aktiveret, forbliver de fleste af dem aktiveret – selv efter powerwash eller datasletning på en virksomhedsadministreret enhed. Hvis du vil deaktivere alle fejlretningsfunktioner helt, skal du udføre gendannelsesprocessen for Chrome OS (https://support.google.com/chromebook/answer/1080595). + Når fejlretningsfunktionerne er aktiveret, forbliver de fleste af dem aktiveret – selv efter powerwash eller datasletning på en virksomhedsadministreret enhed. Hvis du vil deaktivere alle fejlretningsfunktioner helt, skal du udføre gendannelsesprocessen for ChromeOS (https://support.google.com/chromebook/answer/1080595). <ph name="BR" /> <ph name="BR" /> Få flere oplysninger om fejlretningsfunktionerne på:<ph name="BR" /> @@ -1432,7 +1432,7 @@ <translation id="2301402091755573488">Delt fane</translation> <translation id="2302342861452486996"><ph name="BEGIN_H3" />Fejlretningsfunktioner<ph name="END_H3" /> <ph name="BR" /> - Du kan aktivere fejlretningsfunktionerne på din Chrome OS Flex-enhed for at installere og teste tilpasset kode på din enhed. Dette giver dig mulighed for at:<ph name="BR" /> + Du kan aktivere fejlretningsfunktionerne på din ChromeOS Flex-enhed for at installere og teste tilpasset kode på din enhed. Dette giver dig mulighed for at:<ph name="BR" /> <ph name="BEGIN_LIST" /> <ph name="LIST_ITEM" />Fjerne rootfs-bekræftelse, så du kan ændre OS-filer <ph name="LIST_ITEM" />Aktivere SSH-adgang til enheden ved hjælp af standardtestnøgler, så du kan få adgang til enheden ved hjælp af værktøjer som f.eks. <ph name="BEGIN_CODE" />'cros flash'<ph name="END_CODE" /> @@ -1440,7 +1440,7 @@ <ph name="LIST_ITEM" />Indstille adgangskoden til login for både "dev" og "system root" til en tilpasset værdi, så du manuelt kan få adgang til enheden via SSH <ph name="END_LIST" /> <ph name="BR" /> - Når fejlretningsfunktionerne er aktiveret, forbliver de fleste af dem aktiveret – selv efter powerwash eller datasletning på en virksomhedsadministreret enhed. Hvis du vil deaktivere alle fejlretningsfunktioner helt, skal du udføre gendannelsesprocessen for Chrome OS (https://support.google.com/chromebook/answer/1080595). + Når fejlretningsfunktionerne er aktiveret, forbliver de fleste af dem aktiveret – selv efter powerwash eller datasletning på en virksomhedsadministreret enhed. Hvis du vil deaktivere alle fejlretningsfunktioner helt, skal du udføre gendannelsesprocessen for ChromeOS (https://support.google.com/chromebook/answer/1080595). <ph name="BR" /> <ph name="BR" /> Få flere oplysninger om fejlretningsfunktionerne på:<ph name="BR" /> @@ -1815,7 +1815,7 @@ <translation id="2642111877055905627">Fodbold</translation> <translation id="2643698698624765890">Administrer dine udvidelser ved at klikke på Udvidelser i menuen Vindue.</translation> <translation id="2645047101481282803">Din enhed administreres af <ph name="PROFILE_NAME" /></translation> -<translation id="2645435784669275700">Chrome OS</translation> +<translation id="2645435784669275700">ChromeOS</translation> <translation id="2645515095874728277">Der er allerede gemt en adgangskode for denne konto på denne enhed</translation> <translation id="2649045351178520408">Base64-kodet ASCII, certifikatkæde</translation> <translation id="2652129567809778422">Vælg adgangskode</translation> @@ -1965,7 +1965,7 @@ <translation id="2775858145769350417">{NUM_APPS,plural, =1{Fjern 1 ikke-understøttet app}one{Fjern # ikke-understøttet app}other{Fjern # ikke-understøttede apps}}</translation> <translation id="2776560192867872731">Rediger navnet på enheden <ph name="DEVICE_NAME" /></translation> <translation id="2777251078198759550">Slet denne container</translation> -<translation id="2778471504622896352">Føj eksterne apps til Chrome OS-applisten</translation> +<translation id="2778471504622896352">Føj eksterne apps til ChromeOS-applisten</translation> <translation id="2781120507965857989">Aktivér synkronisering for at få dine bogmærker, dine adgangskoder, din historik m.m. på denne enhed og andre enheder, som synkroniseres. Google kan bruge din historik til at tilpasse Søgning og andre Google-tjenester.</translation> <translation id="2781692009645368755">Google Pay</translation> <translation id="2782104745158847185">Der opstod en fejl ved installation af Linux-appen</translation> @@ -2043,7 +2043,7 @@ <translation id="2841013758207633010">Tid</translation> <translation id="2841837950101800123">Udbyder</translation> <translation id="2842013086666334835">Log ind på "<ph name="NETWORK_ID" />"</translation> -<translation id="2843560154284403323">Opdater Chrome OS, og prøv at afslutte konfigurationen af Linux igen.</translation> +<translation id="2843560154284403323">Opdater ChromeOS, og prøv at afslutte konfigurationen af Linux igen.</translation> <translation id="2844169650293029770">USB-C-enhed (porten foran i venstre side)</translation> <translation id="2844809857160214557">Se og administrer udskriftsjobs</translation> <translation id="2845382757467349449">Vis altid bogmærkelinjen</translation> @@ -2063,7 +2063,7 @@ <translation id="2854896010770911740">Fjern cookies fra tredjeparter</translation> <translation id="2856776373509145513">Opret en ny container</translation> <translation id="2858138569776157458">Topwebsites</translation> -<translation id="2859383038987078242">Kør Chrome OS-diagnostiktest.</translation> +<translation id="2859383038987078242">Kør ChromeOS-diagnostiktest.</translation> <translation id="2861301611394761800">Opdateringen af systemet er fuldført. Genstart systemet.</translation> <translation id="2861941300086904918">Sikkerhedsadministrator for Native Client</translation> <translation id="2862815659905780618">Fjern Linux-udviklingsmiljø</translation> @@ -2169,7 +2169,7 @@ <translation id="2947605845283690091">Webbrowsing bør være hurtigt. Brug et øjeblik på at <ph name="BEGIN_LINK" />tjekke dine udvidelser<ph name="END_LINK" /> nu.</translation> <translation id="2948300991547862301">Gå til <ph name="PAGE_TITLE" /></translation> <translation id="29488703364906173">En hurtig, enkel og sikker webbrowser, der er udviklet til det moderne internet.</translation> -<translation id="2949289451367477459">Brug placering. Tillad, at apps og tjenester med placeringstilladelse kan bruge enhedens placering. Google kan med jævne mellemrum indsamle lokationsdata og bruge oplysningerne anonymt til at gøre lokationen mere nøjagtig og forbedre lokationsbaserede tjenester. <ph name="BEGIN_LINK1" />Få flere oplysninger<ph name="END_LINK1" /></translation> +<translation id="2949289451367477459">Brug lokation. Tillad, at apps og tjenester med lokationstilladelse kan bruge enhedens lokation. Google kan med jævne mellemrum indsamle lokationsdata og bruge oplysningerne anonymt for at forbedre lokationsnøjagtigheden og lokationsbaserede tjenester. <ph name="BEGIN_LINK1" />Få flere oplysninger<ph name="END_LINK1" /></translation> <translation id="2950666755714083615">Tilmeld mig</translation> <translation id="2953019166882260872">Opret forbindelse til din telefon via et kabel</translation> <translation id="2953218713108551165">Notifikationer er ikke tilladt for <ph name="SITE" />. Du bliver spurgt igen, næste gang du besøger websitet.</translation> @@ -2438,8 +2438,8 @@ <translation id="3238192140106069382">Opretter forbindelse og verificerer</translation> <translation id="3239373508713281971">Tidsgrænsen blev fjernet for <ph name="APP_NAME" /></translation> <translation id="3241680850019875542">Vælg rodmappen for udvidelsen, der skal pakkes. Opdater en udvidelse ved også at vælge den private nøglefil til genbrug.</translation> -<translation id="3242289508736283383">Appen med manifestattributten "kiosk_only" skal installeres i Chrome OS-terminaltilstand</translation> -<translation id="3242665648857227438">Denne profil anvender proxyindstillingerne for Chrome OS.</translation> +<translation id="3242289508736283383">Appen med manifestattributten "kiosk_only" skal installeres i ChromeOS-terminaltilstand</translation> +<translation id="3242665648857227438">Denne profil anvender proxyindstillingerne for ChromeOS.</translation> <translation id="3244294424315804309">Lad lyden forblive slået fra</translation> <translation id="324849028894344899"><ph name="WINDOW_TITLE" /> – netværksfejl</translation> <translation id="3248902735035392926">Sikkerhed er vigtigt. Brug et øjeblik på at <ph name="BEGIN_LINK" />tjekke dine udvidelser<ph name="END_LINK" /> nu</translation> @@ -2825,7 +2825,7 @@ <translation id="3617891479562106823">Baggrunde er utilgængelige. Prøv igen senere.</translation> <translation id="3619115746895587757">Cappuccino</translation> <translation id="3620136223548713675">Geoplacering</translation> -<translation id="3621807901162200696">Vær med til at forbedre funktioner og ydeevne i Chrome OS</translation> +<translation id="3621807901162200696">Vær med til at forbedre funktioner og ydeevne i ChromeOS</translation> <translation id="362266093274784978">{COUNT,plural, =1{en app}one{# app}other{# apps}}</translation> <translation id="362333465072914957">Venter på, at certifikatautoriteten udsteder et certifikat</translation> <translation id="3624567683873126087">Lås enheden op, og log ind på Google-kontoen</translation> @@ -2986,7 +2986,7 @@ <translation id="3771290962915251154">Denne indstilling er deaktiveret, fordi børnesikring er aktiveret</translation> <translation id="3771294271822695279">Videofiler</translation> <translation id="3771851622616482156">Du logges ud af dette website, også i åbne faner</translation> -<translation id="3772046291955677288">Jeg har læst og accepterer <ph name="BEGIN_LINK1" />Googles servicevilkår<ph name="END_LINK1" /> og de <ph name="BEGIN_LINK2" />yderligere servicevilkår for Chrome og Chrome OS<ph name="END_LINK2" />.</translation> +<translation id="3772046291955677288">Jeg har læst og accepterer <ph name="BEGIN_LINK1" />Googles servicevilkår<ph name="END_LINK1" /> og de <ph name="BEGIN_LINK2" />yderligere servicevilkår for Chrome og ChromeOS<ph name="END_LINK2" />.</translation> <translation id="3774166835015494435">Seneste billeder og notifikationer</translation> <translation id="3775432569830822555">SSL-servercertifikat</translation> <translation id="3775705724665058594">Send til dine enheder</translation> @@ -3021,7 +3021,7 @@ <translation id="3798632811625902122">Bluetooth-enheden <ph name="DEVICE" /> vil gerne have parringstilladelse.</translation> <translation id="3799128412641261490">Indstillinger for kontaktadgang</translation> <translation id="3800806661949714323">Vis alle (anbefales)</translation> -<translation id="3800828618615365228">Yderligere vilkår for Google Chrome og Chrome OS</translation> +<translation id="3800828618615365228">Yderligere vilkår for Google Chrome og ChromeOS</translation> <translation id="3802486193901166966">Denne udvidelse kræver ikke nogen særlige tilladelser og har ingen yderligere adgang til websites</translation> <translation id="380329542618494757">Navn</translation> <translation id="3803345858388753269">Videokvalitet</translation> @@ -3058,7 +3058,7 @@ <translation id="3826440694796503677">Din administrator har deaktiveret muligheden for at tilføje flere Google-konti</translation> <translation id="3827774300009121996">&Fuld skærm</translation> <translation id="3828029223314399057">Søg i bogmærker</translation> -<translation id="3828953470056652895">Jeg har læst og accepterer <ph name="BEGIN_LINK1" />Googles servicevilkår<ph name="END_LINK1" />, <ph name="BEGIN_LINK2" />de yderligere vilkår for Chrome og Chrome OS<ph name="END_LINK2" /> og <ph name="BEGIN_LINK3" />servicevilkårene for Play<ph name="END_LINK3" />.</translation> +<translation id="3828953470056652895">Jeg har læst og accepterer <ph name="BEGIN_LINK1" />Googles servicevilkår<ph name="END_LINK1" />, <ph name="BEGIN_LINK2" />de yderligere vilkår for Chrome og ChromeOS<ph name="END_LINK2" /> og <ph name="BEGIN_LINK3" />servicevilkårene for Play<ph name="END_LINK3" />.</translation> <translation id="3829765597456725595">SMV-fildeling</translation> <translation id="3830654885961023588">{NUM_EXTENSIONS,plural, =1{Din administrator har genaktiveret 1 potentielt skadelig udvidelse}one{Din administrator har genaktiveret {NUM_EXTENSIONS} potentielt skadelig udvidelse}other{Din administrator har genaktiveret {NUM_EXTENSIONS} potentielt skadelige udvidelser}}</translation> <translation id="3831436149286513437">Google Drev-søgeforslag</translation> @@ -3150,7 +3150,7 @@ <translation id="3915280005470252504">Søg ved at indtale</translation> <translation id="3916233823027929090">Sikkerhedstjekket blev gennemført</translation> <translation id="3916445069167113093">Denne filtype kan beskadige din computer. Vil du beholde <ph name="FILE_NAME" /> alligevel?</translation> -<translation id="3917184139185490151">Computeren indeholder et sikkerhedsmodul, som bruges til at implementere mange vigtige sikkerhedsfunktioner i Chrome OS. Du kan få flere oplysninger i Hjælp til Chromebook: https://support.google.com/chromebook/?p=sm</translation> +<translation id="3917184139185490151">Computeren indeholder et sikkerhedsmodul, som bruges til at implementere mange vigtige sikkerhedsfunktioner i ChromeOS. Du kan få flere oplysninger i Hjælp til Chromebook: https://support.google.com/chromebook/?p=sm</translation> <translation id="3918972485393593704">Rapportér detaljer til Google</translation> <translation id="3919145445993746351">Aktivér synkronisering for at få dine udvidelser på alle dine computere</translation> <translation id="3919229493046408863">Deaktiver notifikationer fra enheder i nærheden</translation> @@ -3389,7 +3389,7 @@ <translation id="4132364317545104286">Omdøb eSIM-profil</translation> <translation id="4133076602192971179">Åbn appen for at ændre din adgangskode</translation> <translation id="4134818201340504801">Der er ikke nok ledig lagerplads til at fuldføre konfigurationen. Frigør lagerplads, og prøv igen</translation> -<translation id="4135746311382563554">Yderligere servicevilkår for Google Chrome og Chrome OS</translation> +<translation id="4135746311382563554">Yderligere servicevilkår for Google Chrome og ChromeOS</translation> <translation id="4136203100490971508">Nattelys slukkes automatisk ved solopgang</translation> <translation id="41365691917097717">Hvis du fortsætter, aktiveres ADB-fejlretning til oprettelse og test af Android-apps. Bemærk! Denne handling tillader, at Android-apps, der ikke er blevet bekræftet af Google, kan installeres. Du skal gendanne fabriksindstillingerne for at deaktivere dette.</translation> <translation id="4138267921960073861">Vis brugernavne og billeder på loginskærmen</translation> @@ -3551,7 +3551,7 @@ <translation id="4305817255990598646">Skift</translation> <translation id="4306119971288449206">Apps skal downloades med indholdstypen "<ph name="CONTENT_TYPE" />"</translation> <translation id="4307992518367153382">Grundlæggende valgmuligheder</translation> -<translation id="4309165024397827958">Tillad, at Android-apps og -tjenester med adgangstilladelse til lokation kan bruge din enheds lokation. Google kan med jævne mellemrum indsamle lokationsdata og bruge oplysningerne anonymt til at gøre lokationen mere nøjagtig og forbedre lokationsbaserede tjenester.</translation> +<translation id="4309165024397827958">Tillad, at Android-apps og -tjenester med adgangstilladelse til lokation kan bruge din enheds lokation. Google kan med jævne mellemrum indsamle lokationsdata og bruge oplysningerne anonymt til at forbedre lokationsnøjagtigheden og lokationsbaserede tjenester.</translation> <translation id="4309183709806093061">Del også systemlyd. Lyden slås fra på denne enhed for at forhindre lydfeedback.</translation> <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (<ph name="NUM_KILOBYTES_LIVE" />K live)</translation> <translation id="4310132194679586591">Vælg en app på din enhed for at åbne dette link</translation> @@ -3597,7 +3597,7 @@ <translation id="4354073718307267720">Spørg, når et website gerne vil oprette et 3D-kort over dine omgivelser eller registrere kamerapositionen</translation> <translation id="4354344420232759511">Her vises de websites, du besøger</translation> <translation id="435527878592612277">Vælg dit billede</translation> -<translation id="4358302248024731679">Googlere kan medtage yderligere Bluetooth-logs i deres feedbackrapporter for at forbedre diagnosticeringen af Bluetooth-problemer. Når denne mulighed er valgt, omfatter din rapport btsnoop- og HCI-logs fra din nuværende session. Disse er renset for at fjerne så mange personhenførbare oplysninger som muligt. Det er kun administratorer af Chrome OS-produktgruppen i Listnr, der har adgang til disse. Logs ryddes efter 90 dage.</translation> +<translation id="4358302248024731679">Googlere kan medtage yderligere Bluetooth-logs i deres feedbackrapporter for at forbedre diagnosticeringen af Bluetooth-problemer. Når denne mulighed er valgt, omfatter din rapport btsnoop- og HCI-logs fra din nuværende session. Disse er renset for at fjerne så mange personhenførbare oplysninger som muligt. Det er kun administratorer af ChromeOS-produktgruppen i Listnr, der har adgang til disse. Logs ryddes efter 90 dage.</translation> <translation id="4358643842961018282">Din enhed er opdateret</translation> <translation id="4359408040881008151">Installeret på grund af andre udvidelser, der er afhængige af den.</translation> <translation id="4359717112757026264">Cityscape</translation> @@ -3731,7 +3731,7 @@ <translation id="4487489714832036847">Chromebooks bruger apps i stedet for traditionel software. Få apps til produktivitet, underholdning og meget mere.</translation> <translation id="4488257340342212116">Har tilladelse til at bruge dit kamera</translation> <translation id="4488502501195719518">Vil du rydde alle data?</translation> -<translation id="4490086832405043258">Brug proxyindstillingerne for Chrome OS på denne profil.</translation> +<translation id="4490086832405043258">Brug proxyindstillingerne for ChromeOS på denne profil.</translation> <translation id="449126573531210296">Kryptér synkroniserede adgangskoder med din Google-konto</translation> <translation id="449232563137139956">Websites viser normalt billeder som illustration, f.eks. billeder til netbutikker eller nyhedsartikler</translation> <translation id="4492698018379445570">Find ud af, hvad du har føjet til dine indkøbskurve, og gå til kassen, når du er klar</translation> @@ -4323,7 +4323,7 @@ <translation id="5062930723426326933">Login mislykkedes. Opret forbindelse til internettet, og prøv igen.</translation> <translation id="5063480226653192405">Databrug</translation> <translation id="5065775832226780415">Smart Lock</translation> -<translation id="5066100345385738837">Administrer Sikkert DNS i indstillingerne for Chrome OS</translation> +<translation id="5066100345385738837">Administrer Sikkert DNS i indstillingerne for ChromeOS</translation> <translation id="5067399438976153555">Altid aktiveret</translation> <translation id="5067867186035333991">Spørg, om <ph name="HOST" /> vil have adgang til din mikrofon</translation> <translation id="5068553687099139861">vise adgangskoder</translation> @@ -4469,7 +4469,7 @@ <translation id="5206215183583316675">Vil du slette "<ph name="CERTIFICATE_NAME" />"?</translation> <translation id="520621735928254154">Fejl ved import af certifikat</translation> <translation id="5207949376430453814">Fremhæv tekstmarkør</translation> -<translation id="520840839826327499"><ph name="SERVICE_NAME" /> vil gerne tjekke, om du bruger en kvalificeret Chrome OS-enhed.</translation> +<translation id="520840839826327499"><ph name="SERVICE_NAME" /> vil gerne tjekke, om du bruger en kvalificeret ChromeOS-enhed.</translation> <translation id="5208548918290612795">Gemmer godkendelsestoken for <ph name="WEB_DRIVE" /></translation> <translation id="5208988882104884956">Halv bredde</translation> <translation id="520902706163766447">Aktivér en pop op-boble i den øverste Chrome-brugerflade for at søge oven på de åbne faner.</translation> @@ -4598,7 +4598,7 @@ <translation id="5329858601952122676">&Slet</translation> <translation id="5331069282670671859">Du har ingen certifikater i denne kategori</translation> <translation id="5331425616433531170">"<ph name="CHROME_EXTENSION_NAME" />" vil parre</translation> -<translation id="5331568967879689647">Chrome OS-systemapp</translation> +<translation id="5331568967879689647">ChromeOS-systemapp</translation> <translation id="5331975486040154427">USB-C-enhed (porten bagpå i venstre side)</translation> <translation id="5333896723098573627">Hvis du vil fjerne apps, skal du gå til Indstillinger > Apps > Google Play Butik > Administrer Android-præferencer > Apps eller Administration af apps. Tryk derefter på den app, du vil afinstallere (du skal muligvis stryge til højre eller venstre for at finde appen). Tryk derefter på Afinstaller eller Deaktiver.</translation> <translation id="5334142896108694079">Scriptcache</translation> @@ -5370,7 +5370,7 @@ <translation id="6073903501322152803">Tilføj hjælpefunktioner</translation> <translation id="6075731018162044558">Ups! Systemet kunne ikke hente et langfristet API-adgangstoken til denne enhed.</translation> <translation id="6075907793831890935">Udveksle data med enheden ved navn <ph name="HOSTNAME" /></translation> -<translation id="6076175485108489240">Brug placering. Tillad, at apps og tjenester med placeringstilladelse kan bruge enhedens placering. Google kan med jævne mellemrum indsamle lokationsdata og bruge oplysningerne anonymt til at gøre lokationen mere nøjagtig og forbedre lokationsbaserede tjenester. <ph name="BEGIN_LINK1" />Få flere oplysninger<ph name="END_LINK1" /></translation> +<translation id="6076175485108489240">Brug lokation. Tillad, at apps og tjenester med lokationstilladelse kan bruge enhedens lokation. Google kan med jævne mellemrum indsamle lokationsdata og bruge oplysningerne anonymt for at forbedre lokationsnøjagtighed og lokationsbaserede tjenester. <ph name="BEGIN_LINK1" />Få flere oplysninger<ph name="END_LINK1" /></translation> <translation id="6076491747490570887">Kølig grå</translation> <translation id="6077131872140550515">Fjern fra foretrukne</translation> <translation id="6077189836672154517">Tips og opdateringer om <ph name="DEVICE_TYPE" /></translation> @@ -5620,7 +5620,7 @@ <translation id="6313950457058510656">Deaktiver Automatisk netdeling</translation> <translation id="6314819609899340042">Du har aktiveret fejlretningsfunktioner på denne <ph name="IDS_SHORT_PRODUCT_NAME" />-enhed.</translation> <translation id="6315493146179903667">Læg alle forrest</translation> -<translation id="6316432269411143858">Indholdet i vilkårene for Google Chrome OS</translation> +<translation id="6316432269411143858">Indholdet i vilkårene for Google ChromeOS</translation> <translation id="6317369057005134371">Venter på applikationsvindue...</translation> <translation id="6318125393809743217">Medtag en policies.json-fil med politikkonfigurationer.</translation> <translation id="6318407754858604988">Downloaden er i gang</translation> @@ -5664,7 +5664,7 @@ <translation id="6363990818884053551">Bekræft din identitet for at starte synkroniseringen</translation> <translation id="6365069501305898914">Facebook</translation> <translation id="6365411474437319296">Tilføj familie og venner</translation> -<translation id="6367097275976877956">Vil du aktivere ChromeVox, der er den indbyggede skærmlæser til Chrome OS? Tryk på mellemrumstasten for at aktivere.</translation> +<translation id="6367097275976877956">Vil du aktivere ChromeVox, der er den indbyggede skærmlæser til ChromeOS? Tryk på mellemrumstasten for at aktivere.</translation> <translation id="6367985768157257101">Vil du modtage via Deling tæt på?</translation> <translation id="6368276408895187373">Aktiveret – <ph name="VARIATION_NAME" /></translation> <translation id="636850387210749493">Tilmelding af virksomhed</translation> @@ -5697,7 +5697,7 @@ <translation id="6399774419735315745">Spion</translation> <translation id="6400360390396538896">Altid på <ph name="ORIGIN" /></translation> <translation id="6401458660421980302">Hvis du vil sende denne fane til en anden enhed, skal du logge ind på Chrome på den pågældende enhed</translation> -<translation id="6401597285454423070">Computeren indeholder en sikkerhedsenhed for TPM (Trusted Platform Module), som bruges til at implementere mange vigtige sikkerhedsfunktioner i Chrome OS. Du kan få flere oplysninger i Hjælp til Chromebook: https://support.google.com/chromebook/?p=tpm</translation> +<translation id="6401597285454423070">Computeren indeholder en sikkerhedsenhed for TPM (Trusted Platform Module), som bruges til at implementere mange vigtige sikkerhedsfunktioner i ChromeOS. Du kan få flere oplysninger i Hjælp til Chromebook: https://support.google.com/chromebook/?p=tpm</translation> <translation id="6404187344102273690">Chromebook-spil</translation> <translation id="6404511346730675251">Rediger bogmærke</translation> <translation id="6406303162637086258">Simuler genstart af browser</translation> @@ -6061,10 +6061,10 @@ <translation id="6746124502594467657">Flyt ned</translation> <translation id="674632704103926902">Aktivér tryk og træk</translation> <translation id="6748465660675848252">Du kan fortsætte, men kun dine synkroniserede data og indstillinger gendannes. Alle lokale data går tabt.</translation> -<translation id="6748980958975836188">Jeg har læst og accepterer <ph name="BEGIN_LINK1" />Googles servicevilkår<ph name="END_LINK1" /> og de <ph name="BEGIN_LINK2" />yderligere servicevilkår for Chrome og Chrome OS<ph name="END_LINK2" />.</translation> +<translation id="6748980958975836188">Jeg har læst og accepterer <ph name="BEGIN_LINK1" />Googles servicevilkår<ph name="END_LINK1" /> og de <ph name="BEGIN_LINK2" />yderligere servicevilkår for Chrome og ChromeOS<ph name="END_LINK2" />.</translation> <translation id="6750757184909117990">Deaktiver mobilnetværk</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (Inkognito)</translation> -<translation id="6756157672127672536">Appen Filer giver hurtig adgang til filer, som du har gemt i Google Drev, på et eksternt lager eller på din Chrome OS-enhed.</translation> +<translation id="6756157672127672536">Appen Filer giver hurtig adgang til filer, som du har gemt i Google Drev, på et eksternt lager eller på din ChromeOS-enhed.</translation> <translation id="6756643207511618722">Oplæsningsmaskiner</translation> <translation id="6758056191028427665">Fortæl os, hvad du synes.</translation> <translation id="6759193508432371551">Gendannelse af fabriksindstillinger</translation> @@ -6150,7 +6150,7 @@ <translation id="6825184156888454064">Sorter efter navn</translation> <translation id="6826872289184051766">Bekræft via USB</translation> <translation id="6827121912381363404">Tillad, at alle udvidelser kan læse og ændre <ph name="PERMITTED_SITE" /></translation> -<translation id="6827517233063803343">Dine apps og indstillinger synkroniseres på tværs af alle de Chrome OS-enheder, hvor du er logget ind med din Google-konto. Du kan se muligheder for synkronisering af browseren i <ph name="LINK_BEGIN" />indstillingerne for Chrome<ph name="LINK_END" />.</translation> +<translation id="6827517233063803343">Dine apps og indstillinger synkroniseres på tværs af alle de ChromeOS-enheder, hvor du er logget ind med din Google-konto. Du kan se muligheder for synkronisering af browseren i <ph name="LINK_BEGIN" />indstillingerne for Chrome<ph name="LINK_END" />.</translation> <translation id="6827767090350758381">Gamle versioner af Chrome-apps kan ikke åbnes på Windows-enheder efter december 2022. Kontakt din administrator, hvis du vil opdatere til en ny version af denne app eller fjerne den.</translation> <translation id="6828153365543658583">Begræns login for disse brugere:</translation> <translation id="6828182567531805778">Angiv din adgangssætning for at synkronisere dine data</translation> @@ -6233,7 +6233,7 @@ <translation id="6902066522699286937">Eksempel på stemme</translation> <translation id="6902336033320348843">Sektionen understøttes ikke: <ph name="ERROR_LINE" /></translation> <translation id="6902837902700739466">Føj enheden til domænet</translation> -<translation id="6903022061658753260">Dine data synkroniseres på tværs af alle Chrome-browsere, hvor du har aktiveret synkronisering for denne konto. Du kan se valgmuligheder for Chrome OS-synkronisering i <ph name="LINK_BEGIN" />Chrome OS-indstillingerne<ph name="LINK_END" />.</translation> +<translation id="6903022061658753260">Dine data synkroniseres på tværs af alle Chrome-browsere, hvor du har aktiveret synkronisering for denne konto. Du kan se valgmuligheder for ChromeOS-synkronisering i <ph name="LINK_BEGIN" />ChromeOS-indstillingerne<ph name="LINK_END" />.</translation> <translation id="6903590427234129279">Åbn alle (<ph name="URL_COUNT" />)</translation> <translation id="6903907808598579934">Aktivér synkronisering</translation> <translation id="6904344821472985372">Tilbagekald filadgang</translation> @@ -6247,7 +6247,7 @@ <translation id="691289340230098384">Præferencer for undertekster</translation> <translation id="6914783257214138813">Dine adgangskoder vil være synlige for alle, der kan se den eksporterede fil.</translation> <translation id="6916590542764765824">Administrer udvidelser</translation> -<translation id="6918677045355889289">Chrome OS skal opdateres</translation> +<translation id="6918677045355889289">ChromeOS skal opdateres</translation> <translation id="6919354101107095996">Prøv at logge ind på websitet. Download derefter igen</translation> <translation id="6919868320029503575">Svage adgangskoder</translation> <translation id="6919952941889172531">Vil du også aktivere Udvidet beskyttet browsing for denne Chrome-profil?</translation> @@ -6285,7 +6285,7 @@ <translation id="6952242901357037157">Du kan også vise adgangskoder fra din <ph name="BEGIN_LINK" />Google-konto<ph name="END_LINK" /> her</translation> <translation id="6955446738988643816">Undersøg pop op-vindue</translation> <translation id="6955535239952325894">Denne indstilling er deaktiveret i administrerede browsere</translation> -<translation id="6955698182324067397">Du aktiverer Chrome OS-fejlretningsfunktioner, som konfigurerer sshd daemon og aktiverer systemgenstart via USB-drev.</translation> +<translation id="6955698182324067397">Du aktiverer ChromeOS-fejlretningsfunktioner, som konfigurerer sshd daemon og aktiverer systemgenstart via USB-drev.</translation> <translation id="6955893174999506273">Tildel 1 kontakt mere</translation> <translation id="6957044667612803194">Denne sikkerhedsnøgle understøtter ikke pinkoder</translation> <translation id="6960507406838246615">Kræver Linux-opdatering</translation> @@ -6871,7 +6871,7 @@ <translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> svarer ikke. Vælg "Tving til at lukke" for at lukke appen.</translation> <translation id="7535730537657706072">Luk alle inkognitofaner for at rydde browserhistorikken for inkognitovinduet fra din enhed</translation> <translation id="7537451260744431038">Websites kan ikke anvende cookies til at forbedre din browseroplevelse ved f.eks. at sørge for, at du forbliver logget ind, eller ved at huske varerne i din kurv</translation> -<translation id="7538932151125743389">Læs serienumre for Chrome OS-enheder og komponenter.</translation> +<translation id="7538932151125743389">Læs serienumre for ChromeOS-enheder og komponenter.</translation> <translation id="7540972813190816353">Der opstod en fejl ved søgning efter opdateringer: <ph name="ERROR" /></translation> <translation id="7541076351905098232"><ph name="MANAGER" /> har skiftet til en tidligere version af denne enhed. Gem vigtige filer, og genstart derefter. Alle dataene på enheden slettes.</translation> <translation id="7541773865713908457"><ph name="ACTION_NAME" /> med appen <ph name="APP_NAME" /></translation> @@ -7075,7 +7075,7 @@ <translation id="7718490543420739837">Skærmtastatur, diktering, kontaktadgang m.m.</translation> <translation id="7719367874908701697">Sidezoom</translation> <translation id="7719588063158526969">Enhedsnavnet er for langt</translation> -<translation id="7720216670798402294">Læs Chrome OS-enhedsoplysninger og -enhedsdata.</translation> +<translation id="7720216670798402294">Læs ChromeOS-enhedsoplysninger og -enhedsdata.</translation> <translation id="7721179060400456005">Tillad, at vinduer kan dække flere skærme</translation> <translation id="7721237513035801311"><ph name="SWITCH" /> (<ph name="DEVICE_TYPE" />)</translation> <translation id="7721258531237831532">Din organisation kræver en profil</translation> @@ -7216,8 +7216,8 @@ <translation id="7849264908733290972">Åbn &billede på ny fane</translation> <translation id="784934925303690534">Tidsinterval</translation> <translation id="7850353716413205957">Søg på en hvilken som helst del af siden med <ph name="VISUAL_SEARCH_PROVIDER" /></translation> -<translation id="7850717413915978159"><ph name="BEGIN_PARAGRAPH1" />Ved at give dine Chrome OS-enheder tilladelse til at sende automatiske rapporter gør du det nemmere for os at prioritere, hvad der skal rettes og forbedres i Chrome OS. Disse rapporter kan f.eks. indeholde oplysninger om, hvornår Chrome OS oplever nedbrud, hvilke funktioner du bruger, hvor meget hukommelse du normalt anvender, samt diagnostik- og brugsdata for Android-apps. Visse samlede data hjælper også Google-apps og -partnere, f.eks. Android-udviklere.<ph name="END_PARAGRAPH1" /> - <ph name="BEGIN_PARAGRAPH2" />Du kan til enhver tid tillade eller fjerne tilladelsen for disse rapporter i indstillingerne for din Chrome OS-enhed. Hvis du er domæneadministrator, kan du ændre denne indstilling i Administrationskonsol.<ph name="END_PARAGRAPH2" /> +<translation id="7850717413915978159"><ph name="BEGIN_PARAGRAPH1" />Ved at give dine ChromeOS-enheder tilladelse til at sende automatiske rapporter gør du det nemmere for os at prioritere, hvad der skal rettes og forbedres i ChromeOS. Disse rapporter kan f.eks. indeholde oplysninger om, hvornår ChromeOS oplever nedbrud, hvilke funktioner du bruger, hvor meget hukommelse du normalt anvender, samt diagnostik- og brugsdata for Android-apps. Visse samlede data hjælper også Google-apps og -partnere, f.eks. Android-udviklere.<ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />Du kan til enhver tid tillade eller fjerne tilladelsen for disse rapporter i indstillingerne for din ChromeOS-enhed. Hvis du er domæneadministrator, kan du ændre denne indstilling i Administrationskonsol.<ph name="END_PARAGRAPH2" /> <ph name="BEGIN_PARAGRAPH3" />Hvis indstillingen Web- og appaktivitet er aktiveret for din Google-konto, gemmes dine Android-data muligvis på din Google-konto. Du kan se og slette dine data samt ændre dine kontoindstillinger på account.google.com.<ph name="END_PARAGRAPH3" /></translation> <translation id="7851021205959621355"><ph name="BEGIN_BOLD" />Bemærk!<ph name="END_BOLD" /> En lignende stemme eller en optagelse af din stemme kan muligvis bruges til at få adgang til dit personlige indhold eller Google Assistent. Du kan spare på batteriet ved at gå til indstillingerne for Google Assistent og angive, at "Hey Google" kun skal aktiveres, når denne enhed er sluttet til en strømkilde.</translation> <translation id="7851457902707056880">Login er begrænset til ejerens konto. Genstart, og log ind med ejerens konto. Maskinen genstartes automatisk om 30 sekunder.</translation> @@ -7549,7 +7549,7 @@ <translation id="8146177459103116374">Hvis du allerede har registreret dig på denne enhed, kan du <ph name="LINK2_START" />logge ind som eksisterende bruger<ph name="LINK2_END" />.</translation> <translation id="8146287226035613638">Tilføj og rangér dine foretrukne sprog. Websites vises på dine foretrukne sprog, hvis det er muligt. Disse præferencer synkroniseres med dine browserindstillinger. <ph name="BEGIN_LINK_LEARN_MORE" />Få flere oplysninger<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="8146793085009540321">Login mislykkedes. Kontakt din administrator, eller prøv igen.</translation> -<translation id="8147346945017130012">Vær med til at forbedre funktionerne og ydeevnen i Chrome og Chrome OS ved automatisk at sende nedbrudsrapporter samt diagnostik- og brugsdata til Google.</translation> +<translation id="8147346945017130012">Vær med til at forbedre funktionerne og ydeevnen i Chrome og ChromeOS ved automatisk at sende nedbrudsrapporter samt diagnostik- og brugsdata til Google.</translation> <translation id="8147900440966275470">Der blev fundet <ph name="NUM" /> fane</translation> <translation id="8148760431881541277">Begræns login</translation> <translation id="8149564499626272569">Bekræft via din telefon med et USB-kabel</translation> @@ -7825,7 +7825,7 @@ <translation id="8410775397654368139">Google Play</translation> <translation id="8412136526970428322">Adgangen til <ph name="PERMISSION" /> og <ph name="COUNT" /> yderligere blev tilladt</translation> <translation id="8413385045638830869">Spørg først (anbefales)</translation> -<translation id="8413956290606243087">Vil du aktivere ChromeVox, der er den indbyggede skærmlæser til Chrome OS?</translation> +<translation id="8413956290606243087">Vil du aktivere ChromeVox, der er den indbyggede skærmlæser til ChromeOS?</translation> <translation id="8414249071344507766">Minder skjules i to dage</translation> <translation id="8414396119627470038">Log ind på <ph name="SITE_ETLD_PLUS_ONE" /> med <ph name="IDENTITY_PROVIDER_ETLD_PLUS_ONE" /></translation> <translation id="8414685983518053656">Noter</translation> @@ -8085,7 +8085,7 @@ <translation id="8673026256276578048">Søg på nettet...</translation> <translation id="867329473311423817">Har tilladelse til at administrere vinduer på alle dine skærme</translation> <translation id="8673383193459449849">Serverproblem</translation> -<translation id="8674903726754070732">Din computer er desværre konfigureret med et hardware-id i forkert format. Dette forhindrer Chrome OS i at opdatere med de nyeste sikkerhedsrettelser, og din computer <ph name="BEGIN_BOLD" />kan være sårbar over for ondsindede angreb<ph name="END_BOLD" />.</translation> +<translation id="8674903726754070732">Din computer er desværre konfigureret med et hardware-id i forkert format. Dette forhindrer ChromeOS i at opdatere med de nyeste sikkerhedsrettelser, og din computer <ph name="BEGIN_BOLD" />kan være sårbar over for ondsindede angreb<ph name="END_BOLD" />.</translation> <translation id="8675704450909805533">Installationsprogrammet kunne ikke finde en gyldig destination til installation af <ph name="DEVICE_OS" />.</translation> <translation id="8676152597179121671">{COUNT,plural, =1{Video}one{# video}other{# videoer}}</translation> <translation id="8676313779986170923">Tak for din feedback.</translation> @@ -8279,7 +8279,7 @@ <translation id="8855977033756560989">Denne Chrome Enterprise-enhed følger med Chrome Enterprise-opgraderingen. Tilmeld denne enhed med en Google-administratorkonto for at få adgang til virksomhedsfunktioner.</translation> <translation id="8856028055086294840">Gendan apps og sider</translation> <translation id="885701979325669005">Lagerplads</translation> -<translation id="885746075120788020">Dine gemte præferencer og din aktivitet anvendes på alle de Chrome OS-enheder, hvor du logger ind med din Google-konto. Du kan vælge, hvad der skal synkroniseres, i indstillingerne.</translation> +<translation id="885746075120788020">Dine gemte præferencer og din aktivitet anvendes på alle de ChromeOS-enheder, hvor du logger ind med din Google-konto. Du kan vælge, hvad der skal synkroniseres, i indstillingerne.</translation> <translation id="8859174528519900719">Underramme: <ph name="SUBFRAME_SITE" /></translation> <translation id="8859402192569844210">Servicevilkårene kunne ikke indlæses</translation> <translation id="8859662783913000679">Forældrekonto</translation> @@ -8391,7 +8391,7 @@ <translation id="8966809848145604011">Andre profiler</translation> <translation id="8966870118594285808">Åbn en fane igen, hvis du lukkede den ved et uheld</translation> <translation id="8967427617812342790">Føj til læseliste</translation> -<translation id="8968527460726243404">Værktøj til skrivning af systembillede i Chrome OS</translation> +<translation id="8968527460726243404">Værktøj til skrivning af systembillede i ChromeOS</translation> <translation id="8968766641738584599">Gem kort</translation> <translation id="8970887620466824814">Noget gik galt.</translation> <translation id="89720367119469899">Escape</translation> @@ -8442,7 +8442,7 @@ <translation id="901668144954885282">Sikkerhedskopiér til Google Drev</translation> <translation id="9018218886431812662">Installationen er fuldført</translation> <translation id="9019062154811256702">Læse og redigere indstillinger for autofyld</translation> -<translation id="9019894137004772119">Brug placering. Tillad, at apps og tjenester med adgangstilladelse til lokation kan bruge din enheds lokation. Google kan jævnligt indsamle lokationsdata og bruge disse data på en anonym måde for at forbedre lokationernes nøjagtighed og lokationsbaserede tjenester.</translation> +<translation id="9019894137004772119">Brug lokation. Tillad, at apps og tjenester med adgangstilladelse til lokation kan bruge din enheds lokation. Google kan jævnligt indsamle lokationsdata og bruge disse data på en anonym måde for at forbedre lokationsnøjagtigheden og lokationsbaserede tjenester.</translation> <translation id="9019956081903586892">Ordbogen til stavekontrollen kunne ikke downloades</translation> <translation id="9020300839812600209">Angiv en webadresse for at se, hvad Emulator til ældre websites ville gøre ved den.</translation> <translation id="9020362265352758658">4x</translation> @@ -8475,7 +8475,7 @@ <translation id="9037965129289936994">Vis oprindelig</translation> <translation id="9038489124413477075">Unavngiven mappe</translation> <translation id="9039014462651733343">{NUM_ATTEMPTS,plural, =1{Du har ét forsøg tilbage.}one{Du har # forsøg tilbage.}other{Du har # forsøg tilbage.}}</translation> -<translation id="9040473193163777637">Vil du aktivere ChromeVox, der er den indbyggede skærmlæser til Chrome OS? Hold begge lydstyrkeknapper nede i fem sekunder for at aktivere.</translation> +<translation id="9040473193163777637">Vil du aktivere ChromeVox, der er den indbyggede skærmlæser til ChromeOS? Hold begge lydstyrkeknapper nede i fem sekunder for at aktivere.</translation> <translation id="9040661932550800571">Vil du opdatere adgangskoden til <ph name="ORIGIN" />?</translation> <translation id="9041692268811217999">Din administrator har deaktiveret adgangen til lokale filer på din maskine</translation> <translation id="904224458472510106">Denne handling kan ikke fortrydes</translation> @@ -8502,7 +8502,7 @@ Få flere oplysninger om de data, Google indsamler, og hvorfor Google indsamler dem, på <ph name="BEGIN_LINK2" />policies.google.com<ph name="END_LINK2" />.</translation> <translation id="9066777626153702300">Inaktive websites</translation> <translation id="9066782832737749352">Oplæsning</translation> -<translation id="9068298336633421551">Tillad, at Android-apps og -tjenester med adgangstilladelse til lokation kan bruge denne enheds lokation. Google kan med jævne mellemrum indsamle lokationsdata og bruge oplysningerne anonymt til at gøre lokationen mere nøjagtig og forbedre lokationsbaserede tjenester.</translation> +<translation id="9068298336633421551">Tillad, at Android-apps og -tjenester med adgangstilladelse til lokation kan bruge denne enheds lokation. Google kan med jævne mellemrum indsamle lokationsdata og bruge oplysningerne anonymt til at forbedre lokationsnøjagtigheden og lokationsbaserede tjenester.</translation> <translation id="9068598199622656904">Tryk på én tast ad gangen for at bruge tastaturgenveje i stedet for at holde tasterne nede samtidigt</translation> <translation id="9068878141610261315">Filtypen understøttes ikke</translation> <translation id="9070342919388027491">Fanen blev flyttet til venstre</translation> @@ -8659,7 +8659,7 @@ <translation id="922152298093051471">Tilpas Chrome</translation> <translation id="9222839025964079645">Adgangskoder, der ikke er importeret (<ph name="COUNT" />)</translation> <translation id="923467487918828349">Vis alle</translation> -<translation id="924818813611903184">Administrer sprog i indstillingerne for Chrome OS</translation> +<translation id="924818813611903184">Administrer sprog i indstillingerne for ChromeOS</translation> <translation id="929117907539171075">Offlinedata i den installerede app ryddes også</translation> <translation id="930268624053534560">Detaljerede tidsstempler</translation> <translation id="930893132043726269">Roamer</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb index e9f00c2..f8f90994 100644 --- a/chrome/app/resources/generated_resources_en-GB.xtb +++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -55,6 +55,7 @@ <translation id="1049743911850919806">Incognito</translation> <translation id="1049795001945932310">&Language settings</translation> <translation id="1050693411695664090">Poor</translation> +<translation id="1053831338284186718">Check the site and try changing your password.</translation> <translation id="1054048317165655285">Complete setup on your phone</translation> <translation id="1054153489933238809">Open Original &Image in New Tab</translation> <translation id="1055274863771110134">{NUM_WEEKS,plural, =1{Update <ph name="DEVICE_TYPE" /> within 1 week}other{Update <ph name="DEVICE_TYPE" /> within {NUM_WEEKS} weeks}}</translation> @@ -307,9 +308,11 @@ <translation id="127946606521051357">Device nearby is sharing</translation> <translation id="1280965841156951489">Edit files</translation> <translation id="1282465000333679776">Share system audio</translation> +<translation id="1284277788676816155">Don’t allow to save data</translation> <translation id="1285320974508926690">Never translate this site</translation> <translation id="1285484354230578868">Store data in your Google Drive account</translation> <translation id="1285625592773741684">Current data usage setting is mobile data</translation> +<translation id="1287512808202289801">Google Assistant stopped</translation> <translation id="1288037062697528143">Night Light will turn on automatically at sunset</translation> <translation id="1288300545283011870">Speech properties</translation> <translation id="1289619947962767206">This option is no longer supported. To present a tab, use <ph name="GOOGLE_MEET" />.</translation> @@ -332,6 +335,7 @@ <translation id="1307165550267142340">Your PIN was created</translation> <translation id="1307431692088049276">Don't ask me again</translation> <translation id="1307559529304613120">Oops! The system failed to store the long-term API access token for this device.</translation> +<translation id="1309375166585231290">Your parents haven't said it's OK yet</translation> <translation id="1312811472299082263">Create from an Ansible playbook or a Crostini backup file</translation> <translation id="1313405956111467313">Automatic proxy configuration</translation> <translation id="131364520783682672">Caps Lock</translation> @@ -438,6 +442,7 @@ <translation id="1415708812149920388">Clipboard read access denied</translation> <translation id="1415990189994829608"><ph name="EXTENSION_NAME" /> (extension ID "<ph name="EXTENSION_ID" />") is not allowed in this type of session.</translation> <translation id="1417428793154876133">{NUM_APPS,plural, =1{Remove app}other{Remove apps}}</translation> +<translation id="1417497355604638350">Send diagnostic and usage data.</translation> <translation id="1418552618736477642">Notifications and apps</translation> <translation id="1418882096915998312">Enterprise enrolment in progress</translation> <translation id="1418954524306642206">Browse to specify your printer PPD</translation> @@ -844,6 +849,7 @@ <translation id="1768212860412467516">Send feedback for <ph name="EXPERIMENT_NAME" />.</translation> <translation id="1768278914020124551">Oops! There was a problem contacting the logon server. Please check your network connection and the domain name, then try again.</translation> <translation id="1769104665586091481">Open Link in New &Window</translation> +<translation id="1770407692401984718">Drag an image here or</translation> <translation id="177053719077591686">Back up Android apps to Google Drive.</translation> <translation id="177336675152937177">Hosted app data</translation> <translation id="1775706469381199282">Don't allow sites to use Javascript</translation> @@ -1166,6 +1172,7 @@ <translation id="2060375639911876205">Remove eSIM profile</translation> <translation id="2061366302742593739">Nothing to show</translation> <translation id="2062354623176996748">Use the web without saving your browsing history with an Incognito window</translation> +<translation id="206308717637808771">Delete data when you close all windows. Data is treated the same as the site that you’re viewing</translation> <translation id="2065405795449409761">Chrome is being controlled by automated test software.</translation> <translation id="2071393345806050157">No local log file.</translation> <translation id="2071692954027939183">Notifications were automatically blocked because you usually don't allow them</translation> @@ -1177,6 +1184,7 @@ <translation id="2076672359661571384">Medium (Recommended)</translation> <translation id="2077129598763517140">Use hardware acceleration when available</translation> <translation id="2078019350989722914">Warn Before Quitting (<ph name="KEY_EQUIVALENT" />)</translation> +<translation id="2078550849857211390">These sites have sent a lot of notifications recently. You can stop them from sending future notifications.</translation> <translation id="2079053412993822885">If you delete one of your own certificates, you can no longer use it to identify yourself.</translation> <translation id="2079545284768500474">Undo</translation> <translation id="2080070583977670716">More settings</translation> @@ -1368,6 +1376,7 @@ <translation id="2242687258748107519">File Info</translation> <translation id="2245603955208828424">Use the arrow keys to move through items letter by letter</translation> <translation id="2246129643805925002">Your <ph name="DEVICE_TYPE" /> updates automatically in the background to give you the latest features and security improvements. You can review update preferences in Settings.</translation> +<translation id="2246480341630108201">Your parent hasn't said it's OK yet</translation> <translation id="2246549592927364792">Get image descriptions from Google?</translation> <translation id="2247738527273549923">Your device is managed by your organisation</translation> <translation id="2249111429176737533">Open as tabbed window</translation> @@ -1767,6 +1776,7 @@ <translation id="2587922766792651800">Timed out</translation> <translation id="2588636910004461974">Devices from <ph name="VENDOR_NAME" /></translation> <translation id="25899519884572181">Exit reader mode</translation> +<translation id="2591895621127187078">Check your email to choose a new password</translation> <translation id="2593499352046705383">Before starting, make sure that you have a backup of your data. Installing <ph name="DEVICE_OS" /> will overwrite your hard drive. Learn more at g.co/flex/InstallGuide.</translation> <translation id="2594999711683503743">Search Google or type URL</translation> <translation id="2599048253926156421">Username copied to clipboard</translation> @@ -1969,6 +1979,7 @@ <translation id="2775858145769350417">{NUM_APPS,plural, =1{Remove 1 unsupported app}other{Remove # unsupported apps}}</translation> <translation id="2776560192867872731">Change device name for <ph name="DEVICE_NAME" /></translation> <translation id="2777251078198759550">Delete this container</translation> +<translation id="2777525873368474674">Paste image link</translation> <translation id="2778471504622896352">Add remote apps to the ChromeOS launcher</translation> <translation id="2781120507965857989">Turn on sync to get your bookmarks, passwords, history and more on this device and anywhere else that you're syncing. Google may use your history to personalise Search and other Google services.</translation> <translation id="2781692009645368755">Google Pay</translation> @@ -2191,6 +2202,7 @@ <translation id="2964245677645334031">Nearby Share visibility</translation> <translation id="2966937470348689686">Manage Android preferences</translation> <translation id="2967926928600500959">URLs matching these rules will be forced to open in a specific browser.</translation> +<translation id="2972266986002580503">Check your passwords at any time in <ph name="GOOGLE_PASSWORD_MANAGER" />.</translation> <translation id="2972581237482394796">&Redo</translation> <translation id="2973324205039581528">Mute site</translation> <translation id="2973537811036309675">Side panel</translation> @@ -2482,6 +2494,7 @@ <translation id="3277214528693754078">Navigate with text cursor (Caret Browsing)</translation> <translation id="3277594800340743211">Large shadow</translation> <translation id="3278001907972365362">Your Google Account(s) need attention</translation> +<translation id="3279030509356143465">Successfully changed the compromised password</translation> <translation id="3279092821516760512">Selected contacts can share with you when nearby. Transfers won't start until you accept.</translation> <translation id="3279230909244266691">This process may take a few minutes. Starting the virtual machine.</translation> <translation id="3280237271814976245">Save &as...</translation> @@ -2744,6 +2757,7 @@ <translation id="3519564332031442870">Print backend service</translation> <translation id="3519938335881974273">Save page as…</translation> <translation id="3520824492621090923">Confirm kiosk and signage device enrolment?</translation> +<translation id="3521405806571557477">Delete saved data for <ph name="SITE_NAME" /></translation> <translation id="3521606918211282604">Change disk size</translation> <translation id="3522088408596898827">Disk space is critically low. Free up disk space and try again.</translation> <translation id="3524518036046613664">Discover devices on your local network, like printers</translation> @@ -2776,6 +2790,8 @@ <translation id="3555812735919707620">Remove extension</translation> <translation id="3556000484321257665">Your search engine was changed to <ph name="URL" />.</translation> <translation id="3557101512409028104">Set website restrictions and screen time limits with Family Link</translation> +<translation id="3557267430539505890"><ph name="BEGIN_PARAGRAPH1" />Allowing ChromeOS devices to send automatic reports helps us prioritise what to fix and improve in ChromeOS. These reports can include things like when ChromeOS crashes, which features were enabled and how much memory was typically used.<ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />You can start or stop allowing these reports at any time in your child's ChromeOS device settings. If you're a domain administrator, you can change this setting in the Admin console.<ph name="END_PARAGRAPH2" /></translation> <translation id="3559262020195162408">Failed to install policy on the device.</translation> <translation id="3559533181353831840">About <ph name="TIME_LEFT" /> left</translation> <translation id="3560034655160545939">&Spell check</translation> @@ -2927,6 +2943,7 @@ <translation id="370649949373421643">Enable Wi-Fi</translation> <translation id="370665806235115550">Loading...</translation> <translation id="3707163604290651814">Currently signed in as <ph name="NAME" /></translation> +<translation id="3707414379011001517">Your password didn't change. To change it, try again and leave this tab and side panel open. <ph name="LINK_TEXT" /></translation> <translation id="3708295717182051206">Closed captions</translation> <translation id="3708684582558000260">Don't allow closed sites to finish sending or receiving data</translation> <translation id="3709244229496787112">The browser was shut down before the download completed.</translation> @@ -3052,6 +3069,8 @@ <translation id="3814792775883886759">No camera is connected</translation> <translation id="3816118180265633665">Chrome colours</translation> <translation id="3817524650114746564">Open your computer's proxy settings</translation> +<translation id="3817873131406403663"><ph name="BEGIN_PARAGRAPH1" />Allowing your ChromeOS devices to send automatic reports helps us prioritise what to fix and improve in ChromeOS. These reports can include things like when ChromeOS crashes, which features you use, and how much memory you typically use.<ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />You can start or stop allowing these reports at any time in your Chrome device settings. If you’re a domain administrator, you can change this setting in the Admin console.<ph name="END_PARAGRAPH2" /></translation> <translation id="3819164369574292143">Zoom in to make items on the screen bigger. Use Search + Ctrl + M to turn the magnifier on and off. Use Ctrl + Alt + Arrow keys to move around when zoomed in.</translation> <translation id="3819257035322786455">Back Up</translation> <translation id="3819261658055281761">The system failed to store the long-term API access token for this device.</translation> @@ -3685,6 +3704,8 @@ <translation id="4421932782753506458">Fluffy</translation> <translation id="4423376891418188461">Restore Settings</translation> <translation id="442397852638519243"><ph name="USER_NAME" />, your administrator requires you to change your password.</translation> +<translation id="4424867131226116718"><ph name="BEGIN_PARAGRAPH1" />Allowing ChromeOS devices to send automatic reports helps us prioritise what to fix and improve in ChromeOS. These reports can include things like when ChromeOS crashes, which features were enabled and how much memory was typically used.<ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />You can start or stop allowing these reports at any time in your Chrome device settings. If you’re a domain administrator, you can change this setting in the Admin console.<ph name="END_PARAGRAPH2" /></translation> <translation id="4426464032773610160">To get started, please make sure that your USB or Bluetooth switch is connected to your Chromebook. You can also use keyboard keys.</translation> <translation id="4427306783828095590">Enhanced protection does more to block phishing and malware</translation> <translation id="4427365070557649936">Verifying confirmation code…</translation> @@ -3991,6 +4012,7 @@ <translation id="4707337002099455863">Always on All Sites</translation> <translation id="4708849949179781599">Quit <ph name="PRODUCT_NAME" /></translation> <translation id="4711638718396952945">Restore settings</translation> +<translation id="4713409221649555176">Delete when you close all windows</translation> <translation id="47158868804223727">Click the group name to expand or collapse it</translation> <translation id="4716483597559580346">Powerwash for added security</translation> <translation id="471880041731876836">You don't have permission to visit this site</translation> @@ -4268,6 +4290,7 @@ <translation id="4977942889532008999">Confirm Access</translation> <translation id="4980805016576257426">This extension contains malware.</translation> <translation id="4981449534399733132">To clear browsing data from all of your synced devices and your Google Account, <ph name="BEGIN_LINK" />sign in<ph name="END_LINK" />.</translation> +<translation id="4982111327868342436">Pick up where you left off on any device</translation> <translation id="4982236238228587209">Device software</translation> <translation id="4986728572522335985">This will delete all data on the security key, including its PIN</translation> <translation id="4988526792673242964">Pages</translation> @@ -4374,7 +4397,9 @@ <translation id="5097306410549350357">Learn more about using location</translation> <translation id="5097649414558628673">Tool: <ph name="PRINT_NAME" /></translation> <translation id="5097874180538493929">Automatically click when the cursor stops</translation> +<translation id="5101683448725092498">Back up your stuff</translation> <translation id="5101839224773798795">Automatically click when the cursor stops</translation> +<translation id="5106350808162641062">Remove</translation> <translation id="510695978163689362"><ph name="USER_EMAIL" /> is supervised by Family Link. You can add school accounts to access school resources with parental supervision.</translation> <translation id="5107443654503185812">An extension has turned off Safe Browsing</translation> <translation id="5108967062857032718">Settings – Remove Android apps</translation> @@ -4706,6 +4731,7 @@ <translation id="5427278936122846523">Always Translate</translation> <translation id="5427459444770871191">Rotate &Clockwise</translation> <translation id="542750953150239272">By continuing, you agree that this device may also automatically download and install updates and apps from Google, your operator and your device's manufacturer, possibly using mobile data. Some of these apps may offer in-app purchases.</translation> +<translation id="5427936139162668357">View PPD</translation> <translation id="5428850089342283580"><ph name="ACCNAME_APP" /> (Update is available)</translation> <translation id="542948651837270806">An update for the trusted platform module firmware needs to be installed. See <ph name="TPM_FIRMWARE_UPDATE_LINK" /></translation> <translation id="5429818411180678468">Fullwidth</translation> @@ -4778,6 +4804,7 @@ <translation id="5490798133083738649">Allow Linux to access your microphone</translation> <translation id="549211519852037402">Beige and white</translation> <translation id="5492637351392383067">On-device encryption</translation> +<translation id="5493455553805432330">Forget</translation> <translation id="5493792505296048976">screen on</translation> <translation id="5494016731375030300">Recently closed tabs</translation> <translation id="5494362494988149300">Open When &Finished</translation> @@ -4923,6 +4950,7 @@ <translation id="5623842676595125836">Log</translation> <translation id="5624120631404540903">Manage passwords</translation> <translation id="5625225435499354052">Edit in Google Pay</translation> +<translation id="5625631605902707678">Across devices</translation> <translation id="5626134646977739690">Name:</translation> <translation id="5627086634964711283">It also controls what page is shown when you click the Home button.</translation> <translation id="5627676517703583263">Browse smart with Chrome</translation> @@ -4937,6 +4965,7 @@ <translation id="5634446357546764049">See memories of your recent trips and more</translation> <translation id="5635312199252507107">Allow on specific sites</translation> <translation id="563535393368633106">Ask before accessing (recommended)</translation> +<translation id="5636012309446422">Remove <ph name="DEVICE" /> from <ph name="PRIMARY_EMAIL" />?</translation> <translation id="5636996382092289526">To use <ph name="NETWORK_ID" /> you may first need to <ph name="LINK_START" />visit the network's sign-in page<ph name="LINK_END" />, which will open automatically in a few seconds. If it doesn't happen, the network can't be used.</translation> <translation id="5637476008227280525">Mobile data enable</translation> <translation id="5638309510554459422">Find extensions and themes in the <ph name="BEGIN_LINK" />Chrome Web Store<ph name="END_LINK" /></translation> @@ -5030,6 +5059,7 @@ <translation id="5734697361979786483">Add file share</translation> <translation id="5736796278325406685">Please enter a valid username</translation> <translation id="5738093759615225354">You need this passkey to sign in to your computer</translation> +<translation id="5738329404678738022">Store your bookmarks and more with Sync</translation> <translation id="5739017626473506901">Sign in to help <ph name="USER_NAME" /> add a school account</translation> <translation id="5739235828260127894">Waiting for verification. <ph name="LINK_BEGIN" />Find out more<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Very large</translation> @@ -5050,6 +5080,7 @@ <translation id="5757375109985023827">Select a tab to preview</translation> <translation id="5758631781033351321">You'll find your reading list here</translation> <translation id="5759728514498647443">Documents that you send to print via <ph name="APP_NAME" /> can be read by <ph name="APP_NAME" />.</translation> +<translation id="5760508342220592715">Sign in for more benefits</translation> <translation id="5762787084360227629">Enter Google Account info</translation> <translation id="5763751966069581670">No USB devices found</translation> <translation id="5764483294734785780">Sa&ve audio as...</translation> @@ -5084,6 +5115,7 @@ <translation id="5790651917470750848">Port forward already exists</translation> <translation id="5792295754950501287">More actions for <ph name="CARD_DESCRIPTION" /></translation> <translation id="5792728279623964091">Please tap your power button</translation> +<translation id="5792874008054171483">More actions for <ph name="SITE_NAME" /></translation> <translation id="5793339252089865437">If you download the update over your mobile network, it could result in overage charges.</translation> <translation id="5793420564274426163">Pair confirmation</translation> <translation id="5793430094159150686">Your password has changed. To restore your local data, you need to enter your old password.</translation> @@ -5220,6 +5252,7 @@ Public Exponent (<ph name="PUBLIC_EXPONENT_NUM_BITS" /> bits): <ph name="EXPONENT_HEX_DUMP" /></translation> +<translation id="5915207966717429886">Allow to save data</translation> <translation id="5916655001090539219">Automatic reading</translation> <translation id="5916664084637901428">On</translation> <translation id="59174027418879706">Enabled</translation> @@ -5397,6 +5430,7 @@ <translation id="6078742430369906859">Connectivity on '<ph name="NETWORK_ID" />' may be limited</translation> <translation id="6078752646384677957">Please check your microphone and audio levels.</translation> <translation id="6078769373519310690">'<ph name="CHROME_EXTENSION_NAME" />' wants to connect to a HID device</translation> +<translation id="6079162143107623965">A site that you’re viewing can embed content from other sites, for example, images, ads and text. These embedded sites can save data on your device.</translation> <translation id="608029822688206592">No network found. Please insert your SIM and try again.</translation> <translation id="6080689532560039067">Check your system time</translation> <translation id="6082877069782862752">Key mapping</translation> @@ -5467,6 +5501,7 @@ <translation id="6146409560350811147">Sync isn't working. Try signing in again.</translation> <translation id="6147020289383635445">Print preview failed.</translation> <translation id="6148576794665275391">Open now</translation> +<translation id="614890671148262506">Always allow notifications from this site</translation> <translation id="6149015141270619212">Can't connect to the Internet</translation> <translation id="6150116777338468525">Audio quality</translation> <translation id="6150278227694566734">Some contacts</translation> @@ -5516,6 +5551,7 @@ <translation id="6202304368170870640">You can use your PIN to sign in to or unlock your device.</translation> <translation id="6206199626856438589">You'll be signed out of displayed sites, including in open tabs</translation> <translation id="6206311232642889873">Cop&y Image</translation> +<translation id="6206521455877863927">Including sites from the same domain, for example, google.com and mail.google.com. Sites that you’re viewing can save data on your device.</translation> <translation id="6207200176136643843">Reset to default zoom level</translation> <translation id="6207806976844244951">Save to Google Password Manager (<ph name="EMAIL" />)</translation> <translation id="6207937957461833379">Country/Region</translation> @@ -5738,6 +5774,7 @@ <translation id="6418481728190846787">Permanently remove access for all apps</translation> <translation id="6418511932144861495">Install critical update</translation> <translation id="641899100123938294">Scan for new devices</translation> +<translation id="6419239627403237650">From the site that you’re viewing</translation> <translation id="6419524191360800346">An upgrade to Debian 11 (Bullseye) is available</translation> <translation id="6419546358665792306">Load unpacked</translation> <translation id="642469772702851743">This device (SN: <ph name="SERIAL_NUMBER" />) was locked by the owner.</translation> @@ -5962,6 +5999,7 @@ <translation id="6624535038674360844"><ph name="FILE_NAME" /> has sensitive or dangerous content. Ask its owner to fix it.</translation> <translation id="6624687053722465643">Sweetness</translation> <translation id="6628328486509726751">Uploaded <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation> +<translation id="6630117778953264026">Stronger security</translation> <translation id="6630752851777525409"><ph name="EXTENSION_NAME" /> wants permanent access to a certificate to authenticate itself on your behalf.</translation> <translation id="6633126565486451781">This file may have been read or edited because this site isn't using a secure connection</translation> <translation id="6635362468090274700">No one can share with you until you make yourself visible.<ph name="BR" /><ph name="BR" />To make yourself visible temporarily, open the status area, then turn on Nearby visibility.</translation> @@ -5999,6 +6037,7 @@ <translation id="6666559645296300656">Canceling Linux upgrade</translation> <translation id="6667086124612170548">File is too big for this device</translation> <translation id="666731172850799929">Open in <ph name="APP_NAME" /></translation> +<translation id="6669195257625975787">Data is treated the same as the site that you’re viewing</translation> <translation id="6670142487971298264"><ph name="APP_NAME" /> is now available</translation> <translation id="6670767097276846646">Some extensions can add search engines to Chrome</translation> <translation id="6671320560732140690">{COUNT,plural, =1{an address}other{# addresses}}</translation> @@ -6109,6 +6148,7 @@ <ph name="BEGIN_PARAGRAPH2" />You can turn this service off in Settings.<ph name="END_PARAGRAPH2" /></translation> <translation id="6781978626986383437">Linux backup cancelled</translation> <translation id="6782067259631821405">Invalid PIN</translation> +<translation id="6783036716881942511">Forget this device?</translation> <translation id="6784523122863989144">Profile is supported</translation> <translation id="6785739405821760313">Viewing saved desks. Press tab to navigate.</translation> <translation id="6785872064505734160">Google Assistant in Chrome can complete actions across websites for you</translation> @@ -6136,6 +6176,7 @@ <translation id="680488281839478944">VM '<ph name="DEFAULT_VM_NAME" />' exists</translation> <translation id="6805647936811177813">Please sign in to <ph name="TOKEN_NAME" /> to import client certificate from <ph name="HOST_NAME" />.</translation> <translation id="680572642341004180">Enable RLZ tracking on <ph name="SHORT_PRODUCT_OS_NAME" />.</translation> +<translation id="6806089545527108739">Don’t allow but ask later</translation> <translation id="6808039367995747522">To continue, insert and touch your security key</translation> <translation id="6808166974213191158">Chrome OS Flex system image writer</translation> <translation id="6808193438228982088">Fox</translation> @@ -6220,6 +6261,7 @@ <translation id="686664946474413495">Colour temperature</translation> <translation id="6867086642466184030">Other apps are set to open the same links as <ph name="APP_NAME" />. This will disable <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" />, <ph name="APP_NAME_4" /> and <ph name="NUMBER_OF_OTHER_APPS" /> other apps from opening supported links.</translation> <translation id="6867400383614725881">New incognito tab</translation> +<translation id="686831807558000905">Don't sign in</translation> <translation id="6868934826811377550">See details.</translation> <translation id="6871644448911473373">OCSP Responder: <ph name="LOCATION" /></translation> <translation id="6872781471649843364">The password that you entered was rejected by the server.</translation> @@ -6411,6 +6453,7 @@ <translation id="7039326228527141150">Access USB devices from <ph name="VENDOR_NAME" /></translation> <translation id="7039912931802252762">Microsoft Smart Card Logon</translation> <translation id="7039951224110875196">Create a Google Account for a child</translation> +<translation id="7042116641003232070">Allowed to save data to your device</translation> <translation id="7043108582968290193">Finished! No incompatible applications found.</translation> <translation id="7044124535091449260">Learn more about site access</translation> <translation id="7044207729381622209">You'll be signed out of these sites, including in open tabs</translation> @@ -6457,6 +6500,7 @@ <translation id="7088434364990739311">Update check failed to start (error code <ph name="ERROR" />).</translation> <translation id="7088674813905715446">This device has been placed into a deprovisioned state by the administrator. To enable it for enrolment, please have your administrator place the device into a pending state.</translation> <translation id="7088960765736518739">Switch Access</translation> +<translation id="7089253021944603172">Tab active again</translation> <translation id="7090160970140261931">You can add additional accounts to your <ph name="DEVICE_TYPE" /> to use with websites and Android apps. You can also control which accounts are used with Android apps.</translation> <translation id="7093220653036489319">Quick Answers</translation> <translation id="7093416310351037609">For data safety and security, your organisation requires all eligible downloads to be saved to your organisation's <ph name="WEB_DRIVE" /> account.</translation> @@ -7302,6 +7346,7 @@ <translation id="7906440585529721295">Local data will be deleted</translation> <translation id="7907837847548254634">Show a quick highlight on the focused object</translation> <translation id="7908378463497120834">Sorry, at least one partition on your external storage device could not be mounted.</translation> +<translation id="7908835530772972485">Delete data when you close all windows</translation> <translation id="7909324225945368569">Rename your profile</translation> <translation id="7909969815743704077">Downloaded in Incognito</translation> <translation id="7909986151924474987">You may not be able to reinstall this profile</translation> @@ -7462,6 +7507,7 @@ <translation id="804786196054284061">End User Licence Agreement</translation> <translation id="8048977114738515028">Create a desktop shortcut on your device to access directly to this profile</translation> <translation id="8049029041626250638">Connect a keyboard or mouse. If you are using Bluetooth devices, make sure that your devices are ready to pair.</translation> +<translation id="8049122382261047457">Search any image with Google Lens</translation> <translation id="8049705080247101012">Google has flagged '<ph name="EXTENSION_NAME" />' as malicious, and installation has been prevented</translation> <translation id="8049948037269924837">Touchpad reverse scrolling</translation> <translation id="8050038245906040378">Microsoft Commercial Code Signing</translation> @@ -7480,6 +7526,7 @@ <translation id="8059417245945632445">&Inspect devices</translation> <translation id="8059456211585183827">There are no printers available to save.</translation> <translation id="8061091456562007989">Change it back</translation> +<translation id="8061965471006133016">Extra protection to your passwords and more</translation> <translation id="8061970399284390013">Spelling and grammar check</translation> <translation id="8061991877177392872">It looks as though you've already set up Voice Match with your Assistant on another device. These previous recordings were used to make a voice model on this device.</translation> <translation id="8062844841289846053">{COUNT,plural, =1{1 sheet of paper}other{{COUNT} sheets of paper}}</translation> @@ -7599,6 +7646,7 @@ <translation id="8168435359814927499">Content</translation> <translation id="8169165065843881617">{NUM_TABS,plural, =1{Add Tab to Reading List}other{Add Tabs to Reading List}}</translation> <translation id="8171334254070436367">Hide all cards</translation> +<translation id="8172192489606308982">From other sites</translation> <translation id="8174047975335711832">Device information</translation> <translation id="8174876712881364124">Back up to Google Drive. Easily restore data or switch device at any time. This backup includes app data. Backups are uploaded to Google and encrypted using your child's Google Account password. <ph name="BEGIN_LINK1" />Learn More<ph name="END_LINK1" /></translation> <translation id="8176332201990304395">Pink and white</translation> @@ -7916,6 +7964,9 @@ <translation id="8472623782143987204">hardware-backed</translation> <translation id="8473863474539038330">Addresses and more</translation> <translation id="8475313423285172237">Another programme on your computer added an extension that may change the way Chrome works.</translation> +<translation id="8476491056950015181"><ph name="BEGIN_PARAGRAPH1" />Allowing ChromeOS devices to send automatic reports helps us prioritise what to fix and improve in ChromeOS. These reports can include things, like when ChromeOS crashes, which features were enabled, how much memory was typically used and Android app diagnostic and usage data. Some aggregate data will also help Google apps and partners, such as Android developers.<ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />You can start or stop allowing these reports at any time in your child's ChromeOS device settings. If you're a domain administrator, you can change this setting in the Admin console.<ph name="END_PARAGRAPH2" /> + <ph name="BEGIN_PARAGRAPH4" />If the Web & App Activity setting is turned on for your child's Google Account, your child's data may be saved to their Google Account. Learn more about these settings and how to adjust them at families.google.com.<ph name="END_PARAGRAPH4" /></translation> <translation id="8477241577829954800">Superseded</translation> <translation id="8477384620836102176">&General</translation> <translation id="8479176401914456949">Invalid code. Please try again.</translation> @@ -8076,6 +8127,7 @@ <translation id="8645354835496065562">Continue allowing sensor access</translation> <translation id="8645920082661222035">Predicts and warns you about dangerous events before they happen</translation> <translation id="8646209145740351125">Disable sync</translation> +<translation id="8646340610303779673">Unable to retrieve PPD.</translation> <translation id="864637694230589560">Sites usually send notifications to let you know about breaking news or chat messages</translation> <translation id="8647385344110255847">With your permission, your child can use Google Play to install apps</translation> <translation id="8647834505253004544">Not a valid web address</translation> @@ -8136,6 +8188,7 @@ <translation id="869884720829132584">Applications menu</translation> <translation id="869891660844655955">Expiry date</translation> <translation id="8699120352855309748">Don’t offer to translate these languages</translation> +<translation id="8699188901396699995">PPD for <ph name="PRINTER_NAME" /></translation> <translation id="8702825062053163569">Your <ph name="DEVICE_TYPE" /> was locked.</translation> <translation id="8703346390800944767">Skip ad</translation> <translation id="8705331520020532516">Serial Number</translation> @@ -8186,6 +8239,7 @@ <translation id="8741944563400125534">Switch Access setup guide</translation> <translation id="8742998548129056176">This is general information about your device and how you use it (such as battery level, system and app activity, and errors). The data will be used to improve Android, and some aggregated information will also help Google apps and partners, such as Android developers, to make their apps and products better.</translation> <translation id="8744641000906923997">Romaji</translation> +<translation id="8745034592125932220">Not allowed to save data to your device</translation> <translation id="8746654918629346731">You already requested '<ph name="EXTENSION_NAME" />'</translation> <translation id="874689135111202667">{0,plural, =1{Upload one file to this site?}other{Upload # files to this site?}}</translation> <translation id="8749805710397399240">Unable to cast your screen. Check the Screen recording permission in system preferences.</translation> @@ -8233,6 +8287,7 @@ <translation id="8783834180813871000">Type the pairing code then press Return or Enter</translation> <translation id="8784626084144195648">Binned Average</translation> <translation id="8785622406424941542">Stylus</translation> +<translation id="8785680469435073309">Read ChromeOS Flex network information.</translation> <translation id="8786824282808281903">When your child sees this icon, a fingerprint can be used for identification or to approve purchases.</translation> <translation id="8787575090331305835">{NUM_TABS,plural, =1{Unnamed Group – 1 Tab}other{Unnamed Group – # Tabs}}</translation> <translation id="8791534160414513928">Send a ‘Do Not Track’ request with your browsing traffic</translation> @@ -8305,6 +8360,7 @@ <translation id="8856028055086294840">Restore apps and pages</translation> <translation id="885701979325669005">Storage</translation> <translation id="885746075120788020">Your saved preferences and activity will be ready on any Chrome OS device when you sign in with your Google Account. You can choose what to sync in Settings.</translation> +<translation id="8858369206579825206">Privacy controls</translation> <translation id="8859174528519900719">Subframe: <ph name="SUBFRAME_SITE" /></translation> <translation id="8859402192569844210">Terms of Service could not be loaded</translation> <translation id="8859662783913000679">Parent account</translation> @@ -8517,6 +8573,7 @@ <translation id="9056810968620647706">No matches were found.</translation> <translation id="9057007989365783744"><ph name="SUPERVISED_USER_NAME" /> wants to access the following content:</translation> <translation id="9057354806206861646">Update schedule</translation> +<translation id="9058070466596314168">{NUM_NOTIFICATION,plural, =1{About 1 notification a day}other{About {NUM_NOTIFICATION} notifications a day}}</translation> <translation id="9062468308252555888">14x</translation> <translation id="9063208415146866933">Error from line <ph name="ERROR_LINE_START" /> to <ph name="ERROR_LINE_END" /></translation> <translation id="9064275926664971810">Enable Auto-fill to fill out forms in a single click</translation> @@ -8598,6 +8655,7 @@ <translation id="9128870381267983090">Connect to network</translation> <translation id="9130015405878219958">Invalid mode entered.</translation> <translation id="9131487537093447019">Send messages to and receive messages from Bluetooth devices.</translation> +<translation id="913383674572270194">{NUM_BOOKMARKS,plural, =1{1 bookmark}other{# bookmarks}}</translation> <translation id="9134066738478820307">Sites can use identifiers to play protected content</translation> <translation id="913411432238655354">Restore apps on start-up</translation> <translation id="9137013805542155359">Show original</translation> @@ -8615,6 +8673,7 @@ <translation id="9148058034647219655">Exit</translation> <translation id="9148126808321036104">Sign in again</translation> <translation id="9148963623915467028">This site can access your location.</translation> +<translation id="9149240486450525363">Read ChromeOS network information.</translation> <translation id="9149866541089851383">Edit...</translation> <translation id="9150045010208374699">Use your camera</translation> <translation id="9150079578948279438">Profile could not be removed. Please try again or contact your operator for technical support.</translation> @@ -8681,6 +8740,7 @@ <translation id="9218842937876577955"><ph name="APP_NAME" /> (unsupported app)</translation> <translation id="9219582468404818260">Help us build a better web</translation> <translation id="9220525904950070496">Remove account</translation> +<translation id="9220723036554088545">upload a file</translation> <translation id="9220820413868316583">Lift then try again.</translation> <translation id="922152298093051471">Customise Chrome</translation> <translation id="9222839025964079645">Passwords not imported (<ph name="COUNT" />)</translation>
diff --git a/chrome/app/resources/generated_resources_mn.xtb b/chrome/app/resources/generated_resources_mn.xtb index 1c54384..d56390f 100644 --- a/chrome/app/resources/generated_resources_mn.xtb +++ b/chrome/app/resources/generated_resources_mn.xtb
@@ -2397,6 +2397,7 @@ <translation id="3188465121994729530">Дундаж үзүүлэлт</translation> <translation id="3189187154924005138">Том курсор</translation> <translation id="3190558889382726167">Нууц үгийг хадгалсан</translation> +<translation id="3192589799003798742">Chromebook дээр Steam-г тохируулж байна</translation> <translation id="3192947282887913208">Аудио файлууд</translation> <translation id="3193695589337931419">Системийн дохионы хэрэгслүүд</translation> <translation id="3194786596445804250">Гуравдагч талын күүкиг блоклох талаарх дэлгэрэнгүйг харуулах</translation> @@ -2536,6 +2537,7 @@ <translation id="3341699307020049241">ПИН буруу байна. Танд <ph name="RETRIES" /> оролдлого үлдлээ.</translation> <translation id="3341703758641437857">Файлын холбоосууд руу нэвтрэхийг зөвшөөрөх</translation> <translation id="3342361181740736773">"<ph name="TRIGGERING_EXTENSION_NAME" />" энэ өргөтгөлийг устгах хүсэлтэй байна.</translation> +<translation id="3343977377045378693">Тохируулга хийж байна</translation> <translation id="3345135638360864351">Таны энэхүү сайтад нэвтрэх хүсэлтийг <ph name="NAME" />-д илгээх боломжгүй байна. Та дараа дахин хандана уу.</translation> <translation id="3345634917232014253">Аюулгүй байдлын шалгалтыг хэдэн хормын өмнө хийсэн</translation> <translation id="3345886924813989455">Ямар ч дэмжигдэх веб хөтөч олдсонгүй</translation> @@ -2547,6 +2549,7 @@ <translation id="3354768182971982851">Chrome аппын хуучин хувилбарууд 2022 оны 12-р сараас хойш Mac төхөөрөмжүүд дээр нээгдэхгүй. Та шинэ хувилбар боломжтой эсэхийг шалгаж болно.</translation> <translation id="3354972872297836698"><ph name="DEVICE_NAME" /> төхөөрөмжтэй хослуулж чадсангүй. Дахин оролдохын тулд төхөөрөмж сонгоно уу</translation> <translation id="3355936511340229503">Холболтын алдаа</translation> +<translation id="3356036636691722598">Chromebook дээрээ тоглоомоо таатай тоглоорой</translation> <translation id="3356469410714175391">(Виртуал картыг идэвхжүүлсэн)</translation> <translation id="3356580349448036450">Бүрэн</translation> <translation id="3359256513598016054">Гэрчилгээ бодлогын хязгаарлалтууд</translation> @@ -3454,6 +3457,7 @@ <translation id="4211904048067111541">Android аппуудтай ашиглахаа зогсоох</translation> <translation id="42126664696688958">Экспортлох</translation> <translation id="42137655013211669">Энэ нөөцөд хандалт хийхийг серверээс хориглосон байна.</translation> +<translation id="4214192212360095377">Одоо унтраах</translation> <translation id="4217558091331485702">Нээхийн өмнө скан хийнэ үү</translation> <translation id="4217571870635786043">Заавар</translation> <translation id="4218081191298393750">Энэ табын дууг хаахын тулд чанга яригчийн дүрс тэмдгийг товшино уу</translation> @@ -4348,6 +4352,7 @@ <translation id="5089763948477033443">Хажуугийн самбарын хэмжээг өөрчлөх бариул</translation> <translation id="5090637338841444533">Таны камерын байрлалыг хянахыг зөвшөөрөөгүй</translation> <translation id="5093569275467863761">Нууцлалтай Back/Forward Cache хийсэн дэд хүрээ: <ph name="BACK_FORWARD_CACHE_INCOGNITO_PAGE_URL" /></translation> +<translation id="5094042205195563542">Суулгаж эхэлж байна</translation> <translation id="5094176498302660097">Та Files аппаас энэ аппаар эсвэл бусад аппаар дэмжигдсэн файлуудыг нээх болон засах боломжтой. Энэ аппад өгөгдмөлөөр аль файлуудыг нээхийг хянахын тулд <ph name="BEGIN_LINK" />төхөөрөмж дээрээ өгөгдмөл аппуудыг хэрхэн тохируулах талаар мэдэж авна уу<ph name="END_LINK" />.</translation> <translation id="5094721898978802975">Хамтарч буй суурин апп-уудтай харилцах</translation> <translation id="5097002363526479830">Сүлжээний холболт амжилтгүй боллоо '<ph name="NAME" />': <ph name="DETAILS" /></translation> @@ -6358,6 +6363,7 @@ <translation id="7014174261166285193">Суулгах ажиллагаа амжилтгүй боллоо.</translation> <translation id="7014480873681694324">Тодруулгыг хасах</translation> <translation id="7014741021609395734">Томруулалтын түвшин</translation> +<translation id="7014961128696979283">Steam-г эхлүүлэх</translation> <translation id="7015088858756332848">Chromebook дээр Steam-г эхлүүлж чадсангүй. Дахин оролдоно уу</translation> <translation id="7017004637493394352">Дахин "Oк Google" гэж хэлнэ үү</translation> <translation id="7017219178341817193">Шинэ хуудас нэмэх</translation> @@ -6749,6 +6755,7 @@ <translation id="7423425410216218516">Харагдац <ph name="MINUTES" /> минутын турш асаалттай байна</translation> <translation id="7423513079490750513"><ph name="INPUT_METHOD_NAME" />-г хасах</translation> <translation id="7423807071740419372"><ph name="APP_NAME" />-г ажиллуулахын тулд зөвшөөрөл хэрэгтэй</translation> +<translation id="7424153922653300265">Эрчим хүч хэмнэгчийг асаасан</translation> <translation id="7424818322350938336">Сүлжээ нэмсэн</translation> <translation id="7427315069950454694">таны өнөөдрийн дурсамжууд</translation> <translation id="7427348830195639090">Дэвсгэр хуудас: <ph name="BACKGROUND_PAGE_URL" /></translation> @@ -7984,6 +7991,7 @@ <translation id="859246725979739260">Байршилд тань хандахыг энэ сайтад хориглосон.</translation> <translation id="8593121833493516339">Ашиглалт болон оношилгооны өгөгдлийг илгээнэ үү. Оношилгоо, төхөөрөмж болон аппын ашиглалтын өгөгдлийг Google-д автоматаар илгээж, хүүхдийнхээ Android-н хэрэглээг сайжруулахад тусална уу. Үүнийг таны хүүхдийг тодорхойлоход ашиглахгүй бөгөөд энэ нь систем, аппын тогтвортой байдал болон бусад зүйлийг сайжруулахад тусална. Зарим хуримтлуулсан өгөгдөл нь Google аппууд болон Android хөгжүүлэгч зэрэг түншүүдэд мөн адил тусална. Хэрэв таны хүүхдийн нэмэлт Веб, аппын үйл ажиллагаа асаалттай байвал энэ өгөгдлийг тэдний Google бүртгэлд хадгалж болзошгүй. <ph name="BEGIN_LINK1" />Нэмэлт мэдээлэл авах<ph name="END_LINK1" /></translation> <translation id="8596540852772265699">Энгийн файлууд</translation> +<translation id="8597404194697561297">Chromebook дээрх Steam-д тавтай морилно уу</translation> <translation id="8597845839771543242">Өмчийн хэлбэр нь:</translation> <translation id="8599681327221583254">Нэг эсвэл түүнээс олон бодлогыг зөв тохируулаагүй байна. Администратортайгаа холбогдоно уу</translation> <translation id="8599864823732014237">Байгууллагаар бүртгүүлэхийг алгасах уу?</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb index b1d9be31..08c982c 100644 --- a/chrome/app/resources/generated_resources_pt-BR.xtb +++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -2402,6 +2402,7 @@ <translation id="3188465121994729530">Média móvel</translation> <translation id="3189187154924005138">Cursor grande</translation> <translation id="3190558889382726167">Senha salva</translation> +<translation id="3192589799003798742">Como configurar o Steam no Chromebook</translation> <translation id="3192947282887913208">Arquivos de áudio</translation> <translation id="3193695589337931419">Utilitários de sinais do sistema</translation> <translation id="3194786596445804250">Mostrar detalhes sobre bloquear cookies de terceiros</translation> @@ -2542,6 +2543,7 @@ <translation id="3341703758641437857">Permitir acesso a URLs de arquivo </translation> <translation id="3342361181740736773">"<ph name="TRIGGERING_EXTENSION_NAME" />" quer remover essa extensão.</translation> +<translation id="3343977377045378693">Como definir a configuração</translation> <translation id="3345135638360864351">Não foi possível enviar sua solicitação a <ph name="NAME" /> para acessar este site. Tente novamente.</translation> <translation id="3345634917232014253">A confirmação de segurança foi executada há pouco tempo</translation> <translation id="3345886924813989455">Não foi encontrado um navegador suportado</translation> @@ -2553,6 +2555,7 @@ <translation id="3354768182971982851">Depois de dezembro de 2022, não vai mais ser possível abrir as versões antigas dos apps do Chrome em dispositivos Mac. Verifique se há uma nova versão disponível.</translation> <translation id="3354972872297836698">Não foi possível parear com o dispositivo <ph name="DEVICE_NAME" />. Selecione o dispositivo para tentar novamente</translation> <translation id="3355936511340229503">Erro de conexão</translation> +<translation id="3356036636691722598">Aproveite os jogos no Chromebook</translation> <translation id="3356469410714175391">(cartão virtual ativado)</translation> <translation id="3356580349448036450">Concluído</translation> <translation id="3359256513598016054">Restrições da diretiva de certificação</translation> @@ -3461,6 +3464,7 @@ <translation id="4211904048067111541">Parar de usar com apps Android</translation> <translation id="42126664696688958">Exportar</translation> <translation id="42137655013211669">O acesso a este recurso foi proibido pelo servidor.</translation> +<translation id="4214192212360095377">Desativar agora</translation> <translation id="4217558091331485702">Verificar antes de abrir</translation> <translation id="4217571870635786043">Ditado</translation> <translation id="4218081191298393750">Clique no ícone de alto-falante para silenciar esta guia</translation> @@ -4355,6 +4359,7 @@ <translation id="5089763948477033443">Alça de redimensionamento do painel lateral</translation> <translation id="5090637338841444533">Bloquear o monitoramento da posição da câmera</translation> <translation id="5093569275467863761">Subframe de navegação anônima salvo em cache de avanço e retorno: <ph name="BACK_FORWARD_CACHE_INCOGNITO_PAGE_URL" /></translation> +<translation id="5094042205195563542">Como iniciar a instalação</translation> <translation id="5094176498302660097">Com este app, é possível abrir e editar arquivos com suporte usando o app Arquivos ou outros. Para controlar quais arquivos são abertos nesse app por padrão, <ph name="BEGIN_LINK" />aprenda a definir os apps padrão no seu dispositivo<ph name="END_LINK" />.</translation> <translation id="5094721898978802975">Comunicar-se com aplicativos nativos de colaboração</translation> <translation id="5097002363526479830">Falha na conexão à rede "<ph name="NAME" />": <ph name="DETAILS" /></translation> @@ -6368,6 +6373,7 @@ <translation id="7014174261166285193">Falha na instalação.</translation> <translation id="7014480873681694324">Remover destaque</translation> <translation id="7014741021609395734">Nível de zoom</translation> +<translation id="7014961128696979283">Iniciar o Steam</translation> <translation id="7015088858756332848">Não foi possível abrir o Steam no Chromebook. Tente novamente</translation> <translation id="7017004637493394352">Diga "Ok Google" novamente</translation> <translation id="7017219178341817193">Adicionar uma nova página</translation> @@ -6759,6 +6765,7 @@ <translation id="7423425410216218516">A visibilidade está ativada por <ph name="MINUTES" /> minutos</translation> <translation id="7423513079490750513">Remover <ph name="INPUT_METHOD_NAME" /></translation> <translation id="7423807071740419372">O app <ph name="APP_NAME" /> precisa de permissão para ser executado</translation> +<translation id="7424153922653300265">Economia de energia ativada</translation> <translation id="7424818322350938336">Rede adicionada</translation> <translation id="7427315069950454694">suas lembranças de hoje</translation> <translation id="7427348830195639090">Página de plano de fundo: <ph name="BACKGROUND_PAGE_URL" /></translation> @@ -7997,6 +8004,7 @@ <translation id="859246725979739260">Este site foi impedido de acessar sua localização.</translation> <translation id="8593121833493516339">Envie dados de uso e diagnóstico. Ajude a melhorar a experiência do seu filho com o Android enviando automaticamente ao Google dados de diagnóstico, de uso de apps e do dispositivo. Eles não serão usados para identificar seu filho e ajudarão a melhorar o sistema, a estabilidade de apps e muito mais. Alguns dados agregados também ajudarão os apps do Google e os nossos parceiros, como os desenvolvedores Android. Se a opção "Atividade na Web e de apps adicional" estiver ativada para seu filho, esses dados poderão ser salvos na Conta do Google dele. <ph name="BEGIN_LINK1" />Saiba mais<ph name="END_LINK1" /></translation> <translation id="8596540852772265699">Arquivos personalizados</translation> +<translation id="8597404194697561297">Este é o Steam no Chromebook</translation> <translation id="8597845839771543242">Formato da propriedade:</translation> <translation id="8599681327221583254">Uma ou mais políticas não foram configuradas corretamente. Entre em contato com seu administrador</translation> <translation id="8599864823732014237">Pular registro empresarial?</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb index 6a5637f..36a36a74 100644 --- a/chrome/app/resources/generated_resources_ro.xtb +++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -2387,6 +2387,7 @@ <translation id="3188465121994729530">Medie mobilă</translation> <translation id="3189187154924005138">Cursor mare</translation> <translation id="3190558889382726167">Parola a fost salvată</translation> +<translation id="3192589799003798742">Se configurează Steam pe Chromebook</translation> <translation id="3192947282887913208">Fișiere audio</translation> <translation id="3193695589337931419">Utilitare pentru semnalele de sistem</translation> <translation id="3194786596445804250">Afișează detalii despre blocarea cookie-urilor terțe</translation> @@ -2526,6 +2527,7 @@ <translation id="3341699307020049241">Codul PIN este incorect. Mai ai <ph name="RETRIES" /> încercări.</translation> <translation id="3341703758641437857">Permite accesul la adresele URL de fișiere</translation> <translation id="3342361181740736773">„<ph name="TRIGGERING_EXTENSION_NAME" />” dorește să elimine această extensie.</translation> +<translation id="3343977377045378693">Se realizează configurarea</translation> <translation id="3345135638360864351">Solicitarea de a accesa acest site nu a putut fi trimisă la <ph name="NAME" />. Încearcă din nou.</translation> <translation id="3345634917232014253">Verificarea de siguranță a rulat recent</translation> <translation id="3345886924813989455">Nu a fost găsit niciun browser acceptat</translation> @@ -2537,6 +2539,7 @@ <translation id="3354768182971982851">Începând cu luna decembrie 2022, versiunile vechi ale aplicațiilor Chrome nu se vor mai deschide pe dispozitivele Mac. Poți verifica dacă există o nouă versiune disponibilă.</translation> <translation id="3354972872297836698">Nu s-a putut asocia cu dispozitivul <ph name="DEVICE_NAME" />. Selectează dispozitivul pentru a încerca din nou.</translation> <translation id="3355936511340229503">Eroare de conexiune</translation> +<translation id="3356036636691722598">Bucură-te de jocuri pe Chromebook</translation> <translation id="3356469410714175391">(Card virtual activat)</translation> <translation id="3356580349448036450">Finalizat</translation> <translation id="3359256513598016054">Limitări ale politicii pentru certificate</translation> @@ -3445,6 +3448,7 @@ <translation id="4211904048067111541">Nu mai folosi cu aplicații pentru Android</translation> <translation id="42126664696688958">Exportă</translation> <translation id="42137655013211669">Accesul la această resursă a fost interzis de server.</translation> +<translation id="4214192212360095377">Dezactivează acum</translation> <translation id="4217558091331485702">Scanează înainte să deschizi</translation> <translation id="4217571870635786043">Dictare</translation> <translation id="4218081191298393750">Dă clic pe pictograma difuzor pentru a dezactiva sunetul filei</translation> @@ -4338,6 +4342,7 @@ <translation id="5089763948477033443">Ghidaj de redimensionare a panoului lateral</translation> <translation id="5090637338841444533">Nu au permisiunea de a urmări poziția camerei</translation> <translation id="5093569275467863761">Subcadru incognito din memoria cache înainte-înapoi: <ph name="BACK_FORWARD_CACHE_INCOGNITO_PAGE_URL" /></translation> +<translation id="5094042205195563542">Se începe instalarea</translation> <translation id="5094176498302660097">Poți să deschizi și să editezi fișierele acceptate în această aplicație din aplicația Fișiere sau din alte aplicații. Pentru a alege fișierele care deschid aplicația în mod prestabilit, <ph name="BEGIN_LINK" />află cum să setezi aplicații prestabilite pe dispozitiv<ph name="END_LINK" />.</translation> <translation id="5094721898978802975">Comunicarea cu aplicațiile native cooperante</translation> <translation id="5097002363526479830">A eșuat conectarea la rețeaua „<ph name="NAME" />”: <ph name="DETAILS" /></translation> @@ -6350,6 +6355,7 @@ <translation id="7014174261166285193">Instalarea nu a reușit.</translation> <translation id="7014480873681694324">Elimină evidențierea</translation> <translation id="7014741021609395734">Nivel de zoom</translation> +<translation id="7014961128696979283">Lansează Steam</translation> <translation id="7015088858756332848">Nu s-a putut lansa Steam pe Chromebook. Încearcă din nou</translation> <translation id="7017004637493394352">Rostește din nou „Ok Google”</translation> <translation id="7017219178341817193">Adaugă o pagină nouă</translation> @@ -6741,6 +6747,7 @@ <translation id="7423425410216218516">Vizibilitatea este activată pentru <ph name="MINUTES" /> minute</translation> <translation id="7423513079490750513">Elimină <ph name="INPUT_METHOD_NAME" /></translation> <translation id="7423807071740419372"><ph name="APP_NAME" /> are nevoie de permisiune pentru a rula</translation> +<translation id="7424153922653300265">Economisirea energiei este activată</translation> <translation id="7424818322350938336">Rețeaua a fost adăugată</translation> <translation id="7427315069950454694">amintirile tale pentru astăzi</translation> <translation id="7427348830195639090">Pagină de fundal: <ph name="BACKGROUND_PAGE_URL" /></translation> @@ -7979,6 +7986,7 @@ <translation id="859246725979739260">Acest site nu are permisiunea de a accesa locația.</translation> <translation id="8593121833493516339">Trimite date de utilizare și diagnosticare. Contribuie la îmbunătățirea experienței Android a copilului trimițând automat la Google date de diagnosticare și utilizare a dispozitivului și a aplicațiilor. Acestea nu vor fi folosite la identificarea copilului și vor ajuta la stabilitatea sistemului, a aplicațiilor și altele. Unele date cumulate vor ajuta aplicațiile și partenerii Google, cum ar fi dezvoltatorii Android. Dacă ai activat setarea Activitatea suplimentară de pe web și din aplicații pentru copilul tău, aceste date pot fi salvate în Contul său Google. <ph name="BEGIN_LINK1" />Află mai multe<ph name="END_LINK1" /></translation> <translation id="8596540852772265699">Fișiere personalizate</translation> +<translation id="8597404194697561297">Bun venit la Steam pe Chromebook</translation> <translation id="8597845839771543242">Formatul proprietății:</translation> <translation id="8599681327221583254">Cel puțin o politică nu este configurată corect. Contactează administratorul.</translation> <translation id="8599864823732014237">Omiți înregistrarea companiei?</translation>
diff --git a/chrome/app/resources/generated_resources_si.xtb b/chrome/app/resources/generated_resources_si.xtb index 49a4c7ee..d6706757 100644 --- a/chrome/app/resources/generated_resources_si.xtb +++ b/chrome/app/resources/generated_resources_si.xtb
@@ -2390,6 +2390,7 @@ <translation id="3188465121994729530">ගෙනයෑම් සාමාන්යය</translation> <translation id="3189187154924005138">විශාල කර්සරය</translation> <translation id="3190558889382726167">මුරපදය සුරැකිණි</translation> +<translation id="3192589799003798742">Chromebook හි Steam පිහිටුවීම</translation> <translation id="3192947282887913208">ශ්රව්ය ගොනුව</translation> <translation id="3193695589337931419">පද්ධති සංඥා උපයෝගිතා</translation> <translation id="3194786596445804250">තෙවන පාර්ශ්ව කුකි අවහිර කිරීම පිළිබඳ විස්තර පෙන්වන්න</translation> @@ -2529,6 +2530,7 @@ <translation id="3341699307020049241">වැරදි රහස් අංකය. ඔබට ප්රයත්න <ph name="RETRIES" /> ක් ඉතිරිව ඇත.</translation> <translation id="3341703758641437857">ගොනු URL වෙත ප්රවේශයට ඉඩ දෙන්න</translation> <translation id="3342361181740736773">"<ph name="TRIGGERING_EXTENSION_NAME" />" මෙම දිගුව ඉවත් කිරීමට කැමතියි.</translation> +<translation id="3343977377045378693">පිහිටුවීම සිදු කිරීම</translation> <translation id="3345135638360864351">මෙම අඩවියේ පිවිසුම් ඉල්ලීම <ph name="NAME" /> වෙත යැවීමට නොහැක. කරුණාකර නැවත උත්සහ කරන්න.</translation> <translation id="3345634917232014253">ආරක්ෂක පරීක්ෂාව මොහොතකයට පෙර ධාවන විය</translation> <translation id="3345886924813989455">සහය නොදක්වන බ්රව්සරයක් හමුවිය</translation> @@ -2540,6 +2542,7 @@ <translation id="3354768182971982851">Chrome යෙදුම්වල පැරණි අනුවාද 2022 දෙසැම්බරයෙන් පසුව Mac උපාංග මත විවෘත නොවනු ඇත. නව අනුවාදයක් තිබේ දැයි ඔබට පරීක්ෂා කළ හැක.</translation> <translation id="3354972872297836698"><ph name="DEVICE_NAME" /> උපාංගය යුගල කළ නොහැකි විය; නැවත උත්සාහ කිරීමට උපාංගය තෝරන්න</translation> <translation id="3355936511340229503">සම්බන්ධතා දෝෂයකි</translation> +<translation id="3356036636691722598">ඔබේ Chromebook හි ක්රීඩා භුක්ති විඳින්න</translation> <translation id="3356469410714175391">(අතථ්ය කාඩ්පත සබලයි)</translation> <translation id="3356580349448036450">සම්පූර්ණ</translation> <translation id="3359256513598016054">සහතික ප්රතිපත්ති නිරෝධනයන්</translation> @@ -3449,6 +3452,7 @@ <translation id="4211904048067111541">Android යෙදුම් සමග භාවිත කිරීම නවත්වන්න</translation> <translation id="42126664696688958">නිර්යාත කරන්න</translation> <translation id="42137655013211669">මෙම සම්පත වෙත ප්රවේශය සේවාදායකය විසින් තහනම් කර ඇත.</translation> +<translation id="4214192212360095377">දැන් ක්රියාවිරහිත කරන්න</translation> <translation id="4217558091331485702">විවෘත කිරීමට පෙර ස්කෑන් කරන්න</translation> <translation id="4217571870635786043">අනුලේඛනය</translation> <translation id="4218081191298393750">මෙම ටැබය නිහඬ කිරීමට ස්පීකර නිරූපකය ක්ලික් කරන්න</translation> @@ -4342,6 +4346,7 @@ <translation id="5089763948477033443">පැති පැනලයේ ප්රතිප්රමාණ කිරීමේ හසුරුව</translation> <translation id="5090637338841444533">ඔබගේ කැමරා පිහිටුම හඹා යාමට ඉඩ නොදේ</translation> <translation id="5093569275467863761">අප්රසිද්ධ පසුපසට/ඉදිරියට හැඹිලිගත කළ උපරාමුව: <ph name="BACK_FORWARD_CACHE_INCOGNITO_PAGE_URL" /></translation> +<translation id="5094042205195563542">ස්ථාපනය ආරම්භ කිරීම</translation> <translation id="5094176498302660097">ඔබට Files යෙදුමෙන් හෝ වෙනත් යෙදුම්වලින් මෙම යෙදුම සමග සහාය දක්වන ගොනු විවෘත කිරීමට සහ සංස්කරණය කිරීමට හැකිය. පෙරනිමියෙන් මෙම යෙදුම විවෘත කරන්නේ කුමන ගොනුද යන්න පාලනය කිරීමට, <ph name="BEGIN_LINK" />ඔබගේ උපාංගයේ පෙරනිමි යෙදුම් සකසන ආකාරය දැන ගන්න<ph name="END_LINK" />.</translation> <translation id="5094721898978802975">සහය දක්වන දේශීය යෙදුම් හා සන්නිවේදනය කරන්න</translation> <translation id="5097002363526479830">ජාලයට සම්බන්ධ විය නොහැකි විය '<ph name="NAME" />': <ph name="DETAILS" /></translation> @@ -6353,6 +6358,7 @@ <translation id="7014174261166285193">ස්ථාපනය අසමත් විය.</translation> <translation id="7014480873681694324">උද්දීපනය ඉවත් කරන්න</translation> <translation id="7014741021609395734">විශාලන මට්ටම</translation> +<translation id="7014961128696979283">Steam දියත් කරන්න</translation> <translation id="7015088858756332848">Chromebook හි Steam දියත් කිරීමට නොහැකි විය. නැවත උත්සාහ කරන්න</translation> <translation id="7017004637493394352">නැවත "Ok Google" පවසන්න</translation> <translation id="7017219178341817193">නව පිටුවක් එක් කරන්න</translation> @@ -6744,6 +6750,7 @@ <translation id="7423425410216218516">මිනිත්තු <ph name="MINUTES" />ක් සඳහා දෘශ්යතාව ක්රියාත්මකයි</translation> <translation id="7423513079490750513"><ph name="INPUT_METHOD_NAME" /> ඉවත් කරන්න</translation> <translation id="7423807071740419372"><ph name="APP_NAME" /> හට ධාවන කිරීමට අවසරය අවශ්යයි</translation> +<translation id="7424153922653300265">බලශක්ති සුරැකුම ක්රියාත්මකයි</translation> <translation id="7424818322350938336">ජාලය එක් කරන ලදි</translation> <translation id="7427315069950454694">අද දිනය සඳහා ඔබගේ මතක</translation> <translation id="7427348830195639090">පසුබිම් පිටුව: <ph name="BACKGROUND_PAGE_URL" /></translation> @@ -7980,6 +7987,7 @@ <translation id="859246725979739260">මෙම අඩවිය ඔබගේ ස්ථානයට පිවිසීමෙන් අවහිර කරනු ලැබ ඇත.</translation> <translation id="8593121833493516339">භාවිත සහ දෝෂ නිර්ණ දත්ත යවන්න. ස්වයංක්රියව රෝග විනිශ්චය, උපාංග සහ යෙදුම් භාවිත දත්ත Google වෙත යැවීමෙන් ඔබගේ දරුවාගේ Android අත්දැකීම වැඩි දියුණු කර ගැනීමට උපකාරී වන්න. මෙය ඔබේ දරුවා හඳුනා ගැනීමට භාවිත නොකෙරෙන අතර, පද්ධති සහ යෙදුම් ස්ථායිතාවට සහ අනෙකුත් වැඩිදියුණු කිරීම්වලට උදවු කරයි. සමහර එකතු කළ දත්ත Google යෙදුම්වලට සහ Android සංවර්ධකයින් වැනි හවුල්කරුවන්ට ද උදවු කරති. ඔබේ දරුවා සඳහා අමතර වෙබ් සහ යෙදුම් ක්රියාකාරකම සක්රීය කර තිබේ නම්, මෙම දත්ත ඔවුන්ගේ Google ගිණුමට සුරැකිය හැක. <ph name="BEGIN_LINK1" />තවත් දැන ගන්න<ph name="END_LINK1" /></translation> <translation id="8596540852772265699">සැකසුම් ගොනු</translation> +<translation id="8597404194697561297">Chromebook හි Steam වෙත සාදරයෙන් පිළිගනිමු</translation> <translation id="8597845839771543242">වත්කම් හැඩසවිය:</translation> <translation id="8599681327221583254">ප්රතිපත්ති එකක් හෝ කිහිපයක් නිවැරදිව වින්යාස කර නොමැත. කරුණාකර ඔබගේ පරිපාලක සම්බන්ධ කර ගන්න</translation> <translation id="8599864823732014237">ව්යවසාය ලියාපදිංචිය මඟ හරින්න ද?</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb index d73c522..eb95ebd 100644 --- a/chrome/app/resources/generated_resources_sk.xtb +++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -2388,6 +2388,7 @@ <translation id="3188465121994729530">Kĺzavý priemer</translation> <translation id="3189187154924005138">Veľký kurzor</translation> <translation id="3190558889382726167">Heslo bolo uložené</translation> +<translation id="3192589799003798742">Steam sa nastavuje v Chromebooku</translation> <translation id="3192947282887913208">Zvukové súbory</translation> <translation id="3193695589337931419">Utility na zhromažďovanie signálov systému</translation> <translation id="3194786596445804250">Zobraziť podrobnosti o blokovaní súborov cookie tretích strán</translation> @@ -2527,6 +2528,7 @@ <translation id="3341699307020049241">Nesprávny PIN. Zostáva niekoľko pokusov (<ph name="RETRIES" />).</translation> <translation id="3341703758641437857">Povoliť prístup k webovým adresám súboru</translation> <translation id="3342361181740736773">„<ph name="TRIGGERING_EXTENSION_NAME" />“ chce toto rozšírenie odstrániť.</translation> +<translation id="3343977377045378693">Vykonáva sa nastavenie</translation> <translation id="3345135638360864351">Vašu žiadosť o prístup k týmto webovým stránkam sa používateľovi <ph name="NAME" /> neporadilo odoslať. Skúste to neskôr.</translation> <translation id="3345634917232014253">Kontrola bezpečnosti prebehla pred chvíľou</translation> <translation id="3345886924813989455">Nenašiel sa žiadny podporovaný prehliadač</translation> @@ -2538,6 +2540,7 @@ <translation id="3354768182971982851">Staré verzie aplikácií pre Chrome sa po decembri 2022 nebudú dať otvoriť v zariadeniach so systémom Mac. Môžete skontrolovať, či je k dispozícii nová verzia.</translation> <translation id="3354972872297836698">Zariadenie <ph name="DEVICE_NAME" /> sa nepodarilo spárovať. Ak to chcete skúsiť znova, vyberte zariadenie.</translation> <translation id="3355936511340229503">Chyba pripojenia</translation> +<translation id="3356036636691722598">Vychutnajte si hry v Chromebooku</translation> <translation id="3356469410714175391">(Virtuálna karta je povolená)</translation> <translation id="3356580349448036450">Dokončené</translation> <translation id="3359256513598016054">Obmedzenia certifikačnej politiky</translation> @@ -3446,6 +3449,7 @@ <translation id="4211904048067111541">Prestať používať s aplikáciami pre Android</translation> <translation id="42126664696688958">Exportovať</translation> <translation id="42137655013211669">Server zakázal prístup k tomuto zdroju</translation> +<translation id="4214192212360095377">Vypnúť</translation> <translation id="4217558091331485702">Pred otvorením skontrolovať</translation> <translation id="4217571870635786043">Diktovanie</translation> <translation id="4218081191298393750">Ak chcete vypnúť zvuk tejto karty, kliknite na ikonu reproduktora</translation> @@ -4339,6 +4343,7 @@ <translation id="5089763948477033443">Rukoväť na zmenu veľkosti bočného panela</translation> <translation id="5090637338841444533">Nemôže sledovať pozíciu vašej kamery</translation> <translation id="5093569275467863761">Podrám v režime inkognito v spätnej vyrovnávacej pamäti: <ph name="BACK_FORWARD_CACHE_INCOGNITO_PAGE_URL" /></translation> +<translation id="5094042205195563542">Začína sa inštalácia</translation> <translation id="5094176498302660097">Pomocou tejto aplikácie môžete otvárať a upravovať podporované súbory z aplikácie Súbory alebo iných. Ak chcete ovládať, ktoré súbory predvolene otvoria túto aplikáciu, prečítajte si, <ph name="BEGIN_LINK" />ako v zariadení nastaviť predvolené aplikácie<ph name="END_LINK" />.</translation> <translation id="5094721898978802975">Komunikovať so spolupracujúcimi natívnymi aplikáciami</translation> <translation id="5097002363526479830">K sieti „<ph name="NAME" />“ sa nepodarilo pripojiť: <ph name="DETAILS" /></translation> @@ -6353,6 +6358,7 @@ <translation id="7014174261166285193">Inštalácia zlyhala.</translation> <translation id="7014480873681694324">Odstrániť zvýraznenie</translation> <translation id="7014741021609395734">Úroveň lupy</translation> +<translation id="7014961128696979283">Spustiť aplikáciu Steam</translation> <translation id="7015088858756332848">Steam sa v Chromebooku nepodarilo spustiť. Skúste to znova.</translation> <translation id="7017004637493394352">Povedzte „Ok Google“ ešte raz</translation> <translation id="7017219178341817193">Pridať novú stránku</translation> @@ -6744,6 +6750,7 @@ <translation id="7423425410216218516">Viditeľnosť je zapnutá na <ph name="MINUTES" /> min.</translation> <translation id="7423513079490750513">Odstrániť <ph name="INPUT_METHOD_NAME" /></translation> <translation id="7423807071740419372"><ph name="APP_NAME" /> potrebuje na spustenie povolenie</translation> +<translation id="7424153922653300265">Šetrič energie je zapnutý</translation> <translation id="7424818322350938336">Bola pridaná sieť</translation> <translation id="7427315069950454694">vaše dnešné spomienky</translation> <translation id="7427348830195639090">Stránka na pozadí: <ph name="BACKGROUND_PAGE_URL" /></translation> @@ -7982,6 +7989,7 @@ <translation id="859246725979739260">Tento web má blokovaný prístup k vašej polohe.</translation> <translation id="8593121833493516339">Odosielať údaje o využití a diagnostiky. Pomôžte zlepšiť prostredie Androidu svojho dieťaťa automatickým odosielaním diagnostík a údajov o používaní zariadenia a aplikácií do Googlu. Nebudú slúžiť na zistenie totožnosti vášho dieťaťa. Pomôžu zvýšiť stabilitu systému a aplikácií a poskytovať ďalšie vylepšenia. Niektoré súhrnné údaje tiež pomôžu aplikáciám Google a partnerom, ako napríklad vývojárom Androidu. Ak pre dieťa aktivujete dodatočnú aktivitu na internete a v aplikáciách, tieto údaje sa môžu uložiť do jeho účtu Google. <ph name="BEGIN_LINK1" />Ďalšie informácie<ph name="END_LINK1" /></translation> <translation id="8596540852772265699">Vlastné súbory</translation> +<translation id="8597404194697561297">Víta vás Steam v Chromebooku</translation> <translation id="8597845839771543242">Formát vlastníctva:</translation> <translation id="8599681327221583254">Minimálne jedno pravidlo nie je nakonfigurované správne. Kontaktujte správcu.</translation> <translation id="8599864823732014237">Chcete registráciu podniku preskočiť?</translation>
diff --git a/chrome/app/resources/generated_resources_zu.xtb b/chrome/app/resources/generated_resources_zu.xtb index 3f16ee1..123d18d 100644 --- a/chrome/app/resources/generated_resources_zu.xtb +++ b/chrome/app/resources/generated_resources_zu.xtb
@@ -2402,6 +2402,7 @@ <translation id="3188465121994729530">Ihambisa okumaphakathi</translation> <translation id="3189187154924005138">I-cursor enkulu</translation> <translation id="3190558889382726167">Iphasiwedi igciniwe</translation> +<translation id="3192589799003798742">Isetha i-Steam ku-Chromebook</translation> <translation id="3192947282887913208">Amafayela womsindo</translation> <translation id="3193695589337931419">Amasignali Asetshenziswayo Wesistimu</translation> <translation id="3194786596445804250">Bonisa imininingwane emayelana nokuvimbela amakhukhi wezinkampani ezingahlangene ngqo</translation> @@ -2541,6 +2542,7 @@ <translation id="3341699307020049241">Iphinikhodi engalungile. Unemizamo engu-<ph name="RETRIES" /> esele.</translation> <translation id="3341703758641437857">Vumela ukufinyelela kuma-URL wefayela</translation> <translation id="3342361181740736773">I-"<ph name="TRIGGERING_EXTENSION_NAME" />" ingathanda ukususa lesi sandiso.</translation> +<translation id="3343977377045378693">Yenza ukusetha</translation> <translation id="3345135638360864351">Isicelo sakho sokufinyelela leli sayithi asikwazanga ukuthunyelwa ku-<ph name="NAME" />. Sicela uzame futhi.</translation> <translation id="3345634917232014253">Ukuhlolwa kokuphepha kwenziwe esikhathini esedlule</translation> <translation id="3345886924813989455">Asikho isiphequluli esisekelwe esitholiwe</translation> @@ -2552,6 +2554,7 @@ <translation id="3354768182971982851">Izinhlobo ezindala zezinhlelo zokusebenza ze-Chrome ngeke zivulwe kumadivayisi e-Mac ngemva kukaDisemba 2022. Ungahlola ukuthi lukhona yini uhlobo olusha olutholakalayo.</translation> <translation id="3354972872297836698">Ayikwazanga ukubhangqa ku-<ph name="DEVICE_NAME" />; khetha idivayisi ukuzama futhi</translation> <translation id="3355936511340229503">Iphutha lokuxhumeka</translation> +<translation id="3356036636691722598">Jabulela amageyimu ku-Chromebook yakho</translation> <translation id="3356469410714175391">(Ikhadi elibonakalayo linikwe amandla)</translation> <translation id="3356580349448036450">Qedile</translation> <translation id="3359256513598016054">Izithiyo zenqubomgomo yesitifiketi</translation> @@ -3459,6 +3462,7 @@ <translation id="4211904048067111541">Yeka ukusebenzisa nama-app e-Android</translation> <translation id="42126664696688958">Thumela kwelinye izwe</translation> <translation id="42137655013211669">Ukufinyelela kule nsiza kuye kwanqatshelwa yiseva.</translation> +<translation id="4214192212360095377">Vala Manje</translation> <translation id="4217558091331485702">Skena ngaphambi kokuvula</translation> <translation id="4217571870635786043">Ukuthola</translation> <translation id="4218081191298393750">Chofoza isithonjana sisipikha ukuze uthulise le thebhu.</translation> @@ -4353,6 +4357,7 @@ <translation id="5089763948477033443">Isibambo Sokushintsha Usayizi Sephaneli Eseceleni</translation> <translation id="5090637338841444533">Ayivumelekile ukulandelela indawo yekhamera yakho</translation> <translation id="5093569275467863761">I-Subframe Yenqolobane Yasemuva-Phambili ye-Incognito: <ph name="BACK_FORWARD_CACHE_INCOGNITO_PAGE_URL" /></translation> +<translation id="5094042205195563542">Iqala ukufaka</translation> <translation id="5094176498302660097">Ungavula futhi uhlele amafayela asekelwayo ngale-app kusukela ku-app Yamafayela noma amanye ama-app. Ukuze ulawule ukuthi yimaphi amafayela avula le-app ngokuzenzakalelayo, <ph name="BEGIN_LINK" />funda indlela yokusetha ama-app azenzakalelayo kudivayisi yakho<ph name="END_LINK" />.</translation> <translation id="5094721898978802975">Xhumana nezinhlelo zokusebenza zomdabu ezisebenzisanayo</translation> <translation id="5097002363526479830">Ihlulekile ukuxhumeka kunethiwekhi ye-'<ph name="NAME" />': <ph name="DETAILS" /></translation> @@ -6368,6 +6373,7 @@ <translation id="7014174261166285193">Ukufakwa kuhlulekile.</translation> <translation id="7014480873681694324">Susa Ukugqama</translation> <translation id="7014741021609395734">Ileveli yokusondeza</translation> +<translation id="7014961128696979283">Qalisa i-Steam</translation> <translation id="7015088858756332848">Ayikwazanga ukuqalisa i-Steam ku-Chromebook. Sicela uzame futhi</translation> <translation id="7017004637493394352">Ithi "Ok Google" futhi</translation> <translation id="7017219178341817193">Engeza ikhasi elisha</translation> @@ -6759,6 +6765,7 @@ <translation id="7423425410216218516">Ukubonakala kuvulwe imizuzu engu-<ph name="MINUTES" /></translation> <translation id="7423513079490750513">Susa i-<ph name="INPUT_METHOD_NAME" /></translation> <translation id="7423807071740419372">I-<ph name="APP_NAME" /> idinga imvume yokusebenza</translation> +<translation id="7424153922653300265">Isilondolozi Samandla Sivuliwe</translation> <translation id="7424818322350938336">Inethiwekhi yengeziwe</translation> <translation id="7427315069950454694">izinkumbulo zakho zanamuhla</translation> <translation id="7427348830195639090">Ikhasi elingemuva: <ph name="BACKGROUND_PAGE_URL" /></translation> @@ -7995,6 +8002,7 @@ <translation id="859246725979739260">Leli sayithi livinjiwe ekufinyeleleni indawo yakho.</translation> <translation id="8593121833493516339">Thumela idatha yokusetshenziswa neyokuxilonga. Siza ukuthuthukisa umuzwa we-Android wengane yakho ngokuthumela ngokuzenzakalela idatha yokuxilonga, yedivayisi, neyokusetshenziswa kohlelo lokusebenza ku-Google. Lokhu ngeke kusetshenziselwe ukukhomba ingane yakho futhi kuzosiza ukuzinza kwesistimu nokohlelo lokusebenza nokunye ukuthuthukiswa. Enye idatha izophinda isize izinhlelo zokusebenza ze-Google nozakwethu, abafana nonjiniyela be-Android. Uma umsebenzi ongeziwe wewebhu nowohlelo lokusebenza uvulelwe ingane yakho, le datha ingalondolozwa ku-akhawunti yakhe ye-Google. <ph name="BEGIN_LINK1" />Funda kabanzi<ph name="END_LINK1" /></translation> <translation id="8596540852772265699">Amafayela wangokwezifiso</translation> +<translation id="8597404194697561297">Siyakwamukela ku-Steam ku-Chromebook</translation> <translation id="8597845839771543242">Ifomethi yendawo:</translation> <translation id="8599681327221583254">Inqubomgomo eyodwa noma ngaphezulu ayilungiselelwe kahle. Sicela uxhumane nomlawuli wakho</translation> <translation id="8599864823732014237">Yeqa ukubhaliswa kwebhizinisi?</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ca.xtb b/chrome/app/resources/google_chrome_strings_ca.xtb index b026ee1..4c2431d 100644 --- a/chrome/app/resources/google_chrome_strings_ca.xtb +++ b/chrome/app/resources/google_chrome_strings_ca.xtb
@@ -87,7 +87,7 @@ <translation id="2586406160782125153">Amb aquesta acció, se suprimiran les teves dades de navegació d'aquest dispositiu. Per recuperar les teves dades més endavant, inicia la sessió a Chrome com a <ph name="USER_EMAIL" />.</translation> <translation id="2597976513418770460">Obtén el contingut del teu navegador Chrome del compte <ph name="ACCOUNT_EMAIL" /></translation> <translation id="2622559029861875898">Chrome no pot cercar actualitzacions. Comprova la connexió a Internet.</translation> -<translation id="2645435784669275700">Chrome OS</translation> +<translation id="2645435784669275700">ChromeOS</translation> <translation id="2652691236519827073">Obre l'enllaç en una pes&tanya nova a Chrome</translation> <translation id="2665296953892887393">Ajudeu a millorar Google Chrome; envieu informes d'error i <ph name="UMA_LINK" /> a Google.</translation> <translation id="2689103672227170538">Aquesta extensió ha canviat la pàgina que es mostra quan inicieu Chrome.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_da.xtb b/chrome/app/resources/google_chrome_strings_da.xtb index 3bdad7a4..dd1b761 100644 --- a/chrome/app/resources/google_chrome_strings_da.xtb +++ b/chrome/app/resources/google_chrome_strings_da.xtb
@@ -10,13 +10,13 @@ <translation id="110877069173485804">Dette er din Chrome-browser</translation> <translation id="1125124144982679672">Hvem bruger Chrome?</translation> <translation id="1142745911746664600">Chrome kan ikke opdateres</translation> -<translation id="1152920704813762236">Om Chrome OS</translation> +<translation id="1152920704813762236">Om ChromeOS</translation> <translation id="1154147086299354128">Åbn i Chr&ome</translation> <translation id="1203500561924088507">Tak for installationen. Du skal genstarte browseren, før du bruger <ph name="BUNDLE_NAME" />.</translation> <translation id="1278833599417554002">Genstart og opdater &Chrome</translation> <translation id="1302523850133262269">Vent, mens Chrome installerer de nyeste systemopdateringer.</translation> <translation id="1335640173511558774"><ph name="MANAGER" /> kræver, at du læser og accepterer følgende servicevilkår, inden du bruger denne enhed. Disse vilkår udvider, ændrer eller begrænser på ingen måde vilkårene for Google ChromeOS Flex.</translation> -<translation id="1363996462118479832">Chrome OS kunne ikke synkronisere dine data på grund af en fejl under login.</translation> +<translation id="1363996462118479832">ChromeOS kunne ikke synkronisere dine data på grund af en fejl under login.</translation> <translation id="137466361146087520">Google Chrome beta</translation> <translation id="1399397803214730675">Denne computer har allerede en nyere version af Google Chrome. Hvis programmet ikke virker, skal du afinstallere Google Chrome og prøve igen.</translation> <translation id="139993653570221430">Du kan til enhver tid ombestemme dig og fravælge dette i Chrome-indstillingerne. Prøveperioderne kører sideløbende med den aktuelle visning af annoncer, så ændringerne kan ikke ses med det samme.</translation> @@ -24,7 +24,7 @@ <translation id="1507198376417198979">Tilpas din nye Chrome-profil</translation> <translation id="1516530951338665275">Google Chrome skal have adgang til Bluetooth for at fortsætte parringen. <ph name="IDS_BLUETOOTH_DEVICE_CHOOSER_AUTHORIZE_BLUETOOTH_LINK" /></translation> -<translation id="1547295885616600893">Chrome OS er lavet ved hjælp af <ph name="BEGIN_LINK_CROS_OSS" />open source-software<ph name="END_LINK_CROS_OSS" />.</translation> +<translation id="1547295885616600893">ChromeOS er lavet ved hjælp af <ph name="BEGIN_LINK_CROS_OSS" />open source-software<ph name="END_LINK_CROS_OSS" />.</translation> <translation id="1553358976309200471">Opdater Chrome</translation> <translation id="1583073672411044740"><ph name="EXISTING_USER" /> er allerede logget ind på denne Chrome-profil. Denne handling vil oprette en ny Chrome-profil til <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="1587223624401073077">Google Chrome bruger dit kamera.</translation> @@ -62,7 +62,7 @@ <translation id="2121284319307530122">Genstart og opdater &Chrome</translation> <translation id="2123055963409958220">Vær med til at gøre Chrome bedre ved at rapportere de <ph name="BEGIN_LINK" />aktuelle indstillinger<ph name="END_LINK" />.</translation> <translation id="2131230230468101642">Vi sletter automatisk de interesser, der er ældre end 4 uger, for at beskytte dine personlige oplysninger Mens du surfer, kan en interesse vises på listen igen. Du kan også fjerne interesser, som du ikke vil have, at Chrome skal tage med i betragtning.</translation> -<translation id="2139300032719313227">Genstart Chrome OS</translation> +<translation id="2139300032719313227">Genstart ChromeOS</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> @@ -75,7 +75,7 @@ <translation id="234869673307233423">Chrome kan ikke tjekke dine adgangskoder. Prøv igen senere.</translation> <translation id="235650106824528204">Alle Chrome-data, der genereres ved brug af denne profil (f.eks. oprettelse af bogmærker, historik, adgangskoder og andre indstillinger) kan fjernes af arbejdsprofilens administrator. <ph name="LEARN_MORE" /></translation> <translation id="2359808026110333948">Fortsæt</translation> -<translation id="2401189691232800402">Chrome OS-system</translation> +<translation id="2401189691232800402">ChromeOS-system</translation> <translation id="2467438592969358367">Google Chrome anmoder om at eksportere dine adgangskoder. Angiv din Windows-adgangskode for at tillade dette.</translation> <translation id="2485422356828889247">Afinstaller</translation> <translation id="2494974097748878569">Google Assistent i Chrome</translation> @@ -87,7 +87,7 @@ <translation id="2586406160782125153">Denne handling sletter dine browserdata på denne enhed. Hvis du senere vil hente dine data igen, skal du logge ind på Chrome som <ph name="USER_EMAIL" />.</translation> <translation id="2597976513418770460">Få adgang til ting fra din Chrome-browser via <ph name="ACCOUNT_EMAIL" /></translation> <translation id="2622559029861875898">Chrome kan ikke søge efter opdateringer. Prøv at tjekke din internetforbindelse.</translation> -<translation id="2645435784669275700">Chrome OS</translation> +<translation id="2645435784669275700">ChromeOS</translation> <translation id="2652691236519827073">Åbn linket i en ny Chrome-&fane</translation> <translation id="2665296953892887393">Vær med til at gøre Google Chrome bedre ved at sende fejlrapporter og <ph name="UMA_LINK" /> til Google</translation> <translation id="2689103672227170538">Denne udvidelse har ændret din startside i Chrome.</translation> @@ -133,7 +133,7 @@ <translation id="3434246496373299699">Chrome kan tjekke dine adgangskoder, når du er logget ind med din Google-konto</translation> <translation id="3451115285585441894">Føjer til Chrome...</translation> <translation id="345171907106878721">Tilføj dig selv i Chrome</translation> -<translation id="3453763134178591239">Vilkår for Chrome OS</translation> +<translation id="3453763134178591239">Vilkår for ChromeOS</translation> <translation id="34857402635545079">Ryd også data fra Chrome (<ph name="URL" />)</translation> <translation id="3503306920980160878">Chrome skal have adgang til din lokation for at dele din lokation med dette website</translation> <translation id="3533694711092285624">Der er ingen gemte adgangskoder. Chrome kan tjekke dine adgangskoder, når du gemmer dem.</translation> @@ -143,21 +143,21 @@ <translation id="3596080736082218006">{COUNT,plural, =0{Din administrator kræver, at du genstarter Chrome for at anvende en opdatering}=1{Din administrator kræver, at du genstarter Chrome for at anvende en opdatering. Dit inkognitovindue åbnes ikke igen.}one{Din administrator kræver, at du genstarter Chrome for at anvende en opdatering. # inkognitovindue åbnes ikke igen.}other{Din administrator kræver, at du genstarter Chrome for at anvende en opdatering. Dine # inkognitovinduer åbnes ikke igen.}}</translation> <translation id="3622797965165704966">Nu er det blevet nemmere at bruge Chrome med din Google-konto og på delte computere.</translation> <translation id="3673813398384385993">Chrome har registreret malware i "<ph name="EXTENSION_NAME" />"</translation> -<translation id="3703994572283698466">Chrome OS leveres ved hjælp af <ph name="BEGIN_LINK_CROS_OSS" />open source-software<ph name="END_LINK_CROS_OSS" />. Det samme gælder for <ph name="BEGIN_LINK_LINUX_OSS" />Linux-udviklingsmiljøet<ph name="END_LINK_LINUX_OSS" />.</translation> +<translation id="3703994572283698466">ChromeOS leveres ved hjælp af <ph name="BEGIN_LINK_CROS_OSS" />open source-software<ph name="END_LINK_CROS_OSS" />. Det samme gælder for <ph name="BEGIN_LINK_LINUX_OSS" />Linux-udviklingsmiljøet<ph name="END_LINK_LINUX_OSS" />.</translation> <translation id="3716540481907974026">ChromeOS Flex-version</translation> <translation id="3718181793972440140">Denne handling sletter ét element på denne enhed. Hvis du senere vil hente dine data igen, skal du logge ind på Chrome som <ph name="USER_EMAIL" />.</translation> <translation id="3735758079232443276">Udvidelsen "<ph name="EXTENSION_NAME" />" har ændret din startside i Chrome.</translation> -<translation id="3744202345691150878">Få hjælp til Chrome OS</translation> +<translation id="3744202345691150878">Få hjælp til ChromeOS</translation> <translation id="3780814664026482060">Chrome – <ph name="PAGE_TITLE" /></translation> <translation id="3785324443014631273">ChromeOS Flex kunne ikke synkronisere dine data på grund af en fejl under login.</translation> -<translation id="3795971588916395511">Google Chrome OS</translation> +<translation id="3795971588916395511">Google ChromeOS</translation> <translation id="3835168907083856002">Denne handling vil oprette en ny Chrome-profil til <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="386202838227397562">Luk alle Google Chrome-vinduer, og prøv igen.</translation> <translation id="3865754807470779944">Chrome version <ph name="PRODUCT_VERSION" /> er installeret</translation> <translation id="3873044882194371212">Åbn linket i et inko&gnitovindue i Chrome</translation> <translation id="3889417619312448367">Afinstaller Google Chrome</translation> <translation id="3999683152997576765">Du kan se og fjerne interesseområder, som websites bruger til at vise annoncer. Chrome estimerer dine interesser på baggrund af din seneste browserhistorik.</translation> -<translation id="4035053306113201399">Chrome OS skal genstartes, før opdateringen kan anvendes.</translation> +<translation id="4035053306113201399">ChromeOS skal genstartes, før opdateringen kan anvendes.</translation> <translation id="4050175100176540509">Vigtige sikkerhedsforbedringer og nye funktioner er tilgængelige i den seneste version.</translation> <translation id="4053720452172726777">Tilpas Google Chrome</translation> <translation id="4106587138345390261">Chrome afprøver nye funktioner, der giver websites mulighed for at levere den samme browseroplevelse uden at bruge så mange af dine oplysninger</translation> @@ -206,7 +206,7 @@ <translation id="495931528404527476">I Chrome</translation> <translation id="4969674060580488087">ChromeOS Flex kunne ikke synkronisere dine data, da loginoplysningerne for din konto er forældede.</translation> <translation id="4970761609246024540">Velkommen til Chrome-profiler</translation> -<translation id="4970880042055371251">Chrome OS-version</translation> +<translation id="4970880042055371251">ChromeOS-version</translation> <translation id="4970947549776831107">Chrome har blokeret denne fil, fordi denne type fil er skadelig</translation> <translation id="4990567037958725628">Google Chrome Canary</translation> <translation id="5037581483200764584">Hvis du vil have fremtidige Google Chrome-opdateringer, skal du have macOS 10.13 eller nyere. Denne computer anvender OS X 10.11.</translation> @@ -217,9 +217,9 @@ <translation id="5170938038195470297">Din profil kan ikke bruges, fordi den stammer fra en nyere version af Google Chrome. Nogle funktioner er muligvis ikke tilgængelige. Angiv en anden profilmappe, eller brug en nyere version af Chrome.</translation> <translation id="521447420733633466">Hvis du deler en enhed, kan venner og familie browse individuelt og konfigurere Chrome hver især</translation> <translation id="5251420635869119124">Gæster kan bruge Chrome uden at efterlade noget.</translation> -<translation id="5334309298019785904">Chrome OS kunne ikke synkronisere dine data, fordi synkronisering ikke er tilgængelig for dit domæne.</translation> +<translation id="5334309298019785904">ChromeOS kunne ikke synkronisere dine data, fordi synkronisering ikke er tilgængelig for dit domæne.</translation> <translation id="5334487786912937552">Chrome skal have adgangstilladelse til lagerplads for at downloade filer</translation> -<translation id="5337648990166757586">Valgfrit: Vær med til at forbedre funktioner og ydeevne i Chrome OS ved automatisk at sende diagnostik og brugsdata til Google.</translation> +<translation id="5337648990166757586">Valgfrit: Vær med til at forbedre funktioner og ydeevne i ChromeOS ved automatisk at sende diagnostik og brugsdata til Google.</translation> <translation id="5357889879764279201">Få hjælp til ChromeOS Flex</translation> <translation id="5386244825306882791">Den styrer også, hvilken side der vises, når du åbner Chrome eller søger via omnifeltet.</translation> <translation id="5394833366792865639">Del en Chrome-fane</translation> @@ -280,7 +280,7 @@ <translation id="683440813066116847">Indgående regel for Google Chrome Canary om at tillade mDNS-trafik.</translation> <translation id="6881299373831449287">Opdaterer Chrome</translation> <translation id="6885412569789873916">Apps i Chrome beta</translation> -<translation id="6933858244219479645">Chrome OS-system</translation> +<translation id="6933858244219479645">ChromeOS-system</translation> <translation id="6943584222992551122">Brugerens browserdata slettes fra denne enhed. Log ind på Chrome som <ph name="USER_EMAIL" /> for at gendanne dataene.</translation> <translation id="6967962315388095737">Indgående regel for Google Chrome beta om at tillade mDNS-trafik.</translation> <translation id="6989339256997917931">Google Chrome er blevet opdateret, men du har ikke brugt den i 30 dage.</translation> @@ -316,7 +316,7 @@ <translation id="7583399374488819119">Installationsprogram til <ph name="COMPANY_NAME" /></translation> <translation id="7606334485649076285">Google ChromeOS Flex</translation> <translation id="7626032353295482388">Velkommen til Chrome</translation> -<translation id="7626072681686626474"><ph name="MANAGER" /> kræver, at du læser og accepterer følgende servicevilkår, inden du bruger denne enhed. Disse vilkår udvider, ændrer eller begrænser på ingen måde vilkårene for Google Chrome OS.</translation> +<translation id="7626072681686626474"><ph name="MANAGER" /> kræver, at du læser og accepterer følgende servicevilkår, inden du bruger denne enhed. Disse vilkår udvider, ændrer eller begrænser på ingen måde vilkårene for Google ChromeOS.</translation> <translation id="7629695634924605473">Chrome giver dig besked, hvis dine adgangskoder kompromitteres</translation> <translation id="7641148173327520642">Din systemadministrator har konfigureret Google Chrome til at åbne <ph name="ALTERNATIVE_BROWSER_NAME" /> for at få adgang til <ph name="TARGET_URL_HOSTNAME" />.</translation> <translation id="7649070708921625228">Hjælp</translation> @@ -361,7 +361,7 @@ <translation id="8394720698884623075">Webadresser tjekkes i forhold til en liste over usikre websites, der er gemt i Chrome</translation> <translation id="840084489713044809">Google Chrome anmoder om at eksportere dine adgangskoder.</translation> <translation id="8416347857511542594">Få flere oplysninger om annoncetilpasning i Chrome</translation> -<translation id="8418845734693287262">Chrome OS kunne ikke synkronisere dine data, fordi loginoplysningerne til din konto er forældede.</translation> +<translation id="8418845734693287262">ChromeOS kunne ikke synkronisere dine data, fordi loginoplysningerne til din konto er forældede.</translation> <translation id="8433638294851456451">Hvis du vil sende et nummer fra denne enhed til din Android-telefon, skal du logge ind på Chrome på begge enheder.</translation> <translation id="8451192282033883849">Din konto administreres af <ph name="MANAGER_NAME" />. Din administrator kan se og redigere denne Chrome-browserprofil og dens data som f.eks. bogmærker, historik og adgangskoder.</translation> <translation id="8498858610309223613">En særlig sikkerhedsopdatering til Google Chrome blev netop anvendt. Genstart nu, hvorefter vi gendanner dine faner.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_en-GB.xtb b/chrome/app/resources/google_chrome_strings_en-GB.xtb index c9527ed..2404b53b 100644 --- a/chrome/app/resources/google_chrome_strings_en-GB.xtb +++ b/chrome/app/resources/google_chrome_strings_en-GB.xtb
@@ -15,6 +15,7 @@ <translation id="1152920704813762236">About Chrome OS</translation> <translation id="1154147086299354128">&Open in Chrome</translation> <translation id="1203500561924088507">Thanks for installing. You must restart your browser before using <ph name="BUNDLE_NAME" />.</translation> +<translation id="1236866257838264361">You can enjoy the most out of Chrome</translation> <translation id="1278833599417554002">Relaunch to update &Chrome</translation> <translation id="1302523850133262269">Please wait while Chrome installs the latest system updates.</translation> <translation id="1335640173511558774"><ph name="MANAGER" /> requires that you read and accept the following Terms of Service before using this device. These terms do not expand, modify or limit the Google Chrome OS Flex terms.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_mn.xtb b/chrome/app/resources/google_chrome_strings_mn.xtb index 3298eca15..bd10502 100644 --- a/chrome/app/resources/google_chrome_strings_mn.xtb +++ b/chrome/app/resources/google_chrome_strings_mn.xtb
@@ -133,6 +133,7 @@ <translation id="3360895254066713204">Chrome Helper</translation> <translation id="3379938682270551431">{0,plural, =0{Chrome-г одоо дахин ажиллуулж байна}=1{Chrome-г 1 секундийн дотор дахин ажиллуулна}other{Chrome-г # секундийн дотор дахин ажиллуулна}}</translation> <translation id="3396977131400919238">Суулгах явцад үйлдлийн системд алдаа гарлаа. Google Chrome-ыг дахин татаж авна уу.</translation> +<translation id="3426646014273736870">Санах ой хэмнэгч нь Chrome-г илүү хурдан болгосон</translation> <translation id="3428747202529429621">Таныг нэвтэрсэн үед Chrome дээр таны аюулгүй байдлыг хангадаг бөгөөд Google-н бусад апп дахь таны аюулгүй байдлыг сайжруулахын тулд ашиглагдах боломжтой</translation> <translation id="3434246496373299699">Chrome нь таныг Google Бүртгэлээрээ нэвтрэх үед таны нууц үгсийг шалгах боломжтой</translation> <translation id="3451115285585441894">Chrome руу нэмж байна...</translation> @@ -234,6 +235,7 @@ Google Chrome таны тохируулгыг дахин сэргээх боломжгүй байна.</translation> <translation id="5524761631371622910">Туршилтын хугацаанд байгаа бөгөөд Chrome таныг санамсаргүй байдлаар идэвхтэй туршилтын хугацаанд байрлуулсан бол таны хөтчийн түүх доор тооцоолсны дагуу таны хардаг зар болон сонирхолд нөлөөлнө. Таны нууцлалыг хамгаалахын тулд Chrome тодорхойгүй хугацаанд сар бүр таны сонирхлыг устгана.</translation> +<translation id="5530733413481476019">Chrome-г илүү хурдан болгоорой</translation> <translation id="556024056938947818">Google Chrome нууц харуулахыг хичээж байна.</translation> <translation id="5566025111015594046">Google Chrome (mDNS-In)</translation> <translation id="565744775970812598"><ph name="FILE_NAME" /> аюултай байж болзошгүй тул үүнийг Chrome блок хийсэн.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_pt-BR.xtb b/chrome/app/resources/google_chrome_strings_pt-BR.xtb index b971f86..8317444a 100644 --- a/chrome/app/resources/google_chrome_strings_pt-BR.xtb +++ b/chrome/app/resources/google_chrome_strings_pt-BR.xtb
@@ -129,6 +129,7 @@ <translation id="3360895254066713204">Auxiliar do Google Chrome</translation> <translation id="3379938682270551431">{0,plural, =0{O Chrome será reiniciado agora}=1{O Chrome será reiniciado em 1 segundo}one{O Chrome será reiniciado em # segundo}other{O Chrome será reiniciado em # segundos}}</translation> <translation id="3396977131400919238">Ocorreu um erro no sistema operacional durante a instalação. Baixe o Google Chrome novamente.</translation> +<translation id="3426646014273736870">A Economia de memória tornou o Chrome mais rápido</translation> <translation id="3428747202529429621">Protege você no Chrome e pode ser usado para melhorar a segurança em outros apps do Google quando sua conta está conectada</translation> <translation id="3434246496373299699">O Chrome pode verificar suas senhas quando você faz login com sua Conta do Google</translation> <translation id="3451115285585441894">Adicionando ao Google Chrome...</translation> @@ -226,6 +227,7 @@ <translation id="5412485296464121825">Sites podem armazenar informações sobre seus interesses com o Chrome. Por exemplo, se você visitar um site para comprar sapatos de maratona, ele pode definir "maratonas" como um dos seus interesses. Depois, se você visitar outro site para se inscrever em uma maratona, esse site pode mostrar um anúncio de sapatos de corrida com base nos seus interesses.</translation> <translation id="5430073640787465221">Seu arquivo de preferências está corrompido ou é inválido. O Google Chrome não foi capaz de recuperar suas configurações.</translation> <translation id="5524761631371622910">Quando os testes estão ativados e se o Chrome colocou você aleatoriamente em um teste ativo, seu histórico de navegação vai afetar os anúncios que você vê e os interesses estimados abaixo. Para proteger sua privacidade, o Chrome exclui seus interesses mais antigos do que um mês.</translation> +<translation id="5530733413481476019">Deixe o Chrome mais rápido</translation> <translation id="556024056938947818">O Google Chrome está tentando mostrar senhas.</translation> <translation id="5566025111015594046">Google Chrome (mDNS-In)</translation> <translation id="565744775970812598">O arquivo <ph name="FILE_NAME" /> pode ser perigoso. Por isso, ele foi bloqueado pelo Chrome.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ro.xtb b/chrome/app/resources/google_chrome_strings_ro.xtb index 401bb417..14046af 100644 --- a/chrome/app/resources/google_chrome_strings_ro.xtb +++ b/chrome/app/resources/google_chrome_strings_ro.xtb
@@ -128,6 +128,7 @@ <translation id="3360895254066713204">Chrome Helper</translation> <translation id="3379938682270551431">{0,plural, =0{Chrome se va relansa acum}=1{Chrome se va relansa într-o secundă}few{Chrome se va relansa în # secunde}other{Chrome se va relansa în # de secunde}}</translation> <translation id="3396977131400919238">S-a produs o eroare de sistem de operare în timpul instalării. Descarcă din nou Google Chrome.</translation> +<translation id="3426646014273736870">Datorită Economisirii memoriei, Chrome este mai rapid</translation> <translation id="3428747202529429621">Te protejează în Chrome și poate fi folosită pentru a spori securitatea în alte aplicații Google dacă te-ai conectat</translation> <translation id="3434246496373299699">Chrome poate să îți verifice parolele atunci când te conectezi folosind Contul Google</translation> <translation id="3451115285585441894">Se adaugă la Chrome...</translation> @@ -225,6 +226,7 @@ <translation id="5412485296464121825">Site-urile pot stoca informații în Chrome despre interesele tale. De exemplu, dacă accesezi un site ca să cumperi pantofi pentru un maraton, site-ul poate defini interesul tău drept maraton. Mai târziu, dacă accesezi alt site ca să te înscrii într-o cursă, acel site îți poate afișa un anunț pentru pantofi de alergare pe baza intereselor tale.</translation> <translation id="5430073640787465221">Fișierul dvs. de preferințe este fie deteriorat, fie nevalid. Google Chrome nu poate recupera setările dvs.</translation> <translation id="5524761631371622910">În versiunile de încercare și dacă Chrome te-a inclus în mod aleatoriu într-o versiune de încercare activă, istoricul tău de navigare influențează anunțurile pe care le vezi și categoriile de interese estimate de mai jos. Pentru a-ți proteja confidențialitatea, Chrome șterge categoriile de interese în permanență, în fiecare lună.</translation> +<translation id="5530733413481476019">Crește eficiența în Chrome</translation> <translation id="556024056938947818">Google Chrome încearcă să afișeze parolele.</translation> <translation id="5566025111015594046">Google Chrome (mDNS-In)</translation> <translation id="565744775970812598">Este posibil ca <ph name="FILE_NAME" /> să fie periculos, așadar Chrome l-a blocat.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_si.xtb b/chrome/app/resources/google_chrome_strings_si.xtb index cb91aa2..090c76f1 100644 --- a/chrome/app/resources/google_chrome_strings_si.xtb +++ b/chrome/app/resources/google_chrome_strings_si.xtb
@@ -132,6 +132,7 @@ <translation id="3360895254066713204">Chrome සහායක</translation> <translation id="3379938682270551431">{0,plural, =0{Chrome දැන් යළි දියත් වෙයි}=1{Chrome 1 තත්පරයකින් යළි දියත් වෙයි}one{Chrome තත්පර # කින් යළි දියත් වෙයි}other{Chrome තත්පර # කින් යළි දියත් වෙයි}}</translation> <translation id="3396977131400919238">ස්ථාපනය අතරතුර මෙහෙයුම් පද්ධති දෝෂයක් මතුවිය. නැවතත් Google ක්රෝම් බාගෙන උත්සාහ කරන්න.</translation> +<translation id="3426646014273736870">මතක සුරකිනය Chrome වේගවත් කරන ලදි</translation> <translation id="3428747202529429621">ඔබ පුරනය වී සිටින විට Chrome මත ඔබව ආරක්ෂිතව තබා ගන්නා අතර සහ අනෙකුත් Google යෙදුම් තුළ ඔබේ ආරක්ෂාව වැඩිදියුණු කිරීමට භාවිත කළ හැක</translation> <translation id="3434246496373299699">ඔබ ඔබේ Google ගිණුම මඟින් පුරන විට Chrome ඔබේ මුරපද පරීක්ෂා කළ හැක</translation> <translation id="3451115285585441894">Chrome වෙත එක් කරමින්...</translation> @@ -233,6 +234,7 @@ Google Chrome හට ඔබගේ සැකසුම් ප්රතිසාධනය කිරීමට නොහැක.</translation> <translation id="5524761631371622910">අත්හදා බැලීම් ක්රියාත්මක විට සහ Chrome ඔබව අහඹු ලෙස සක්රිය අත්හදා බැලීමක තබා ඇත්නම්, ඔබගේ බ්රවුස් කිරීමේ ඉතිහාසය ඔබ දකින වෙළඳ දැන්වීම් සහ ලැදිකම්වලට පහත තක්සේරු කර ඇති පරිදි බලපායි. ඔබගේ පෞද්ගලිකත්වය ආරක්ෂා කිරීමට, Chrome සෑම මසකම පෙරළෙන පදනම මත ඔබගේ ලැදිකම් මකයි.</translation> +<translation id="5530733413481476019">Chrome වේගවත් කරන්න</translation> <translation id="556024056938947818">Google Chrome මුරපද පෙන්වීමට උත්සහ කරයි.</translation> <translation id="5566025111015594046">Google Chrome (mDNS-In)</translation> <translation id="565744775970812598"><ph name="FILE_NAME" /> අනතුරුදායක විය හැකිය, එම නිසා Chrome එය අවහිර කර ඇත.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sk.xtb b/chrome/app/resources/google_chrome_strings_sk.xtb index 5c8f6ee..57c0fa94 100644 --- a/chrome/app/resources/google_chrome_strings_sk.xtb +++ b/chrome/app/resources/google_chrome_strings_sk.xtb
@@ -131,6 +131,7 @@ <translation id="3360895254066713204">Chrome Helper</translation> <translation id="3379938682270551431">{0,plural, =0{Chrome sa teraz reštartuje}=1{Chrome sa reštartuje o 1 sekundu}few{Chrome sa reštartuje o # sekundy}many{Chrome sa reštartuje o # sekundy}other{Chrome sa reštartuje o # sekúnd}}</translation> <translation id="3396977131400919238">V priebehu inštalácie sa vyskytla chyba operačného systému. Stiahnite prehliadač Google Chrome znova.</translation> +<translation id="3426646014273736870">Šetrič pamäte zrýchlil Chrome</translation> <translation id="3428747202529429621">Chráni vás v Chrome a môže zlepšiť zabezpečenie v ďalších aplikáciách Google, keď sa prihlásite</translation> <translation id="3434246496373299699">Keď sa prihlásite pomocou účtu Google, Chrome môže skontrolovať vaše heslá</translation> <translation id="3451115285585441894">Prebieha pridávanie do prehliadača Chrome...</translation> @@ -232,6 +233,7 @@ Prehliadač Google Chrome nedokáže obnoviť vaše nastavenia.</translation> <translation id="5524761631371622910">Keď sú zapnuté skúšobné obdobia a ak vás Chrome náhodne zapojil do aktívneho skúšobného obdobia, vaša história prehliadania ovplyvňuje zobrazované reklamy a záujmy, ktoré sú odhadnuté nižšie. Chrome priebežne odstraňuje vaše záujmy každý mesiac, aby tak chránil vaše súkromie.</translation> +<translation id="5530733413481476019">Zrýchlite Chrome</translation> <translation id="556024056938947818">Prehliadač Google Chrome sa snaží zobraziť heslá.</translation> <translation id="5566025111015594046">Google Chrome (mDNS-In)</translation> <translation id="565744775970812598">Súbor <ph name="FILE_NAME" /> môže byť nebezpečný, a preto ho Chrome zablokoval.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_zu.xtb b/chrome/app/resources/google_chrome_strings_zu.xtb index 33b6b7c2..0dfbe042 100644 --- a/chrome/app/resources/google_chrome_strings_zu.xtb +++ b/chrome/app/resources/google_chrome_strings_zu.xtb
@@ -133,6 +133,7 @@ <translation id="3360895254066713204">Isisizi se-Chrome</translation> <translation id="3379938682270551431">{0,plural, =0{I-Chrome izoqala kabusha manje}=1{I-Chrome izoqala kabusha kusekhondi elingu-1}one{I-Chrome izoqala kabusha kumasekhondi angu-#}other{I-Chrome izoqala kabusha kumasekhondi angu-#}}</translation> <translation id="3396977131400919238">Iphutha lesistimu yokusebenza livele ngesikhathi sokufakwa. Sicela ulande i-Google Chrome futhi.</translation> +<translation id="3426646014273736870">Isilondolozi Senkumbulo Senze I-Chrome Yashesha</translation> <translation id="3428747202529429621">Kukugcina uphephile ku-Chrome futhi kungase kusetshenziswe ukuthuthukisa ukuvikeleka kwakho kwezinye izinhlelo zokusebenza ze-Google lapho ungene ngemvume</translation> <translation id="3434246496373299699">I-Chrome ingahlola amaphasiwedi akho uma ungena ngemvume nge-Akhawunti yakho ye-Google</translation> <translation id="3451115285585441894">Ingeza ku-Chrome...</translation> @@ -234,6 +235,7 @@ I-Google Chrome ayikwazi ukuthola izilungiselelo zakho.</translation> <translation id="5524761631371622910">Uma izivivinyo zivuliwe futhi i-Chrome ikubeke ngokungahleliwe ekuzameni okusebenzayo, umlando wakho wokubhrawuza uthinta izikhangiso ozibonayo kanye nezinto ozithakaselayo njengoba kusikiselwa ngezansi. Ukuze ivikele ubumfihlo bakho, i-Chrome isula izintshisekelo zakho njalo ngenyanga.</translation> +<translation id="5530733413481476019">Yenza I-Chrome Isheshe</translation> <translation id="556024056938947818">I-Google Chrome izama ukubonisa amaphasiwedi.</translation> <translation id="5566025111015594046">I-Google Chrome (mDNS-In)</translation> <translation id="565744775970812598">I-<ph name="FILE_NAME" /> kungenzeka ibe ingozi, ngakho-ke i-Chrome iyivimbile.</translation>
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index f85421fb..8f3403f 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -5246,7 +5246,7 @@ "//chrome/browser/ui/webui/ash/cloud_upload:mojo_bindings", "//chrome/browser/ui/webui/ash/crostini_installer:mojo_bindings", "//chrome/browser/ui/webui/ash/crostini_upgrader:mojo_bindings", - "//chrome/browser/ui/webui/chromeos/emoji:mojo_bindings", + "//chrome/browser/ui/webui/ash/emoji:mojo_bindings", "//chrome/browser/ui/webui/chromeos/launcher_internals:mojo_bindings", "//chrome/browser/ui/webui/chromeos/manage_mirrorsync:mojo_bindings", "//chrome/browser/ui/webui/chromeos/parent_access:mojo_bindings",
diff --git a/chrome/browser/apps/guest_view/web_view_interactive_browsertest.cc b/chrome/browser/apps/guest_view/web_view_interactive_browsertest.cc index 1cba7c2..fe9c2c9 100644 --- a/chrome/browser/apps/guest_view/web_view_interactive_browsertest.cc +++ b/chrome/browser/apps/guest_view/web_view_interactive_browsertest.cc
@@ -70,6 +70,10 @@ #include "ui/base/test/scoped_fake_nswindow_fullscreen.h" #endif +#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS_ASH) +#include "ui/ozone/buildflags.h" +#endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS_ASH) + using extensions::AppWindow; using extensions::ExtensionsAPIClient; using guest_view::GuestViewBase; @@ -77,6 +81,21 @@ using guest_view::TestGuestViewManager; using guest_view::TestGuestViewManagerFactory; +// The build flag OZONE_PLATFORM_WAYLAND is only available on +// Linux or ChromeOS, so this simplifies the next set of ifdefs. +#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS_ASH) +#if BUILDFLAG(OZONE_PLATFORM_WAYLAND) +#define OZONE_PLATFORM_WAYLAND +#endif // BUILDFLAG(OZONE_PLATFORM_WAYLAND) +#endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS_ASH) + +#if !defined(OZONE_PLATFORM_WAYLAND) && !BUILDFLAG(IS_CHROMEOS_LACROS) +// Some test helpers, like ui_test_utils::SendMouseMoveSync, don't work properly +// on some platforms. Tests that require these helpers need to be skipped for +// these cases. +#define SUPPORTS_SYNC_MOUSE_UTILS +#endif + #if BUILDFLAG(IS_MAC) // This class observes the RenderWidgetHostViewCocoa corresponding to the outer // most WebContents provided for newly added subviews. The added subview @@ -633,10 +652,15 @@ ASSERT_TRUE(move_listener2.WaitUntilSatisfied()); } } +#endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS) -// flaky http://crbug.com/412086 +#if defined(SUPPORTS_SYNC_MOUSE_UTILS) +#define MAYBE_PointerLockFocus PointerLockFocus +#else +#define MAYBE_PointerLockFocus DISABLED_PointerLockFocus +#endif IN_PROC_BROWSER_TEST_F(WebViewPointerLockInteractiveTest, - DISABLED_PointerLockFocus) { + MAYBE_PointerLockFocus) { SetupTest("web_view/pointer_lock_focus", "/extensions/platform_apps/web_view/pointer_lock_focus/guest.html"); @@ -657,8 +681,6 @@ ASSERT_TRUE(unlocked_listener.WaitUntilSatisfied()); } -#endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS) - // Tests that if a <webview> is focused before navigation then the guest starts // off focused. IN_PROC_BROWSER_TEST_F(WebViewFocusInteractiveTest,
diff --git a/chrome/browser/apps/user_type_filter.cc b/chrome/browser/apps/user_type_filter.cc index 9690f79..476ef3c 100644 --- a/chrome/browser/apps/user_type_filter.cc +++ b/chrome/browser/apps/user_type_filter.cc
@@ -36,18 +36,9 @@ bool UserTypeMatchesJsonUserType(const std::string& user_type, const std::string& app_id, - const base::Value* json_root, - const base::ListValue* default_user_types) { - DCHECK(json_root); - - if (!json_root->is_dict()) { - LOG(ERROR) << "Non-dictionary Json is passed to user type filter for " - << app_id << "."; - return false; - } - - const base::Value* value = - json_root->FindKeyOfType(kKeyUserType, base::Value::Type::LIST); + const base::Value::Dict& json_root, + const base::Value::List* default_user_types) { + const base::Value::List* value = json_root.FindList(kKeyUserType); if (!value) { if (!default_user_types) { LOG(ERROR) << "Json has no user type filter for " << app_id << "."; @@ -59,7 +50,7 @@ } bool user_type_match = false; - for (const auto& it : value->GetListDeprecated()) { + for (const auto& it : *value) { if (!it.is_string()) { LOG(ERROR) << "Invalid user type value for " << app_id << "."; return false;
diff --git a/chrome/browser/apps/user_type_filter.h b/chrome/browser/apps/user_type_filter.h index 54b5c3c9..43c243559 100644 --- a/chrome/browser/apps/user_type_filter.h +++ b/chrome/browser/apps/user_type_filter.h
@@ -6,14 +6,10 @@ #define CHROME_BROWSER_APPS_USER_TYPE_FILTER_H_ #include <string> +#include "base/values.h" class Profile; -namespace base { -class Value; -class ListValue; -} // namespace base - namespace apps { extern const char kKeyUserType[]; @@ -41,8 +37,8 @@ // Safe to call on non-UI thread. bool UserTypeMatchesJsonUserType(const std::string& user_type, const std::string& app_id, - const base::Value* json_root, - const base::ListValue* default_user_types); + const base::Value::Dict& json_root, + const base::Value::List* default_user_types); } // namespace apps
diff --git a/chrome/browser/apps/user_type_filter_unittest.cc b/chrome/browser/apps/user_type_filter_unittest.cc index 7c3d71f..d8b3521 100644 --- a/chrome/browser/apps/user_type_filter_unittest.cc +++ b/chrome/browser/apps/user_type_filter_unittest.cc
@@ -20,13 +20,13 @@ namespace { // Helper that simulates Json file with embedded user type filter. -std::unique_ptr<base::DictionaryValue> CreateJsonWithFilter( +base::Value::Dict CreateJsonWithFilter( const std::vector<std::string>& user_types) { - auto root = std::make_unique<base::DictionaryValue>(); - base::ListValue filter; + base::Value::List filter; for (const auto& user_type : user_types) filter.Append(base::Value(user_type)); - root->SetKey(kKeyUserType, std::move(filter)); + base::Value::Dict root; + root.Set(kKeyUserType, std::move(filter)); return root; } @@ -54,17 +54,17 @@ } bool Match(const std::unique_ptr<TestingProfile>& profile, - const std::unique_ptr<base::Value>& json_root) { - return UserTypeMatchesJsonUserType( - DetermineUserType(profile.get()), std::string() /* app_id */, - json_root.get(), nullptr /* default_user_types */); + const base::Value::Dict& json_root) { + return UserTypeMatchesJsonUserType(DetermineUserType(profile.get()), + std::string() /* app_id */, json_root, + nullptr /* default_user_types */); } bool MatchDefault(const std::unique_ptr<TestingProfile>& profile, - const base::ListValue& default_user_types) { - base::DictionaryValue json_root; + const base::Value::List& default_user_types) { + base::Value::Dict json_root; return UserTypeMatchesJsonUserType(DetermineUserType(profile.get()), - std::string() /* app_id */, &json_root, + std::string() /* app_id */, json_root, &default_user_types); } @@ -112,7 +112,7 @@ TEST_F(UserTypeFilterTest, DefaultFilter) { auto profile = CreateProfile(); - base::ListValue default_filter; + base::Value::List default_filter; default_filter.Append(base::Value(kUserTypeUnmanaged)); default_filter.Append(base::Value(kUserTypeGuest));
diff --git a/chrome/browser/ash/chrome_browser_main_parts_ash.cc b/chrome/browser/ash/chrome_browser_main_parts_ash.cc index 44c8c9a..f8bd12e8 100644 --- a/chrome/browser/ash/chrome_browser_main_parts_ash.cc +++ b/chrome/browser/ash/chrome_browser_main_parts_ash.cc
@@ -177,7 +177,7 @@ #include "chrome/browser/ui/ash/image_downloader_impl.h" #include "chrome/browser/ui/ash/keyboard/chrome_keyboard_controller_client.h" #include "chrome/browser/ui/ash/session_controller_client_impl.h" -#include "chrome/browser/ui/webui/chromeos/emoji/emoji_ui.h" +#include "chrome/browser/ui/webui/ash/emoji/emoji_ui.h" #include "chrome/common/channel_info.h" #include "chrome/common/chrome_constants.h" #include "chrome/common/chrome_features.h"
diff --git a/chrome/browser/ash/dbus/vm/vm_applications_service_provider.cc b/chrome/browser/ash/dbus/vm/vm_applications_service_provider.cc index adf0546..08e447d 100644 --- a/chrome/browser/ash/dbus/vm/vm_applications_service_provider.cc +++ b/chrome/browser/ash/dbus/vm/vm_applications_service_provider.cc
@@ -24,8 +24,11 @@ #include "chrome/browser/ash/guest_os/guest_os_terminal.h" #include "chrome/browser/ash/plugin_vm/plugin_vm_features.h" #include "chrome/browser/ash/plugin_vm/plugin_vm_util.h" +#include "chrome/browser/ash/policy/dlp/dlp_files_controller.h" +#include "chrome/browser/chromeos/policy/dlp/dlp_rules_manager.h" #include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/ui/chrome_select_file_policy.h" +#include "chrome/browser/ui/views/select_file_dialog_extension.h" #include "chromeos/ash/components/dbus/cicerone/cicerone_client.h" #include "chromeos/ash/components/dbus/cicerone/cicerone_service.pb.h" #include "chromeos/ash/components/dbus/vm_applications/apps.pb.h" @@ -40,13 +43,13 @@ namespace { struct SelectFileData { - scoped_refptr<ui::SelectFileDialog> dialog; + scoped_refptr<SelectFileDialogExtension> dialog; vm_tools::cicerone::FileSelectedSignal signal; }; } // namespace -VmApplicationsServiceProvider::VmApplicationsServiceProvider() {} +VmApplicationsServiceProvider::VmApplicationsServiceProvider() = default; VmApplicationsServiceProvider::~VmApplicationsServiceProvider() = default; @@ -210,6 +213,7 @@ } std::u16string title = base::UTF8ToUTF16(request.title()); base::FilePath default_path; + SelectFileDialogExtension::Owner owner; if (!request.default_path().empty()) { // Parse as file: URL if possible. std::vector<ui::FileInfo> file_infos = @@ -218,10 +222,12 @@ file_infos.push_back(ui::FileInfo(base::FilePath(request.default_path()), base::FilePath())); } - // Translate to path in host if possible. + // Translate to path in host and DLP component type if possible. ui::EndpointType source = ui::EndpointType::kUnknownVm; if (request.vm_name() == crostini::kCrostiniDefaultVmName) { source = ui::EndpointType::kCrostini; + owner.dialog_caller = policy::DlpFilesController::DlpFileDestination( + policy::DlpRulesManager::Component::kCrostini); } std::vector<base::FilePath> paths = TranslateVMPathsToHost(source, file_infos); @@ -233,14 +239,14 @@ int file_type_index = 0; ParseSelectFileDialogFileTypes(request.allowed_extensions(), &file_types, &file_type_index); - base::FilePath::StringType default_extension; - data->dialog = ui::SelectFileDialog::Create( + data->dialog = SelectFileDialogExtension::Create( this, std::make_unique<ChromeSelectFilePolicy>(nullptr)); // Release ownership of |data| and take back in MultiFilesSelected(). void* params = static_cast<void*>(data.get()); - data.release()->dialog->SelectFile(type, title, default_path, &file_types, - file_type_index, default_extension, - /*owning_window=*/nullptr, params); + + data.release()->dialog->SelectFileWithFileManagerParams( + type, title, default_path, &file_types, file_type_index, params, owner, + /*search_query=*/"", /*show_android_picker_apps=*/false); } void VmApplicationsServiceProvider::ParseSelectFileDialogFileTypes(
diff --git a/chrome/browser/ash/file_manager/file_manager_browsertest.cc b/chrome/browser/ash/file_manager/file_manager_browsertest.cc index bdd698f..de057e2e 100644 --- a/chrome/browser/ash/file_manager/file_manager_browsertest.cc +++ b/chrome/browser/ash/file_manager/file_manager_browsertest.cc
@@ -1736,7 +1736,8 @@ TestCase( "trashPressingEnterOnFileInTrashRootShowsDialogWithRestoreButton") .EnableTrash(), - TestCase("trashCantRenameFilesInTrashRoot").EnableTrash())); + TestCase("trashCantRenameFilesInTrashRoot").EnableTrash(), + TestCase("trashNudgeShownOnFirstTrashOperation").EnableTrash())); WRAPPED_INSTANTIATE_TEST_SUITE_P( AndroidPhotos, /* android_photos.js */
diff --git a/chrome/browser/ash/file_manager/file_manager_jstest.cc b/chrome/browser/ash/file_manager/file_manager_jstest.cc index 1641f88..209fbd9 100644 --- a/chrome/browser/ash/file_manager/file_manager_jstest.cc +++ b/chrome/browser/ash/file_manager/file_manager_jstest.cc
@@ -334,3 +334,7 @@ IN_PROC_BROWSER_TEST_F(FileManagerJsTest, XfNudge) { RunTestURL("widgets/xf_nudge_unittest.js"); } + +IN_PROC_BROWSER_TEST_F(FileManagerJsTest, NudgeContainer) { + RunTestURL("containers/nudge_container_unittest.js"); +}
diff --git a/chrome/browser/ash/file_manager/file_manager_string_util.cc b/chrome/browser/ash/file_manager/file_manager_string_util.cc index e50a1d2..111f55e 100644 --- a/chrome/browser/ash/file_manager/file_manager_string_util.cc +++ b/chrome/browser/ash/file_manager/file_manager_string_util.cc
@@ -342,6 +342,7 @@ IDS_FILE_BROWSER_CONFIRM_EMPTY_TRASH_DESC); SET_STRING("EMPTY_TRASH_DELETE_FOREVER", IDS_FILE_BROWSER_EMPTY_TRASH_DELETE_FOREVER); + SET_STRING("TRASH_NUDGE_LABEL", IDS_FILE_BROWSER_TRASH_NUDGE_LABEL); SET_STRING("CONFIRM_DELETE_ONE", IDS_FILE_BROWSER_CONFIRM_DELETE_ONE); SET_STRING("CONFIRM_DELETE_SOME", IDS_FILE_BROWSER_CONFIRM_DELETE_SOME); SET_STRING("CANT_RESTORE_SINGLE_ITEM",
diff --git a/chrome/browser/ash/file_manager/path_util.cc b/chrome/browser/ash/file_manager/path_util.cc index 3ff7d4b..2ca5d7f 100644 --- a/chrome/browser/ash/file_manager/path_util.cc +++ b/chrome/browser/ash/file_manager/path_util.cc
@@ -297,6 +297,7 @@ const char kFuseBoxSubdirPrefixADP[] = "adp."; const char kFuseBoxSubdirPrefixFSP[] = "fsp."; const char kFuseBoxSubdirPrefixMTP[] = "mtp."; +const char kFuseBoxSubdirPrefixTMP[] = "tmp."; const char kShareCacheMountPointName[] = "ShareCache";
diff --git a/chrome/browser/ash/file_manager/path_util.h b/chrome/browser/ash/file_manager/path_util.h index 9df05d4..0241c9f 100644 --- a/chrome/browser/ash/file_manager/path_util.h +++ b/chrome/browser/ash/file_manager/path_util.h
@@ -58,6 +58,7 @@ extern const char kFuseBoxSubdirPrefixADP[]; extern const char kFuseBoxSubdirPrefixFSP[]; extern const char kFuseBoxSubdirPrefixMTP[]; +extern const char kFuseBoxSubdirPrefixTMP[]; // Name of the mount point used to store temporary files for sharing. extern const char kShareCacheMountPointName[];
diff --git a/chrome/browser/ash/fusebox/fusebox_server.cc b/chrome/browser/ash/fusebox/fusebox_server.cc index 235feb2..29bcdd5 100644 --- a/chrome/browser/ash/fusebox/fusebox_server.cc +++ b/chrome/browser/ash/fusebox/fusebox_server.cc
@@ -8,10 +8,12 @@ #include <utility> #include "base/callback.h" +#include "base/files/file_util.h" #include "base/logging.h" #include "base/strings/strcat.h" #include "base/strings/string_util.h" #include "base/task/bind_post_task.h" +#include "base/task/thread_pool.h" #include "chrome/browser/ash/file_manager/fileapi_util.h" #include "chrome/browser/ash/file_manager/path_util.h" #include "chrome/browser/ash/fusebox/fusebox_errno.h" @@ -19,6 +21,8 @@ #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" #include "net/base/io_buffer.h" +#include "storage/browser/file_system/async_file_util.h" +#include "storage/browser/file_system/external_mount_points.h" #include "storage/browser/file_system/file_stream_reader.h" #include "storage/browser/file_system/file_system_url.h" #include "storage/common/file_system/file_system_util.h" @@ -257,6 +261,14 @@ std::move(callback).Run(FileErrorToErrno(error_code), info, read_only); } +std::string SubdirForTempDir(base::ScopedTempDir& scoped_temp_dir) { + std::string basename = scoped_temp_dir.GetPath().BaseName().AsUTF8Unsafe(); + while (!basename.empty() && (basename[0] == '.')) { // Strip leading dots. + basename = basename.substr(1); + } + return base::StrCat({file_manager::util::kFuseBoxSubdirPrefixTMP, basename}); +} + } // namespace Server::PrefixMapEntry::PrefixMapEntry(std::string fs_url_prefix_arg, @@ -560,6 +572,8 @@ void Server::ListStorages(fusebox_staging::ListStoragesRequestProto request, ListStoragesCallback callback) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + fusebox_staging::ListStoragesResponseProto response; response.add_storages(kMonikerSubdir); for (const auto& i : prefix_map_) { @@ -568,6 +582,95 @@ std::move(callback).Run(response); } +void Server::MakeTempDir(MakeTempDirCallback callback) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + + base::ThreadPool::PostTask( + FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT}, + base::BindOnce(&Server::MakeTempDirOnWorkerThread, + weak_ptr_factory_.GetWeakPtr(), std::move(callback))); +} + +void Server::MakeTempDirOnWorkerThread(MakeTempDirCallback callback) { + base::ScopedTempDir scoped_temp_dir; + bool create_succeeded = scoped_temp_dir.CreateUniqueTempDir(); + content::GetUIThreadTaskRunner({})->PostTask( + FROM_HERE, + base::BindOnce(&Server::ReplyToMakeTempDir, + weak_ptr_factory_.GetWeakPtr(), std::move(scoped_temp_dir), + create_succeeded, std::move(callback))); +} + +void Server::ReplyToMakeTempDir(base::ScopedTempDir scoped_temp_dir, + bool create_succeeded, + MakeTempDirCallback callback) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + + if (!create_succeeded) { + std::move(callback).Run("CreateUniqueTempDir failed", "", ""); + return; + } + + const std::string subdir = SubdirForTempDir(scoped_temp_dir); + const std::string mount_name = + base::StrCat({file_manager::util::kFuseBoxMountNamePrefix, subdir}); + const std::string fusebox_file_path = + base::StrCat({file_manager::util::kFuseBoxMediaSlashPath, subdir}); + const base::FilePath underlying_file_path = scoped_temp_dir.GetPath(); + + storage::ExternalMountPoints* const mount_points = + storage::ExternalMountPoints::GetSystemInstance(); + if (!mount_points->RegisterFileSystem( + mount_name, storage::kFileSystemTypeLocal, + storage::FileSystemMountOption(), underlying_file_path)) { + std::move(callback).Run("RegisterFileSystem failed", "", ""); + return; + } + + scoped_refptr<storage::FileSystemContext> fs_context = + file_manager::util::GetFileManagerFileSystemContext( + ProfileManager::GetActiveUserProfile()); + const blink::StorageKey storage_key = + blink::StorageKey::CreateFromStringForTesting( + "http://fusebox-server.example.com"); + fs_context->external_backend()->GrantFileAccessToOrigin( + storage_key.origin(), base::FilePath(mount_name)); + + storage::FileSystemURL fs_url = + mount_points->CreateExternalFileSystemURL(storage_key, mount_name, {}); + constexpr bool read_only = false; + RegisterFSURLPrefix(subdir, fs_url.ToGURL().spec(), read_only); + + temp_subdir_map_.insert({fusebox_file_path, std::move(scoped_temp_dir)}); + + std::move(callback).Run("", fusebox_file_path, + underlying_file_path.AsUTF8Unsafe()); +} + +void Server::RemoveTempDir(std::string fusebox_file_path) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + + auto iter = temp_subdir_map_.find(fusebox_file_path); + if (iter == temp_subdir_map_.end()) { + return; + } + base::ScopedTempDir scoped_temp_dir = std::move(iter->second); + const std::string subdir = SubdirForTempDir(scoped_temp_dir); + const std::string mount_name = + base::StrCat({file_manager::util::kFuseBoxMountNamePrefix, subdir}); + temp_subdir_map_.erase(iter); + UnregisterFSURLPrefix(subdir); + storage::ExternalMountPoints::GetSystemInstance()->RevokeFileSystem( + mount_name); + base::ThreadPool::PostTask( + FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT}, + base::BindOnce( + [](base::ScopedTempDir) { + // No-op other than running the base::ScopedTempDir destructor. + }, + std::move(scoped_temp_dir))); +} + void Server::OnReadDirectory( scoped_refptr<storage::FileSystemContext> fs_context, // See § above. bool read_only,
diff --git a/chrome/browser/ash/fusebox/fusebox_server.h b/chrome/browser/ash/fusebox/fusebox_server.h index cc2a60e7..4e038b2 100644 --- a/chrome/browser/ash/fusebox/fusebox_server.h +++ b/chrome/browser/ash/fusebox/fusebox_server.h
@@ -9,6 +9,7 @@ #include "base/callback_forward.h" #include "base/files/file.h" +#include "base/files/scoped_temp_dir.h" #include "base/memory/weak_ptr.h" #include "base/values.h" #include "chrome/browser/ash/fusebox/fusebox_moniker.h" @@ -145,6 +146,38 @@ void ListStorages(fusebox_staging::ListStoragesRequestProto request, ListStoragesCallback callback); + // MakeTempDir makes a temporary directory that has two file paths: an + // underlying one (e.g. "/tmp/.foo") and a fusebox one (e.g. + // "/media/fuse/fusebox/tmp.foo"). The fusebox one is conceptually similar to + // a symbolic link, in that after a "touch /tmp/.foo/bar", bar should be + // visible at "/media/fuse/fusebox/tmp.foo/bar", but the 'symbolic link' is + // not resolved directly by the kernel. + // + // Instead, file I/O under the /media/fuse/fusebox mount point goes through + // the FuseBox daemon (via FUSE) to Chromium (via D-Bus) to the kernel (as + // Chromium storage::FileSystemURL code sees storage::kFileSystemTypeLocal + // files living under the underlying file path). + // + // That sounds convoluted (and overkill for 'sym-linking' a directory on the + // local file system), and it is, but it is essentially the same code paths + // that FuseBox uses to surface Chromium virtual file systems (VFSs) that are + // not otherwise visible on the kernel-level file system. Note that Chromium + // VFSs are not the same as Linux kernel VFSs. + // + // The purpose of these Make/Remove methods is to facilitate testing these + // FuseBox code paths (backed by an underlying tmpfs file system) without the + // extra complexity of fake VFSs, such as a fake ADP (Android Documents + // Provider) or fake MTP (Media Transfer Protocol) back-end. + // + // MakeTempDir is like "mkdir" (except the callee randomly generates the file + // path). RemoveTempDir is like "rm -rf". + using MakeTempDirCallback = + base::OnceCallback<void(std::string error_message, + std::string fusebox_file_path, + std::string underlying_file_path)>; + void MakeTempDir(MakeTempDirCallback callback); + void RemoveTempDir(std::string fusebox_file_path); + struct PrefixMapEntry { PrefixMapEntry(std::string fs_url_prefix_arg, bool read_only_arg); @@ -191,7 +224,17 @@ // with a base::OnceCallback model (N requests, N responses). using ReadDir2Map = std::map<uint64_t, ReadDir2MapEntry>; + // Maps from a fusebox_file_path (like "/media/fuse/fusebox/tmp.foo") to the + // ScopedTempDir that will clean up (in its destructor) the underlying + // temporary directory. + using TempSubdirMap = std::map<std::string, base::ScopedTempDir>; + private: + void MakeTempDirOnWorkerThread(MakeTempDirCallback callback); + void ReplyToMakeTempDir(base::ScopedTempDir scoped_temp_dir, + bool create_succeeded, + MakeTempDirCallback callback); + void OnReadDirectory(scoped_refptr<storage::FileSystemContext> fs_context, bool read_only, uint64_t cookie, @@ -203,6 +246,7 @@ fusebox::MonikerMap moniker_map_; PrefixMap prefix_map_; ReadDir2Map read_dir_2_map_; + TempSubdirMap temp_subdir_map_; base::WeakPtrFactory<Server> weak_ptr_factory_{this}; };
diff --git a/chrome/browser/ash/input_method/component_extension_ime_manager_delegate_impl.cc b/chrome/browser/ash/input_method/component_extension_ime_manager_delegate_impl.cc index b3e8532..99e86a0d 100644 --- a/chrome/browser/ash/input_method/component_extension_ime_manager_delegate_impl.cc +++ b/chrome/browser/ash/input_method/component_extension_ime_manager_delegate_impl.cc
@@ -324,13 +324,13 @@ dict.FindStringKey(extensions::manifest_keys::kOptionsPage); if (option_page) { url_string = *option_page; - GURL url = extensions::Extension::GetResourceURL( + GURL options_page_url = extensions::Extension::GetResourceURL( extensions::Extension::GetBaseURLFromExtensionId( component_extension.id), url_string); - if (!url.is_valid()) + if (!options_page_url.is_valid()) return false; - out->options_page_url = url; + out->options_page_url = options_page_url; } else { // Fallback to extension level options page. out->options_page_url = component_extension.options_page_url;
diff --git a/chrome/browser/ash/web_applications/projector_app/untrusted_projector_ui_config.cc b/chrome/browser/ash/web_applications/projector_app/untrusted_projector_ui_config.cc index 3a44a98..fb9bd22 100644 --- a/chrome/browser/ash/web_applications/projector_app/untrusted_projector_ui_config.cc +++ b/chrome/browser/ash/web_applications/projector_app/untrusted_projector_ui_config.cc
@@ -47,6 +47,9 @@ source->AddBoolean( "isUseApiKeyForTranslationEnabled", ash::features::IsProjectorUseApiKeyForTranslationEnabled()); + source->AddBoolean( + "isViewerUseSecondaryAccountEnabled", + ash::features::IsProjectorViewerUseSecondaryAccountEnabled()); source->AddString("appLocale", g_browser_process->GetApplicationLocale()); }
diff --git a/chrome/browser/chrome_browser_interface_binders.cc b/chrome/browser/chrome_browser_interface_binders.cc index f456683..63bd8d4 100644 --- a/chrome/browser/chrome_browser_interface_binders.cc +++ b/chrome/browser/chrome_browser_interface_binders.cc
@@ -262,9 +262,9 @@ #include "chrome/browser/ui/webui/ash/crostini_installer/crostini_installer_ui.h" #include "chrome/browser/ui/webui/ash/crostini_upgrader/crostini_upgrader.mojom.h" #include "chrome/browser/ui/webui/ash/crostini_upgrader/crostini_upgrader_ui.h" +#include "chrome/browser/ui/webui/ash/emoji/emoji_picker.mojom.h" +#include "chrome/browser/ui/webui/ash/emoji/emoji_ui.h" #include "chrome/browser/ui/webui/chromeos/bluetooth_pairing_dialog.h" -#include "chrome/browser/ui/webui/chromeos/emoji/emoji_picker.mojom.h" -#include "chrome/browser/ui/webui/chromeos/emoji/emoji_ui.h" #include "chrome/browser/ui/webui/chromeos/in_session_password_change/lock_screen_network_ui.h" #include "chrome/browser/ui/webui/chromeos/internet_config_dialog.h" #include "chrome/browser/ui/webui/chromeos/internet_detail_dialog.h" @@ -1204,7 +1204,7 @@ } RegisterWebUIControllerInterfaceBinder< - emoji_picker::mojom::PageHandlerFactory, chromeos::EmojiUI>(map); + emoji_picker::mojom::PageHandlerFactory, ash::EmojiUI>(map); RegisterWebUIControllerInterfaceBinder< ash::personalization_app::mojom::WallpaperProvider,
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn index 3a556731..63304a5 100644 --- a/chrome/browser/chromeos/BUILD.gn +++ b/chrome/browser/chromeos/BUILD.gn
@@ -35,7 +35,7 @@ "//chrome/browser/ash/power/ml:user_activity_ukm_logger_helpers", "//chrome/browser/google", "//chrome/browser/ui/webui/ash/crostini_installer:mojo_bindings", - "//chrome/browser/ui/webui/chromeos/emoji:mojo_bindings", + "//chrome/browser/ui/webui/ash/emoji:mojo_bindings", "//chromeos/ash/components/dbus:vm_applications_apps_proto", "//chromeos/ash/components/dbus:vm_disk_management_proto", "//chromeos/ash/components/dbus:vm_launch_proto",
diff --git a/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.cc b/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.cc index 50a4ca4d..1bbdf92 100644 --- a/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.cc +++ b/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.cc
@@ -94,6 +94,7 @@ #include "chrome/browser/ash/crostini/crostini_util.h" #include "chrome/browser/ash/file_manager/open_util.h" #include "chrome/browser/ash/file_manager/path_util.h" +#include "chrome/browser/ash/fusebox/fusebox_server.h" #include "chrome/browser/ash/guest_os/guest_os_registry_service.h" #include "chrome/browser/ash/guest_os/guest_os_registry_service_factory.h" #include "chrome/browser/ash/login/lock/screen_locker.h" @@ -6127,6 +6128,59 @@ } /////////////////////////////////////////////////////////////////////////////// +// AutotestPrivateMakeFuseboxTempDirFunction +/////////////////////////////////////////////////////////////////////////////// + +AutotestPrivateMakeFuseboxTempDirFunction:: + ~AutotestPrivateMakeFuseboxTempDirFunction() = default; + +ExtensionFunction::ResponseAction +AutotestPrivateMakeFuseboxTempDirFunction::Run() { + fusebox::Server* server = fusebox::Server::GetInstance(); + if (!server) { + return RespondNow(Error("Fusebox server instance not available")); + } + server->MakeTempDir(base::BindOnce( + &AutotestPrivateMakeFuseboxTempDirFunction::OnMakeTempDir, this)); + return RespondLater(); +} + +void AutotestPrivateMakeFuseboxTempDirFunction::OnMakeTempDir( + std::string error_message, + std::string fusebox_file_path, + std::string underlying_file_path) { + if (!error_message.empty()) { + Respond(Error(error_message)); + return; + } + base::Value::Dict dict; + dict.Set("fuseboxFilePath", fusebox_file_path); + dict.Set("underlyingFilePath", underlying_file_path); + Respond(WithArguments(std::move(dict))); +} + +/////////////////////////////////////////////////////////////////////////////// +// AutotestPrivateRemoveFuseboxTempDirFunction +/////////////////////////////////////////////////////////////////////////////// + +AutotestPrivateRemoveFuseboxTempDirFunction:: + ~AutotestPrivateRemoveFuseboxTempDirFunction() = default; + +ExtensionFunction::ResponseAction +AutotestPrivateRemoveFuseboxTempDirFunction::Run() { + std::unique_ptr<api::autotest_private::RemoveFuseboxTempDir::Params> params( + api::autotest_private::RemoveFuseboxTempDir::Params::Create(args())); + EXTENSION_FUNCTION_VALIDATE(params); + + fusebox::Server* server = fusebox::Server::GetInstance(); + if (!server) { + return RespondNow(Error("Fusebox server instance not available")); + } + server->RemoveTempDir(params->fusebox_file_path); + return RespondNow(NoArguments()); +} + +/////////////////////////////////////////////////////////////////////////////// // AutotestPrivateAPI ///////////////////////////////////////////////////////////////////////////////
diff --git a/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.h b/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.h index fb0fcce..c073a8a 100644 --- a/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.h +++ b/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.h
@@ -1680,6 +1680,30 @@ ResponseAction Run() override; }; +class AutotestPrivateMakeFuseboxTempDirFunction : public ExtensionFunction { + public: + DECLARE_EXTENSION_FUNCTION("autotestPrivate.makeFuseboxTempDir", + AUTOTESTPRIVATE_MAKEFUSEBOXTEMPDIR) + + private: + ~AutotestPrivateMakeFuseboxTempDirFunction() override; + ResponseAction Run() override; + + void OnMakeTempDir(std::string error_message, + std::string fusebox_file_path, + std::string underlying_file_path); +}; + +class AutotestPrivateRemoveFuseboxTempDirFunction : public ExtensionFunction { + public: + DECLARE_EXTENSION_FUNCTION("autotestPrivate.removeFuseboxTempDir", + AUTOTESTPRIVATE_REMOVEFUSEBOXTEMPDIR) + + private: + ~AutotestPrivateRemoveFuseboxTempDirFunction() override; + ResponseAction Run() override; +}; + template <> KeyedService* BrowserContextKeyedAPIFactory<AutotestPrivateAPI>::BuildServiceInstanceFor(
diff --git a/chrome/browser/chromeos/extensions/file_system_provider/file_system_provider_apitest.cc b/chrome/browser/chromeos/extensions/file_system_provider/file_system_provider_apitest.cc index d14b1f7..cba9468 100644 --- a/chrome/browser/chromeos/extensions/file_system_provider/file_system_provider_apitest.cc +++ b/chrome/browser/chromeos/extensions/file_system_provider/file_system_provider_apitest.cc
@@ -359,6 +359,13 @@ << message_; } +IN_PROC_BROWSER_TEST_F(FileSystemProviderServiceWorkerApiTest, DeleteEntry) { + ASSERT_TRUE(RunExtensionTest( + "file_system_provider/service_worker/delete_entry", + {.extension_url = "test.html"}, {.load_as_component = true})) + << message_; +} + IN_PROC_BROWSER_TEST_F(FileSystemProviderServiceWorkerApiTest, ReadFile) { ASSERT_TRUE(RunExtensionTest("file_system_provider/service_worker/read_file", {.extension_url = "test.html"},
diff --git a/chrome/browser/chromeos/extensions/vpn_provider/vpn_service_factory.h b/chrome/browser/chromeos/extensions/vpn_provider/vpn_service_factory.h index 254c8469..100338d 100644 --- a/chrome/browser/chromeos/extensions/vpn_provider/vpn_service_factory.h +++ b/chrome/browser/chromeos/extensions/vpn_provider/vpn_service_factory.h
@@ -48,4 +48,9 @@ } // namespace chromeos +// TODO(https://crbug.com/1164001): remove when it moved to ash. +namespace ash { +using ::chromeos::VpnServiceFactory; +} + #endif // CHROME_BROWSER_CHROMEOS_EXTENSIONS_VPN_PROVIDER_VPN_SERVICE_FACTORY_H_
diff --git a/chrome/browser/extensions/external_pref_loader.cc b/chrome/browser/extensions/external_pref_loader.cc index 433e93da..16a8aa6 100644 --- a/chrome/browser/extensions/external_pref_loader.cc +++ b/chrome/browser/extensions/external_pref_loader.cc
@@ -21,6 +21,7 @@ #include "base/scoped_observation.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" +#include "base/value_iterators.h" #include "build/build_config.h" #include "build/chromeos_buildflags.h" #include "chrome/browser/apps/user_type_filter.h" @@ -257,29 +258,27 @@ #endif // BUILDFLAG(IS_CHROMEOS_ASH) // static. -std::unique_ptr<base::DictionaryValue> -ExternalPrefLoader::ExtractExtensionPrefs(base::ValueDeserializer* deserializer, - const base::FilePath& path) { +base::Value::Dict ExternalPrefLoader::ExtractExtensionPrefs( + base::ValueDeserializer* deserializer, + const base::FilePath& path) { std::string error_msg; std::unique_ptr<base::Value> extensions = deserializer->Deserialize(nullptr, &error_msg); if (!extensions) { LOG(WARNING) << "Unable to deserialize json data: " << error_msg << " in file " << path.value() << "."; - return std::make_unique<base::DictionaryValue>(); + return base::Value::Dict(); } - std::unique_ptr<base::DictionaryValue> ext_dictionary = - base::DictionaryValue::From(std::move(extensions)); - if (ext_dictionary) - return ext_dictionary; + if (extensions->is_dict()) + return std::move(*extensions).TakeDict(); LOG(WARNING) << "Expected a JSON dictionary in file " << path.value() << "."; - return std::make_unique<base::DictionaryValue>(); + return base::Value::Dict(); } void ExternalPrefLoader::LoadOnFileThread() { - auto prefs = std::make_unique<base::DictionaryValue>(); + base::Value::Dict prefs; // TODO(skerner): Some values of base_path_id_ will cause // base::PathService::Get() to return false, because the path does @@ -288,35 +287,33 @@ // OS developer builds and linux install packages. // Tracked as crbug.com/70402 . if (base::PathService::Get(base_path_id_, &base_path_)) { - ReadExternalExtensionPrefFile(prefs.get()); + ReadExternalExtensionPrefFile(prefs); - if (!prefs->DictEmpty()) + if (!prefs.empty()) LOG(WARNING) << "You are using an old-style extension deployment method " "(external_extensions.json), which will soon be " "deprecated. (see http://developer.chrome.com/" "extensions/external_extensions.html)"; - ReadStandaloneExtensionPrefFiles(prefs.get()); + ReadStandaloneExtensionPrefFiles(prefs); } if (base_path_id_ == chrome::DIR_EXTERNAL_EXTENSIONS) - UMA_HISTOGRAM_COUNTS_100("Extensions.ExternalJsonCount", prefs->DictSize()); + UMA_HISTOGRAM_COUNTS_100("Extensions.ExternalJsonCount", prefs.size()); // If we have any records to process, then we must have // read at least one .json file. If so, then we should have // set |base_path_|. - if (!prefs->DictEmpty()) + if (!prefs.empty()) CHECK(!base_path_.empty()); content::GetUIThreadTaskRunner({})->PostTask( - FROM_HERE, base::BindOnce(&ExternalPrefLoader::LoadFinished, this, + FROM_HERE, base::BindOnce(&ExternalPrefLoader::LoadFinishedWithDict, this, std::move(prefs))); } void ExternalPrefLoader::ReadExternalExtensionPrefFile( - base::DictionaryValue* prefs) { - CHECK(nullptr != prefs); - + base::Value::Dict& prefs) { base::FilePath json_file = base_path_.Append(kExternalExtensionJson); if (!base::PathExists(json_file)) { @@ -344,16 +341,12 @@ } JSONFileValueDeserializer deserializer(json_file); - std::unique_ptr<base::DictionaryValue> ext_prefs = - ExtractExtensionPrefs(&deserializer, json_file); - if (ext_prefs) - prefs->MergeDictionary(ext_prefs.get()); + auto ext_prefs = ExtractExtensionPrefs(&deserializer, json_file); + prefs.Merge(std::move(ext_prefs)); } void ExternalPrefLoader::ReadStandaloneExtensionPrefFiles( - base::DictionaryValue* prefs) { - CHECK(nullptr != prefs); - + base::Value::Dict& prefs) { // First list the potential .json candidates. std::set<base::FilePath> candidates = GetPrefsCandidateFilesFromFolder(base_path_); @@ -363,9 +356,9 @@ } // TODO(crbug.com/1407498): Remove this once migration is completed. - std::unique_ptr<base::ListValue> default_user_types; + std::unique_ptr<base::Value::List> default_user_types; if (options_ & USE_USER_TYPE_PROFILE_FILTER) { - default_user_types = std::make_unique<base::ListValue>(); + default_user_types = std::make_unique<base::Value::List>(); default_user_types->Append(base::Value(apps::kUserTypeUnmanaged)); } @@ -386,21 +379,18 @@ << extension_candidate_path.LossyDisplayName(); JSONFileValueDeserializer deserializer(extension_candidate_path); - std::unique_ptr<base::DictionaryValue> ext_prefs = + auto ext_prefs = ExtractExtensionPrefs(&deserializer, extension_candidate_path); - if (!ext_prefs) - continue; if (options_ & USE_USER_TYPE_PROFILE_FILTER && - !apps::UserTypeMatchesJsonUserType(user_type_, id /* app_id */, - ext_prefs.get(), - default_user_types.get())) { + !apps::UserTypeMatchesJsonUserType( + user_type_, id /* app_id */, ext_prefs, default_user_types.get())) { // Already logged. continue; } DVLOG(1) << "Adding extension with id: " << id; - prefs->SetKey(id, base::Value::FromUniquePtrValue(std::move(ext_prefs))); + prefs.Set(id, std::move(ext_prefs)); } }
diff --git a/chrome/browser/extensions/external_pref_loader.h b/chrome/browser/extensions/external_pref_loader.h index 8d6b32c..8e288a23 100644 --- a/chrome/browser/extensions/external_pref_loader.h +++ b/chrome/browser/extensions/external_pref_loader.h
@@ -80,7 +80,7 @@ // |path| is only used for informational purposes (outputted when an error // occurs). An empty dictionary is returned in case of failure (e.g. invalid // path or json content). - static std::unique_ptr<base::DictionaryValue> ExtractExtensionPrefs( + static base::Value::Dict ExtractExtensionPrefs( base::ValueDeserializer* deserializer, const base::FilePath& path); @@ -100,14 +100,14 @@ // regarding which extensions to install. |prefs| will be modified to // receive the extracted extension information. // Must be called from the File thread. - void ReadExternalExtensionPrefFile(base::DictionaryValue* prefs); + void ReadExternalExtensionPrefFile(base::Value::Dict& prefs); // Extracts the information contained in standalone external extension // json files (<extension id>.json) regarding what external extensions // to install. |prefs| will be modified to receive the extracted extension // information. // Must be called from the File thread. - void ReadStandaloneExtensionPrefFiles(base::DictionaryValue* prefs); + void ReadStandaloneExtensionPrefFiles(base::Value::Dict& prefs); #if BUILDFLAG(IS_CHROMEOS_ASH) void OnPrioritySyncReady(PrioritySyncReadyWaiter* waiter);
diff --git a/chrome/browser/extensions/external_testing_loader.cc b/chrome/browser/extensions/external_testing_loader.cc index 30dbd746..0266783f5 100644 --- a/chrome/browser/extensions/external_testing_loader.cc +++ b/chrome/browser/extensions/external_testing_loader.cc
@@ -18,8 +18,9 @@ DCHECK_CURRENTLY_ON(content::BrowserThread::UI); JSONStringValueDeserializer deserializer(json_data); base::FilePath fake_json_path = fake_base_path.AppendASCII("fake.json"); - testing_prefs_ = - ExternalPrefLoader::ExtractExtensionPrefs(&deserializer, fake_json_path); + testing_prefs_ = base::DictionaryValue::From(base::Value::ToUniquePtrValue( + base::Value(ExternalPrefLoader::ExtractExtensionPrefs(&deserializer, + fake_json_path)))); } const base::FilePath ExternalTestingLoader::GetBaseCrxFilePath() {
diff --git a/chrome/browser/k_anonymity_service/remote_trust_token_query_answerer.cc b/chrome/browser/k_anonymity_service/remote_trust_token_query_answerer.cc index 4e35e08..9c8066a 100644 --- a/chrome/browser/k_anonymity_service/remote_trust_token_query_answerer.cc +++ b/chrome/browser/k_anonymity_service/remote_trust_token_query_answerer.cc
@@ -21,7 +21,7 @@ if (!cached_answerer_ || !cached_answerer_.is_connected()) { UpdateCachedAnswerer(); } - return cached_answerer_->HasTrustTokens( + cached_answerer_->HasTrustTokens( issuer, base::BindOnce(&RemoteTrustTokenQueryAnswerer::OnHasTrustTokensCompleted, weak_ptr_factory_.GetWeakPtr())); @@ -46,7 +46,7 @@ } // TODO(behamilton): If the network service crashes while this request // has been queued the callback will never be called. - return cached_answerer_->HasRedemptionRecord( + cached_answerer_->HasRedemptionRecord( issuer, base::BindOnce( &RemoteTrustTokenQueryAnswerer::OnHasRedemptionRecordCompleted,
diff --git a/chrome/browser/nearby_sharing/nearby_connections_manager.cc b/chrome/browser/nearby_sharing/nearby_connections_manager.cc index 0860ea5..00c0243 100644 --- a/chrome/browser/nearby_sharing/nearby_connections_manager.cc +++ b/chrome/browser/nearby_sharing/nearby_connections_manager.cc
@@ -48,6 +48,6 @@ default; base::WeakPtr<NearbyConnectionsManager::PayloadStatusListener> -NearbyConnectionsManager::PayloadStatusListener::GetWeakPtr() const { +NearbyConnectionsManager::PayloadStatusListener::GetWeakPtr() { return weak_ptr_factory_.GetWeakPtr(); }
diff --git a/chrome/browser/nearby_sharing/nearby_connections_manager.h b/chrome/browser/nearby_sharing/nearby_connections_manager.h index 3c103c41..f7f5222 100644 --- a/chrome/browser/nearby_sharing/nearby_connections_manager.h +++ b/chrome/browser/nearby_sharing/nearby_connections_manager.h
@@ -64,7 +64,7 @@ PayloadStatusListener(); virtual ~PayloadStatusListener(); - base::WeakPtr<PayloadStatusListener> GetWeakPtr() const; + base::WeakPtr<PayloadStatusListener> GetWeakPtr(); // Note: |upgraded_medium| is passed in for use in metrics, and it is // absl::nullopt if the bandwidth has not upgraded yet or if the upgrade
diff --git a/chrome/browser/nearby_sharing/nearby_connections_manager_impl_unittest.cc b/chrome/browser/nearby_sharing/nearby_connections_manager_impl_unittest.cc index cfed6a4..291a741 100644 --- a/chrome/browser/nearby_sharing/nearby_connections_manager_impl_unittest.cc +++ b/chrome/browser/nearby_sharing/nearby_connections_manager_impl_unittest.cc
@@ -356,7 +356,7 @@ void SendPayload( int64_t payload_id, - const testing::NiceMock<MockPayloadStatusListener>& payload_listener) { + testing::NiceMock<MockPayloadStatusListener>& payload_listener) { const std::vector<uint8_t> expected_payload(std::begin(kPayload), std::end(kPayload));
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_da.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_da.xtb index 2f78de8..cf5260a8 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_da.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_da.xtb
@@ -692,7 +692,7 @@ <translation id="5623842676595125836">Log</translation> <translation id="5628125749885014029">h4</translation> <translation id="5632083598315326067">Grafiksymbol</translation> -<translation id="5648939288050772726">Tillykke! Nu har du lært det vigtigste om ChromeVox. Husk, at du til enhver tid kan åbne ChromeVox-kommandomenuen ved at trykke på Søg+punktum. Du kan få flere oplysninger om ChromeVox og Chrome OS i følgende artikler. +<translation id="5648939288050772726">Tillykke! Nu har du lært det vigtigste om ChromeVox. Husk, at du til enhver tid kan åbne ChromeVox-kommandomenuen ved at trykke på Søg+punktum. Du kan få flere oplysninger om ChromeVox og ChromeOS i følgende artikler. Hvis du er færdig med selvstudiet, kan du bruge ChromeVox til at gå til knappen Luk og klikke på den.</translation> <translation id="5653397561111110475">Brug hjælpefunktioner til touchskærm på Chromebook</translation> <translation id="5655682562155942719">Hopkommandoer</translation>
diff --git a/chrome/browser/resources/chromeos/emoji_picker/BUILD.gn b/chrome/browser/resources/chromeos/emoji_picker/BUILD.gn index 548d1572..a8706b7 100644 --- a/chrome/browser/resources/chromeos/emoji_picker/BUILD.gn +++ b/chrome/browser/resources/chromeos/emoji_picker/BUILD.gn
@@ -45,9 +45,8 @@ mojo_js_files = [ "emoji_picker.mojom-webui.js" ] mojo_source_files = [] foreach(f, mojo_js_files) { - mojo_source_files += [ - "$root_gen_dir/mojom-webui/chrome/browser/ui/webui/chromeos/emoji/" + f, - ] + mojo_source_files += + [ "$root_gen_dir/mojom-webui/chrome/browser/ui/webui/ash/emoji/" + f ] } resources_grd_file = "$target_gen_dir/resources.grd" @@ -55,7 +54,7 @@ preprocessed_folder = "$target_gen_dir/preprocessed" copy("copy_mojo") { - deps = [ "//chrome/browser/ui/webui/chromeos/emoji:mojo_bindings_webui_js" ] + deps = [ "//chrome/browser/ui/webui/ash/emoji:mojo_bindings_webui_js" ] sources = mojo_source_files outputs = [ "$preprocessed_folder/{{source_file_part}}" ] } @@ -209,7 +208,7 @@ js_library("emoji_picker_api_proxy") { deps = [ - "//chrome/browser/ui/webui/chromeos/emoji:mojo_bindings_webui_js", + "//chrome/browser/ui/webui/ash/emoji:mojo_bindings_webui_js", "//ui/webui/resources/js:cr.m", ] } @@ -292,12 +291,13 @@ js_type_check("closure_compile") { is_polymer3 = true - closure_flags = default_closure_args + mojom_js_args + [ - "js_module_root=" + rebase_path(".", root_build_dir), - "js_module_root=" + rebase_path( - "$root_gen_dir/mojom-webui/chrome/browser/ui/webui/chromeos/emoji", - root_build_dir), - ] + closure_flags = + default_closure_args + mojom_js_args + [ + "js_module_root=" + rebase_path(".", root_build_dir), + "js_module_root=" + rebase_path( + "$root_gen_dir/mojom-webui/chrome/browser/ui/webui/ash/emoji", + root_build_dir), + ] deps = [ ":constants", ":emoji_button",
diff --git a/chrome/browser/resources/settings/chromeos/os_languages_page/BUILD.gn b/chrome/browser/resources/settings/chromeos/os_languages_page/BUILD.gn index f5b1d1d..893d77c1 100644 --- a/chrome/browser/resources/settings/chromeos/os_languages_page/BUILD.gn +++ b/chrome/browser/resources/settings/chromeos/os_languages_page/BUILD.gn
@@ -27,6 +27,7 @@ ":languages_types", ":os_add_languages_dialog", ":os_edit_dictionary_page", + ":os_japanese_clear_ime_data_dialog", ":os_japanese_manage_user_dictionary_page", ":os_languages_page_v2", ":os_languages_section", @@ -73,6 +74,12 @@ ] } +js_library("os_japanese_clear_ime_data_dialog") { + deps = [ + "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled", + ] +} + js_library("add_input_methods_dialog") { deps = [ ":add_items_dialog",
diff --git a/chrome/browser/resources/settings/chromeos/os_languages_page/input_method_options_page.html b/chrome/browser/resources/settings/chromeos/os_languages_page/input_method_options_page.html index 7fa00ce..397fc3c 100644 --- a/chrome/browser/resources/settings/chromeos/os_languages_page/input_method_options_page.html +++ b/chrome/browser/resources/settings/chromeos/os_languages_page/input_method_options_page.html
@@ -18,14 +18,23 @@ <div class="list-frame"> <template is="dom-repeat" items="[[section.options]]" as="option"> <div class="list-item"> - <div class="start" id="option-label" aria-hidden="true"> - [[option.label]] - <template is="dom-if" if="[[option.subtitle)]]"> - <span class="secondary label subtitle"> - [[option.subtitle]] - </span> - </template> - </div> + <template is="dom-if" if="[[isSubmenuButton_(option.uiType)]]"> + <cr-button class="margin-matches-padding" + submenu-button-type$="[[option.submenuButtonType]]" + on-click="onSubmenuButtonClick_"> + [[option.label]] + </cr-button> + </template> + <template is="dom-if" if="[[!isSubmenuButton_(option.uiType)]]"> + <div class="start" id="option-label" aria-hidden="true"> + [[option.label]] + <template is="dom-if" if="[[option.subtitle)]]"> + <span class="secondary label subtitle"> + [[option.subtitle]] + </span> + </template> + </div> + </template> <template is="dom-if" if="[[isToggleButton_(option.uiType)]]"> <cr-toggle checked="{{option.value}}" on-click="onToggleButtonOrDropdownChange_" @@ -89,3 +98,10 @@ </div> </template> </div> + +<template is="dom-if" if="[[showClearPersonalizedData_]]" restamp> + <os-settings-japanese-clear-ime-data-dialog languages="[[languages]]" + language-helper="[[languageHelper]]" + on-close="onClearPersonalizedDataClose_"> + </os-settings-japanese-clear-ime-data-dialog> +</template>
diff --git a/chrome/browser/resources/settings/chromeos/os_languages_page/input_method_options_page.js b/chrome/browser/resources/settings/chromeos/os_languages_page/input_method_options_page.js index 05652e8..00b0342c 100644 --- a/chrome/browser/resources/settings/chromeos/os_languages_page/input_method_options_page.js +++ b/chrome/browser/resources/settings/chromeos/os_languages_page/input_method_options_page.js
@@ -8,10 +8,12 @@ */ import 'chrome://resources/cr_elements/md_select.css.js'; import 'chrome://resources/cr_elements/cr_toggle/cr_toggle.js'; +import 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.js'; import '../../settings_shared.css.js'; +import './os_japanese_clear_ime_data_dialog.js'; -import {assert, assertNotReached} from 'chrome://resources/js/assert.js'; import {I18nBehavior, I18nBehaviorInterface} from 'chrome://resources/cr_elements/i18n_behavior.js'; +import {assert, assertNotReached} from 'chrome://resources/js/assert.js'; import {afterNextRender, mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; import {loadTimeData} from '../../i18n_setup.js'; @@ -21,7 +23,7 @@ import {RouteObserverBehavior, RouteObserverBehaviorInterface} from '../route_observer_behavior.js'; import {getTemplate} from './input_method_options_page.html.js'; -import {generateOptions, getFirstPartyInputMethodEngineId, getOptionLabelName, getOptionMenuItems, getOptionSubtitleName, getOptionUiType, getOptionUrl, getUntranslatedOptionLabelName, hasOptionsPageInSettings, isNumberValue, isOptionLabelTranslated, OPTION_DEFAULT, OptionType, UiType} from './input_method_util.js'; +import {generateOptions, getFirstPartyInputMethodEngineId, getOptionLabelName, getOptionMenuItems, getOptionSubtitleName, getOptionUiType, getOptionUrl, getSubmenuButtonType, getUntranslatedOptionLabelName, hasOptionsPageInSettings, isNumberValue, isOptionLabelTranslated, OPTION_DEFAULT, OptionType, SubmenuButton, UiType} from './input_method_util.js'; import {LanguageHelper} from './languages_types.js'; /** @@ -77,6 +79,12 @@ type: Array, value: [], }, + + /** @private */ + showClearPersonalizedData_: { + type: Boolean, + value: false, + }, }; } @@ -116,6 +124,20 @@ this.populateOptionSections_(); } + onSubmenuButtonClick_(e) { + if (e.target.getAttribute('submenu-button-type') === + SubmenuButton.JAPANESE_CLEAR_PERSONALIZATION_DATA) { + this.showClearPersonalizedData_ = true; + return; + } + console.error(`SubmenuButton with invalid type clicked : ${ + e.target.getAttribute('submenu-button-type')}`); + } + + onClearPersonalizedDataClose_() { + this.showClearPersonalizedData_ = false; + } + /** * Get menu items for an option, and enrich the items with selected status and * i18n label. @@ -160,6 +182,7 @@ const subtitleStringName = getOptionSubtitleName(name); const subtitle = subtitleStringName && this.i18n(subtitleStringName); + return { name: name, uiType: uiType, @@ -171,6 +194,9 @@ dependentOptions: option.dependentOptions ? option.dependentOptions.map(t => makeOption({name: t})) : [], + submenuButtonType: this.isSubmenuButton_(uiType) ? + getSubmenuButtonType(name) : + undefined, }; }; @@ -307,6 +333,16 @@ return item === UiType.TOGGLE_BUTTON; } + + /** + * @param {!UiType} item + * @return {boolean} true if |item| is a toggle button. + * @private + */ + isSubmenuButton_(item) { + return item === UiType.SUBMENU_BUTTON; + } + /** * @param {!UiType} item * @return {boolean} true if |item| is a dropdown.
diff --git a/chrome/browser/resources/settings/chromeos/os_languages_page/input_method_util.js b/chrome/browser/resources/settings/chromeos/os_languages_page/input_method_util.js index 9a93784c..56bde67 100644 --- a/chrome/browser/resources/settings/chromeos/os_languages_page/input_method_util.js +++ b/chrome/browser/resources/settings/chromeos/os_languages_page/input_method_util.js
@@ -82,6 +82,7 @@ JAPANESE_SECTION_SHORTCUT: 'JapaneseSectionShortcut', JAPANESE_KEYMAP_STYLE: 'JapaneseKeymapStyle', JAPANESE_MANAGE_USER_DICTIONARY: 'JapaneseManageUserDictionary', + JAPANESE_CLEAR_PERSONALIZATION_DATA: 'JapaneseClearPersonalizationData', // Options for Korean input method. KOREAN_ENABLE_SYLLABLE_INPUT: 'koreanEnableSyllableInput', KOREAN_KEYBOARD_LAYOUT: 'koreanKeyboardLayout', @@ -187,10 +188,20 @@ export const UiType = { DROPDOWN: 'dropdown', LINK: 'link', + SUBMENU_BUTTON: 'submenuButton', TOGGLE_BUTTON: 'toggleButton', }; /** + * All possible submenu button types. + * + * @enum {string} + */ +export const SubmenuButton = { + JAPANESE_CLEAR_PERSONALIZATION_DATA: 'SubmenuButtonClearPersonalizedData', +}; + +/** * All possible Settings headers * * @enum {string} @@ -276,9 +287,10 @@ // correct values are the ones from the legacy settings page that used to // be found in // chrome-extension://jkghodnilhceideoidjikpgommlajknk/mozc_option.html. + // This is still missing 2 settings, but will do that separately. title: SettingsHeaders.PRIVACY, optionNames: [{ - name: OptionType.JAPANESE_INPUT_MODE, + name: OptionType.JAPANESE_CLEAR_PERSONALIZATION_DATA, }], }, ], @@ -487,10 +499,13 @@ case OptionType.EDIT_USER_DICT: case OptionType.JAPANESE_MANAGE_USER_DICTIONARY: return UiType.LINK; + case OptionType.JAPANESE_CLEAR_PERSONALIZATION_DATA: + return UiType.SUBMENU_BUTTON; default: assertNotReached(); } } + export function isOptionLabelTranslated(option) { switch (option) { // TODO(b/191608723): Clean up switch statements. @@ -576,6 +591,8 @@ return 'inputMethodOptionsJapaneseNumberOfSuggestions'; case OptionType.JAPANESE_MANAGE_USER_DICTIONARY: return 'inputMethodOptionsJapaneseManageUserDictionary'; + case OptionType.JAPANESE_CLEAR_PERSONALIZATION_DATA: + return 'inputMethodOptionsJapaneseClearPersonalizationData'; case OptionType.XKB_LAYOUT: return 'inputMethodOptionsXkbLayout'; case OptionType.EDIT_USER_DICT: @@ -884,6 +901,18 @@ } /** + * @param {!OptionType} option The option type. + * @return {SubmenuButton|undefined} The submenu button type for + * |option|, returns undefined if |option| does not have a submenu button type. + */ +export function getSubmenuButtonType(option) { + if (option === OptionType.JAPANESE_CLEAR_PERSONALIZATION_DATA) { + return SubmenuButton.JAPANESE_CLEAR_PERSONALIZATION_DATA; + } + return undefined; +} + +/** * @param {string} id Input method ID. * @return {boolean} true if |id| is a first party input method ID. * @private
diff --git a/chrome/browser/resources/settings/chromeos/os_languages_page/os_japanese_clear_ime_data_dialog.html b/chrome/browser/resources/settings/chromeos/os_languages_page/os_japanese_clear_ime_data_dialog.html new file mode 100644 index 0000000..40a615a --- /dev/null +++ b/chrome/browser/resources/settings/chromeos/os_languages_page/os_japanese_clear_ime_data_dialog.html
@@ -0,0 +1,35 @@ +<style include="settings-shared shared-style"> + [slot=body] { + display: flex; + flex-direction: column; + height: 175px; + overflow: auto; + } + + cr-checkbox::part(label-container) { + white-space: nowrap; + } +</style> +<cr-dialog id="dialog" close-text="$i18n{close}" show-on-attach> + TODO(b/234790486): Add the correct contents here. this is + just a placeholder. + <div slot="title">Clear personalization data</div> + <div id="dialogBody" slot="body" scrollable> + <cr-checkbox class="list-item no-outline is-width-of-dialog"> + Conversion History + </cr-checkbox> + <cr-checkbox class="list-item no-outline is-width-of-dialog"> + Suggestion History + </cr-checkbox> + <div> + <div slot="button-container"> + <cr-button class="action-button" > + Clear Personalized data + </cr-button> + <cr-button class="cancel-button" on-click="onCancelButtonClick_"> + $i18n{cancel} + </cr-button> + </div> + </div> +</cr-dialog> +
diff --git a/chrome/browser/resources/settings/chromeos/os_languages_page/os_japanese_clear_ime_data_dialog.js b/chrome/browser/resources/settings/chromeos/os_languages_page/os_japanese_clear_ime_data_dialog.js new file mode 100644 index 0000000..188513d --- /dev/null +++ b/chrome/browser/resources/settings/chromeos/os_languages_page/os_japanese_clear_ime_data_dialog.js
@@ -0,0 +1,36 @@ +// Copyright 2022 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview 'os-settings-japanese-clear-ime-data-dialog' is used to + * manage clearing personalized data for the Japanese input decoder. + */ + +import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; + +import {getTemplate} from './os_japanese_clear_ime_data_dialog.html.js'; + +/** @polymer */ +class OsSettingsClearPersonalizedDataDialogElement extends PolymerElement { + static get is() { + return 'os-settings-japanese-clear-ime-data-dialog'; + } + + static get template() { + return getTemplate(); + } + + static get properties() { + return {}; + } + + /** @private */ + onCancelButtonClick_() { + this.$.dialog.close(); + } +} + +customElements.define( + OsSettingsClearPersonalizedDataDialogElement.is, + OsSettingsClearPersonalizedDataDialogElement);
diff --git a/chrome/browser/resources/settings/chromeos/os_privacy_page/os_privacy_page.js b/chrome/browser/resources/settings/chromeos/os_privacy_page/os_privacy_page.js index dfe4218..bb59fff 100644 --- a/chrome/browser/resources/settings/chromeos/os_privacy_page/os_privacy_page.js +++ b/chrome/browser/resources/settings/chromeos/os_privacy_page/os_privacy_page.js
@@ -34,6 +34,7 @@ import {RouteObserverBehavior, RouteObserverBehaviorInterface} from '../route_observer_behavior.js'; import {PeripheralDataAccessBrowserProxy, PeripheralDataAccessBrowserProxyImpl} from './peripheral_data_access_browser_proxy.js'; +import {PrivacyHubNavigationOrigin} from './privacy_hub_page.js'; /** * @constructor @@ -360,6 +361,10 @@ /** @private */ onPrivacyHub_() { + chrome.metricsPrivate.recordEnumerationValue( + 'ChromeOS.PrivacyHub.Opened', + PrivacyHubNavigationOrigin.SYSTEM_SETTINGS, + Object.keys(PrivacyHubNavigationOrigin).length); Router.getInstance().navigateTo(routes.PRIVACY_HUB); }
diff --git a/chrome/browser/resources/settings/chromeos/os_privacy_page/privacy_hub_page.html b/chrome/browser/resources/settings/chromeos/os_privacy_page/privacy_hub_page.html index 11c53391..b4011700 100644 --- a/chrome/browser/resources/settings/chromeos/os_privacy_page/privacy_hub_page.html +++ b/chrome/browser/resources/settings/chromeos/os_privacy_page/privacy_hub_page.html
@@ -12,7 +12,8 @@ label="$i18n{cameraToggleTitle}" sub-label="[[cameraToggleActive_]]" deep-link-focus-id$="[[Setting.kCameraOnOff]]" - disabled="[[isCameraListEmpty_]]"> + disabled="[[isCameraListEmpty_]]" + on-change="onCameraToggleChanged_"> </settings-toggle-button> <div class="list-frame"> @@ -42,7 +43,8 @@ label="$i18n{microphoneToggleTitle}" deep-link-focus-id$="[[Setting.kMicrophoneOnOff]]" sub-label="[[microphoneToggleSubLabel_]]" - disabled="[[shouldDisableMicrophoneToggle_]]"> + disabled="[[shouldDisableMicrophoneToggle_]]" + on-change="onMicrophoneToggleChanged_"> </settings-toggle-button> <div class="list-frame">
diff --git a/chrome/browser/resources/settings/chromeos/os_privacy_page/privacy_hub_page.js b/chrome/browser/resources/settings/chromeos/os_privacy_page/privacy_hub_page.js index f06ad79a..e0097ef 100644 --- a/chrome/browser/resources/settings/chromeos/os_privacy_page/privacy_hub_page.js +++ b/chrome/browser/resources/settings/chromeos/os_privacy_page/privacy_hub_page.js
@@ -29,6 +29,16 @@ import {PrivacyHubBrowserProxy, PrivacyHubBrowserProxyImpl} from './privacy_hub_browser_proxy.js'; /** + * These values are persisted to logs and should not be renumbered or re-used. + * Keep in sync with PrivacyHubNavigationOrigin in + * tools/metrics/histograms/enums.xml. + */ +export const PrivacyHubNavigationOrigin = { + SYSTEM_SETTINGS: 0, + NOTIFICATION: 1, +}; + +/** * @constructor * @extends {PolymerElement} * @implements {DeepLinkingBehaviorInterface} @@ -296,6 +306,25 @@ this.microphonesConnected_ = connectedMicrophones; }); } + + /** + * @param {!CustomEvent} event + * @private + */ + onCameraToggleChanged_(event) { + chrome.metricsPrivate.recordBoolean( + 'ChromeOS.PrivacyHub.Camera.Settings.Enabled', event.target.checked); + } + + /** + * @param {!CustomEvent} event + * @private + */ + onMicrophoneToggleChanged_(event) { + chrome.metricsPrivate.recordBoolean( + 'ChromeOS.PrivacyHub.Microphone.Settings.Enabled', + event.target.checked); + } } customElements.define(SettingsPrivacyHubPage.is, SettingsPrivacyHubPage);
diff --git a/chrome/browser/resources/settings/chromeos/os_settings.gni b/chrome/browser/resources/settings/chromeos/os_settings.gni index 6ad9b3b..18a6663 100644 --- a/chrome/browser/resources/settings/chromeos/os_settings.gni +++ b/chrome/browser/resources/settings/chromeos/os_settings.gni
@@ -33,6 +33,7 @@ "chromeos/os_languages_page/input_page.js", "chromeos/os_languages_page/os_add_languages_dialog.js", "chromeos/os_languages_page/os_edit_dictionary_page.js", + "chromeos/os_languages_page/os_japanese_clear_ime_data_dialog.js", "chromeos/os_languages_page/os_japanese_manage_user_dictionary_page.js", "chromeos/os_languages_page/os_languages_page_v2.js", "chromeos/os_languages_page/os_languages_section.js",
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index c75dd24..007aa401 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -2639,6 +2639,10 @@ "webui/ash/crostini_upgrader/crostini_upgrader_page_handler.h", "webui/ash/crostini_upgrader/crostini_upgrader_ui.cc", "webui/ash/crostini_upgrader/crostini_upgrader_ui.h", + "webui/ash/emoji/emoji_page_handler.cc", + "webui/ash/emoji/emoji_page_handler.h", + "webui/ash/emoji/emoji_ui.cc", + "webui/ash/emoji/emoji_ui.h", "webui/chromeos/assistant_optin/assistant_optin_ui.cc", "webui/chromeos/assistant_optin/assistant_optin_ui.h", "webui/chromeos/assistant_optin/assistant_optin_utils.cc", @@ -2665,10 +2669,6 @@ "webui/chromeos/edu_coexistence/edu_coexistence_login_handler_chromeos.h", "webui/chromeos/edu_coexistence/edu_coexistence_state_tracker.cc", "webui/chromeos/edu_coexistence/edu_coexistence_state_tracker.h", - "webui/chromeos/emoji/emoji_page_handler.cc", - "webui/chromeos/emoji/emoji_page_handler.h", - "webui/chromeos/emoji/emoji_ui.cc", - "webui/chromeos/emoji/emoji_ui.h", "webui/chromeos/guest_os_installer/guest_os_installer_dialog.cc", "webui/chromeos/guest_os_installer/guest_os_installer_dialog.h", "webui/chromeos/human_presence_internals_ui.cc", @@ -3326,7 +3326,7 @@ public_deps += [ "//ash/services/multidevice_setup/public/mojom", "//chrome/browser/ui/webui/ash/crostini_installer:mojo_bindings", - "//chrome/browser/ui/webui/chromeos/emoji:mojo_bindings", + "//chrome/browser/ui/webui/ash/emoji:mojo_bindings", ] allow_circular_includes_from += [ "//chrome/browser/ash",
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb index e7d3223..2f44760 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb
@@ -29,7 +29,7 @@ <translation id="1145536944570833626">Slet eksisterende data.</translation> <translation id="1146678959555564648">Angiv VR</translation> <translation id="1149401351239820326">Udløbsmåned</translation> -<translation id="1150263420752757504"><ph name="APP_NAME" /> åbnes i Chrome. Når du fortsætter, accepterer du <ph name="BEGIN_LINK1" />Googles servicevilkår<ph name="END_LINK1" /> og de <ph name="BEGIN_LINK2" />yderligere servicevilkår for Google Chrome og Chrome OS<ph name="END_LINK2" />.</translation> +<translation id="1150263420752757504"><ph name="APP_NAME" /> åbnes i Chrome. Når du fortsætter, accepterer du <ph name="BEGIN_LINK1" />Googles servicevilkår<ph name="END_LINK1" /> og de <ph name="BEGIN_LINK2" />yderligere servicevilkår for Google Chrome og ChromeOS<ph name="END_LINK2" />.</translation> <translation id="1154704303112745282">Siden er ikke tilgængelig offline: <ph name="VIOLATED_URL" /></translation> <translation id="1171770572613082465">Se populære websites ved at trykke på knappen "Topwebsites"</translation> <translation id="1173894706177603556">Omdøb</translation> @@ -212,7 +212,7 @@ <translation id="2122601567107267586">Appen kunne ikke åbnes</translation> <translation id="2132122640199389833">Fjern alle tilknyttede enheder</translation> <translation id="213279576345780926">Lukkede <ph name="TAB_TITLE" /></translation> -<translation id="2134927169889348449">Når du bruger Chrome, accepterer du <ph name="BEGIN_TOS_LINK" />Googles servicevilkår<ph name="END_TOS_LINK" /> og de <ph name="BEGIN_ATOS_LINK" />yderligere servicevilkår for Google Chrome og Chrome OS<ph name="END_ATOS_LINK" />.</translation> +<translation id="2134927169889348449">Når du bruger Chrome, accepterer du <ph name="BEGIN_TOS_LINK" />Googles servicevilkår<ph name="END_TOS_LINK" /> og de <ph name="BEGIN_ATOS_LINK" />yderligere servicevilkår for Google Chrome og ChromeOS<ph name="END_ATOS_LINK" />.</translation> <translation id="2139186145475833000">Føj til startskærm</translation> <translation id="2141396931810938595">Baseret på din brug</translation> <translation id="214888715418183969">Vælg, hvad der gerne må deles med Chrome. De metrics, du deler, bruges til at hjælpe med at forbedre Chromes funktioner, ydeevne og stabilitet.</translation> @@ -390,7 +390,7 @@ <translation id="3062802207422175757">Artikler om dine interesser i Chrome</translation> <translation id="3066573403916685335">Flyt ned</translation> <translation id="3070005020161560471">Oversæt automatisk</translation> -<translation id="3072980200212375806"><ph name="APP_NAME" /> åbnes i Chrome. Når du fortsætter, accepterer du <ph name="BEGIN_LINK1" />Googles servicevilkår<ph name="END_LINK1" /> og de <ph name="BEGIN_LINK2" />yderligere servicevilkår for Google Chrome og Chrome OS<ph name="END_LINK2" />. <ph name="BEGIN_LINK3" />Privatlivspolitikken<ph name="END_LINK3" /> vil også gælde.</translation> +<translation id="3072980200212375806"><ph name="APP_NAME" /> åbnes i Chrome. Når du fortsætter, accepterer du <ph name="BEGIN_LINK1" />Googles servicevilkår<ph name="END_LINK1" /> og de <ph name="BEGIN_LINK2" />yderligere servicevilkår for Google Chrome og ChromeOS<ph name="END_LINK2" />. <ph name="BEGIN_LINK3" />Privatlivspolitikken<ph name="END_LINK3" /> vil også gælde.</translation> <translation id="3091010850649238832">Vis indhold i udklipsholderen</translation> <translation id="3098745985164956033">Nogle billeder sendes til Google for at give dig bedre beskrivelser</translation> <translation id="3114507951000454849">Læs dagens nyheder <ph name="NEWS_ICON" /></translation> @@ -596,7 +596,7 @@ <translation id="4269820728363426813">Kopiér linkadresse</translation> <translation id="4283102315569707115">Vil du anmode om computerwebsites som standard?</translation> <translation id="4291407919474070700"><ph name="BEGIN_LINK" />Aktivér skærmlåsen i Android-indstillingerne<ph name="END_LINK" /></translation> -<translation id="4293476595220860475">Når du bruger Chrome, accepterer du <ph name="BEGIN_TOS_LINK" />Googles servicevilkår<ph name="END_TOS_LINK" /> og de <ph name="BEGIN_ATOS_LINK" />yderligere servicevilkår for Google Chrome og Chrome OS<ph name="END_ATOS_LINK" />. <ph name="BEGIN_PRIVACY_LINK" />Privatlivspolitikken<ph name="END_PRIVACY_LINK" /> er også gældende.</translation> +<translation id="4293476595220860475">Når du bruger Chrome, accepterer du <ph name="BEGIN_TOS_LINK" />Googles servicevilkår<ph name="END_TOS_LINK" /> og de <ph name="BEGIN_ATOS_LINK" />yderligere servicevilkår for Google Chrome og ChromeOS<ph name="END_ATOS_LINK" />. <ph name="BEGIN_PRIVACY_LINK" />Privatlivspolitikken<ph name="END_PRIVACY_LINK" /> er også gældende.</translation> <translation id="4296252229500326964">Ny inkognitofane</translation> <translation id="4298388696830689168">Tilknyttede websites</translation> <translation id="4303044213806199882">chrome_screenshot_<ph name="CURRENT_TIMESTAMP_MS" /></translation> @@ -1076,7 +1076,7 @@ <translation id="6767294960381293877">Åben liste i halv højde over enheder, der skal deles en fane med.</translation> <translation id="6770042910635026163">De websites, du besøger, som definerer dine interesser</translation> <translation id="6770602306803890733">Forbedrer din og alle andres sikkerhed på nettet</translation> -<translation id="6785476624617658922">Yderligere servicevilkår for Google Chrome og Chrome OS</translation> +<translation id="6785476624617658922">Yderligere servicevilkår for Google Chrome og ChromeOS</translation> <translation id="6795633245022906657">Åbn hurtigt en ny fane. Gå til Indstillinger for at redigere denne genvej.</translation> <translation id="6802555630140434547">Vinduet lukkes</translation> <translation id="6811034713472274749">Siden kan nu ses</translation>
diff --git a/chrome/browser/ui/ash/shelf/browser_app_shelf_controller_browsertest.cc b/chrome/browser/ui/ash/shelf/browser_app_shelf_controller_browsertest.cc index a06768e40..1bbb431 100644 --- a/chrome/browser/ui/ash/shelf/browser_app_shelf_controller_browsertest.cc +++ b/chrome/browser/ui/ash/shelf/browser_app_shelf_controller_browsertest.cc
@@ -9,6 +9,7 @@ #include "ash/public/cpp/shelf_types.h" #include "ash/public/cpp/window_properties.h" #include "base/callback.h" +#include "base/location.h" #include "base/run_loop.h" #include "base/scoped_observation.h" #include "base/strings/utf_string_conversions.h" @@ -122,10 +123,10 @@ OnAnyEvent(); } - void Wait(const std::string& message) { + void Wait(const base::Location& from_here, const std::string& message) { if (!condition_.Run()) { base::test::ScopedRunLoopTimeout timeout( - FROM_HERE, TestTimeouts::action_timeout(), + from_here, TestTimeouts::action_timeout(), base::BindLambdaForTesting( [&]() { return "Waiting for: " + message; })); run_loop_.Run(); @@ -150,7 +151,8 @@ }; #define WAIT_FOR(condition) \ - WaitForCondition(base::BindLambdaForTesting([&]() { return (condition); }), \ + WaitForCondition(FROM_HERE, \ + base::BindLambdaForTesting([&]() { return (condition); }), \ #condition) struct ExpectedAppMenuItem { @@ -204,13 +206,14 @@ return apps::AppServiceProxyFactory::GetForProfile(browser()->profile()); } - void WaitForCondition(TestConditionWaiter::Condition condition, + void WaitForCondition(const base::Location& from_here, + TestConditionWaiter::Condition condition, const std::string& message) { auto* proxy = apps::AppServiceProxyFactory::GetForProfile(browser()->profile()); TestConditionWaiter(*registry_, proxy->AppRegistryCache(), std::move(condition)) - .Wait(message); + .Wait(from_here, message); } std::string InstallWebApp(const std::string& start_url, @@ -625,7 +628,10 @@ // Both are pinned. EXPECT_EQ(ShelfStatus(kAppId_A), ash::STATUS_RUNNING); EXPECT_EQ(ShelfStatus(kAppId_B), ash::STATUS_RUNNING); - // App B is active. + + // App B window is activated. + ASSERT_EQ(SelectShelfItem(kAppId_B), + (SelectResult{ash::SHELF_ACTION_WINDOW_ACTIVATED, {}})); WAIT_FOR(!IsAppActive(kAppId_A) && IsAppActive(kAppId_B)); // App A window is activated.
diff --git a/chrome/browser/ui/blocked_content/popunder_preventer.cc b/chrome/browser/ui/blocked_content/popunder_preventer.cc index 4984923..524ebadb 100644 --- a/chrome/browser/ui/blocked_content/popunder_preventer.cc +++ b/chrome/browser/ui/blocked_content/popunder_preventer.cc
@@ -66,19 +66,19 @@ } void PopunderPreventer::AddPotentialPopunder(content::WebContents* popup) { - content::WebContents* actual_activating_contents = activating_contents_.get(); + content::WebContents* top_level_activating_contents = + activating_contents_.get(); #if BUILDFLAG(ENABLE_EXTENSIONS) - // If the dialog was triggered via an PDF, get the actual web contents that + // If the dialog was triggered via an PDF, get the top level web contents that // embeds the PDF. - guest_view::GuestViewBase* guest = - guest_view::GuestViewBase::FromWebContents(actual_activating_contents); - if (guest) - actual_activating_contents = guest->embedder_web_contents(); + top_level_activating_contents = + guest_view::GuestViewBase::GetTopLevelWebContents( + top_level_activating_contents); #endif WebContentsSet popup_opener_set = BuildOpenerSet(popup); WebContentsSet activator_opener_set = - BuildOpenerSet(actual_activating_contents); + BuildOpenerSet(top_level_activating_contents); WebContentsSet common_openers = base::STLSetIntersection<WebContentsSet>( popup_opener_set, activator_opener_set);
diff --git a/chrome/browser/ui/webui/chromeos/emoji/BUILD.gn b/chrome/browser/ui/webui/ash/emoji/BUILD.gn similarity index 82% rename from chrome/browser/ui/webui/chromeos/emoji/BUILD.gn rename to chrome/browser/ui/webui/ash/emoji/BUILD.gn index 2cd5788..940dce9 100644 --- a/chrome/browser/ui/webui/chromeos/emoji/BUILD.gn +++ b/chrome/browser/ui/webui/ash/emoji/BUILD.gn
@@ -2,8 +2,11 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +import("//build/config/chromeos/ui_mode.gni") import("//mojo/public/tools/bindings/mojom.gni") +assert(is_chromeos_ash) + mojom("mojo_bindings") { sources = [ "emoji_picker.mojom" ] public_deps = [ "//mojo/public/mojom/base" ]
diff --git a/chrome/browser/ui/webui/chromeos/emoji/DIR_METADATA b/chrome/browser/ui/webui/ash/emoji/DIR_METADATA similarity index 100% rename from chrome/browser/ui/webui/chromeos/emoji/DIR_METADATA rename to chrome/browser/ui/webui/ash/emoji/DIR_METADATA
diff --git a/chrome/browser/ui/webui/chromeos/emoji/OWNERS b/chrome/browser/ui/webui/ash/emoji/OWNERS similarity index 100% rename from chrome/browser/ui/webui/chromeos/emoji/OWNERS rename to chrome/browser/ui/webui/ash/emoji/OWNERS
diff --git a/chrome/browser/ui/webui/chromeos/emoji/emoji_page_handler.cc b/chrome/browser/ui/webui/ash/emoji/emoji_page_handler.cc similarity index 93% rename from chrome/browser/ui/webui/chromeos/emoji/emoji_page_handler.cc rename to chrome/browser/ui/webui/ash/emoji/emoji_page_handler.cc index 250000d..48b782f 100644 --- a/chrome/browser/ui/webui/chromeos/emoji/emoji_page_handler.cc +++ b/chrome/browser/ui/webui/ash/emoji/emoji_page_handler.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/ui/webui/chromeos/emoji/emoji_page_handler.h" +#include "chrome/browser/ui/webui/ash/emoji/emoji_page_handler.h" #include "ash/constants/ash_features.h" #include "base/metrics/histogram_functions.h" @@ -10,12 +10,12 @@ #include "base/time/time.h" #include "base/timer/timer.h" #include "base/trace_event/trace_event.h" -#include "chrome/browser/ui/webui/chromeos/emoji/emoji_ui.h" +#include "chrome/browser/ui/webui/ash/emoji/emoji_ui.h" #include "ui/base/clipboard/scoped_clipboard_writer.h" #include "ui/base/ime/ash/ime_bridge.h" #include "ui/base/ime/input_method_observer.h" -namespace chromeos { +namespace ash { // Keep in sync with entry in enums.xml. enum class EmojiVariantType { @@ -40,8 +40,7 @@ } void CopyEmojiToClipboard(const std::string& emoji_to_copy) { - if (base::FeatureList::IsEnabled( - chromeos::features::kImeSystemEmojiPickerClipboard)) { + if (base::FeatureList::IsEnabled(features::kImeSystemEmojiPickerClipboard)) { auto clipboard = std::make_unique<ui::ScopedClipboardWriter>( ui::ClipboardBuffer::kCopyPaste, nullptr); clipboard->WriteText(base::UTF8ToUTF16(emoji_to_copy)); @@ -151,13 +150,12 @@ void EmojiPageHandler::GetFeatureList(GetFeatureListCallback callback) { std::vector<emoji_picker::mojom::Feature> enabled_features; - if (base::FeatureList::IsEnabled( - chromeos::features::kImeSystemEmojiPickerExtension)) { + if (base::FeatureList::IsEnabled(features::kImeSystemEmojiPickerExtension)) { enabled_features.push_back( emoji_picker::mojom::Feature::EMOJI_PICKER_EXTENSION); } if (base::FeatureList::IsEnabled( - chromeos::features::kImeSystemEmojiPickerSearchExtension)) { + features::kImeSystemEmojiPickerSearchExtension)) { enabled_features.push_back( emoji_picker::mojom::Feature::EMOJI_PICKER_SEARCH_EXTENSION); } @@ -198,4 +196,4 @@ } } -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ui/webui/chromeos/emoji/emoji_page_handler.h b/chrome/browser/ui/webui/ash/emoji/emoji_page_handler.h similarity index 80% rename from chrome/browser/ui/webui/chromeos/emoji/emoji_page_handler.h rename to chrome/browser/ui/webui/ash/emoji/emoji_page_handler.h index a8767f1..4e74b86a 100644 --- a/chrome/browser/ui/webui/chromeos/emoji/emoji_page_handler.h +++ b/chrome/browser/ui/webui/ash/emoji/emoji_page_handler.h
@@ -2,16 +2,17 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_UI_WEBUI_CHROMEOS_EMOJI_EMOJI_PAGE_HANDLER_H_ -#define CHROME_BROWSER_UI_WEBUI_CHROMEOS_EMOJI_EMOJI_PAGE_HANDLER_H_ +#ifndef CHROME_BROWSER_UI_WEBUI_ASH_EMOJI_EMOJI_PAGE_HANDLER_H_ +#define CHROME_BROWSER_UI_WEBUI_ASH_EMOJI_EMOJI_PAGE_HANDLER_H_ #include "base/time/time.h" -#include "chrome/browser/ui/webui/chromeos/emoji/emoji_picker.mojom.h" +#include "chrome/browser/ui/webui/ash/emoji/emoji_picker.mojom.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/receiver.h" #include "ui/webui/mojo_bubble_web_ui_controller.h" -namespace chromeos { +namespace ash { + class EmojiUI; class EmojiPageHandler : public emoji_picker::mojom::PageHandler { @@ -42,5 +43,7 @@ bool incognito_mode_; bool no_text_field_; }; -} // namespace chromeos -#endif // CHROME_BROWSER_UI_WEBUI_CHROMEOS_EMOJI_EMOJI_PAGE_HANDLER_H_ + +} // namespace ash + +#endif // CHROME_BROWSER_UI_WEBUI_ASH_EMOJI_EMOJI_PAGE_HANDLER_H_
diff --git a/chrome/browser/ui/webui/chromeos/emoji/emoji_picker.mojom b/chrome/browser/ui/webui/ash/emoji/emoji_picker.mojom similarity index 100% rename from chrome/browser/ui/webui/chromeos/emoji/emoji_picker.mojom rename to chrome/browser/ui/webui/ash/emoji/emoji_picker.mojom
diff --git a/chrome/browser/ui/webui/chromeos/emoji/emoji_ui.cc b/chrome/browser/ui/webui/ash/emoji/emoji_ui.cc similarity index 95% rename from chrome/browser/ui/webui/chromeos/emoji/emoji_ui.cc rename to chrome/browser/ui/webui/ash/emoji/emoji_ui.cc index 29f7c8fc..cc6646c 100644 --- a/chrome/browser/ui/webui/chromeos/emoji/emoji_ui.cc +++ b/chrome/browser/ui/webui/ash/emoji/emoji_ui.cc
@@ -2,7 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/ui/webui/chromeos/emoji/emoji_ui.h" +#include "chrome/browser/ui/webui/ash/emoji/emoji_ui.h" + +#include <iostream> #include "ash/constants/ash_features.h" #include "ash/public/cpp/tablet_mode.h" @@ -23,8 +25,6 @@ #include "ui/base/ime/ash/ime_bridge.h" #include "ui/resources/grit/webui_generated_resources.h" -#include <iostream> - namespace { constexpr gfx::Size kDefaultWindowSize(396, 454); constexpr gfx::Size kExtensionWindowSize(420, 480); @@ -45,7 +45,7 @@ } // namespace -namespace chromeos { +namespace ash { EmojiUI::EmojiUI(content::WebUI* web_ui) : ui::MojoBubbleWebUIController(web_ui, @@ -66,7 +66,7 @@ EmojiUI::~EmojiUI() = default; void EmojiUI::Show(Profile* profile) { - if (ash::TabletMode::Get()->InTabletMode()) { + if (TabletMode::Get()->InTabletMode()) { ui::ShowTabletModeEmojiPanel(); return; } @@ -92,8 +92,7 @@ } gfx::Size window_size = - base::FeatureList::IsEnabled( - chromeos::features::kImeSystemEmojiPickerExtension) + base::FeatureList::IsEnabled(features::kImeSystemEmojiPickerExtension) ? kExtensionWindowSize : kDefaultWindowSize; // This rect is used for positioning the emoji picker. It anchors either top @@ -142,4 +141,4 @@ std::move(receiver), web_ui(), this, incognito_mode_, no_text_field_); } -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ui/webui/chromeos/emoji/emoji_ui.h b/chrome/browser/ui/webui/ash/emoji/emoji_ui.h similarity index 74% rename from chrome/browser/ui/webui/chromeos/emoji/emoji_ui.h rename to chrome/browser/ui/webui/ash/emoji/emoji_ui.h index 2e3a6e0..688061d 100644 --- a/chrome/browser/ui/webui/chromeos/emoji/emoji_ui.h +++ b/chrome/browser/ui/webui/ash/emoji/emoji_ui.h
@@ -2,23 +2,23 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_UI_WEBUI_CHROMEOS_EMOJI_EMOJI_UI_H_ -#define CHROME_BROWSER_UI_WEBUI_CHROMEOS_EMOJI_EMOJI_UI_H_ +#ifndef CHROME_BROWSER_UI_WEBUI_ASH_EMOJI_EMOJI_UI_H_ +#define CHROME_BROWSER_UI_WEBUI_ASH_EMOJI_EMOJI_UI_H_ #include <memory> -#include "chrome/browser/ui/webui/chromeos/emoji/emoji_page_handler.h" -#include "chrome/browser/ui/webui/chromeos/emoji/emoji_picker.mojom.h" +#include "chrome/browser/ui/views/bubble/webui_bubble_manager.h" +#include "chrome/browser/ui/webui/ash/emoji/emoji_page_handler.h" +#include "chrome/browser/ui/webui/ash/emoji/emoji_picker.mojom.h" #include "chrome/browser/ui/webui/webui_load_timer.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/receiver.h" #include "ui/webui/mojo_bubble_web_ui_controller.h" -#include "chrome/browser/ui/views/bubble/webui_bubble_manager.h" class Profile; -namespace chromeos { +namespace ash { class EmojiUI : public ui::MojoBubbleWebUIController, public emoji_picker::mojom::PageHandlerFactory { @@ -50,12 +50,6 @@ WEB_UI_CONTROLLER_TYPE_DECL(); }; -} // namespace chromeos +} // namespace ash -// TODO(https://crbug.com/1164001): remove after the //chrome/browser/chromeos -// source migration is finished. -namespace ash { -using ::chromeos::EmojiUI; -} - -#endif // CHROME_BROWSER_UI_WEBUI_CHROMEOS_EMOJI_EMOJI_UI_H_ +#endif // CHROME_BROWSER_UI_WEBUI_ASH_EMOJI_EMOJI_UI_H_
diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc index c21cc338..4dbf23ed 100644 --- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc +++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
@@ -259,12 +259,12 @@ #include "chrome/browser/ui/webui/ash/cloud_upload/cloud_upload_ui.h" #include "chrome/browser/ui/webui/ash/crostini_installer/crostini_installer_ui.h" #include "chrome/browser/ui/webui/ash/crostini_upgrader/crostini_upgrader_ui.h" +#include "chrome/browser/ui/webui/ash/emoji/emoji_ui.h" #include "chrome/browser/ui/webui/chromeos/assistant_optin/assistant_optin_ui.h" #include "chrome/browser/ui/webui/chromeos/bluetooth_pairing_dialog.h" #include "chrome/browser/ui/webui/chromeos/certificate_manager_dialog_ui.h" #include "chrome/browser/ui/webui/chromeos/cryptohome_ui.h" #include "chrome/browser/ui/webui/chromeos/drive_internals_ui.h" -#include "chrome/browser/ui/webui/chromeos/emoji/emoji_ui.h" #include "chrome/browser/ui/webui/chromeos/human_presence_internals_ui.h" #include "chrome/browser/ui/webui/chromeos/in_session_password_change/lock_screen_network_ui.h" #include "chrome/browser/ui/webui/chromeos/in_session_password_change/lock_screen_start_reauth_ui.h" @@ -1117,7 +1117,7 @@ } } if (url.host_piece() == chrome::kChromeUIEmojiPickerHost) { - return &NewWebUI<chromeos::EmojiUI>; + return &NewWebUI<ash::EmojiUI>; } if (url.host_piece() == ash::eche_app::kChromeUIEcheAppHost && base::FeatureList::IsEnabled(ash::features::kEcheSWA)) {
diff --git a/chrome/browser/ui/webui/settings/ash/accessibility_handler.cc b/chrome/browser/ui/webui/settings/ash/accessibility_handler.cc index 8108639..c6ca4b9 100644 --- a/chrome/browser/ui/webui/settings/ash/accessibility_handler.cc +++ b/chrome/browser/ui/webui/settings/ash/accessibility_handler.cc
@@ -30,12 +30,9 @@ #include "ui/base/ime/ash/input_method_util.h" #include "ui/base/l10n/l10n_util.h" -namespace chromeos { -namespace settings { +namespace ash::settings { namespace { -using ::ash::AccessibilityManager; - void RecordShowShelfNavigationButtonsValueChange(bool enabled) { base::UmaHistogramBoolean( "Accessibility.CrosShelfNavigationButtonsInTabletModeChanged." @@ -210,8 +207,8 @@ } void AccessibilityHandler::MaybeAddDictationLocales() { - base::flat_map<std::string, ash::Dictation::LocaleData> locales = - ash::Dictation::GetAllSupportedLocales(); + base::flat_map<std::string, Dictation::LocaleData> locales = + Dictation::GetAllSupportedLocales(); // Get application locale. std::string application_locale = g_browser_process->GetApplicationLocale(); @@ -284,5 +281,4 @@ /*is_ui=*/true); } -} // namespace settings -} // namespace chromeos +} // namespace ash::settings
diff --git a/chrome/browser/ui/webui/settings/ash/accessibility_handler.h b/chrome/browser/ui/webui/settings/ash/accessibility_handler.h index 3c25699..9dcf2bbbb 100644 --- a/chrome/browser/ui/webui/settings/ash/accessibility_handler.h +++ b/chrome/browser/ui/webui/settings/ash/accessibility_handler.h
@@ -12,8 +12,7 @@ class Profile; -namespace chromeos { -namespace settings { +namespace ash::settings { class AccessibilityHandler : public ::settings::SettingsPageUIHandler, public speech::SodaInstaller::Observer { @@ -75,7 +74,11 @@ base::WeakPtrFactory<AccessibilityHandler> weak_ptr_factory_{this}; }; -} // namespace settings -} // namespace chromeos +} // namespace ash::settings + +// TODO(https://crbug.com/1164001): remove when the migration is finished. +namespace chromeos::settings { +using ::ash::settings::AccessibilityHandler; +} #endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_ASH_ACCESSIBILITY_HANDLER_H_
diff --git a/chrome/browser/ui/webui/settings/ash/accessibility_handler_browsertest.cc b/chrome/browser/ui/webui/settings/ash/accessibility_handler_browsertest.cc index aa570d4c..1fe56bfb 100644 --- a/chrome/browser/ui/webui/settings/ash/accessibility_handler_browsertest.cc +++ b/chrome/browser/ui/webui/settings/ash/accessibility_handler_browsertest.cc
@@ -30,8 +30,7 @@ using ::testing::Contains; using ::testing::Not; -namespace chromeos { -namespace settings { +namespace ash::settings { class TestAccessibilityHandler : public AccessibilityHandler { public: @@ -305,5 +304,4 @@ } } -} // namespace settings -} // namespace chromeos +} // namespace ash::settings
diff --git a/chrome/browser/ui/webui/settings/ash/account_manager_ui_handler.cc b/chrome/browser/ui/webui/settings/ash/account_manager_ui_handler.cc index 7591b6e..6df0f9a 100644 --- a/chrome/browser/ui/webui/settings/ash/account_manager_ui_handler.cc +++ b/chrome/browser/ui/webui/settings/ash/account_manager_ui_handler.cc
@@ -38,8 +38,7 @@ #include "ui/gfx/image/image_skia.h" #include "ui/gfx/image/image_skia_rep.h" -namespace chromeos { -namespace settings { +namespace ash::settings { namespace { @@ -88,9 +87,9 @@ } void ShowToast(const std::string& id, - ash::ToastCatalogName catalog_name, + ToastCatalogName catalog_name, const std::u16string& message) { - ash::ToastManager::Get()->Show(ash::ToastData(id, catalog_name, message)); + ToastManager::Get()->Show(ToastData(id, catalog_name, message)); } class AccountBuilder { @@ -174,7 +173,7 @@ DCHECK(account_.FindBool("isSignedIn")); DCHECK(account_.FindBool("unmigrated")); DCHECK(account_.FindString("pic")); - if (ash::AccountAppsAvailability::IsArcAccountRestrictionsEnabled()) { + if (AccountAppsAvailability::IsArcAccountRestrictionsEnabled()) { DCHECK(account_.FindBool("isAvailableInArc")); } // "organization" is an optional field. @@ -192,14 +191,14 @@ account_manager::AccountManager* account_manager, account_manager::AccountManagerFacade* account_manager_facade, signin::IdentityManager* identity_manager, - ash::AccountAppsAvailability* account_apps_availability) + AccountAppsAvailability* account_apps_availability) : account_manager_(account_manager), account_manager_facade_(account_manager_facade), identity_manager_(identity_manager) { DCHECK(account_manager_); DCHECK(account_manager_facade_); DCHECK(identity_manager_); - if (ash::AccountAppsAvailability::IsArcAccountRestrictionsEnabled()) { + if (AccountAppsAvailability::IsArcAccountRestrictionsEnabled()) { account_apps_availability_ = account_apps_availability; DCHECK(account_apps_availability_); } @@ -258,7 +257,7 @@ base::Value callback_id, const std::vector<std::pair<::account_manager::Account, bool>>& account_dummy_token_list) { - if (ash::AccountAppsAvailability::IsArcAccountRestrictionsEnabled()) { + if (AccountAppsAvailability::IsArcAccountRestrictionsEnabled()) { account_apps_availability_->GetAccountsAvailableInArc( base::BindOnce(&AccountManagerUIHandler::FinishHandleGetAccounts, weak_factory_.GetWeakPtr(), std::move(callback_id), @@ -292,7 +291,7 @@ .SetFullName(base::UTF16ToUTF8(user->GetDisplayName())) .SetIsSignedIn(true) .SetUnmigrated(false); - if (ash::AccountAppsAvailability::IsArcAccountRestrictionsEnabled()) { + if (AccountAppsAvailability::IsArcAccountRestrictionsEnabled()) { device_account.SetIsAvailableInArc(true); } gfx::ImageSkia default_icon = @@ -370,7 +369,7 @@ .SetIsSignedIn(!identity_manager_ ->HasAccountWithRefreshTokenInPersistentErrorState( maybe_account_info.account_id)); - if (ash::AccountAppsAvailability::IsArcAccountRestrictionsEnabled()) { + if (AccountAppsAvailability::IsArcAccountRestrictionsEnabled()) { account.SetIsAvailableInArc(arc_accounts.contains(stored_account)); } @@ -450,7 +449,7 @@ DCHECK(email); DCHECK(!email->empty()); - ShowToast(kAccountRemovedToastId, ash::ToastCatalogName::kAccountRemoved, + ShowToast(kAccountRemovedToastId, ToastCatalogName::kAccountRemoved, l10n_util::GetStringFUTF16( IDS_SETTINGS_ACCOUNT_MANAGER_ACCOUNT_REMOVED_MESSAGE, base::UTF8ToUTF16(*email))); @@ -458,7 +457,7 @@ void AccountManagerUIHandler::HandleChangeArcAvailability( const base::Value::List& args) { - DCHECK(ash::AccountAppsAvailability::IsArcAccountRestrictionsEnabled()); + DCHECK(AccountAppsAvailability::IsArcAccountRestrictionsEnabled()); // 2 args: account, is_available. CHECK_GT(args.size(), 1u); @@ -551,5 +550,4 @@ FireWebUIListener("accounts-changed"); } -} // namespace settings -} // namespace chromeos +} // namespace ash::settings
diff --git a/chrome/browser/ui/webui/settings/ash/account_manager_ui_handler.h b/chrome/browser/ui/webui/settings/ash/account_manager_ui_handler.h index 4a1e43d..2a7afe4 100644 --- a/chrome/browser/ui/webui/settings/ash/account_manager_ui_handler.h +++ b/chrome/browser/ui/webui/settings/ash/account_manager_ui_handler.h
@@ -20,14 +20,13 @@ class Profile; -namespace chromeos { -namespace settings { +namespace ash::settings { class AccountManagerUIHandler : public ::settings::SettingsPageUIHandler, public account_manager::AccountManagerFacade::Observer, public signin::IdentityManager::Observer, - public ash::AccountAppsAvailability::Observer { + public AccountAppsAvailability::Observer { public: // Accepts non-owning pointers to |account_manager::AccountManager|, // |AccountManagerFacade| and |IdentityManager|. Both of these must outlive @@ -36,7 +35,7 @@ account_manager::AccountManager* account_manager, account_manager::AccountManagerFacade* account_manager_facade, signin::IdentityManager* identity_manager, - ash::AccountAppsAvailability* account_apps_availability); + AccountAppsAvailability* account_apps_availability); AccountManagerUIHandler(const AccountManagerUIHandler&) = delete; AccountManagerUIHandler& operator=(const AccountManagerUIHandler&) = delete; @@ -63,7 +62,7 @@ const CoreAccountInfo& account_info, const GoogleServiceAuthError& error) override; - // |ash::AccountAppsAvailability::Observer| overrides. + // |AccountAppsAvailability::Observer| overrides. void OnAccountAvailableInArc( const ::account_manager::Account& account) override; void OnAccountUnavailableInArc( @@ -136,7 +135,7 @@ // A non-owning pointer to |AccountAppsAvailability| which is a KeyedService // and should outlive this class. - ash::AccountAppsAvailability* account_apps_availability_ = nullptr; + AccountAppsAvailability* account_apps_availability_ = nullptr; // An observer for |AccountManagerFacade|. Automatically deregisters when // |this| is destructed. @@ -150,16 +149,20 @@ signin::IdentityManager::Observer> identity_manager_observation_{this}; - // An observer for |ash::AccountAppsAvailability|. Registered on + // An observer for |AccountAppsAvailability|. Registered on // |OnJavascriptAllowed| and deregistered on |OnJavascriptDisallowed|. - base::ScopedObservation<ash::AccountAppsAvailability, - ash::AccountAppsAvailability::Observer> + base::ScopedObservation<AccountAppsAvailability, + AccountAppsAvailability::Observer> account_apps_availability_observation_{this}; base::WeakPtrFactory<AccountManagerUIHandler> weak_factory_{this}; }; -} // namespace settings -} // namespace chromeos +} // namespace ash::settings + +// TODO(https://crbug.com/1164001): remove when the migration is finished. +namespace chromeos::settings { +using ::ash::settings::AccountManagerUIHandler; +} #endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_ASH_ACCOUNT_MANAGER_UI_HANDLER_H_
diff --git a/chrome/browser/ui/webui/settings/ash/account_manager_ui_handler_browsertest.cc b/chrome/browser/ui/webui/settings/ash/account_manager_ui_handler_browsertest.cc index 372bf1b9..c6481c3 100644 --- a/chrome/browser/ui/webui/settings/ash/account_manager_ui_handler_browsertest.cc +++ b/chrome/browser/ui/webui/settings/ash/account_manager_ui_handler_browsertest.cc
@@ -116,8 +116,7 @@ } // namespace -namespace chromeos { -namespace settings { +namespace ash::settings { class TestingAccountManagerUIHandler : public AccountManagerUIHandler { public: @@ -125,7 +124,7 @@ AccountManager* account_manager, account_manager::AccountManagerFacade* account_manager_facade, signin::IdentityManager* identity_manager, - ash::AccountAppsAvailability* apps_availability, + AccountAppsAvailability* apps_availability, content::WebUI* web_ui) : AccountManagerUIHandler(account_manager, account_manager_facade, @@ -223,8 +222,8 @@ GetDeviceAccountInfo().email, GetDeviceAccountInfo().token); } - ash::FakeChromeUserManager* GetFakeUserManager() const { - return static_cast<ash::FakeChromeUserManager*>( + FakeChromeUserManager* GetFakeUserManager() const { + return static_cast<FakeChromeUserManager*>( user_manager::UserManager::Get()); } @@ -423,7 +422,7 @@ : public AccountManagerUIHandlerTest { public: AccountManagerUIHandlerTestWithArcAccountRestrictions() { - feature_list_.InitAndEnableFeature(chromeos::features::kLacrosSupport); + feature_list_.InitAndEnableFeature(ash::features::kLacrosSupport); } void SetUpOnMainThread() override { @@ -433,7 +432,7 @@ ::GetAccountManagerFacade(profile()->GetPath().value()); account_apps_availability_ = - ash::AccountAppsAvailabilityFactory::GetForProfile(profile()); + AccountAppsAvailabilityFactory::GetForProfile(profile()); handler_ = std::make_unique<TestingAccountManagerUIHandler>( account_manager(), account_manager_facade, identity_manager(), @@ -486,13 +485,13 @@ return absl::nullopt; } - ash::AccountAppsAvailability* account_apps_availability() { + AccountAppsAvailability* account_apps_availability() { return account_apps_availability_; } private: base::test::ScopedFeatureList feature_list_; - ash::AccountAppsAvailability* account_apps_availability_; + AccountAppsAvailability* account_apps_availability_; std::unique_ptr<TestingAccountManagerUIHandler> handler_; }; @@ -636,5 +635,4 @@ GetGaiaDeviceAccountInfo(), GetChildDeviceAccountInfo())); -} // namespace settings -} // namespace chromeos +} // namespace ash::settings
diff --git a/chrome/browser/ui/webui/settings/ash/android_apps_handler.cc b/chrome/browser/ui/webui/settings/ash/android_apps_handler.cc index 21b6675..61d6a2a2 100644 --- a/chrome/browser/ui/webui/settings/ash/android_apps_handler.cc +++ b/chrome/browser/ui/webui/settings/ash/android_apps_handler.cc
@@ -19,8 +19,7 @@ #include "ui/display/screen.h" #include "ui/events/event_constants.h" -namespace chromeos { -namespace settings { +namespace ash::settings { AndroidAppsHandler::AndroidAppsHandler(Profile* profile, apps::AppServiceProxy* app_service_proxy) @@ -129,5 +128,4 @@ .id(); } -} // namespace settings -} // namespace chromeos +} // namespace ash::settings
diff --git a/chrome/browser/ui/webui/settings/ash/android_apps_handler.h b/chrome/browser/ui/webui/settings/ash/android_apps_handler.h index df4f4d8..11ea1e6e 100644 --- a/chrome/browser/ui/webui/settings/ash/android_apps_handler.h +++ b/chrome/browser/ui/webui/settings/ash/android_apps_handler.h
@@ -19,8 +19,7 @@ class Profile; -namespace chromeos { -namespace settings { +namespace ash::settings { class AndroidAppsHandler : public ::settings::SettingsPageUIHandler, public ArcAppListPrefs::Observer, @@ -67,7 +66,11 @@ base::WeakPtrFactory<AndroidAppsHandler> weak_ptr_factory_{this}; }; -} // namespace settings -} // namespace chromeos +} // namespace ash::settings + +// TODO(https://crbug.com/1164001): remove when the migration is finished. +namespace chromeos::settings { +using ::ash::settings::AndroidAppsHandler; +} #endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_ASH_ANDROID_APPS_HANDLER_H_
diff --git a/chrome/browser/ui/webui/settings/ash/apps_section.cc b/chrome/browser/ui/webui/settings/ash/apps_section.cc index 40c157f..eb5559c5 100644 --- a/chrome/browser/ui/webui/settings/ash/apps_section.cc +++ b/chrome/browser/ui/webui/settings/ash/apps_section.cc
@@ -439,8 +439,7 @@ void AppsSection::AddHandlers(content::WebUI* web_ui) { web_ui->AddMessageHandler( - std::make_unique<chromeos::settings::AndroidAppsHandler>( - profile(), app_service_proxy_)); + std::make_unique<AndroidAppsHandler>(profile(), app_service_proxy_)); if (arc::IsArcVmEnabled()) web_ui->AddMessageHandler(std::make_unique<GuestOsHandler>(profile()));
diff --git a/chrome/browser/ui/webui/settings/ash/bluetooth_handler.cc b/chrome/browser/ui/webui/settings/ash/bluetooth_handler.cc index 96963e00..57b3e6b 100644 --- a/chrome/browser/ui/webui/settings/ash/bluetooth_handler.cc +++ b/chrome/browser/ui/webui/settings/ash/bluetooth_handler.cc
@@ -11,7 +11,7 @@ #include "content/public/browser/web_ui.h" #include "device/bluetooth/bluetooth_adapter_factory.h" -namespace chromeos { +namespace ash { namespace { const char kRequestFastPairDeviceSupport[] = @@ -50,10 +50,9 @@ const base::Value::List& args) { AllowJavascript(); - base::Value is_supported( - ash::quick_pair::IsFastPairSupported(bluetooth_adapter_)); + base::Value is_supported(quick_pair::IsFastPairSupported(bluetooth_adapter_)); FireWebUIListener("fast-pair-device-supported-status", is_supported); } } // namespace settings -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ui/webui/settings/ash/bluetooth_handler.h b/chrome/browser/ui/webui/settings/ash/bluetooth_handler.h index f4886dba..23e02c4f 100644 --- a/chrome/browser/ui/webui/settings/ash/bluetooth_handler.h +++ b/chrome/browser/ui/webui/settings/ash/bluetooth_handler.h
@@ -10,8 +10,7 @@ #include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h" #include "device/bluetooth/bluetooth_adapter.h" -namespace chromeos { -namespace settings { +namespace ash::settings { // Chrome OS Bluetooth subpage UI handler. class BluetoothHandler : public ::settings::SettingsPageUIHandler { @@ -38,7 +37,11 @@ base::WeakPtrFactory<BluetoothHandler> weak_ptr_factory_{this}; }; -} // namespace settings -} // namespace chromeos +} // namespace ash::settings + +// TODO(https://crbug.com/1164001): remove when the migration is finished. +namespace chromeos::settings { +using ::ash::settings::BluetoothHandler; +} #endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_ASH_BLUETOOTH_HANDLER_H_
diff --git a/chrome/browser/ui/webui/settings/ash/bluetooth_handler_unittest.cc b/chrome/browser/ui/webui/settings/ash/bluetooth_handler_unittest.cc index bbd48ae1..a206b749b 100644 --- a/chrome/browser/ui/webui/settings/ash/bluetooth_handler_unittest.cc +++ b/chrome/browser/ui/webui/settings/ash/bluetooth_handler_unittest.cc
@@ -10,8 +10,7 @@ #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" -namespace chromeos { -namespace settings { +namespace ash::settings { namespace { @@ -74,5 +73,4 @@ EXPECT_FALSE(call_data.arg2()->GetBool()); } -} // namespace settings -} // namespace chromeos +} // namespace ash::settings
diff --git a/chrome/browser/ui/webui/settings/ash/calculator/size_calculator.cc b/chrome/browser/ui/webui/settings/ash/calculator/size_calculator.cc index e0e32ea..adae2f2e 100644 --- a/chrome/browser/ui/webui/settings/ash/calculator/size_calculator.cc +++ b/chrome/browser/ui/webui/settings/ash/calculator/size_calculator.cc
@@ -33,9 +33,7 @@ #include "components/user_manager/user_manager.h" #include "content/public/browser/storage_partition.h" -namespace chromeos { -namespace settings { -namespace calculator { +namespace ash::settings::calculator { namespace { @@ -441,6 +439,4 @@ NotifySizeCalculated(other_users_total_bytes); } -} // namespace calculator -} // namespace settings -} // namespace chromeos +} // namespace ash::settings::calculator
diff --git a/chrome/browser/ui/webui/settings/ash/calculator/size_calculator.h b/chrome/browser/ui/webui/settings/ash/calculator/size_calculator.h index 40196804..8788f70 100644 --- a/chrome/browser/ui/webui/settings/ash/calculator/size_calculator.h +++ b/chrome/browser/ui/webui/settings/ash/calculator/size_calculator.h
@@ -24,9 +24,7 @@ class Profile; -namespace chromeos { -namespace settings { -namespace calculator { +namespace ash::settings::calculator { // Base class for the calculation of a specific storage item. Instances of this // class rely on their observers calling StartCalculation, and are designed to @@ -324,8 +322,6 @@ base::WeakPtrFactory<OtherUsersSizeCalculator> weak_ptr_factory_{this}; }; -} // namespace calculator -} // namespace settings -} // namespace chromeos +} // namespace ash::settings::calculator #endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_ASH_CALCULATOR_SIZE_CALCULATOR_H_
diff --git a/chrome/browser/ui/webui/settings/ash/calculator/size_calculator_test_api.h b/chrome/browser/ui/webui/settings/ash/calculator/size_calculator_test_api.h index c021af59..be9824b 100644 --- a/chrome/browser/ui/webui/settings/ash/calculator/size_calculator_test_api.h +++ b/chrome/browser/ui/webui/settings/ash/calculator/size_calculator_test_api.h
@@ -11,9 +11,7 @@ #include "chrome/browser/ui/webui/settings/ash/device_storage_handler.h" #include "third_party/abseil-cpp/absl/types/optional.h" -namespace chromeos { -namespace settings { -namespace calculator { +namespace ash::settings::calculator { class TotalDiskSpaceTestAPI { public: @@ -156,8 +154,6 @@ OtherUsersSizeCalculator other_users_size_calculator_; }; -} // namespace calculator -} // namespace settings -} // namespace chromeos +} // namespace ash::settings::calculator #endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_ASH_CALCULATOR_SIZE_CALCULATOR_TEST_API_H_
diff --git a/chrome/browser/ui/webui/settings/ash/crostini_handler.cc b/chrome/browser/ui/webui/settings/ash/crostini_handler.cc index 1cf8a7f..36404f2f 100644 --- a/chrome/browser/ui/webui/settings/ash/crostini_handler.cc +++ b/chrome/browser/ui/webui/settings/ash/crostini_handler.cc
@@ -33,8 +33,7 @@ #include "content/public/browser/web_ui.h" #include "ui/display/screen.h" -namespace chromeos { -namespace settings { +namespace ash::settings { namespace { @@ -195,8 +194,8 @@ // Observe ADB sideloading device policy and react to its changes adb_sideloading_device_policy_subscription_ = - chromeos::CrosSettings::Get()->AddSettingsObserver( - chromeos::kDeviceCrostiniArcAdbSideloadingAllowed, + CrosSettings::Get()->AddSettingsObserver( + kDeviceCrostiniArcAdbSideloadingAllowed, base::BindRepeating(&CrostiniHandler::FetchCanChangeAdbSideloading, handler_weak_ptr_factory_.GetWeakPtr())); @@ -437,8 +436,7 @@ AllowJavascript(); CHECK_EQ(0U, args.size()); - chromeos::SessionManagerClient* client = - chromeos::SessionManagerClient::Get(); + SessionManagerClient* client = SessionManagerClient::Get(); client->QueryAdbSideload( base::BindOnce(&CrostiniHandler::OnQueryAdbSideload, handler_weak_ptr_factory_.GetWeakPtr())); @@ -859,5 +857,4 @@ ResolveJavascriptCallback(base::Value(callback_id), filePath); } -} // namespace settings -} // namespace chromeos +} // namespace ash::settings
diff --git a/chrome/browser/ui/webui/settings/ash/crostini_handler.h b/chrome/browser/ui/webui/settings/ash/crostini_handler.h index ecf27d9..e8b553d 100644 --- a/chrome/browser/ui/webui/settings/ash/crostini_handler.h +++ b/chrome/browser/ui/webui/settings/ash/crostini_handler.h
@@ -27,8 +27,7 @@ struct CrostiniDiskInfo; } // namespace crostini -namespace chromeos { -namespace settings { +namespace ash::settings { class CrostiniHandler : public ::settings::SettingsPageUIHandler, public crostini::CrostiniDialogStatusObserver, @@ -172,7 +171,11 @@ base::WeakPtrFactory<CrostiniHandler> callback_weak_ptr_factory_{this}; }; -} // namespace settings -} // namespace chromeos +} // namespace ash::settings + +// TODO(https://crbug.com/1164001): remove when the migration is finished. +namespace chromeos::settings { +using ::ash::settings::CrostiniHandler; +} #endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_ASH_CROSTINI_HANDLER_H_
diff --git a/chrome/browser/ui/webui/settings/ash/cups_printers_handler.cc b/chrome/browser/ui/webui/settings/ash/cups_printers_handler.cc index 6549421..6759cb6 100644 --- a/chrome/browser/ui/webui/settings/ash/cups_printers_handler.cc +++ b/chrome/browser/ui/webui/settings/ash/cups_printers_handler.cc
@@ -60,12 +60,15 @@ #include "third_party/abseil-cpp/absl/types/optional.h" #include "url/gurl.h" -namespace chromeos { -namespace settings { +namespace ash::settings { namespace { -using printing::PrinterQueryResult; +using ::chromeos::PpdProvider; +using ::chromeos::Printer; +using ::chromeos::PrinterClass; +using ::chromeos::Uri; +using ::printing::PrinterQueryResult; constexpr int kPpdMaxLineLength = 255; @@ -97,9 +100,9 @@ // located at |printer_uri|. Results are reported through |callback|. The // scheme of |printer_uri| must equal "ipp" or "ipps". void QueryAutoconf(const Uri& uri, PrinterInfoCallback callback) { - QueryIppPrinter(uri.GetHostEncoded(), uri.GetPort(), - uri.GetPathEncodedAsString(), uri.GetScheme() == kIppsScheme, - std::move(callback)); + QueryIppPrinter( + uri.GetHostEncoded(), uri.GetPort(), uri.GetPathEncodedAsString(), + uri.GetScheme() == chromeos::kIppsScheme, std::move(callback)); } // Returns the list of |printers| formatted as a CupsPrintersList. @@ -535,7 +538,8 @@ return; } - DCHECK(*printer_protocol == kIppScheme || *printer_protocol == kIppsScheme) + DCHECK(*printer_protocol == chromeos::kIppScheme || + *printer_protocol == chromeos::kIppsScheme) << "Printer info requests only supported for IPP and IPPS printers"; Uri uri(*printer_protocol + url::kStandardSchemeSeparator + *printer_address + @@ -561,7 +565,7 @@ const std::string& make_and_model, const std::vector<std::string>& /*document_formats*/, bool ipp_everywhere, - const PrinterAuthenticationInfo& /*auth_info*/) { + const chromeos::PrinterAuthenticationInfo& /*auth_info*/) { RecordIppQueryResult(result); const bool success = result == PrinterQueryResult::kSuccess; @@ -602,7 +606,7 @@ const std::string& make_and_model, const std::vector<std::string>& document_formats, bool ipp_everywhere, - const PrinterAuthenticationInfo& /*auth_info*/) { + const chromeos::PrinterAuthenticationInfo& /*auth_info*/) { RecordIppQueryResult(result); const bool success = result == PrinterQueryResult::kSuccess; @@ -639,9 +643,9 @@ return; } - PrinterSearchData ppd_search_data; + chromeos::PrinterSearchData ppd_search_data; ppd_search_data.discovery_type = - PrinterSearchData::PrinterDiscoveryType::kManual; + chromeos::PrinterSearchData::PrinterDiscoveryType::kManual; ppd_search_data.make_and_model.push_back(make_and_model); ppd_search_data.supported_document_formats = document_formats; @@ -1007,7 +1011,7 @@ void CupsPrintersHandler::VerifyPpdContents(const base::FilePath& path, const std::string& contents) { std::string result; - if (PpdLineReader::ContainsMagicNumber(contents, kPpdMaxLineLength)) + if (chromeos::PpdLineReader::ContainsMagicNumber(contents, kPpdMaxLineLength)) result = path.value(); ResolveJavascriptCallback(base::Value(webui_callback_id_), @@ -1366,5 +1370,4 @@ chrome::ShowScanningApp(profile_); } -} // namespace settings -} // namespace chromeos +} // namespace ash::settings
diff --git a/chrome/browser/ui/webui/settings/ash/cups_printers_handler.h b/chrome/browser/ui/webui/settings/ash/cups_printers_handler.h index a1ddab8..61b72065 100644 --- a/chrome/browser/ui/webui/settings/ash/cups_printers_handler.h +++ b/chrome/browser/ui/webui/settings/ash/cups_printers_handler.h
@@ -15,8 +15,6 @@ #include "chrome/browser/ash/printing/cups_printers_manager.h" #include "chrome/browser/ash/printing/printer_configurer.h" #include "chrome/browser/ash/printing/printer_event_tracker.h" -// TODO(https://crbug.com/1164001): remove and use forward declaration. -#include "chrome/browser/ash/printing/server_printers_fetcher.h" #include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h" #include "chromeos/printing/ppd_provider.h" #include "chromeos/printing/printer_configuration.h" @@ -27,6 +25,10 @@ class FilePath; } // namespace base +namespace chromeos { +struct PrinterAuthenticationInfo; +} + namespace local_discovery { class EndpointResolver; } // namespace local_discovery @@ -38,9 +40,9 @@ class GURL; class Profile; -namespace chromeos { +namespace ash { -struct PrinterAuthenticationInfo; +class ServerPrintersFetcher; namespace settings { @@ -51,7 +53,7 @@ public: static std::unique_ptr<CupsPrintersHandler> CreateForTesting( Profile* profile, - scoped_refptr<PpdProvider> ppd_provider, + scoped_refptr<chromeos::PpdProvider> ppd_provider, std::unique_ptr<PrinterConfigurer> printer_configurer, CupsPrintersManager* printers_manager); @@ -71,7 +73,7 @@ private: CupsPrintersHandler(Profile* profile, - scoped_refptr<PpdProvider> ppd_provider, + scoped_refptr<chromeos::PpdProvider> ppd_provider, std::unique_ptr<PrinterConfigurer> printer_configurer, CupsPrintersManager* printers_manager); @@ -100,24 +102,24 @@ const std::string& make_and_model, const std::vector<std::string>& document_formats, bool ipp_everywhere, - const PrinterAuthenticationInfo& auth_info); + const chromeos::PrinterAuthenticationInfo& auth_info); // Handles the callback for HandleGetPrinterInfo for a discovered printer. void OnAutoconfQueriedDiscovered( const std::string& callback_id, - Printer printer, + chromeos::Printer printer, printing::PrinterQueryResult result, const printing::PrinterStatus& printer_status, const std::string& make_and_model, const std::vector<std::string>& document_formats, bool ipp_everywhere, - const PrinterAuthenticationInfo& auth_info); + const chromeos::PrinterAuthenticationInfo& auth_info); // Callback for PPD matching attempts; void OnPpdResolved(const std::string& callback_id, base::Value::Dict info, - PpdProvider::CallbackResultCode res, - const Printer::PpdReference& ppd_ref, + chromeos::PpdProvider::CallbackResultCode res, + const chromeos::Printer::PpdReference& ppd_ref, const std::string& usb_manufacturer); void HandleAddCupsPrinter(const base::Value::List& args); @@ -130,7 +132,7 @@ // Handles the result of adding a printer which the user specified the // location of (i.e. a printer that was not 'discovered' automatically). void OnAddedOrEditedSpecifiedPrinter(const std::string& callback_id, - const Printer& printer, + const chromeos::Printer& printer, bool is_printer_edit, PrinterSetupResult result); @@ -153,14 +155,16 @@ void HandleSelectPPDFile(const base::Value::List& args); - // PpdProvider callback handlers. - void ResolveManufacturersDone(const std::string& callback_id, - PpdProvider::CallbackResultCode result_code, - const std::vector<std::string>& available); - void ResolvePrintersDone(const std::string& manufacturer, - const std::string& callback_id, - PpdProvider::CallbackResultCode result_code, - const PpdProvider::ResolvedPrintersList& printers); + // chromeos::PpdProvider callback handlers. + void ResolveManufacturersDone( + const std::string& callback_id, + chromeos::PpdProvider::CallbackResultCode result_code, + const std::vector<std::string>& available); + void ResolvePrintersDone( + const std::string& manufacturer, + const std::string& callback_id, + chromeos::PpdProvider::CallbackResultCode result_code, + const chromeos::PpdProvider::ResolvedPrintersList& printers); void HandleStartDiscovery(const base::Value::List& args); void HandleStopDiscovery(const base::Value::List& args); @@ -172,7 +176,7 @@ void HandleGetPrinterPpdManufacturerAndModel(const base::Value::List& args); void OnGetPrinterPpdManufacturerAndModel( const std::string& callback_id, - PpdProvider::CallbackResultCode result_code, + chromeos::PpdProvider::CallbackResultCode result_code, const std::string& manufacturer, const std::string& model); @@ -190,24 +194,25 @@ // Post printer setup callback. void OnAddedDiscoveredPrinter(const std::string& callback_id, - const Printer& printer, + const chromeos::Printer& printer, PrinterSetupResult result_code); // Code common between the discovered and manual add printer code paths. - void OnAddedOrEditedPrinterCommon(const Printer& printer, + void OnAddedOrEditedPrinterCommon(const chromeos::Printer& printer, PrinterSetupResult result_code, bool is_automatic); // CupsPrintersManager::Observer override: - void OnPrintersChanged(PrinterClass printer_class, - const std::vector<Printer>& printers) override; + void OnPrintersChanged( + chromeos::PrinterClass printer_class, + const std::vector<chromeos::Printer>& printers) override; // Handles getting the EULA URL if available. void HandleGetEulaUrl(const base::Value::List& args); // Post EULA URL callback. void OnGetEulaUrl(const std::string& callback_id, - PpdProvider::CallbackResultCode result, + chromeos::PpdProvider::CallbackResultCode result, const std::string& eula_url); // ui::SelectFileDialog::Listener override: @@ -225,10 +230,10 @@ // Fires the on-manually-add-discovered-printer event with the appropriate // parameters. See https://crbug.com/835476 - void FireManuallyAddDiscoveredPrinter(const Printer& printer); + void FireManuallyAddDiscoveredPrinter(const chromeos::Printer& printer); void OnIpResolved(const std::string& callback_id, - const Printer& printer, + const chromeos::Printer& printer, const net::IPEndPoint& endpoint); void HandleQueryPrintServer(const base::Value::List& args); @@ -254,19 +259,20 @@ // currently wants updates about printer availability. The two vectors track // the most recent list of printers in each class. bool discovery_active_ = false; - std::vector<Printer> discovered_printers_; - std::vector<Printer> automatic_printers_; + std::vector<chromeos::Printer> discovered_printers_; + std::vector<chromeos::Printer> automatic_printers_; // These must be initialized before printers_manager_, as they are // used by callbacks that may be issued immediately by printers_manager_. // // TODO(crbug/757887) - Remove this subtle initialization constraint. - scoped_refptr<PpdProvider> ppd_provider_; + scoped_refptr<chromeos::PpdProvider> ppd_provider_; std::unique_ptr<PrinterConfigurer> printer_configurer_; // Cached list of {printer name, PpdReference} pairs for each manufacturer // that has been resolved in the lifetime of this object. - std::map<std::string, PpdProvider::ResolvedPrintersList> resolved_printers_; + std::map<std::string, chromeos::PpdProvider::ResolvedPrintersList> + resolved_printers_; scoped_refptr<ui::SelectFileDialog> select_file_dialog_; std::string webui_callback_id_; @@ -282,6 +288,11 @@ }; } // namespace settings -} // namespace chromeos +} // namespace ash + +// TODO(https://crbug.com/1164001): remove when the migration is finished. +namespace chromeos::settings { +using ::ash::settings::CupsPrintersHandler; +} #endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_ASH_CUPS_PRINTERS_HANDLER_H_
diff --git a/chrome/browser/ui/webui/settings/ash/cups_printers_handler_unittest.cc b/chrome/browser/ui/webui/settings/ash/cups_printers_handler_unittest.cc index 04b72839..ee63d228 100644 --- a/chrome/browser/ui/webui/settings/ash/cups_printers_handler_unittest.cc +++ b/chrome/browser/ui/webui/settings/ash/cups_printers_handler_unittest.cc
@@ -27,8 +27,9 @@ #include "ui/shell_dialogs/select_file_dialog_factory.h" #include "url/gurl.h" -namespace chromeos { -namespace settings { +namespace ash::settings { + +using ::chromeos::Printer; class CupsPrintersHandlerTest; @@ -52,14 +53,14 @@ } }; -class FakePpdProvider : public PpdProvider { +class FakePpdProvider : public chromeos::PpdProvider { public: FakePpdProvider() = default; void ResolveManufacturers(ResolveManufacturersCallback cb) override {} void ResolvePrinters(const std::string& manufacturer, ResolvePrintersCallback cb) override {} - void ResolvePpdReference(const PrinterSearchData& search_data, + void ResolvePpdReference(const chromeos::PrinterSearchData& search_data, ResolvePpdReferenceCallback cb) override {} void ResolvePpd(const Printer::PpdReference& reference, ResolvePpdCallback cb) override {} @@ -247,5 +248,4 @@ web_ui_.HandleReceivedMessage("selectPPDFile", args); } -} // namespace settings. -} // namespace chromeos. +} // namespace ash::settings
diff --git a/chrome/browser/ui/webui/settings/ash/date_time_handler.cc b/chrome/browser/ui/webui/settings/ash/date_time_handler.cc index 09a51f4c..0bd46a91 100644 --- a/chrome/browser/ui/webui/settings/ash/date_time_handler.cc +++ b/chrome/browser/ui/webui/settings/ash/date_time_handler.cc
@@ -26,8 +26,7 @@ #include "content/public/browser/web_contents.h" #include "content/public/browser/web_ui.h" -namespace chromeos { -namespace settings { +namespace ash::settings { namespace { @@ -144,16 +143,16 @@ DCHECK(user_manager::UserManager::Get()->GetActiveUser()->IsChild()); if (!parent_access::ParentAccessService::IsApprovalRequired( - ash::SupervisedAction::kUpdateTimezone)) { + SupervisedAction::kUpdateTimezone)) { OnParentAccessValidation(true); return; } - ash::ParentAccessController::Get()->ShowWidget( + ParentAccessController::Get()->ShowWidget( user_manager::UserManager::Get()->GetActiveUser()->GetAccountId(), base::BindOnce(&DateTimeHandler::OnParentAccessValidation, weak_ptr_factory_.GetWeakPtr()), - ash::SupervisedAction::kUpdateTimezone, false /* extra_dimmer */, + SupervisedAction::kUpdateTimezone, false /* extra_dimmer */, base::Time::Now()); } @@ -176,5 +175,4 @@ FireWebUIListener("can-set-date-time-changed", base::Value(can_set_time)); } -} // namespace settings -} // namespace chromeos +} // namespace ash::settings
diff --git a/chrome/browser/ui/webui/settings/ash/date_time_handler.h b/chrome/browser/ui/webui/settings/ash/date_time_handler.h index 45ff265..960295b 100644 --- a/chrome/browser/ui/webui/settings/ash/date_time_handler.h +++ b/chrome/browser/ui/webui/settings/ash/date_time_handler.h
@@ -12,8 +12,7 @@ #include "chromeos/ash/components/dbus/system_clock/system_clock_client.h" #include "components/prefs/pref_change_registrar.h" -namespace chromeos { -namespace settings { +namespace ash::settings { // Chrome OS date and time settings page UI handler. class DateTimeHandler : public ::settings::SettingsPageUIHandler, @@ -66,7 +65,11 @@ base::WeakPtrFactory<DateTimeHandler> weak_ptr_factory_{this}; }; -} // namespace settings -} // namespace chromeos +} // namespace ash::settings + +// TODO(https://crbug.com/1164001): remove when the migration is finished. +namespace chromeos::settings { +using ::ash::settings::DateTimeHandler; +} #endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_ASH_DATE_TIME_HANDLER_H_
diff --git a/chrome/browser/ui/webui/settings/ash/device_display_handler.cc b/chrome/browser/ui/webui/settings/ash/device_display_handler.cc index df7a347..0210b3d 100644 --- a/chrome/browser/ui/webui/settings/ash/device_display_handler.cc +++ b/chrome/browser/ui/webui/settings/ash/device_display_handler.cc
@@ -11,11 +11,10 @@ #include "content/public/browser/web_ui.h" #include "ui/display/types/display_constants.h" -namespace chromeos { -namespace settings { +namespace ash::settings { DisplayHandler::DisplayHandler() { - ash::BindCrosDisplayConfigController( + BindCrosDisplayConfigController( cros_display_config_.BindNewPipeAndPassReceiver()); } @@ -66,5 +65,4 @@ cros_display_config_->DragDisplayDelta(display_id, delta_x, delta_y); } -} // namespace settings -} // namespace chromeos +} // namespace ash::settings
diff --git a/chrome/browser/ui/webui/settings/ash/device_display_handler.h b/chrome/browser/ui/webui/settings/ash/device_display_handler.h index 5e4ed29..30ec4b86 100644 --- a/chrome/browser/ui/webui/settings/ash/device_display_handler.h +++ b/chrome/browser/ui/webui/settings/ash/device_display_handler.h
@@ -10,8 +10,7 @@ #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/remote.h" -namespace chromeos { -namespace settings { +namespace ash::settings { // Chrome OS "Displays" settings page UI handler. class DisplayHandler : public ::settings::SettingsPageUIHandler { @@ -34,7 +33,11 @@ cros_display_config_; }; -} // namespace settings -} // namespace chromeos +} // namespace ash::settings + +// TODO(https://crbug.com/1164001): remove when the migration is finished. +namespace chromeos::settings { +using ::ash::settings::DisplayHandler; +} #endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_ASH_DEVICE_DISPLAY_HANDLER_H_
diff --git a/chrome/browser/ui/webui/settings/ash/device_keyboard_handler.cc b/chrome/browser/ui/webui/settings/ash/device_keyboard_handler.cc index 9310b07..b03813c 100644 --- a/chrome/browser/ui/webui/settings/ash/device_keyboard_handler.cc +++ b/chrome/browser/ui/webui/settings/ash/device_keyboard_handler.cc
@@ -53,8 +53,7 @@ } // namespace -namespace chromeos { -namespace settings { +namespace ash::settings { const char KeyboardHandler::kShowKeysChangedName[] = "show-keys-changed"; @@ -105,7 +104,7 @@ void KeyboardHandler::HandleShowKeyboardShortcutViewer( const base::Value::List& args) const { - ash::ToggleKeyboardShortcutViewer(); + ToggleKeyboardShortcutViewer(); } void KeyboardHandler::HandleKeyboardChange(const base::Value::List& args) { @@ -116,7 +115,7 @@ void KeyboardHandler::UpdateKeyboards() { bool physical_keyboard = false; // In tablet mode, physical keybards are disabled / ignored. - if (!ash::TabletMode::Get() || !ash::TabletMode::Get()->InTabletMode()) { + if (!TabletMode::Get() || !TabletMode::Get()->InTabletMode()) { physical_keyboard = true; } if (!physical_keyboard) { @@ -158,5 +157,4 @@ FireWebUIListener(kShowKeysChangedName, keyboard_params); } -} // namespace settings -} // namespace chromeos +} // namespace ash::settings
diff --git a/chrome/browser/ui/webui/settings/ash/device_keyboard_handler.h b/chrome/browser/ui/webui/settings/ash/device_keyboard_handler.h index 93bfa491..ae276b89 100644 --- a/chrome/browser/ui/webui/settings/ash/device_keyboard_handler.h +++ b/chrome/browser/ui/webui/settings/ash/device_keyboard_handler.h
@@ -10,8 +10,7 @@ #include "ui/events/devices/device_data_manager.h" #include "ui/events/devices/input_device_event_observer.h" -namespace chromeos { -namespace settings { +namespace ash::settings { // Chrome OS "Keyboard" settings page UI handler. class KeyboardHandler @@ -73,7 +72,11 @@ observation_{this}; }; -} // namespace settings -} // namespace chromeos +} // namespace ash::settings + +// TODO(https://crbug.com/1164001): remove when the migration is finished. +namespace chromeos::settings { +using ::ash::settings::KeyboardHandler; +} #endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_ASH_DEVICE_KEYBOARD_HANDLER_H_
diff --git a/chrome/browser/ui/webui/settings/ash/device_keyboard_handler_unittest.cc b/chrome/browser/ui/webui/settings/ash/device_keyboard_handler_unittest.cc index 661c2eef..7cf45e1b 100644 --- a/chrome/browser/ui/webui/settings/ash/device_keyboard_handler_unittest.cc +++ b/chrome/browser/ui/webui/settings/ash/device_keyboard_handler_unittest.cc
@@ -19,8 +19,7 @@ #include "ui/events/devices/device_data_manager_test_api.h" #include "ui/events/devices/input_device.h" -namespace chromeos { -namespace settings { +namespace ash::settings { namespace { @@ -331,5 +330,4 @@ EXPECT_FALSE(HasAssistantKey()); } -} // namespace settings -} // namespace chromeos +} // namespace ash::settings
diff --git a/chrome/browser/ui/webui/settings/ash/device_name_handler.cc b/chrome/browser/ui/webui/settings/ash/device_name_handler.cc index 2f63f36..c8685cd6 100644 --- a/chrome/browser/ui/webui/settings/ash/device_name_handler.cc +++ b/chrome/browser/ui/webui/settings/ash/device_name_handler.cc
@@ -11,8 +11,7 @@ #include "chrome/browser/ash/device_name/device_name_store.h" #include "content/public/browser/web_ui.h" -namespace chromeos { -namespace settings { +namespace ash::settings { namespace { @@ -87,5 +86,4 @@ GetDeviceNameMetadata()); } -} // namespace settings -} // namespace chromeos +} // namespace ash::settings
diff --git a/chrome/browser/ui/webui/settings/ash/device_name_handler.h b/chrome/browser/ui/webui/settings/ash/device_name_handler.h index 6bd89d1..f454fe58 100644 --- a/chrome/browser/ui/webui/settings/ash/device_name_handler.h +++ b/chrome/browser/ui/webui/settings/ash/device_name_handler.h
@@ -9,8 +9,7 @@ #include "chrome/browser/ash/device_name/device_name_store.h" #include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h" -namespace chromeos { -namespace settings { +namespace ash::settings { // DeviceNameHandler handles calls from WebUI JS related to getting and setting // the device name. @@ -49,7 +48,11 @@ observation_{this}; }; -} // namespace settings -} // namespace chromeos +} // namespace ash::settings + +// TODO(https://crbug.com/1164001): remove when the migration is finished. +namespace chromeos::settings { +using ::ash::settings::DeviceNameHandler; +} #endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_ASH_DEVICE_NAME_HANDLER_H_
diff --git a/chrome/browser/ui/webui/settings/ash/device_name_handler_unittest.cc b/chrome/browser/ui/webui/settings/ash/device_name_handler_unittest.cc index cc657b5..3d9da026 100644 --- a/chrome/browser/ui/webui/settings/ash/device_name_handler_unittest.cc +++ b/chrome/browser/ui/webui/settings/ash/device_name_handler_unittest.cc
@@ -14,8 +14,7 @@ #include "content/public/test/test_web_ui.h" #include "testing/gtest/include/gtest/gtest.h" -namespace chromeos { -namespace settings { +namespace ash::settings { class TestDeviceNameHandler : public DeviceNameHandler { public: @@ -205,5 +204,4 @@ DeviceNameStore::DeviceNameState::kCannotBeModifiedBecauseNotDeviceOwner); } -} // namespace settings -} // namespace chromeos +} // namespace ash::settings
diff --git a/chrome/browser/ui/webui/settings/ash/device_pointer_handler.cc b/chrome/browser/ui/webui/settings/ash/device_pointer_handler.cc index 4c92cf5..71b7cbd 100644 --- a/chrome/browser/ui/webui/settings/ash/device_pointer_handler.cc +++ b/chrome/browser/ui/webui/settings/ash/device_pointer_handler.cc
@@ -8,8 +8,7 @@ #include "base/values.h" #include "content/public/browser/web_ui.h" -namespace chromeos { -namespace settings { +namespace ash::settings { PointerHandler::PointerHandler() {} @@ -59,5 +58,4 @@ pointer_device_observer_->CheckDevices(); } -} // namespace settings -} // namespace chromeos +} // namespace ash::settings
diff --git a/chrome/browser/ui/webui/settings/ash/device_pointer_handler.h b/chrome/browser/ui/webui/settings/ash/device_pointer_handler.h index b9afae1..f061ba77 100644 --- a/chrome/browser/ui/webui/settings/ash/device_pointer_handler.h +++ b/chrome/browser/ui/webui/settings/ash/device_pointer_handler.h
@@ -10,13 +10,11 @@ #include "chrome/browser/ash/system/pointer_device_observer.h" #include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h" -namespace chromeos { -namespace settings { +namespace ash::settings { // Chrome OS "Mouse and touchpad" settings page UI handler. -class PointerHandler - : public ::settings::SettingsPageUIHandler, - public chromeos::system::PointerDeviceObserver::Observer { +class PointerHandler : public ::settings::SettingsPageUIHandler, + public system::PointerDeviceObserver::Observer { public: PointerHandler(); @@ -40,11 +38,14 @@ // Initializes the page with the current pointer information. void HandleInitialize(const base::Value::List& args); - std::unique_ptr<chromeos::system::PointerDeviceObserver> - pointer_device_observer_; + std::unique_ptr<system::PointerDeviceObserver> pointer_device_observer_; }; -} // namespace settings -} // namespace chromeos +} // namespace ash::settings + +// TODO(https://crbug.com/1164001): remove when the migration is finished. +namespace chromeos::settings { +using ::ash::settings::PointerHandler; +} #endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_ASH_DEVICE_POINTER_HANDLER_H_
diff --git a/chrome/browser/ui/webui/settings/ash/device_power_handler.cc b/chrome/browser/ui/webui/settings/ash/device_power_handler.cc index 373c729b..65c5c4f 100644 --- a/chrome/browser/ui/webui/settings/ash/device_power_handler.cc +++ b/chrome/browser/ui/webui/settings/ash/device_power_handler.cc
@@ -25,14 +25,17 @@ #include "ui/base/l10n/time_format.h" #include "ui/base/webui/web_ui_util.h" -namespace chromeos { -namespace settings { +namespace ash::settings { + namespace { +using ::chromeos::PowerManagerClient; +using ::chromeos::PowerPolicyController; + std::u16string GetBatteryTimeText(base::TimeDelta time_left) { int hour = 0; int min = 0; - ash::power_utils::SplitTimeIntoHoursAndMinutes(time_left, &hour, &min); + power_utils::SplitTimeIntoHoursAndMinutes(time_left, &hour, &min); std::u16string time_text; if (hour == 0 || min == 0) { @@ -323,15 +326,14 @@ bool charging = proto->battery_state() == power_manager::PowerSupplyProperties_BatteryState_CHARGING; bool calculating = proto->is_calculating_battery_time(); - int percent = - ash::power_utils::GetRoundedBatteryPercent(proto->battery_percent()); + int percent = power_utils::GetRoundedBatteryPercent(proto->battery_percent()); base::TimeDelta time_left; bool show_time = false; if (!calculating) { time_left = base::Seconds(charging ? proto->battery_time_to_full_sec() : proto->battery_time_to_empty_sec()); - show_time = ash::power_utils::ShouldDisplayBatteryTime(time_left); + show_time = power_utils::ShouldDisplayBatteryTime(time_left); } std::u16string status_text; @@ -608,5 +610,4 @@ } } -} // namespace settings -} // namespace chromeos +} // namespace ash::settings
diff --git a/chrome/browser/ui/webui/settings/ash/device_power_handler.h b/chrome/browser/ui/webui/settings/ash/device_power_handler.h index 8b5141b2..6026bc5 100644 --- a/chrome/browser/ui/webui/settings/ash/device_power_handler.h +++ b/chrome/browser/ui/webui/settings/ash/device_power_handler.h
@@ -22,12 +22,11 @@ class TimeTicks; } // namespace base -namespace chromeos { -namespace settings { +namespace ash::settings { // Chrome OS battery status and power settings handler. class PowerHandler : public ::settings::SettingsPageUIHandler, - public PowerManagerClient::Observer { + public chromeos::PowerManagerClient::Observer { public: // Idle behaviors presented in the UI. These are mapped to preferences by // HandleSetIdleBehavior(). Values are shared with JS and exposed here for @@ -67,7 +66,7 @@ // Sets AC idle behavior to |behavior| if |when_on_ac| is true. Otherwise // sets battery idle behavior to |behavior|. void SetIdleBehavior(IdleBehavior behavior, bool when_on_ac); - void SetLidClosedBehavior(PowerPolicyController::Action behavior); + void SetLidClosedBehavior(chromeos::PowerPolicyController::Action behavior); void SetAdaptiveCharging(bool enabled); private: @@ -86,10 +85,10 @@ void OnJavascriptAllowed() override; void OnJavascriptDisallowed() override; - // PowerManagerClient implementation. + // chromeos::PowerManagerClient implementation. void PowerChanged(const power_manager::PowerSupplyProperties& proto) override; void PowerManagerRestarted() override; - void LidEventReceived(PowerManagerClient::LidState state, + void LidEventReceived(chromeos::PowerManagerClient::LidState state, base::TimeTicks timestamp) override; private: @@ -150,7 +149,7 @@ // Callback used to receive switch states from PowerManagerClient. void OnGotSwitchStates( - absl::optional<PowerManagerClient::SwitchStates> result); + absl::optional<chromeos::PowerManagerClient::SwitchStates> result); // Returns all possible idle behaviors (that a user can choose from) and // current idle behavior based on enterprise policy and other factors when on @@ -166,19 +165,21 @@ // Used to watch power management prefs for changes so the UI can be notified. std::unique_ptr<PrefChangeRegistrar> pref_change_registrar_; - base::ScopedObservation<PowerManagerClient, PowerManagerClient::Observer> + base::ScopedObservation<chromeos::PowerManagerClient, + chromeos::PowerManagerClient::Observer> power_manager_client_observation_{this}; // Last lid state received from powerd. - PowerManagerClient::LidState lid_state_ = PowerManagerClient::LidState::OPEN; + chromeos::PowerManagerClient::LidState lid_state_ = + chromeos::PowerManagerClient::LidState::OPEN; // Last values sent by SendPowerManagementSettings(), cached here so // SendPowerManagementSettings() can avoid spamming the UI after this class // changes multiple prefs at once. IdleBehaviorInfo last_ac_idle_info_; IdleBehaviorInfo last_battery_idle_info_; - PowerPolicyController::Action last_lid_closed_behavior_ = - PowerPolicyController::ACTION_SUSPEND; + chromeos::PowerPolicyController::Action last_lid_closed_behavior_ = + chromeos::PowerPolicyController::ACTION_SUSPEND; bool last_lid_closed_controlled_ = false; bool last_has_lid_ = true; bool last_adaptive_charging_ = false; @@ -186,7 +187,11 @@ base::WeakPtrFactory<PowerHandler> weak_ptr_factory_{this}; }; -} // namespace settings -} // namespace chromeos +} // namespace ash::settings + +// TODO(https://crbug.com/1164001): remove when the migration is finished. +namespace chromeos::settings { +using ::ash::settings::PowerHandler; +} #endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_ASH_DEVICE_POWER_HANDLER_H_
diff --git a/chrome/browser/ui/webui/settings/ash/device_power_handler_browsertest.cc b/chrome/browser/ui/webui/settings/ash/device_power_handler_browsertest.cc index 7befbf96..645c746 100644 --- a/chrome/browser/ui/webui/settings/ash/device_power_handler_browsertest.cc +++ b/chrome/browser/ui/webui/settings/ash/device_power_handler_browsertest.cc
@@ -28,11 +28,12 @@ using testing::_; using testing::Return; -namespace chromeos { -namespace settings { +namespace ash::settings { namespace { +using ::chromeos::PowerPolicyController; + PrefService* GetPrefs() { return ProfileManager::GetActiveUserProfile()->GetPrefs(); } @@ -208,14 +209,14 @@ // Verifies that WebUI receives updated settings when the lid state changes. IN_PROC_BROWSER_TEST_F(PowerHandlerTest, SendSettingsForLidStateChanges) { chromeos::FakePowerManagerClient::Get()->SetLidState( - PowerManagerClient::LidState::NOT_PRESENT, base::TimeTicks()); + chromeos::PowerManagerClient::LidState::NOT_PRESENT, base::TimeTicks()); DevicePowerSettings settings; settings.has_lid = false; EXPECT_EQ(ToString(settings), GetLastSettingsChangedMessage()); chromeos::FakePowerManagerClient::Get()->SetLidState( - PowerManagerClient::LidState::OPEN, base::TimeTicks()); + chromeos::PowerManagerClient::LidState::OPEN, base::TimeTicks()); settings.has_lid = true; EXPECT_EQ(ToString(settings), GetLastSettingsChangedMessage()); } @@ -439,5 +440,4 @@ EXPECT_EQ(false, pref->GetValue()->GetBool()); } -} // namespace settings -} // namespace chromeos +} // namespace ash::settings
diff --git a/chrome/browser/ui/webui/settings/ash/device_section.cc b/chrome/browser/ui/webui/settings/ash/device_section.cc index 4e89340b..516b220 100644 --- a/chrome/browser/ui/webui/settings/ash/device_section.cc +++ b/chrome/browser/ui/webui/settings/ash/device_section.cc
@@ -920,16 +920,11 @@ } void DeviceSection::AddHandlers(content::WebUI* web_ui) { - web_ui->AddMessageHandler( - std::make_unique<chromeos::settings::DisplayHandler>()); - web_ui->AddMessageHandler( - std::make_unique<chromeos::settings::KeyboardHandler>()); - web_ui->AddMessageHandler( - std::make_unique<chromeos::settings::PointerHandler>()); - web_ui->AddMessageHandler( - std::make_unique<chromeos::settings::PowerHandler>(pref_service_)); - web_ui->AddMessageHandler( - std::make_unique<chromeos::settings::StylusHandler>()); + web_ui->AddMessageHandler(std::make_unique<DisplayHandler>()); + web_ui->AddMessageHandler(std::make_unique<KeyboardHandler>()); + web_ui->AddMessageHandler(std::make_unique<PointerHandler>()); + web_ui->AddMessageHandler(std::make_unique<PowerHandler>(pref_service_)); + web_ui->AddMessageHandler(std::make_unique<StylusHandler>()); } int DeviceSection::GetSectionNameMessageId() const {
diff --git a/chrome/browser/ui/webui/settings/ash/device_storage_handler.cc b/chrome/browser/ui/webui/settings/ash/device_storage_handler.cc index bfac87a..600e96ff 100644 --- a/chrome/browser/ui/webui/settings/ash/device_storage_handler.cc +++ b/chrome/browser/ui/webui/settings/ash/device_storage_handler.cc
@@ -24,13 +24,12 @@ #include "ui/base/l10n/l10n_util.h" #include "ui/base/text/bytes_formatting.h" -namespace chromeos { -namespace settings { +namespace ash::settings { namespace { -using ::ash::disks::Disk; -using ::ash::disks::DiskMountManager; +using disks::Disk; +using disks::DiskMountManager; constexpr char kAndroidEnabled[] = "androidEnabled"; // Dummy UUID for testing. The UUID is taken from @@ -212,9 +211,9 @@ void StorageHandler::OnMountEvent( DiskMountManager::MountEvent event, - ash::MountError error_code, + MountError error_code, const DiskMountManager::MountPoint& mount_info) { - if (error_code != ash::MountError::kNone) + if (error_code != MountError::kNone) return; if (!IsEligibleForAndroidStorage(mount_info.source_path)) @@ -381,5 +380,4 @@ return !RE2::FullMatch(source_path, special_volume_path_pattern_); } -} // namespace settings -} // namespace chromeos +} // namespace ash::settings
diff --git a/chrome/browser/ui/webui/settings/ash/device_storage_handler.h b/chrome/browser/ui/webui/settings/ash/device_storage_handler.h index 21fd8aae..7f5567d3 100644 --- a/chrome/browser/ui/webui/settings/ash/device_storage_handler.h +++ b/chrome/browser/ui/webui/settings/ash/device_storage_handler.h
@@ -25,8 +25,7 @@ enum class CrostiniResult; } // namespace crostini -namespace chromeos { -namespace settings { +namespace ash::settings { // Enumeration for device state about remaining space. These values must be // kept in sync with settings.StorageSpaceState in JS code. @@ -44,7 +43,7 @@ class StorageHandler : public ::settings::SettingsPageUIHandler, public arc::ArcSessionManagerObserver, - public ash::disks::DiskMountManager::Observer, + public disks::DiskMountManager::Observer, public calculator::SizeCalculator::Observer { public: StorageHandler(Profile* profile, content::WebUIDataSource* html_source); @@ -62,13 +61,13 @@ // arc::ArcSessionManagerObserver: void OnArcPlayStoreEnabledChanged(bool enabled) override; - // ash::disks::DiskMountManager::Observer: + // disks::DiskMountManager::Observer: void OnMountEvent( - ash::disks::DiskMountManager::MountEvent event, - ash::MountError error_code, - const ash::disks::DiskMountManager::MountPoint& mount_info) override; + disks::DiskMountManager::MountEvent event, + MountError error_code, + const disks::DiskMountManager::MountPoint& mount_info) override; - // chromeos::settings::calculator::SizeCalculator::Observer: + // calculator::SizeCalculator::Observer: void OnSizeCalculated( const calculator::SizeCalculator::CalculationType& calculation_type, int64_t total_bytes) override; @@ -129,7 +128,11 @@ base::WeakPtrFactory<StorageHandler> weak_ptr_factory_{this}; }; -} // namespace settings -} // namespace chromeos +} // namespace ash::settings + +// TODO(https://crbug.com/1164001): remove when the migration is finished. +namespace chromeos::settings { +using ::ash::settings::StorageHandler; +} #endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_ASH_DEVICE_STORAGE_HANDLER_H_
diff --git a/chrome/browser/ui/webui/settings/ash/device_storage_handler_unittest.cc b/chrome/browser/ui/webui/settings/ash/device_storage_handler_unittest.cc index 3e59b16..4b1d8fd8 100644 --- a/chrome/browser/ui/webui/settings/ash/device_storage_handler_unittest.cc +++ b/chrome/browser/ui/webui/settings/ash/device_storage_handler_unittest.cc
@@ -36,8 +36,7 @@ #include "testing/gtest/include/gtest/gtest.h" #include "ui/base/text/bytes_formatting.h" -namespace chromeos { -namespace settings { +namespace ash::settings { namespace { @@ -63,11 +62,11 @@ void SetUp() override { // Initialize fake DBus clients. ConciergeClient::InitializeFake(/*fake_cicerone_client=*/nullptr); - chromeos::SpacedClient::InitializeFake(); + SpacedClient::InitializeFake(); // The storage handler requires an instance of DiskMountManager, // ArcServiceManager and ArcSessionManager. - ash::disks::DiskMountManager::InitializeForTesting( + disks::DiskMountManager::InitializeForTesting( new file_manager::FakeDiskMountManager); arc_service_manager_ = std::make_unique<arc::ArcServiceManager>(); arc_session_manager_ = arc::CreateTestArcSessionManager( @@ -131,9 +130,9 @@ other_users_size_test_api_.reset(); arc_session_manager_.reset(); arc_service_manager_.reset(); - ash::disks::DiskMountManager::Shutdown(); + disks::DiskMountManager::Shutdown(); storage::ExternalMountPoints::GetSystemInstance()->RevokeAllFileSystems(); - chromeos::SpacedClient::Shutdown(); + SpacedClient::Shutdown(); ConciergeClient::Shutdown(); } @@ -526,5 +525,4 @@ } // namespace -} // namespace settings -} // namespace chromeos +} // namespace ash::settings
diff --git a/chrome/browser/ui/webui/settings/ash/device_storage_util.h b/chrome/browser/ui/webui/settings/ash/device_storage_util.h index 271e29b..f4c4a4b 100644 --- a/chrome/browser/ui/webui/settings/ash/device_storage_util.h +++ b/chrome/browser/ui/webui/settings/ash/device_storage_util.h
@@ -17,4 +17,9 @@ } // namespace chromeos::settings +// TODO(https://crbug.com/1164001): remove when it moved to ash. +namespace ash::settings { +using ::chromeos::settings::RoundByteSize; +} + #endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_ASH_DEVICE_STORAGE_UTIL_H_
diff --git a/chrome/browser/ui/webui/settings/ash/device_stylus_handler.cc b/chrome/browser/ui/webui/settings/ash/device_stylus_handler.cc index f436e00..cd2bd12b 100644 --- a/chrome/browser/ui/webui/settings/ash/device_stylus_handler.cc +++ b/chrome/browser/ui/webui/settings/ash/device_stylus_handler.cc
@@ -18,8 +18,7 @@ #include "chrome/browser/ui/app_list/arc/arc_app_utils.h" #include "components/services/app_service/public/cpp/features.h" -namespace chromeos { -namespace settings { +namespace ash::settings { namespace { @@ -154,7 +153,7 @@ void StylusHandler::SendHasStylus() { DCHECK(ui::DeviceDataManager::GetInstance()->AreDeviceListsComplete()); FireWebUIListener("has-stylus-changed", - base::Value(ash::stylus_utils::HasStylusInput())); + base::Value(stylus_utils::HasStylusInput())); } void StylusHandler::HandleShowPlayStoreApps(const base::Value::List& args) { @@ -178,5 +177,4 @@ } } -} // namespace settings -} // namespace chromeos +} // namespace ash::settings
diff --git a/chrome/browser/ui/webui/settings/ash/device_stylus_handler.h b/chrome/browser/ui/webui/settings/ash/device_stylus_handler.h index 4df2c6d..3caf04f 100644 --- a/chrome/browser/ui/webui/settings/ash/device_stylus_handler.h +++ b/chrome/browser/ui/webui/settings/ash/device_stylus_handler.h
@@ -14,8 +14,7 @@ #include "ui/events/devices/device_data_manager.h" #include "ui/events/devices/input_device_event_observer.h" -namespace chromeos { -namespace settings { +namespace ash::settings { // Chrome OS stylus settings handler. class StylusHandler : public ::settings::SettingsPageUIHandler, @@ -65,7 +64,11 @@ input_observation_{this}; }; -} // namespace settings -} // namespace chromeos +} // namespace ash::settings + +// TODO(https://crbug.com/1164001): remove when the migration is finished. +namespace chromeos::settings { +using ::ash::settings::StylusHandler; +} #endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_ASH_DEVICE_STYLUS_HANDLER_H_
diff --git a/chrome/browser/ui/webui/settings/ash/fast_pair_saved_devices_handler.cc b/chrome/browser/ui/webui/settings/ash/fast_pair_saved_devices_handler.cc index 3e9a7be..e87630a 100644 --- a/chrome/browser/ui/webui/settings/ash/fast_pair_saved_devices_handler.cc +++ b/chrome/browser/ui/webui/settings/ash/fast_pair_saved_devices_handler.cc
@@ -49,14 +49,14 @@ } // namespace -namespace chromeos::settings { +namespace ash::settings { FastPairSavedDevicesHandler::FastPairSavedDevicesHandler() - : image_decoder_( - std::make_unique<ash::quick_pair::FastPairImageDecoderImpl>()) {} + : image_decoder_(std::make_unique<quick_pair::FastPairImageDecoderImpl>()) { +} FastPairSavedDevicesHandler::FastPairSavedDevicesHandler( - std::unique_ptr<ash::quick_pair::FastPairImageDecoder> image_decoder) + std::unique_ptr<quick_pair::FastPairImageDecoder> image_decoder) : image_decoder_(std::move(image_decoder)) {} FastPairSavedDevicesHandler::~FastPairSavedDevicesHandler() = default; @@ -78,16 +78,15 @@ QP_LOG(VERBOSE) << __func__; std::vector<uint8_t> account_key; base::HexStringToBytes(args[0].GetString(), &account_key); - ash::quick_pair::FastPairRepository::Get() - ->DeleteAssociatedDeviceByAccountKey( - account_key, - base::BindOnce(&FastPairSavedDevicesHandler::OnSavedDeviceDeleted, - weak_ptr_factory_.GetWeakPtr())); + quick_pair::FastPairRepository::Get()->DeleteAssociatedDeviceByAccountKey( + account_key, + base::BindOnce(&FastPairSavedDevicesHandler::OnSavedDeviceDeleted, + weak_ptr_factory_.GetWeakPtr())); } void FastPairSavedDevicesHandler::OnSavedDeviceDeleted(bool success) { QP_LOG(INFO) << __func__ << ": " << (success ? "success" : "failed"); - ash::quick_pair::RecordSavedDevicesRemoveResult(/*success=*/success); + quick_pair::RecordSavedDevicesRemoveResult(/*success=*/success); } void FastPairSavedDevicesHandler::HandleLoadSavedDevicePage( @@ -102,7 +101,7 @@ loading_saved_device_page_ = true; loading_start_time_ = base::TimeTicks::Now(); - ash::quick_pair::FastPairRepository::Get()->GetSavedDevices( + quick_pair::FastPairRepository::Get()->GetSavedDevices( base::BindOnce(&FastPairSavedDevicesHandler::OnGetSavedDevices, weak_ptr_factory_.GetWeakPtr())); } @@ -123,13 +122,13 @@ if (devices.empty()) { QP_LOG(VERBOSE) << __func__ << ": No devices saved to the user's account"; base::Value::List saved_devices_list; - ash::quick_pair::RecordSavedDevicesCount( + quick_pair::RecordSavedDevicesCount( /*num_devices=*/saved_devices_list.size()); FireWebUIListener(kSavedDevicesListMessage, saved_devices_list); loading_saved_device_page_ = false; base::TimeDelta total_load_time = base::TimeTicks::Now() - loading_start_time_; - ash::quick_pair::RecordSavedDevicesTotalUxLoadTime(total_load_time); + quick_pair::RecordSavedDevicesTotalUxLoadTime(total_load_time); return; } @@ -228,13 +227,13 @@ /*account_key=*/account_key)); } - ash::quick_pair::RecordSavedDevicesCount( + quick_pair::RecordSavedDevicesCount( /*num_devices=*/saved_devices_list.size()); FireWebUIListener(kSavedDevicesListMessage, saved_devices_list); QP_LOG(VERBOSE) << __func__ << ": Sending device list"; base::TimeDelta total_load_time = base::TimeTicks::Now() - loading_start_time_; - ash::quick_pair::RecordSavedDevicesTotalUxLoadTime(total_load_time); + quick_pair::RecordSavedDevicesTotalUxLoadTime(total_load_time); // We reset the state here for another page load that may happened while // chrome://os-settings is open, since our decoding tasks are completed. @@ -248,4 +247,4 @@ void FastPairSavedDevicesHandler::OnJavascriptDisallowed() {} -} // namespace chromeos::settings +} // namespace ash::settings
diff --git a/chrome/browser/ui/webui/settings/ash/fast_pair_saved_devices_handler.h b/chrome/browser/ui/webui/settings/ash/fast_pair_saved_devices_handler.h index 4151e12..144c9893 100644 --- a/chrome/browser/ui/webui/settings/ash/fast_pair_saved_devices_handler.h +++ b/chrome/browser/ui/webui/settings/ash/fast_pair_saved_devices_handler.h
@@ -14,18 +14,20 @@ #include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h" #include "ui/gfx/image/image.h" -namespace ash::quick_pair { -class FastPairImageDecoder; -} // namespace ash::quick_pair +namespace ash { -namespace chromeos::settings { +namespace quick_pair { +class FastPairImageDecoder; +} + +namespace settings { // Chrome OS Fast Pair Saved Devices subpage UI handler. class FastPairSavedDevicesHandler : public ::settings::SettingsPageUIHandler { public: FastPairSavedDevicesHandler(); explicit FastPairSavedDevicesHandler( - std::unique_ptr<ash::quick_pair::FastPairImageDecoder> image_decoder); + std::unique_ptr<quick_pair::FastPairImageDecoder> image_decoder); FastPairSavedDevicesHandler(const FastPairSavedDevicesHandler&) = delete; FastPairSavedDevicesHandler& operator=(const FastPairSavedDevicesHandler&) = delete; @@ -52,7 +54,7 @@ std::unique_ptr<base::AtomicRefCount> pending_decoding_tasks_count_; std::vector<nearby::fastpair::FastPairDevice> devices_; - std::unique_ptr<ash::quick_pair::FastPairImageDecoder> image_decoder_; + std::unique_ptr<quick_pair::FastPairImageDecoder> image_decoder_; // For each device image, we need to convert the device image from the proto // into a base64 encoded data URL to be displayed in the settings UX because @@ -66,6 +68,12 @@ base::WeakPtrFactory<FastPairSavedDevicesHandler> weak_ptr_factory_{this}; }; -} // namespace chromeos::settings +} // namespace settings +} // namespace ash + +// TODO(https://crbug.com/1164001): remove when the migration is finished. +namespace chromeos::settings { +using ::ash::settings::FastPairSavedDevicesHandler; +} #endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_ASH_FAST_PAIR_SAVED_DEVICES_HANDLER_H_
diff --git a/chrome/browser/ui/webui/settings/ash/fast_pair_saved_devices_handler_unittest.cc b/chrome/browser/ui/webui/settings/ash/fast_pair_saved_devices_handler_unittest.cc index 612dbacd..ca3a948 100644 --- a/chrome/browser/ui/webui/settings/ash/fast_pair_saved_devices_handler_unittest.cc +++ b/chrome/browser/ui/webui/settings/ash/fast_pair_saved_devices_handler_unittest.cc
@@ -28,7 +28,7 @@ #include "testing/gtest/include/gtest/gtest.h" #include "ui/gfx/image/image_unittest_util.h" -namespace chromeos::settings { +namespace ash::settings { namespace { @@ -132,7 +132,7 @@ class TestFastPairSavedDevicesHandler : public FastPairSavedDevicesHandler { public: explicit TestFastPairSavedDevicesHandler( - std::unique_ptr<ash::quick_pair::FastPairImageDecoder> image_decoder) + std::unique_ptr<quick_pair::FastPairImageDecoder> image_decoder) : FastPairSavedDevicesHandler(std::move(image_decoder)) {} ~TestFastPairSavedDevicesHandler() override = default; @@ -159,7 +159,7 @@ test_image_ = gfx::test::CreateImage(100, 100); auto mock_decoder = - std::make_unique<ash::quick_pair::MockFastPairImageDecoder>(); + std::make_unique<quick_pair::MockFastPairImageDecoder>(); mock_decoder_ = mock_decoder.get(); // On call to DecodeImage, run the third argument callback with test_image_. ON_CALL(*mock_decoder, DecodeImage(testing::_, testing::_, testing::_)) @@ -170,7 +170,7 @@ handler_->set_web_ui(test_web_ui_.get()); handler_->RegisterMessages(); fast_pair_repository_ = - std::make_unique<ash::quick_pair::FakeFastPairRepository>(); + std::make_unique<quick_pair::FakeFastPairRepository>(); } content::TestWebUI* test_web_ui() { return test_web_ui_.get(); } @@ -278,10 +278,9 @@ protected: base::test::TaskEnvironment task_environment_; base::HistogramTester histogram_tester_; - std::unique_ptr<ash::quick_pair::FakeFastPairRepository> - fast_pair_repository_; + std::unique_ptr<quick_pair::FakeFastPairRepository> fast_pair_repository_; gfx::Image test_image_; - ash::quick_pair::MockFastPairImageDecoder* mock_decoder_; + quick_pair::MockFastPairImageDecoder* mock_decoder_; std::unique_ptr<content::TestWebUI> test_web_ui_; std::unique_ptr<TestFastPairSavedDevicesHandler> handler_; base::WeakPtrFactory<FastPairSavedDevicesHandlerTest> weak_ptr_factory_{this}; @@ -619,4 +618,4 @@ /*num_devices=*/3, 1); } -} // namespace chromeos::settings +} // namespace ash::settings
diff --git a/chrome/browser/ui/webui/settings/ash/fingerprint_handler.cc b/chrome/browser/ui/webui/settings/ash/fingerprint_handler.cc index ff028f6..8da3f0e 100644 --- a/chrome/browser/ui/webui/settings/ash/fingerprint_handler.cc +++ b/chrome/browser/ui/webui/settings/ash/fingerprint_handler.cc
@@ -26,8 +26,7 @@ using session_manager::SessionManager; using session_manager::SessionState; -namespace chromeos { -namespace settings { +namespace ash::settings { namespace { // The max number of fingerprints that can be stored. @@ -287,5 +286,4 @@ ResolveJavascriptCallback(base::Value(callback_id), base::Value(success)); } -} // namespace settings -} // namespace chromeos +} // namespace ash::settings
diff --git a/chrome/browser/ui/webui/settings/ash/fingerprint_handler.h b/chrome/browser/ui/webui/settings/ash/fingerprint_handler.h index 5169cec..3edde046 100644 --- a/chrome/browser/ui/webui/settings/ash/fingerprint_handler.h +++ b/chrome/browser/ui/webui/settings/ash/fingerprint_handler.h
@@ -16,8 +16,7 @@ class Profile; -namespace chromeos { -namespace settings { +namespace ash::settings { // Chrome OS fingerprint setup settings page UI handler. class FingerprintHandler : public ::settings::SettingsPageUIHandler, @@ -84,7 +83,11 @@ base::WeakPtrFactory<FingerprintHandler> weak_ptr_factory_{this}; }; -} // namespace settings -} // namespace chromeos +} // namespace ash::settings + +// TODO(https://crbug.com/1164001): remove when the migration is finished. +namespace chromeos::settings { +using ::ash::settings::FingerprintHandler; +} #endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_ASH_FINGERPRINT_HANDLER_H_
diff --git a/chrome/browser/ui/webui/settings/ash/google_assistant_handler.cc b/chrome/browser/ui/webui/settings/ash/google_assistant_handler.cc index 0457bb2..f2ff2b3 100644 --- a/chrome/browser/ui/webui/settings/ash/google_assistant_handler.cc +++ b/chrome/browser/ui/webui/settings/ash/google_assistant_handler.cc
@@ -19,15 +19,14 @@ #include "content/public/browser/browser_context.h" #include "ui/gfx/geometry/rect.h" -namespace chromeos { -namespace settings { +namespace ash::settings { GoogleAssistantHandler::GoogleAssistantHandler() { - chromeos::CrasAudioHandler::Get()->AddAudioObserver(this); + CrasAudioHandler::Get()->AddAudioObserver(this); } GoogleAssistantHandler::~GoogleAssistantHandler() { - chromeos::CrasAudioHandler::Get()->RemoveAudioObserver(this); + CrasAudioHandler::Get()->RemoveAudioObserver(this); } void GoogleAssistantHandler::OnJavascriptAllowed() { @@ -45,9 +44,8 @@ } pending_hotword_update_ = false; - FireWebUIListener( - "hotwordDeviceUpdated", - base::Value(chromeos::CrasAudioHandler::Get()->HasHotwordDevice())); + FireWebUIListener("hotwordDeviceUpdated", + base::Value(CrasAudioHandler::Get()->HasHotwordDevice())); } void GoogleAssistantHandler::RegisterMessages() { @@ -73,13 +71,13 @@ void GoogleAssistantHandler::HandleShowGoogleAssistantSettings( const base::Value::List& args) { CHECK_EQ(0U, args.size()); - ash::AssistantController::Get()->OpenAssistantSettings(); + AssistantController::Get()->OpenAssistantSettings(); } void GoogleAssistantHandler::HandleRetrainVoiceModel( const base::Value::List& args) { CHECK_EQ(0U, args.size()); - chromeos::AssistantOptInDialog::Show(ash::FlowType::kSpeakerIdRetrain, + chromeos::AssistantOptInDialog::Show(FlowType::kSpeakerIdRetrain, base::DoNothing()); } @@ -97,5 +95,4 @@ AllowJavascript(); } -} // namespace settings -} // namespace chromeos +} // namespace ash::settings
diff --git a/chrome/browser/ui/webui/settings/ash/google_assistant_handler.h b/chrome/browser/ui/webui/settings/ash/google_assistant_handler.h index 5436779..8d6759b 100644 --- a/chrome/browser/ui/webui/settings/ash/google_assistant_handler.h +++ b/chrome/browser/ui/webui/settings/ash/google_assistant_handler.h
@@ -9,11 +9,10 @@ #include "chromeos/ash/components/audio/cras_audio_handler.h" #include "mojo/public/cpp/bindings/remote.h" -namespace chromeos { -namespace settings { +namespace ash::settings { class GoogleAssistantHandler : public ::settings::SettingsPageUIHandler, - chromeos::CrasAudioHandler::AudioObserver { + CrasAudioHandler::AudioObserver { public: GoogleAssistantHandler(); @@ -26,7 +25,7 @@ void OnJavascriptAllowed() override; void OnJavascriptDisallowed() override; - // chromeos::CrasAudioHandler::AudioObserver overrides + // CrasAudioHandler::AudioObserver overrides void OnAudioNodesChanged() override; private: @@ -44,7 +43,11 @@ base::WeakPtrFactory<GoogleAssistantHandler> weak_factory_{this}; }; -} // namespace settings -} // namespace chromeos +} // namespace ash::settings + +// TODO(https://crbug.com/1164001): remove when the migration is finished. +namespace chromeos::settings { +using ::ash::settings::GoogleAssistantHandler; +} #endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_ASH_GOOGLE_ASSISTANT_HANDLER_H_
diff --git a/chrome/browser/ui/webui/settings/ash/guest_os_handler.cc b/chrome/browser/ui/webui/settings/ash/guest_os_handler.cc index 6f50b09..78eef3bc 100644 --- a/chrome/browser/ui/webui/settings/ash/guest_os_handler.cc +++ b/chrome/browser/ui/webui/settings/ash/guest_os_handler.cc
@@ -16,7 +16,7 @@ #include "chrome/browser/profiles/profile.h" #include "content/public/browser/browser_thread.h" -namespace chromeos { +namespace ash { namespace { @@ -70,7 +70,7 @@ } void GuestOsHandler::OnJavascriptAllowed() { - if (auto* detector = chromeos::CrosUsbDetector::Get()) { + if (auto* detector = CrosUsbDetector::Get()) { cros_usb_device_observation_.Observe(detector); } } @@ -127,7 +127,7 @@ void GuestOsHandler::HandleSetGuestOsUsbDeviceShared( const base::Value::List& args) { CHECK_EQ(4U, args.size()); - chromeos::CrosUsbDetector* detector = chromeos::CrosUsbDetector::Get(); + CrosUsbDetector* detector = CrosUsbDetector::Get(); if (!detector) return; @@ -144,11 +144,11 @@ } void GuestOsHandler::OnUsbDevicesChanged() { - chromeos::CrosUsbDetector* detector = chromeos::CrosUsbDetector::Get(); + CrosUsbDetector* detector = CrosUsbDetector::Get(); DCHECK(detector); // This callback is called by the detector. FireWebUIListener("guest-os-shared-usb-devices-changed", GetSharableUsbDevices(detector)); } } // namespace settings -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ui/webui/settings/ash/guest_os_handler.h b/chrome/browser/ui/webui/settings/ash/guest_os_handler.h index 2a32d846..f56b9bac 100644 --- a/chrome/browser/ui/webui/settings/ash/guest_os_handler.h +++ b/chrome/browser/ui/webui/settings/ash/guest_os_handler.h
@@ -14,11 +14,10 @@ class Profile; -namespace chromeos { -namespace settings { +namespace ash::settings { class GuestOsHandler : public ::settings::SettingsPageUIHandler, - public chromeos::CrosUsbDeviceObserver { + public CrosUsbDeviceObserver { public: explicit GuestOsHandler(Profile* profile); GuestOsHandler(const GuestOsHandler&) = delete; @@ -31,7 +30,7 @@ void OnJavascriptDisallowed() override; private: - // chromeos::SharedUsbDeviceObserver. + // SharedUsbDeviceObserver. void OnUsbDevicesChanged() override; // Callback for the "getSharedPathsDisplayText" message. Converts actual @@ -61,7 +60,11 @@ base::WeakPtrFactory<GuestOsHandler> weak_ptr_factory_{this}; }; -} // namespace settings -} // namespace chromeos +} // namespace ash::settings + +// TODO(https://crbug.com/1164001): remove when the migration is finished. +namespace chromeos::settings { +using ::ash::settings::GuestOsHandler; +} #endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_ASH_GUEST_OS_HANDLER_H_
diff --git a/chrome/browser/ui/webui/settings/ash/internet_handler.cc b/chrome/browser/ui/webui/settings/ash/internet_handler.cc index 7cd7d5fa..4e0d180 100644 --- a/chrome/browser/ui/webui/settings/ash/internet_handler.cc +++ b/chrome/browser/ui/webui/settings/ash/internet_handler.cc
@@ -33,7 +33,7 @@ #include "third_party/cros_system_api/dbus/service_constants.h" #include "ui/events/event_constants.h" -namespace chromeos { +namespace ash { namespace { @@ -221,7 +221,7 @@ return; } const std::string& guid = args[0].GetString(); - chromeos::NetworkConnect::Get()->ShowCarrierAccountDetail(guid); + NetworkConnect::Get()->ShowCarrierAccountDetail(guid); } void InternetHandler::ShowPortalSignin(const base::Value::List& args) { @@ -239,7 +239,7 @@ return; } const std::string& guid = args[0].GetString(); - chromeos::NetworkConnect::Get()->ShowMobileSetup(guid); + NetworkConnect::Get()->ShowMobileSetup(guid); } void InternetHandler::SetGmsCoreNotificationsDisabledDeviceNames() { @@ -278,7 +278,7 @@ } void InternetHandler::SetGmsCoreNotificationsStateTrackerForTesting( - chromeos::tether::GmsCoreNotificationsStateTracker* + tether::GmsCoreNotificationsStateTracker* gms_core_notifications_state_tracker) { if (gms_core_notifications_state_tracker_) gms_core_notifications_state_tracker_->RemoveObserver(this); @@ -288,5 +288,4 @@ } } // namespace settings - -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ui/webui/settings/ash/internet_handler.h b/chrome/browser/ui/webui/settings/ash/internet_handler.h index d3441a2..5c3ef4d 100644 --- a/chrome/browser/ui/webui/settings/ash/internet_handler.h +++ b/chrome/browser/ui/webui/settings/ash/internet_handler.h
@@ -13,13 +13,11 @@ class Profile; -namespace chromeos { - -namespace settings { +namespace ash::settings { // Chrome OS Internet settings page UI handler. class InternetHandler - : public chromeos::tether::GmsCoreNotificationsStateTracker::Observer, + : public tether::GmsCoreNotificationsStateTracker::Observer, public ::settings::SettingsPageUIHandler { public: explicit InternetHandler(Profile* profile); @@ -34,7 +32,7 @@ void OnJavascriptAllowed() override; void OnJavascriptDisallowed() override; - // chromeos::tether::GmsCoreNotificationsStateTracker::Observer: + // tether::GmsCoreNotificationsStateTracker::Observer: void OnGmsCoreNotificationStateChanged() override; private: @@ -59,18 +57,22 @@ gfx::NativeWindow GetNativeWindow(); void SetGmsCoreNotificationsStateTrackerForTesting( - chromeos::tether::GmsCoreNotificationsStateTracker* + tether::GmsCoreNotificationsStateTracker* gms_core_notifications_state_tracker); std::vector<base::Value> device_names_without_notifications_; Profile* const profile_; - chromeos::tether::GmsCoreNotificationsStateTracker* + tether::GmsCoreNotificationsStateTracker* gms_core_notifications_state_tracker_; }; -} // namespace settings -} // namespace chromeos +} // namespace ash::settings + +// TODO(https://crbug.com/1164001): remove when the migration is finished. +namespace chromeos::settings { +using ::ash::settings::InternetHandler; +} #endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_ASH_INTERNET_HANDLER_H_
diff --git a/chrome/browser/ui/webui/settings/ash/internet_handler_unittest.cc b/chrome/browser/ui/webui/settings/ash/internet_handler_unittest.cc index 5611877b..72faf79 100644 --- a/chrome/browser/ui/webui/settings/ash/internet_handler_unittest.cc +++ b/chrome/browser/ui/webui/settings/ash/internet_handler_unittest.cc
@@ -11,9 +11,7 @@ #include "content/public/test/test_web_ui.h" #include "testing/gtest/include/gtest/gtest.h" -namespace chromeos { - -namespace settings { +namespace ash::settings { namespace { @@ -50,8 +48,8 @@ handler_->RegisterMessages(); handler_->AllowJavascriptForTesting(); - fake_tracker_ = std::make_unique< - chromeos::tether::FakeGmsCoreNotificationsStateTracker>(); + fake_tracker_ = + std::make_unique<tether::FakeGmsCoreNotificationsStateTracker>(); handler_->SetGmsCoreNotificationsStateTrackerForTesting( fake_tracker_.get()); } @@ -82,8 +80,7 @@ } std::unique_ptr<content::TestWebUI> web_ui_; - std::unique_ptr<chromeos::tether::FakeGmsCoreNotificationsStateTracker> - fake_tracker_; + std::unique_ptr<tether::FakeGmsCoreNotificationsStateTracker> fake_tracker_; std::unique_ptr<TestInternetHandler> handler_; }; @@ -119,6 +116,4 @@ 1u /* expected_num_updates */); } -} // namespace settings - -} // namespace chromeos +} // namespace ash::settings
diff --git a/chrome/browser/ui/webui/settings/ash/kerberos_accounts_handler.cc b/chrome/browser/ui/webui/settings/ash/kerberos_accounts_handler.cc index 634a96d4..f7e223c 100644 --- a/chrome/browser/ui/webui/settings/ash/kerberos_accounts_handler.cc +++ b/chrome/browser/ui/webui/settings/ash/kerberos_accounts_handler.cc
@@ -31,8 +31,7 @@ #include "ui/gfx/image/image_skia.h" #include "ui/gfx/image/image_skia_rep.h" -namespace chromeos { -namespace settings { +namespace ash::settings { namespace { bool IsKerberosEnabled( @@ -411,5 +410,4 @@ FireWebUIListener("kerberos-accounts-changed"); } -} // namespace settings -} // namespace chromeos +} // namespace ash::settings
diff --git a/chrome/browser/ui/webui/settings/ash/kerberos_accounts_handler.h b/chrome/browser/ui/webui/settings/ash/kerberos_accounts_handler.h index a86cdb0..4b41686 100644 --- a/chrome/browser/ui/webui/settings/ash/kerberos_accounts_handler.h +++ b/chrome/browser/ui/webui/settings/ash/kerberos_accounts_handler.h
@@ -26,8 +26,7 @@ class Profile; -namespace chromeos { -namespace settings { +namespace ash::settings { class KerberosAccountsHandler : public ::settings::SettingsPageUIHandler, public KerberosCredentialsManager::Observer { @@ -104,7 +103,11 @@ base::WeakPtrFactory<KerberosAccountsHandler> weak_factory_{this}; }; -} // namespace settings -} // namespace chromeos +} // namespace ash::settings + +// TODO(https://crbug.com/1164001): remove when the migration is finished. +namespace chromeos::settings { +using ::ash::settings::KerberosAccountsHandler; +} #endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_ASH_KERBEROS_ACCOUNTS_HANDLER_H_
diff --git a/chrome/browser/ui/webui/settings/ash/kerberos_section.cc b/chrome/browser/ui/webui/settings/ash/kerberos_section.cc index d0c7bef..ba4d1a7 100644 --- a/chrome/browser/ui/webui/settings/ash/kerberos_section.cc +++ b/chrome/browser/ui/webui/settings/ash/kerberos_section.cc
@@ -99,9 +99,8 @@ } void KerberosSection::AddHandlers(content::WebUI* web_ui) { - std::unique_ptr<chromeos::settings::KerberosAccountsHandler> - kerberos_accounts_handler = - KerberosAccountsHandler::CreateIfKerberosEnabled(profile()); + std::unique_ptr<KerberosAccountsHandler> kerberos_accounts_handler = + KerberosAccountsHandler::CreateIfKerberosEnabled(profile()); if (kerberos_accounts_handler) { // Note that the UI is enabled only if Kerberos is enabled. web_ui->AddMessageHandler(std::move(kerberos_accounts_handler));
diff --git a/chrome/browser/ui/webui/settings/ash/languages_section.cc b/chrome/browser/ui/webui/settings/ash/languages_section.cc index 77bbbbcd0..f859729 100644 --- a/chrome/browser/ui/webui/settings/ash/languages_section.cc +++ b/chrome/browser/ui/webui/settings/ash/languages_section.cc
@@ -304,6 +304,8 @@ IDS_SETTINGS_INPUT_METHOD_OPTIONS_JAPANESE_KEYMAP_STYLE_CHROMEOS}, {"inputMethodOptionsJapaneseManageUserDictionary", IDS_SETTINGS_INPUT_METHOD_OPTIONS_JAPANESE_MANAGE_USER_DICTIONARY}, + {"inputMethodOptionsJapaneseClearPersonalizationData", + IDS_SETTINGS_INPUT_METHOD_OPTIONS_JAPANESE_CLEAR_PERSONALIZATION_DATA}, {"inputMethodOptionsJapaneseManageUserDictionarySubtitle", IDS_SETTINGS_INPUT_METHOD_OPTIONS_JAPANESE_MANAGE_USER_DICTIONARY_SUBTITLE}, {"inputMethodOptionsPinyinChinesePunctuation",
diff --git a/chrome/browser/ui/webui/settings/ash/metrics_consent_handler.cc b/chrome/browser/ui/webui/settings/ash/metrics_consent_handler.cc index 42c03ab6..b9b3a9c 100644 --- a/chrome/browser/ui/webui/settings/ash/metrics_consent_handler.cc +++ b/chrome/browser/ui/webui/settings/ash/metrics_consent_handler.cc
@@ -13,8 +13,7 @@ #include "components/metrics/metrics_service.h" #include "components/user_manager/user_manager.h" -namespace chromeos { -namespace settings { +namespace ash::settings { const char MetricsConsentHandler::kGetMetricsConsentState[] = "getMetricsConsentState"; @@ -63,7 +62,7 @@ base::Value consent_pref = ShouldUseUserConsent() ? base::Value(::metrics::prefs::kMetricsUserConsent) - : base::Value(::ash::kStatsReportingPref); + : base::Value(kStatsReportingPref); response.Set("prefName", std::move(consent_pref)); response.Set("isConfigurable", base::Value(IsMetricsConsentConfigurable())); @@ -82,7 +81,7 @@ CHECK(metrics_consent); if (!ShouldUseUserConsent()) { - auto* stats_reporting_controller = ash::StatsReportingController::Get(); + auto* stats_reporting_controller = StatsReportingController::Get(); stats_reporting_controller->SetEnabled(profile_, *metrics_consent); // Re-read from |stats_reporting_controller|. If |profile_| is not owner, @@ -108,5 +107,4 @@ metrics_service_->GetCurrentUserMetricsConsent().has_value(); } -} // namespace settings -} // namespace chromeos +} // namespace ash::settings
diff --git a/chrome/browser/ui/webui/settings/ash/metrics_consent_handler.h b/chrome/browser/ui/webui/settings/ash/metrics_consent_handler.h index 29d3571..838affd1 100644 --- a/chrome/browser/ui/webui/settings/ash/metrics_consent_handler.h +++ b/chrome/browser/ui/webui/settings/ash/metrics_consent_handler.h
@@ -12,8 +12,7 @@ #include "components/metrics/metrics_service.h" #include "components/user_manager/user_manager.h" -namespace chromeos { -namespace settings { +namespace ash::settings { class TestMetricsConsentHandler; @@ -65,7 +64,11 @@ base::WeakPtrFactory<MetricsConsentHandler> weak_ptr_factory_{this}; }; -} // namespace settings -} // namespace chromeos +} // namespace ash::settings + +// TODO(https://crbug.com/1164001): remove when the migration is finished. +namespace chromeos::settings { +using ::ash::settings::MetricsConsentHandler; +} #endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_ASH_METRICS_CONSENT_HANDLER_H_
diff --git a/chrome/browser/ui/webui/settings/ash/metrics_consent_handler_unittest.cc b/chrome/browser/ui/webui/settings/ash/metrics_consent_handler_unittest.cc index 278516bc..b8a2efb 100644 --- a/chrome/browser/ui/webui/settings/ash/metrics_consent_handler_unittest.cc +++ b/chrome/browser/ui/webui/settings/ash/metrics_consent_handler_unittest.cc
@@ -39,8 +39,7 @@ #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" -namespace chromeos { -namespace settings { +namespace ash::settings { namespace { @@ -53,7 +52,7 @@ TestingPrefServiceSimple* RegisterPrefs(TestingPrefServiceSimple* local_state) { StatsReportingController::RegisterLocalStatePrefs(local_state->registry()); - ash::device_settings_cache::RegisterPrefs(local_state->registry()); + device_settings_cache::RegisterPrefs(local_state->registry()); metrics::MetricsService::RegisterPrefs(local_state->registry()); return local_state; } @@ -130,8 +129,8 @@ account_id, false, user_manager::USER_TYPE_REGULAR, owner.get()); test_user_manager_->SetOwnerId(account_id); - EXPECT_THAT(ash::DeviceSettingsService::Get()->GetOwnershipStatus(), - Eq(ash::DeviceSettingsService::OWNERSHIP_TAKEN)); + EXPECT_THAT(DeviceSettingsService::Get()->GetOwnershipStatus(), + Eq(DeviceSettingsService::OWNERSHIP_TAKEN)); return owner; } @@ -183,9 +182,9 @@ content::RunAllTasksUntilIdle(); - ash::StatsReportingController::Initialize(&pref_service_); + StatsReportingController::Initialize(&pref_service_); - test_user_manager_ = std::make_unique<ash::FakeChromeUserManager>(); + test_user_manager_ = std::make_unique<FakeChromeUserManager>(); web_ui_ = std::make_unique<content::TestWebUI>(); test_enabled_state_provider_ = @@ -259,7 +258,7 @@ TestingPrefServiceSimple pref_service_; std::unique_ptr<TestMetricsConsentHandler> handler_; - std::unique_ptr<ash::FakeChromeUserManager> test_user_manager_; + std::unique_ptr<FakeChromeUserManager> test_user_manager_; std::unique_ptr<content::TestWebUI> web_ui_; // MetricsService. @@ -271,10 +270,9 @@ // Set up stubs for StatsReportingController. ScopedStubInstallAttributes scoped_install_attributes_; - ash::FakeSessionManagerClient fake_session_manager_client_; - ash::ScopedTestDeviceSettingsService scoped_device_settings_; - ash::ScopedTestCrosSettings scoped_cros_settings_{ - RegisterPrefs(&pref_service_)}; + FakeSessionManagerClient fake_session_manager_client_; + ScopedTestDeviceSettingsService scoped_device_settings_; + ScopedTestCrosSettings scoped_cros_settings_{RegisterPrefs(&pref_service_)}; policy::DevicePolicyBuilder device_policy_; scoped_refptr<ownership::MockOwnerKeyUtil> owner_keys{ @@ -302,7 +300,7 @@ // Owner should be able to toggle the device stats reporting pref. EXPECT_TRUE(GetMetricsConsentStateMessage(&pref_name, &is_configurable)); - EXPECT_THAT(::ash::kStatsReportingPref, Eq(pref_name)); + EXPECT_THAT(kStatsReportingPref, Eq(pref_name)); EXPECT_TRUE(is_configurable); // Toggle true. Consent change should go through. @@ -316,7 +314,7 @@ // Explicitly shutdown controller here because OwnerSettingsService is // destructed before TearDown() is called. - ash::StatsReportingController::Shutdown(); + StatsReportingController::Shutdown(); } TEST_F(MetricsConsentHandlerTest, NonOwnerWithUserConsentCanToggle) { @@ -357,7 +355,7 @@ // Explicitly shutdown controller here because OwnerSettingsService is // destructed before TearDown() is called. - ash::StatsReportingController::Shutdown(); + StatsReportingController::Shutdown(); } TEST_F(MetricsConsentHandlerTest, NonOwnerWithoutUserConsentCannotToggle) { @@ -384,7 +382,7 @@ // Display device consent. EXPECT_TRUE(GetMetricsConsentStateMessage(&pref_name, &is_configurable)); - EXPECT_THAT(::ash::kStatsReportingPref, Eq(pref_name)); + EXPECT_THAT(kStatsReportingPref, Eq(pref_name)); EXPECT_FALSE(is_configurable); // Try to toggle true. @@ -398,8 +396,7 @@ // Explicitly shutdown controller here because OwnerSettingsService is // destructed before TearDown() is called. - ash::StatsReportingController::Shutdown(); + StatsReportingController::Shutdown(); } -} // namespace settings -} // namespace chromeos +} // namespace ash::settings
diff --git a/chrome/browser/ui/webui/settings/ash/multidevice_handler.cc b/chrome/browser/ui/webui/settings/ash/multidevice_handler.cc index a96ed28..bb2537b7 100644 --- a/chrome/browser/ui/webui/settings/ash/multidevice_handler.cc +++ b/chrome/browser/ui/webui/settings/ash/multidevice_handler.cc
@@ -33,25 +33,20 @@ #include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui_message_handler.h" -using ash::phonehub::util::LogPermissionOnboardingDialogAction; -using ash::phonehub::util::LogPermissionOnboardingSettingsClicked; -using ash::phonehub::util::LogPermissionOnboardingSetupMode; -using ash::phonehub::util::LogPermissionOnboardingSetupResult; -using ash::phonehub::util::PermissionsOnboardingScreenEvent; -using ash::phonehub::util::PermissionsOnboardingSetUpMode; -using ash::phonehub::util::PermissionsOnboardingStep; +namespace ash::settings { -namespace chromeos { - -namespace settings { +using phonehub::util::LogPermissionOnboardingDialogAction; +using phonehub::util::LogPermissionOnboardingSettingsClicked; +using phonehub::util::LogPermissionOnboardingSetupMode; +using phonehub::util::LogPermissionOnboardingSetupResult; +using phonehub::util::PermissionsOnboardingScreenEvent; +using phonehub::util::PermissionsOnboardingSetUpMode; +using phonehub::util::PermissionsOnboardingStep; namespace { const char kCameraRollAccessStatus[] = "cameraRollAccessStatus"; -// TODO(https://crbug.com/1164001): remove after migrating to ash. -namespace multidevice_setup = ::ash::multidevice_setup; - const char kPageContentDataModeKey[] = "mode"; const char kPageContentDataHostDeviceNameKey[] = "hostDeviceName"; const char kPageContentDataBetterTogetherStateKey[] = "betterTogetherState"; @@ -102,8 +97,8 @@ multidevice_setup::AndroidSmsPairingStateTracker* android_sms_pairing_state_tracker, android_sms::AndroidSmsAppManager* android_sms_app_manager, - ash::eche_app::AppsAccessManager* apps_access_manager, - ash::phonehub::CameraRollManager* camera_roll_manager) + eche_app::AppsAccessManager* apps_access_manager, + phonehub::CameraRollManager* camera_roll_manager) : prefs_(prefs), multidevice_setup_client_(multidevice_setup_client), multidevice_feature_access_manager_(multidevice_feature_access_manager), @@ -690,11 +685,11 @@ } void MultideviceHandler::OnAppsStatusChange( - ash::eche_app::AppsAccessSetupOperation::Status new_status) { + eche_app::AppsAccessSetupOperation::Status new_status) { FireWebUIListener("settings.onAppsAccessSetupStatusChanged", base::Value(static_cast<int32_t>(new_status))); - if (ash::eche_app::AppsAccessSetupOperation::IsFinalStatus(new_status)) + if (eche_app::AppsAccessSetupOperation::IsFinalStatus(new_status)) apps_access_operation_.reset(); } @@ -757,7 +752,7 @@ static_cast<int32_t>( feature_states[multidevice_setup::mojom::Feature::kPhoneHub])); auto cameraRoll_feature_state = - base::FeatureList::IsEnabled(chromeos::features::kPhoneHubCameraRoll) + base::FeatureList::IsEnabled(ash::features::kPhoneHubCameraRoll) ? feature_states [multidevice_setup::mojom::Feature::kPhoneHubCameraRoll] : multidevice_setup::mojom::FeatureState::kNotSupportedByChromebook; @@ -774,7 +769,7 @@ feature_states [multidevice_setup::mojom::Feature::kPhoneHubTaskContinuation])); auto eche_feature_state = - base::FeatureList::IsEnabled(chromeos::features::kEcheSWA) + base::FeatureList::IsEnabled(ash::features::kEcheSWA) ? feature_states[multidevice_setup::mojom::Feature::kEche] : multidevice_setup::mojom::FeatureState::kNotSupportedByChromebook; page_content_dictionary.Set(kPageContentDataPhoneHubAppsStateKey, @@ -836,8 +831,7 @@ if (camera_roll_manager_) { is_camera_roll_file_permission_granted = camera_roll_manager_->ui_state() != - ash::phonehub::CameraRollManager::CameraRollUiState:: - NO_STORAGE_PERMISSION; + phonehub::CameraRollManager::CameraRollUiState::NO_STORAGE_PERMISSION; } page_content_dictionary.Set(kIsCameraRollFilePermissionGranted, is_camera_roll_file_permission_granted); @@ -922,13 +916,11 @@ // We need to use FireWebUIListener to update value dynamically because // loadTimeData is not recreated on refresh. const bool is_phone_screen_lock_enabled = - static_cast<ash::phonehub::ScreenLockManager::LockStatus>( + static_cast<phonehub::ScreenLockManager::LockStatus>( prefs_->GetInteger(phonehub::prefs::kScreenLockStatus)) == - ash::phonehub::ScreenLockManager::LockStatus::kLockedOn; + phonehub::ScreenLockManager::LockStatus::kLockedOn; FireWebUIListener("settings.OnScreenLockStatusChanged", base::Value(is_phone_screen_lock_enabled)); } -} // namespace settings - -} // namespace chromeos +} // namespace ash::settings
diff --git a/chrome/browser/ui/webui/settings/ash/multidevice_handler.h b/chrome/browser/ui/webui/settings/ash/multidevice_handler.h index fc6ae1f..f19e417a 100644 --- a/chrome/browser/ui/webui/settings/ash/multidevice_handler.h +++ b/chrome/browser/ui/webui/settings/ash/multidevice_handler.h
@@ -24,8 +24,7 @@ class PrefService; -namespace chromeos { -namespace settings { +namespace ash::settings { // Chrome "Multidevice" (a.k.a. "Connected Devices") settings page UI handler. class MultideviceHandler @@ -35,9 +34,9 @@ public android_sms::AndroidSmsAppManager::Observer, public phonehub::MultideviceFeatureAccessManager::Observer, public phonehub::NotificationAccessSetupOperation::Delegate, - public ash::eche_app::AppsAccessManager::Observer, - public ash::eche_app::AppsAccessSetupOperation::Delegate, - public ash::phonehub::CameraRollManager::Observer, + public eche_app::AppsAccessManager::Observer, + public eche_app::AppsAccessSetupOperation::Delegate, + public phonehub::CameraRollManager::Observer, public phonehub::CombinedAccessSetupOperation::Delegate, public phonehub::FeatureSetupConnectionOperation::Delegate { public: @@ -49,8 +48,8 @@ multidevice_setup::AndroidSmsPairingStateTracker* android_sms_pairing_state_tracker, android_sms::AndroidSmsAppManager* android_sms_app_manager, - ash::eche_app::AppsAccessManager* apps_access_manager, - ash::phonehub::CameraRollManager* camera_roll_manager); + eche_app::AppsAccessManager* apps_access_manager, + phonehub::CameraRollManager* camera_roll_manager); MultideviceHandler(const MultideviceHandler&) = delete; MultideviceHandler& operator=(const MultideviceHandler&) = delete; @@ -84,9 +83,9 @@ void OnNotificationStatusChange( phonehub::NotificationAccessSetupOperation::Status new_status) override; - // ash::eche_app::AppsAccessSetupOperation::Delegate: + // eche_app::AppsAccessSetupOperation::Delegate: void OnAppsStatusChange( - ash::eche_app::AppsAccessSetupOperation::Status new_status) override; + eche_app::AppsAccessSetupOperation::Status new_status) override; // CombinedAccessSetupOperation::Delegate: void OnCombinedStatusChange( @@ -107,10 +106,10 @@ // android_sms::AndroidSmsAppManager::Observer: void OnInstalledAppUrlChanged() override; - // ash::eche_app::AppsAccessManager::Observer: + // eche_app::AppsAccessManager::Observer: void OnAppsAccessChanged() override; - // ash::phonehub::CameraRollManager::Observer: + // phonehub::CameraRollManager::Observer: void OnCameraRollViewUiStateUpdated() override; // Called when the Nearby Share enabled pref changes. @@ -191,11 +190,10 @@ android_sms_pairing_state_tracker_; android_sms::AndroidSmsAppManager* android_sms_app_manager_; - ash::eche_app::AppsAccessManager* apps_access_manager_; - std::unique_ptr<ash::eche_app::AppsAccessSetupOperation> - apps_access_operation_; + eche_app::AppsAccessManager* apps_access_manager_; + std::unique_ptr<eche_app::AppsAccessSetupOperation> apps_access_operation_; - ash::phonehub::CameraRollManager* camera_roll_manager_; + phonehub::CameraRollManager* camera_roll_manager_; base::ScopedObservation<multidevice_setup::MultiDeviceSetupClient, multidevice_setup::MultiDeviceSetupClient::Observer> @@ -210,19 +208,22 @@ base::ScopedObservation<phonehub::MultideviceFeatureAccessManager, phonehub::MultideviceFeatureAccessManager::Observer> multidevice_feature_access_manager_observation_{this}; - base::ScopedObservation<ash::eche_app::AppsAccessManager, - ash::eche_app::AppsAccessManager::Observer> + base::ScopedObservation<eche_app::AppsAccessManager, + eche_app::AppsAccessManager::Observer> apps_access_manager_observation_{this}; - base::ScopedObservation<ash::phonehub::CameraRollManager, - ash::phonehub::CameraRollManager::Observer> + base::ScopedObservation<phonehub::CameraRollManager, + phonehub::CameraRollManager::Observer> camera_roll_manager_observation_{this}; // Used to cancel callbacks when JavaScript becomes disallowed. base::WeakPtrFactory<MultideviceHandler> callback_weak_ptr_factory_{this}; }; -} // namespace settings +} // namespace ash::settings -} // namespace chromeos +// TODO(https://crbug.com/1164001): remove when the migration is finished. +namespace chromeos::settings { +using ::ash::settings::MultideviceHandler; +} #endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_ASH_MULTIDEVICE_HANDLER_H_
diff --git a/chrome/browser/ui/webui/settings/ash/multidevice_handler_unittest.cc b/chrome/browser/ui/webui/settings/ash/multidevice_handler_unittest.cc index f07f270a..2bf5c16 100644 --- a/chrome/browser/ui/webui/settings/ash/multidevice_handler_unittest.cc +++ b/chrome/browser/ui/webui/settings/ash/multidevice_handler_unittest.cc
@@ -35,9 +35,7 @@ #include "testing/gmock/include/gmock/gmock-matchers.h" #include "testing/gtest/include/gtest/gtest.h" -namespace chromeos { - -namespace settings { +namespace ash::settings { namespace { @@ -64,9 +62,6 @@ constexpr char kDialogSetUpFinishedScreenSetupModeHistogram[] = "PhoneHub.PermissionsOnboarding.SetUpMode.SetUpFinishedScreenShown"; -// TODO(https://crbug.com/1164001): remove after migrating to ash. -namespace multidevice_setup = ::ash::multidevice_setup; - using ::testing::Optional; class TestMultideviceHandler : public MultideviceHandler { @@ -79,8 +74,8 @@ multidevice_setup::AndroidSmsPairingStateTracker* android_sms_pairing_state_tracker, android_sms::AndroidSmsAppManager* android_sms_app_manager, - ash::eche_app::AppsAccessManager* apps_access_manager, - ash::phonehub::CameraRollManager* camera_roll_manager) + eche_app::AppsAccessManager* apps_access_manager, + phonehub::CameraRollManager* camera_roll_manager) : MultideviceHandler(prefs, multidevice_setup_client, multidevice_feature_access_manager, @@ -191,7 +186,7 @@ absl::optional<int> phone_hub_camera_roll_state = page_content_dict.FindInt("phoneHubCameraRollState"); ASSERT_TRUE(phone_hub_camera_roll_state); - if (base::FeatureList::IsEnabled(chromeos::features::kPhoneHubCameraRoll)) { + if (base::FeatureList::IsEnabled(ash::features::kPhoneHubCameraRoll)) { it = feature_states_map.find( multidevice_setup::mojom::Feature::kPhoneHubCameraRoll); EXPECT_EQ(static_cast<int>(it->second), *phone_hub_camera_roll_state); @@ -212,7 +207,7 @@ absl::optional<int> phone_hub_apps_state = page_content_dict.FindInt("phoneHubAppsState"); ASSERT_TRUE(phone_hub_apps_state); - if (base::FeatureList::IsEnabled(chromeos::features::kEcheSWA)) { + if (base::FeatureList::IsEnabled(ash::features::kEcheSWA)) { it = feature_states_map.find(multidevice_setup::mojom::Feature::kEche); EXPECT_EQ(static_cast<int>(it->second), *phone_hub_apps_state); } else { @@ -284,11 +279,11 @@ fake_android_sms_app_manager_ = std::make_unique<android_sms::FakeAndroidSmsAppManager>(); fake_apps_access_manager_ = - std::make_unique<ash::eche_app::FakeAppsAccessManager>( + std::make_unique<eche_app::FakeAppsAccessManager>( phonehub::MultideviceFeatureAccessManager::AccessStatus:: kAvailableButNotGranted); fake_camera_roll_manager_ = - std::make_unique<ash::phonehub::FakeCameraRollManager>(); + std::make_unique<phonehub::FakeCameraRollManager>(); prefs_ = std::make_unique<TestingPrefServiceSimple>(); RegisterNearbySharingPrefs(prefs_->registry()); @@ -302,9 +297,8 @@ prefs_->registry()->RegisterBooleanPref(ash::prefs::kEnableAutoScreenLock, false); prefs_->registry()->RegisterIntegerPref( - ash::phonehub::prefs::kScreenLockStatus, - static_cast<int>( - ash::phonehub::ScreenLockManager::LockStatus::kLockedOff)); + phonehub::prefs::kScreenLockStatus, + static_cast<int>(phonehub::ScreenLockManager::LockStatus::kLockedOff)); handler_ = std::make_unique<TestMultideviceHandler>( prefs_.get(), fake_multidevice_setup_client_.get(), @@ -682,11 +676,11 @@ return fake_multidevice_feature_access_manager_.get(); } - ash::eche_app::FakeAppsAccessManager* fake_apps_access_manager() { + eche_app::FakeAppsAccessManager* fake_apps_access_manager() { return fake_apps_access_manager_.get(); } - ash::phonehub::FakeCameraRollManager* fake_camera_roll_manager() { + phonehub::FakeCameraRollManager* fake_camera_roll_manager() { return fake_camera_roll_manager_.get(); } @@ -719,14 +713,14 @@ } void SimulateAppsOptInStatusChange( - ash::eche_app::AppsAccessSetupOperation::Status status) { + eche_app::AppsAccessSetupOperation::Status status) { size_t call_data_count_before_call = test_web_ui()->call_data().size(); fake_apps_access_manager()->SetAppsSetupOperationStatus(status); bool completed_successfully = status == - ash::eche_app::AppsAccessSetupOperation::Status::kCompletedSuccessfully; + eche_app::AppsAccessSetupOperation::Status::kCompletedSuccessfully; if (completed_successfully) call_data_count_before_call++; @@ -804,9 +798,8 @@ size_t call_data_count_before_call = test_web_ui()->call_data().size(); prefs_->SetInteger( - ash::phonehub::prefs::kScreenLockStatus, - static_cast<int>( - ash::phonehub::ScreenLockManager::LockStatus::kLockedOn)); + phonehub::prefs::kScreenLockStatus, + static_cast<int>(phonehub::ScreenLockManager::LockStatus::kLockedOn)); EXPECT_EQ(call_data_count_before_call + 1u, test_web_ui()->call_data().size()); @@ -855,10 +848,8 @@ fake_multidevice_feature_access_manager_; std::unique_ptr<multidevice_setup::FakeAndroidSmsPairingStateTracker> fake_android_sms_pairing_state_tracker_; - std::unique_ptr<ash::eche_app::FakeAppsAccessManager> - fake_apps_access_manager_; - std::unique_ptr<ash::phonehub::FakeCameraRollManager> - fake_camera_roll_manager_; + std::unique_ptr<eche_app::FakeAppsAccessManager> fake_apps_access_manager_; + std::unique_ptr<phonehub::FakeCameraRollManager> fake_camera_roll_manager_; multidevice_setup::MultiDeviceSetupClient::HostStatusWithDevice host_status_with_device_; @@ -972,10 +963,10 @@ } TEST_F(MultideviceHandlerTest, AppsSetupFlow) { - InitWithFeatures(/* enabled_features */ {chromeos::features::kPhoneHub, - chromeos::features::kEcheSWA}, + InitWithFeatures(/* enabled_features */ {ash::features::kPhoneHub, + ash::features::kEcheSWA}, /* disabled_features */ {}); - using Status = ash::eche_app::AppsAccessSetupOperation::Status; + using Status = eche_app::AppsAccessSetupOperation::Status; // Simulate success flow. CallAttemptAppsSetup(/*has_access_been_granted=*/false); @@ -1218,8 +1209,8 @@ } TEST_F(MultideviceHandlerTest, PageContentData) { - InitWithFeatures(/* enabled_features */ {chromeos::features::kPhoneHub, - chromeos::features::kEcheSWA}, + InitWithFeatures(/* enabled_features */ {ash::features::kPhoneHub, + ash::features::kEcheSWA}, /* disabled_features */ {}); CallGetPageContentData(); CallGetPageContentData(); @@ -1299,8 +1290,8 @@ } TEST_F(MultideviceHandlerTest, GetAndroidSmsInfo) { - InitWithFeatures(/* enabled_features */ {chromeos::features::kPhoneHub, - chromeos::features::kEcheSWA}, + InitWithFeatures(/* enabled_features */ {ash::features::kPhoneHub, + ash::features::kEcheSWA}, /* disabled_features */ {}); // Check that getAndroidSmsInfo returns correct value. CallGetAndroidSmsInfo(false /* expected_enabled */, @@ -1342,8 +1333,8 @@ TEST_F(MultideviceHandlerTest, PageContentDataWhenEcheSWADisabled) { InitWithFeatures( - /* enabled_features */ {chromeos::features::kPhoneHub}, - /* disabled_features */ {chromeos::features::kEcheSWA}); + /* enabled_features */ {ash::features::kPhoneHub}, + /* disabled_features */ {ash::features::kEcheSWA}); multidevice_setup::MultiDeviceSetupClient::FeatureStatesMap feature_states_map = GenerateDefaultFeatureStatesMap(); @@ -1355,8 +1346,8 @@ TEST_F(MultideviceHandlerTest, PageContentDataWhenPhoneHubCameraRollDisabled) { InitWithFeatures( - /* enabled_features */ {chromeos::features::kPhoneHub}, - /* disabled_features */ {chromeos::features::kPhoneHubCameraRoll}); + /* enabled_features */ {ash::features::kPhoneHub}, + /* disabled_features */ {ash::features::kPhoneHubCameraRoll}); multidevice_setup::MultiDeviceSetupClient::FeatureStatesMap feature_states_map = GenerateDefaultFeatureStatesMap(); @@ -1367,7 +1358,8 @@ } TEST_F(MultideviceHandlerTest, EnableScreenLockChanged) { - InitWithFeatures(/* enabled_features */ {chromeos::features::kPhoneHub, chromeos::features::kEcheSWA}, + InitWithFeatures(/* enabled_features */ {ash::features::kPhoneHub, + ash::features::kEcheSWA}, {}); SetUpHandlerWithEmptyManagers(); @@ -1375,13 +1367,12 @@ } TEST_F(MultideviceHandlerTest, ScreenLockStatusChanged) { - InitWithFeatures(/* enabled_features */ {chromeos::features::kPhoneHub, chromeos::features::kEcheSWA}, + InitWithFeatures(/* enabled_features */ {ash::features::kPhoneHub, + ash::features::kEcheSWA}, {}); SetUpHandlerWithEmptyManagers(); SimulateScreenLockStatusChanged(); } -} // namespace settings - -} // namespace chromeos +} // namespace ash::settings
diff --git a/chrome/browser/ui/webui/settings/ash/os_settings_features_util.h b/chrome/browser/ui/webui/settings/ash/os_settings_features_util.h index 5c15034..602a2fb 100644 --- a/chrome/browser/ui/webui/settings/ash/os_settings_features_util.h +++ b/chrome/browser/ui/webui/settings/ash/os_settings_features_util.h
@@ -25,4 +25,10 @@ } // namespace settings } // namespace chromeos +// TODO(https://crbug.com/1164001): remove when it moved to ash. +namespace ash::settings::features { +using ::chromeos::settings::features::IsGuestModeActive; +using ::chromeos::settings::features::ShouldShowExternalStorageSettings; +} // namespace ash::settings::features + #endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_ASH_OS_SETTINGS_FEATURES_UTIL_H_
diff --git a/chrome/browser/ui/webui/settings/ash/os_settings_ui.cc b/chrome/browser/ui/webui/settings/ash/os_settings_ui.cc index ff61a220..d786c62b 100644 --- a/chrome/browser/ui/webui/settings/ash/os_settings_ui.cc +++ b/chrome/browser/ui/webui/settings/ash/os_settings_ui.cc
@@ -92,8 +92,7 @@ // TODO(khorimoto): Move to DeviceSection::AddHandler() once |html_source| // parameter is removed. web_ui->AddMessageHandler( - std::make_unique<chromeos::settings::StorageHandler>(profile, - html_source)); + std::make_unique<StorageHandler>(profile, html_source)); webui::SetupWebUIDataSource( html_source,
diff --git a/chrome/browser/ui/webui/settings/ash/parental_controls_handler.cc b/chrome/browser/ui/webui/settings/ash/parental_controls_handler.cc index 67fa754..9e9613f 100644 --- a/chrome/browser/ui/webui/settings/ash/parental_controls_handler.cc +++ b/chrome/browser/ui/webui/settings/ash/parental_controls_handler.cc
@@ -27,8 +27,7 @@ #include "ui/events/event_constants.h" #include "url/gurl.h" -namespace chromeos { -namespace settings { +namespace ash::settings { const char kFamilyLinkSiteURL[] = "https://families.google.com/families"; @@ -69,7 +68,7 @@ apps::AppRegistryCache& registry = proxy->AppRegistryCache(); const std::string app_id = arc::ArcPackageNameToAppId( - chromeos::ChildUserService::kFamilyLinkHelperAppPackageName, profile_); + ChildUserService::kFamilyLinkHelperAppPackageName, profile_); if (registry.GetAppType(app_id) != apps::AppType::kUnknown) { // Launch FLH app since it is available. if (base::FeatureList::IsEnabled(apps::kAppServiceLaunchWithoutMojom)) { @@ -89,12 +88,12 @@ if (base::FeatureList::IsEnabled(apps::kAppServiceLaunchWithoutMojom)) { proxy->LaunchAppWithUrl( arc::kPlayStoreAppId, ui::EF_NONE, - GURL(chromeos::ChildUserService::kFamilyLinkHelperAppPlayStoreURL), + GURL(ChildUserService::kFamilyLinkHelperAppPlayStoreURL), apps::LaunchSource::kFromChromeInternal); } else { proxy->LaunchAppWithUrl( arc::kPlayStoreAppId, ui::EF_NONE, - GURL(chromeos::ChildUserService::kFamilyLinkHelperAppPlayStoreURL), + GURL(ChildUserService::kFamilyLinkHelperAppPlayStoreURL), apps::mojom::LaunchSource::kFromChromeInternal); } return; @@ -108,5 +107,4 @@ Navigate(¶ms); } -} // namespace settings -} // namespace chromeos +} // namespace ash::settings
diff --git a/chrome/browser/ui/webui/settings/ash/parental_controls_handler.h b/chrome/browser/ui/webui/settings/ash/parental_controls_handler.h index 3eceb81e..f12fc95 100644 --- a/chrome/browser/ui/webui/settings/ash/parental_controls_handler.h +++ b/chrome/browser/ui/webui/settings/ash/parental_controls_handler.h
@@ -9,8 +9,7 @@ class Profile; -namespace chromeos { -namespace settings { +namespace ash::settings { // Chrome "Parental Controls" settings page UI handler. class ParentalControlsHandler : public ::settings::SettingsPageUIHandler { @@ -38,7 +37,11 @@ Profile* profile_; }; -} // namespace settings -} // namespace chromeos +} // namespace ash::settings + +// TODO(https://crbug.com/1164001): remove when the migration is finished. +namespace chromeos::settings { +using ::ash::settings::ParentalControlsHandler; +} #endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_ASH_PARENTAL_CONTROLS_HANDLER_H_
diff --git a/chrome/browser/ui/webui/settings/ash/people_section.cc b/chrome/browser/ui/webui/settings/ash/people_section.cc index 77d1103a..41340e9 100644 --- a/chrome/browser/ui/webui/settings/ash/people_section.cc +++ b/chrome/browser/ui/webui/settings/ash/people_section.cc
@@ -664,26 +664,22 @@ std::make_unique<::settings::ProfileInfoHandler>(profile())); if (account_manager_facade_) { - web_ui->AddMessageHandler( - std::make_unique<chromeos::settings::AccountManagerUIHandler>( - account_manager_, account_manager_facade_, identity_manager_, - account_apps_availability_)); + web_ui->AddMessageHandler(std::make_unique<AccountManagerUIHandler>( + account_manager_, account_manager_facade_, identity_manager_, + account_apps_availability_)); } web_ui->AddMessageHandler(std::make_unique<OSSyncHandler>(profile())); web_ui->AddMessageHandler( - std::make_unique<chromeos::settings::QuickUnlockHandler>(profile(), - pref_service_)); + std::make_unique<QuickUnlockHandler>(profile(), pref_service_)); - web_ui->AddMessageHandler( - std::make_unique<chromeos::settings::FingerprintHandler>(profile())); + web_ui->AddMessageHandler(std::make_unique<FingerprintHandler>(profile())); if (!profile()->IsGuestSession() && features::ShouldShowParentalControlSettings(profile())) { web_ui->AddMessageHandler( - std::make_unique<chromeos::settings::ParentalControlsHandler>( - profile())); + std::make_unique<ParentalControlsHandler>(profile())); } }
diff --git a/chrome/browser/ui/webui/settings/ash/peripheral_data_access_handler.cc b/chrome/browser/ui/webui/settings/ash/peripheral_data_access_handler.cc index f82a690..1a0832b 100644 --- a/chrome/browser/ui/webui/settings/ash/peripheral_data_access_handler.cc +++ b/chrome/browser/ui/webui/settings/ash/peripheral_data_access_handler.cc
@@ -24,8 +24,7 @@ #include "components/prefs/pref_service.h" #include "content/public/browser/browser_thread.h" -namespace chromeos { -namespace settings { +namespace ash::settings { namespace { constexpr char thunderbolt_file_path[] = "/sys/bus/thunderbolt/devices/0-0"; @@ -49,7 +48,7 @@ // Otherwise, use the CrosSetting for non-managed devices. bool pcie_tunneling_allowed = false; - CrosSettings::Get()->GetBoolean(chromeos::kDevicePeripheralDataAccessEnabled, + CrosSettings::Get()->GetBoolean(kDevicePeripheralDataAccessEnabled, &pcie_tunneling_allowed); return pcie_tunneling_allowed; } @@ -129,13 +128,11 @@ DCHECK(PciguardClient::Get()); bool new_state = false; - CrosSettings::Get()->GetBoolean(chromeos::kDevicePeripheralDataAccessEnabled, + CrosSettings::Get()->GetBoolean(kDevicePeripheralDataAccessEnabled, &new_state); - ash::PeripheralNotificationManager::Get()->SetPcieTunnelingAllowedState( - new_state); + PeripheralNotificationManager::Get()->SetPcieTunnelingAllowedState(new_state); PciguardClient::Get()->SendExternalPciDevicesPermissionState(new_state); } -} // namespace settings -} // namespace chromeos +} // namespace ash::settings
diff --git a/chrome/browser/ui/webui/settings/ash/peripheral_data_access_handler.h b/chrome/browser/ui/webui/settings/ash/peripheral_data_access_handler.h index 3e35cfb8..c97c45ed 100644 --- a/chrome/browser/ui/webui/settings/ash/peripheral_data_access_handler.h +++ b/chrome/browser/ui/webui/settings/ash/peripheral_data_access_handler.h
@@ -9,8 +9,7 @@ #include "base/memory/weak_ptr.h" #include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h" -namespace chromeos { -namespace settings { +namespace ash::settings { class PeripheralDataAccessHandler : public ::settings::SettingsPageUIHandler { public: @@ -51,7 +50,11 @@ base::WeakPtrFactory<PeripheralDataAccessHandler> weak_ptr_factory_{this}; }; -} // namespace settings -} // namespace chromeos +} // namespace ash::settings + +// TODO(https://crbug.com/1164001): remove when the migration is finished. +namespace chromeos::settings { +using ::ash::settings::PeripheralDataAccessHandler; +} #endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_ASH_PERIPHERAL_DATA_ACCESS_HANDLER_H_
diff --git a/chrome/browser/ui/webui/settings/ash/personalization_hub_handler.cc b/chrome/browser/ui/webui/settings/ash/personalization_hub_handler.cc index 4dcd15d..1a122565 100644 --- a/chrome/browser/ui/webui/settings/ash/personalization_hub_handler.cc +++ b/chrome/browser/ui/webui/settings/ash/personalization_hub_handler.cc
@@ -12,8 +12,7 @@ #include "chrome/browser/ui/ash/system_web_apps/system_web_app_ui_utils.h" #include "content/public/browser/web_ui.h" -namespace chromeos { -namespace settings { +namespace ash::settings { PersonalizationHubHandler::PersonalizationHubHandler() = default; @@ -31,11 +30,10 @@ const base::Value::List& args) { CHECK_EQ(0U, args.size()); // Record entry point metric to Personalization Hub through Settings. - ash::personalization_app::LogPersonalizationEntryPoint( - ash::PersonalizationEntryPoint::kSettings); - ash::LaunchSystemWebAppAsync(Profile::FromWebUI(web_ui()), - ash::SystemWebAppType::PERSONALIZATION); + personalization_app::LogPersonalizationEntryPoint( + PersonalizationEntryPoint::kSettings); + LaunchSystemWebAppAsync(Profile::FromWebUI(web_ui()), + SystemWebAppType::PERSONALIZATION); } -} // namespace settings -} // namespace chromeos +} // namespace ash::settings
diff --git a/chrome/browser/ui/webui/settings/ash/personalization_hub_handler.h b/chrome/browser/ui/webui/settings/ash/personalization_hub_handler.h index 89c9fbf4..cb1ecdb3 100644 --- a/chrome/browser/ui/webui/settings/ash/personalization_hub_handler.h +++ b/chrome/browser/ui/webui/settings/ash/personalization_hub_handler.h
@@ -9,8 +9,7 @@ #include "base/values.h" -namespace chromeos { -namespace settings { +namespace ash::settings { // Chrome "Personalization Hub" settings page UI handler. class PersonalizationHubHandler : public ::settings::SettingsPageUIHandler { @@ -32,7 +31,11 @@ void HandleOpenPersonalizationHub(const base::Value::List& args); }; -} // namespace settings -} // namespace chromeos +} // namespace ash::settings + +// TODO(https://crbug.com/1164001): remove when the migration is finished. +namespace chromeos::settings { +using ::ash::settings::PersonalizationHubHandler; +} #endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_ASH_PERSONALIZATION_HUB_HANDLER_H_
diff --git a/chrome/browser/ui/webui/settings/ash/personalization_section.cc b/chrome/browser/ui/webui/settings/ash/personalization_section.cc index 3844bb6..31222dc 100644 --- a/chrome/browser/ui/webui/settings/ash/personalization_section.cc +++ b/chrome/browser/ui/webui/settings/ash/personalization_section.cc
@@ -39,8 +39,7 @@ } void PersonalizationSection::AddHandlers(content::WebUI* web_ui) { - web_ui->AddMessageHandler( - std::make_unique<chromeos::settings::PersonalizationHubHandler>()); + web_ui->AddMessageHandler(std::make_unique<PersonalizationHubHandler>()); } int PersonalizationSection::GetSectionNameMessageId() const {
diff --git a/chrome/browser/ui/webui/settings/ash/plugin_vm_handler.cc b/chrome/browser/ui/webui/settings/ash/plugin_vm_handler.cc index c061dc6..0de9ec9 100644 --- a/chrome/browser/ui/webui/settings/ash/plugin_vm_handler.cc +++ b/chrome/browser/ui/webui/settings/ash/plugin_vm_handler.cc
@@ -15,9 +15,7 @@ #include "chrome/browser/profiles/profile.h" #include "content/public/browser/browser_thread.h" -namespace chromeos { - -namespace settings { +namespace ash::settings { PluginVmHandler::PluginVmHandler(Profile* profile) : profile_(profile) {} @@ -58,5 +56,4 @@ ->RelaunchPluginVm(); } -} // namespace settings -} // namespace chromeos +} // namespace ash::settings
diff --git a/chrome/browser/ui/webui/settings/ash/plugin_vm_handler.h b/chrome/browser/ui/webui/settings/ash/plugin_vm_handler.h index b7a1f64..fa3573f 100644 --- a/chrome/browser/ui/webui/settings/ash/plugin_vm_handler.h +++ b/chrome/browser/ui/webui/settings/ash/plugin_vm_handler.h
@@ -10,8 +10,7 @@ class Profile; -namespace chromeos { -namespace settings { +namespace ash::settings { class PluginVmHandler : public ::settings::SettingsPageUIHandler { public: @@ -39,7 +38,11 @@ base::WeakPtrFactory<PluginVmHandler> weak_ptr_factory_{this}; }; -} // namespace settings -} // namespace chromeos +} // namespace ash::settings + +// TODO(https://crbug.com/1164001): remove when the migration is finished. +namespace chromeos::settings { +using ::ash::settings::PluginVmHandler; +} #endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_ASH_PLUGIN_VM_HANDLER_H_
diff --git a/chrome/browser/ui/webui/settings/ash/privacy_hub_handler.cc b/chrome/browser/ui/webui/settings/ash/privacy_hub_handler.cc index 0403043..b89d45fa 100644 --- a/chrome/browser/ui/webui/settings/ash/privacy_hub_handler.cc +++ b/chrome/browser/ui/webui/settings/ash/privacy_hub_handler.cc
@@ -8,7 +8,7 @@ #include "base/logging.h" #include "chrome/browser/ash/privacy_hub/privacy_hub_util.h" -namespace chromeos::settings { +namespace ash::settings { namespace { // Translates CameraPrivacySwitch state into base::Value @@ -29,11 +29,11 @@ PrivacyHubHandler::PrivacyHubHandler() = default; PrivacyHubHandler::~PrivacyHubHandler() { - ash::privacy_hub_util::SetFrontend(nullptr); + privacy_hub_util::SetFrontend(nullptr); } void PrivacyHubHandler::RegisterMessages() { - ash::privacy_hub_util::SetFrontend(this); + privacy_hub_util::SetFrontend(this); web_ui()->RegisterMessageCallback( "getInitialCameraHardwareToggleState", base::BindRepeating(&PrivacyHubHandler::HandleInitialCameraSwitchState, @@ -69,7 +69,7 @@ DCHECK_EQ(1U, args.size()) << ": Callback ID is required"; const auto& callback_id = args[0]; const base::Value value = CameraPrivacySwitchStateToBaseValue( - ash::privacy_hub_util::CameraHWSwitchState()); + privacy_hub_util::CameraHWSwitchState()); ResolveJavascriptCallback(callback_id, value); } @@ -82,7 +82,7 @@ DCHECK_EQ(1U, args.size()) << ": Callback ID is required"; const auto& callback_id = args[0]; const base::Value value = - base::Value(ash::privacy_hub_util::MicrophoneSwitchState()); + base::Value(privacy_hub_util::MicrophoneSwitchState()); ResolveJavascriptCallback(callback_id, value); } @@ -96,7 +96,7 @@ const auto& callback_id = args[0]; const base::Value value = - base::Value(ash::privacy_hub_util::HasActiveInputDeviceForSimpleUsage()); + base::Value(privacy_hub_util::HasActiveInputDeviceForSimpleUsage()); ResolveJavascriptCallback(callback_id, value); } @@ -117,4 +117,4 @@ CameraPrivacySwitchStateToBaseValue(state)); } -} // namespace chromeos::settings +} // namespace ash::settings
diff --git a/chrome/browser/ui/webui/settings/ash/privacy_hub_handler.h b/chrome/browser/ui/webui/settings/ash/privacy_hub_handler.h index f894b13..496872f 100644 --- a/chrome/browser/ui/webui/settings/ash/privacy_hub_handler.h +++ b/chrome/browser/ui/webui/settings/ash/privacy_hub_handler.h
@@ -12,10 +12,10 @@ #include "content/public/browser/web_ui_message_handler.h" #include "media/capture/video/chromeos/mojom/cros_camera_service.mojom.h" -namespace chromeos::settings { +namespace ash::settings { class PrivacyHubHandler : public content::WebUIMessageHandler, - public ash::PrivacyHubDelegate { + public PrivacyHubDelegate { public: PrivacyHubHandler(); ~PrivacyHubHandler() override; @@ -24,7 +24,7 @@ PrivacyHubHandler& operator=(const PrivacyHubHandler&) = delete; - // ash::PrivacyHubDelegate + // PrivacyHubDelegate void AvailabilityOfMicrophoneChanged(bool has_active_Input_device) override; void MicrophoneHardwareToggleChanged(bool muted) override; @@ -46,6 +46,11 @@ const base::Value::List& args); }; -} // namespace chromeos::settings +} // namespace ash::settings + +// TODO(https://crbug.com/1164001): remove when the migration is finished. +namespace chromeos::settings { +using ::ash::settings::PrivacyHubHandler; +} #endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_ASH_PRIVACY_HUB_HANDLER_H_
diff --git a/chrome/browser/ui/webui/settings/ash/privacy_hub_handler_unittest.cc b/chrome/browser/ui/webui/settings/ash/privacy_hub_handler_unittest.cc index ddcd60c..f5f728ad 100644 --- a/chrome/browser/ui/webui/settings/ash/privacy_hub_handler_unittest.cc +++ b/chrome/browser/ui/webui/settings/ash/privacy_hub_handler_unittest.cc
@@ -11,7 +11,7 @@ #include "media/capture/video/chromeos/mojom/cros_camera_service.mojom.h" #include "testing/gtest/include/gtest/gtest.h" -namespace chromeos::settings { +namespace ash::settings { namespace { class TestPrivacyHubHandler : public PrivacyHubHandler { @@ -38,7 +38,7 @@ // constructor requires CrasAudioHandler to be initialized. // ScopedCrasAudioHandlerForTesting is a helper class that initializes // CrasAudioHandler in it's constructor. - ash::ScopedCrasAudioHandlerForTesting cras_audio_handler_; + ScopedCrasAudioHandlerForTesting cras_audio_handler_; // Has to go before privacy_hub_handler_ as it references its // address and destruction order guarantees no invalid pointers. @@ -261,4 +261,5 @@ ".*Did not expect arguments.*"); } #endif -} // namespace chromeos::settings + +} // namespace ash::settings
diff --git a/chrome/browser/ui/webui/settings/ash/privacy_section.cc b/chrome/browser/ui/webui/settings/ash/privacy_section.cc index 580e67e4..8c675f1 100644 --- a/chrome/browser/ui/webui/settings/ash/privacy_section.cc +++ b/chrome/browser/ui/webui/settings/ash/privacy_section.cc
@@ -282,13 +282,11 @@ PrivacySection::~PrivacySection() = default; void PrivacySection::AddHandlers(content::WebUI* web_ui) { - web_ui->AddMessageHandler( - std::make_unique<chromeos::settings::PeripheralDataAccessHandler>()); + web_ui->AddMessageHandler(std::make_unique<PeripheralDataAccessHandler>()); - web_ui->AddMessageHandler( - std::make_unique<chromeos::settings::MetricsConsentHandler>( - profile(), g_browser_process->metrics_service(), - user_manager::UserManager::Get())); + web_ui->AddMessageHandler(std::make_unique<MetricsConsentHandler>( + profile(), g_browser_process->metrics_service(), + user_manager::UserManager::Get())); if (ash::features::IsCrosPrivacyHubEnabled()) web_ui->AddMessageHandler(std::make_unique<PrivacyHubHandler>());
diff --git a/chrome/browser/ui/webui/settings/ash/quick_unlock_handler.cc b/chrome/browser/ui/webui/settings/ash/quick_unlock_handler.cc index 2c21981..878b627f 100644 --- a/chrome/browser/ui/webui/settings/ash/quick_unlock_handler.cc +++ b/chrome/browser/ui/webui/settings/ash/quick_unlock_handler.cc
@@ -12,8 +12,7 @@ #include "components/prefs/pref_service.h" #include "content/public/browser/web_ui.h" -namespace chromeos { -namespace settings { +namespace ash::settings { QuickUnlockHandler::QuickUnlockHandler(Profile* profile, PrefService* pref_service) @@ -77,5 +76,4 @@ pref_service_, quick_unlock::Purpose::kAny))); } -} // namespace settings -} // namespace chromeos +} // namespace ash::settings
diff --git a/chrome/browser/ui/webui/settings/ash/quick_unlock_handler.h b/chrome/browser/ui/webui/settings/ash/quick_unlock_handler.h index c7e3eac..a64638b 100644 --- a/chrome/browser/ui/webui/settings/ash/quick_unlock_handler.h +++ b/chrome/browser/ui/webui/settings/ash/quick_unlock_handler.h
@@ -12,8 +12,7 @@ class PrefService; class Profile; -namespace chromeos { -namespace settings { +namespace ash::settings { // Settings WebUI handler for quick unlock settings. class QuickUnlockHandler : public ::settings::SettingsPageUIHandler { @@ -42,7 +41,11 @@ base::WeakPtrFactory<QuickUnlockHandler> weak_ptr_factory_{this}; }; -} // namespace settings -} // namespace chromeos +} // namespace ash::settings + +// TODO(https://crbug.com/1164001): remove when the migration is finished. +namespace chromeos::settings { +using ::ash::settings::QuickUnlockHandler; +} #endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_ASH_QUICK_UNLOCK_HANDLER_H_
diff --git a/chrome/browser/ui/webui/settings/ash/search_section.cc b/chrome/browser/ui/webui/settings/ash/search_section.cc index 4e37715..635731e1 100644 --- a/chrome/browser/ui/webui/settings/ash/search_section.cc +++ b/chrome/browser/ui/webui/settings/ash/search_section.cc
@@ -322,8 +322,7 @@ void SearchSection::AddHandlers(content::WebUI* web_ui) { web_ui->AddMessageHandler( std::make_unique<::settings::SearchEnginesHandler>(profile())); - web_ui->AddMessageHandler( - std::make_unique<chromeos::settings::GoogleAssistantHandler>()); + web_ui->AddMessageHandler(std::make_unique<GoogleAssistantHandler>()); } int SearchSection::GetSectionNameMessageId() const {
diff --git a/chrome/browser/ui/webui/settings/ash/server_printer_url_util.h b/chrome/browser/ui/webui/settings/ash/server_printer_url_util.h index a92478b..ad34064 100644 --- a/chrome/browser/ui/webui/settings/ash/server_printer_url_util.h +++ b/chrome/browser/ui/webui/settings/ash/server_printer_url_util.h
@@ -27,4 +27,10 @@ } // namespace settings } // namespace chromeos +// TODO(https://crbug.com/1164001): remove when it moved to ash. +namespace ash::settings { +using ::chromeos::settings::GenerateServerPrinterUrlWithValidScheme; +using ::chromeos::settings::HasValidServerPrinterScheme; +} // namespace ash::settings + #endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_ASH_SERVER_PRINTER_URL_UTIL_H_
diff --git a/chrome/browser/ui/webui/settings/ash/switch_access_handler.cc b/chrome/browser/ui/webui/settings/ash/switch_access_handler.cc index daeaffd..a807258 100644 --- a/chrome/browser/ui/webui/settings/ash/switch_access_handler.cc +++ b/chrome/browser/ui/webui/settings/ash/switch_access_handler.cc
@@ -27,8 +27,7 @@ #include "ui/events/ozone/layout/keyboard_layout_engine.h" #include "ui/events/ozone/layout/keyboard_layout_engine_manager.h" -namespace chromeos { -namespace settings { +namespace ash::settings { namespace { struct AssignmentInfo { @@ -60,13 +59,13 @@ std::string GetSwitchAccessDevice(ui::InputDeviceType source_device_type) { switch (source_device_type) { case ui::INPUT_DEVICE_INTERNAL: - return ash::kSwitchAccessInternalDevice; + return kSwitchAccessInternalDevice; case ui::INPUT_DEVICE_USB: - return ash::kSwitchAccessUsbDevice; + return kSwitchAccessUsbDevice; case ui::INPUT_DEVICE_BLUETOOTH: - return ash::kSwitchAccessBluetoothDevice; + return kSwitchAccessBluetoothDevice; case ui::INPUT_DEVICE_UNKNOWN: - return ash::kSwitchAccessUnknownDevice; + return kSwitchAccessUnknownDevice; } } @@ -81,8 +80,8 @@ web_ui()->GetWebContents()->GetNativeView()->RemovePreTargetHandler(this); } - if (ash::AccessibilityController::Get()) - ash::AccessibilityController::Get()->SuspendSwitchAccessKeyHandling(false); + if (AccessibilityController::Get()) + AccessibilityController::Get()->SuspendSwitchAccessKeyHandling(false); } void SwitchAccessHandler::RegisterMessages() { @@ -165,13 +164,13 @@ AllowJavascript(); OnSwitchAccessAssignmentsUpdated(); web_ui()->GetWebContents()->GetNativeView()->AddPreTargetHandler(this); - ash::AccessibilityController::Get()->SuspendSwitchAccessKeyHandling(true); + AccessibilityController::Get()->SuspendSwitchAccessKeyHandling(true); } void SwitchAccessHandler::HandleNotifySwitchAccessActionAssignmentPaneInactive( const base::Value::List& args) { web_ui()->GetWebContents()->GetNativeView()->RemovePreTargetHandler(this); - ash::AccessibilityController::Get()->SuspendSwitchAccessKeyHandling(false); + AccessibilityController::Get()->SuspendSwitchAccessKeyHandling(false); } void SwitchAccessHandler::OnSwitchAccessAssignmentsUpdated() { @@ -207,5 +206,4 @@ FireWebUIListener("switch-access-assignments-changed", response); } -} // namespace settings -} // namespace chromeos +} // namespace ash::settings
diff --git a/chrome/browser/ui/webui/settings/ash/switch_access_handler.h b/chrome/browser/ui/webui/settings/ash/switch_access_handler.h index 40455d4..e21f518 100644 --- a/chrome/browser/ui/webui/settings/ash/switch_access_handler.h +++ b/chrome/browser/ui/webui/settings/ash/switch_access_handler.h
@@ -11,8 +11,7 @@ class PrefService; -namespace chromeos { -namespace settings { +namespace ash::settings { // Settings handler for the switch access subpage. class SwitchAccessHandler : public ::settings::SettingsPageUIHandler, @@ -43,7 +42,11 @@ PrefService* prefs_; }; -} // namespace settings -} // namespace chromeos +} // namespace ash::settings + +// TODO(https://crbug.com/1164001): remove when the migration is finished. +namespace chromeos::settings { +using ::ash::settings::SwitchAccessHandler; +} #endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_ASH_SWITCH_ACCESS_HANDLER_H_
diff --git a/chrome/browser/ui/webui/settings/settings_ui.cc b/chrome/browser/ui/webui/settings/settings_ui.cc index 486d5be..8984edd 100644 --- a/chrome/browser/ui/webui/settings/settings_ui.cc +++ b/chrome/browser/ui/webui/settings/settings_ui.cc
@@ -490,7 +490,7 @@ ash::eche_app::EcheAppManager* eche_app_manager = ash::eche_app::EcheAppManagerFactory::GetForProfile(profile); web_ui()->AddMessageHandler(std::make_unique< - chromeos::settings::MultideviceHandler>( + ash::settings::MultideviceHandler>( profile->GetPrefs(), ash::multidevice_setup::MultiDeviceSetupClientFactory::GetForProfile( profile),
diff --git a/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc b/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc index 1b69b1b..d3a4b8a 100644 --- a/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc +++ b/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc
@@ -3223,7 +3223,9 @@ ASSERT_EQ(CONTENT_SETTING_ASK, type); } -TEST_F(SiteSettingsHandlerTest, PopulateNotificationPermissionReviewData) { +// TODO(crbug.com/137935): Re-enable this test. +TEST_F(SiteSettingsHandlerTest, + DISABLED_PopulateNotificationPermissionReviewData) { // Add a couple of notification permission and check they appear in review // list. HostContentSettingsMap* map =
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt index 52c668cf..26cb875 100644 --- a/chrome/build/linux.pgo.txt +++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@ -chrome-linux-main-1665250680-f9579d0ebb3d14ef36b02ad411436a9ea742b809.profdata +chrome-linux-main-1665359392-180123bdd1fedc45c1cbb781e2ad04bd98ab1546.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt index 1ce7e1fd..1e2580d 100644 --- a/chrome/build/mac.pgo.txt +++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@ -chrome-mac-main-1665250680-e40df5f6bcc51c54f68f849c1bc23e39758b19cf.profdata +chrome-mac-main-1665359392-4a14ed054564e68f8953428d778ac749731d7712.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt index 50ac502..a68632bb 100644 --- a/chrome/build/win32.pgo.txt +++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@ -chrome-win32-main-1665250680-4cdbedbb1f4d5f633e5068650e08c02a060af8aa.profdata +chrome-win32-main-1665359392-9eee08f4c226c39fc910d8b503467505816c42d3.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt index 46d429b..cd90720 100644 --- a/chrome/build/win64.pgo.txt +++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@ -chrome-win64-main-1665260809-c59e2380d7bf057de454090d4b7fc58e5e146fe6.profdata +chrome-win64-main-1665369929-a0e6e9828f70f683f8f1df95373b77667afe0494.profdata
diff --git a/chrome/common/apps/platform_apps/OWNERS b/chrome/common/apps/platform_apps/OWNERS deleted file mode 100644 index 42444bc..0000000 --- a/chrome/common/apps/platform_apps/OWNERS +++ /dev/null
@@ -1,2 +0,0 @@ -per-file *_messages*.h=set noparent -per-file *_messages*.h=file://ipc/SECURITY_OWNERS
diff --git a/chrome/common/extensions/api/autotest_private.idl b/chrome/common/extensions/api/autotest_private.idl index ea27114e0c..e1d554c 100644 --- a/chrome/common/extensions/api/autotest_private.idl +++ b/chrome/common/extensions/api/autotest_private.idl
@@ -755,6 +755,18 @@ callback IsInputMethodReadyForTestingCallback = void (boolean isReady); + // Response data for <code>makeFuseboxTempDir</code>. + dictionary MakeFuseboxTempDirData { + DOMString fuseboxFilePath; + DOMString underlyingFilePath; + }; + + // Callback invoked when the temporary directory was made. + callback MakeFuseboxTempDirCallback = void(MakeFuseboxTempDirData data); + + // Callback invoked when the temporary directory was removed. + callback RemoveFuseboxTempDirCallback = void(); + interface Functions { // Must be called to allow autotestPrivateAPI events to be fired. static void initializeEvents(); @@ -1467,6 +1479,16 @@ // Returns whether the current input method is ready to accept key events. [supportsPromises] static void isInputMethodReadyForTesting( IsInputMethodReadyForTestingCallback callback); + + // Creates a temporary directory visible under the Fusebox mount point. + [supportsPromises] static void makeFuseboxTempDir( + MakeFuseboxTempDirCallback callback); + + // Removes a temporary directory visible under the Fusebox mount point. The + // fuseboxFilePath argument was returned by the MakeFuseboxTempDirCallback. + [supportsPromises] static void removeFuseboxTempDir( + DOMString fuseboxFilePath, + RemoveFuseboxTempDirCallback callback); }; interface Events {
diff --git a/chrome/test/data/extensions/api_test/file_system_provider/get_all/test.js b/chrome/test/data/extensions/api_test/file_system_provider/get_all/test.js index 3ffd0506..a774b89 100644 --- a/chrome/test/data/extensions/api_test/file_system_provider/get_all/test.js +++ b/chrome/test/data/extensions/api_test/file_system_provider/get_all/test.js
@@ -88,6 +88,14 @@ fileSystems[0].writable); chrome.test.assertEq(2, fileSystems[0].openedFilesLimit); + chrome.test.assertEq( + 1, fileSystems[0].openedFiles.length); + chrome.test.assertEq( + '/' + TESTING_TIRAMISU_FILE.name, + fileSystems[0].openedFiles[0].filePath); + chrome.test.assertEq( + chrome.fileSystemProvider.OpenFileMode.READ, + fileSystems[0].openedFiles[0].mode); })); chrome.fileSystemProvider.get( @@ -102,6 +110,14 @@ chrome.test.assertTrue(fileSystem.writable); chrome.test.assertEq(2, fileSystem.openedFilesLimit); + chrome.test.assertEq( + 1, fileSystem.openedFiles.length); + chrome.test.assertEq( + '/' + TESTING_TIRAMISU_FILE.name, + fileSystem.openedFiles[0].filePath); + chrome.test.assertEq( + chrome.fileSystemProvider.OpenFileMode.READ, + fileSystem.openedFiles[0].mode); })); }); fileReader.readAsText(file);
diff --git a/chrome/test/data/extensions/api_test/file_system_provider/service_worker/BUILD.gn b/chrome/test/data/extensions/api_test/file_system_provider/service_worker/BUILD.gn index dccd794..576a25e 100644 --- a/chrome/test/data/extensions/api_test/file_system_provider/service_worker/BUILD.gn +++ b/chrome/test/data/extensions/api_test/file_system_provider/service_worker/BUILD.gn
@@ -18,6 +18,8 @@ sources = [ "copy_entry/sw.js", "copy_entry/test.js", + "delete_entry/sw.js", + "delete_entry/test.js", "helpers.js", "provider.js", "read_file/sw.js",
diff --git a/chrome/test/data/extensions/api_test/file_system_provider/service_worker/copy_entry/sw.js b/chrome/test/data/extensions/api_test/file_system_provider/service_worker/copy_entry/sw.js index 388a916..ac074135 100644 --- a/chrome/test/data/extensions/api_test/file_system_provider/service_worker/copy_entry/sw.js +++ b/chrome/test/data/extensions/api_test/file_system_provider/service_worker/copy_entry/sw.js
@@ -2,10 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import {TestFileSystemProvider} from '/_test_resources/api_test/file_system_provider/service_worker/provider.js'; +import {serviceWorkerMain} from '/_test_resources/api_test/file_system_provider/service_worker/provider.js'; -const provider = - new TestFileSystemProvider(TestFileSystemProvider.FILESYSTEM_ID); - -provider.setUpProviderListeners(); -provider.setUpCommandListener(self); +serviceWorkerMain(self);
diff --git a/chrome/test/data/extensions/api_test/file_system_provider/service_worker/delete_entry/manifest.json b/chrome/test/data/extensions/api_test/file_system_provider/service_worker/delete_entry/manifest.json new file mode 100644 index 0000000..31d20349 --- /dev/null +++ b/chrome/test/data/extensions/api_test/file_system_provider/service_worker/delete_entry/manifest.json
@@ -0,0 +1,23 @@ +{ + // chrome-extension://pkplfbidichfdicaijlchgnapepdginl + "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtDfX9dHNh948bt00YhZBm3P6E5QLaOt+v8kXVtibQfiPtOD2FTScB/f0wX/EQWVO7BkaSOsRkTPcPIgocyMPYr2FLgqGLFlYT9nQpKJZUFNF5oJ5rG6Nv7ppf4zEB3j6da1IBRTz2yOZ+6O1TMZxol/V62/QcqrJeggsHTEPGLdr9Ua4b1Ka0xKJnJngZljsbw93FI1o+P9dAh5BS6wTPiZI/vmJVjvMTkSTnaZ3n9Go2t7A0XLcSxLcVyuLAd2mAvSN0mIviOukdM66wr7llif71nKuUt+4qvlr/r9HfwzN6pA4jkwhtS1UD+3CmB+wsHwsnohNcuu4FIQ6rgq/7QIDAQAB", + "name": "chrome.fileSystemProvider.onDeleteEntryRequested", + "version": "0.1", + "manifest_version": 3, + "description": + "Test for chrome.fileSystemProvider.onDeleteEntryRequested() in service worker.", + "permissions": [ + "fileSystemProvider", + { + "fileSystem": ["requestFileSystem", "write"] + }, + "fileManagerPrivate" + ], + "file_system_provider_capabilities": { + "source": "device" + }, + "background": { + "service_worker": "sw.js", + "type": "module" + } +} \ No newline at end of file
diff --git a/chrome/test/data/extensions/api_test/file_system_provider/service_worker/delete_entry/sw.js b/chrome/test/data/extensions/api_test/file_system_provider/service_worker/delete_entry/sw.js new file mode 100644 index 0000000..120fa1fc --- /dev/null +++ b/chrome/test/data/extensions/api_test/file_system_provider/service_worker/delete_entry/sw.js
@@ -0,0 +1,7 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import {serviceWorkerMain} from '/_test_resources/api_test/file_system_provider/service_worker/provider.js'; + +serviceWorkerMain(self); \ No newline at end of file
diff --git a/chrome/test/data/extensions/api_test/file_system_provider/service_worker/delete_entry/test.html b/chrome/test/data/extensions/api_test/file_system_provider/service_worker/delete_entry/test.html new file mode 100644 index 0000000..766f17d --- /dev/null +++ b/chrome/test/data/extensions/api_test/file_system_provider/service_worker/delete_entry/test.html
@@ -0,0 +1 @@ +<script type="module" src="test.js"></script> \ No newline at end of file
diff --git a/chrome/test/data/extensions/api_test/file_system_provider/service_worker/delete_entry/test.js b/chrome/test/data/extensions/api_test/file_system_provider/service_worker/delete_entry/test.js new file mode 100644 index 0000000..dd5308dd --- /dev/null +++ b/chrome/test/data/extensions/api_test/file_system_provider/service_worker/delete_entry/test.js
@@ -0,0 +1,68 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import {mountTestFileSystem} from '/_test_resources/api_test/file_system_provider/service_worker/helpers.js'; +// For shared constants. +import {TestFileSystemProvider} from '/_test_resources/api_test/file_system_provider/service_worker/provider.js'; + +async function main() { + await navigator.serviceWorker.ready; + + const fileSystem = await mountTestFileSystem(); + + chrome.test.runTests([ + // Delete a file. Should succeed. + async function deleteDirectorySuccessSimple() { + try { + const entry = + await fileSystem.getFileEntry(TestFileSystemProvider.FILE_DELETE, { + create: false, + }); + chrome.test.assertEq(TestFileSystemProvider.FILE_DELETE, entry.name); + chrome.test.assertFalse(entry.isDirectory); + await new Promise((resolve, reject) => entry.remove(resolve, reject)); + chrome.test.succeed(); + } catch (e) { + chrome.test.fail(e); + } + }, + // Delete a directory which has contents, non-recursively. Should fail. + async function deleteDirectoryErrorNotEmpty() { + try { + const entry = await fileSystem.getDirectoryEntry( + TestFileSystemProvider.TEST_DIR_DELETE_NONEMPTY, {create: false}); + chrome.test.assertEq( + TestFileSystemProvider.TEST_DIR_DELETE_NONEMPTY, entry.name); + chrome.test.assertTrue(entry.isDirectory); + try { + await new Promise((resolve, reject) => entry.remove(resolve, reject)); + chrome.test.fail('Unexpectedly succeded to remove a directory.'); + } catch (e) { + chrome.test.assertEq('InvalidModificationError', e.name); + chrome.test.succeed(); + } + } catch (e) { + chrome.test.fail(e); + } + }, + + // Delete a directory which has contents, recursively. Should succeed. + async function deleteDirectoryRecursively() { + try { + const entry = await fileSystem.getDirectoryEntry( + TestFileSystemProvider.TEST_DIR_DELETE_NONEMPTY, {create: false}); + chrome.test.assertEq( + TestFileSystemProvider.TEST_DIR_DELETE_NONEMPTY, entry.name); + chrome.test.assertTrue(entry.isDirectory); + await new Promise( + (resolve, reject) => entry.removeRecursively(resolve, reject)); + chrome.test.succeed(); + } catch (e) { + chrome.test.fail(e); + } + }, + ]); +} + +main();
diff --git a/chrome/test/data/extensions/api_test/file_system_provider/service_worker/helpers.js b/chrome/test/data/extensions/api_test/file_system_provider/service_worker/helpers.js index 947d342..61e8a2b 100644 --- a/chrome/test/data/extensions/api_test/file_system_provider/service_worker/helpers.js +++ b/chrome/test/data/extensions/api_test/file_system_provider/service_worker/helpers.js
@@ -103,6 +103,20 @@ (resolve, reject) => this.fileSystem.root.getFile(path, options, resolve, reject)); } + + /** + * Get a directory entry from the root of the mounted filesystem. + * + * @param {string} path + * @param {{create: (boolean|undefined), exclusive: (boolean|undefined)}} + * options + * @returns {!Promise<!DirectoryEntry>} + */ + async getDirectoryEntry(path, options) { + return new Promise( + (resolve, reject) => + this.fileSystem.root.getDirectory(path, options, resolve, reject)); + } }; /**
diff --git a/chrome/test/data/extensions/api_test/file_system_provider/service_worker/provider.js b/chrome/test/data/extensions/api_test/file_system_provider/service_worker/provider.js index 1bb02fe9..2d57511 100644 --- a/chrome/test/data/extensions/api_test/file_system_provider/service_worker/provider.js +++ b/chrome/test/data/extensions/api_test/file_system_provider/service_worker/provider.js
@@ -62,6 +62,22 @@ modificationTime: new Date(2014, 4, 28, 10, 39, 15) }, }, + ['/' + TestFileSystemProvider.TEST_DIR_DELETE_NONEMPTY]: { + metadata: { + isDirectory: true, + name: TestFileSystemProvider.TEST_DIR_DELETE_NONEMPTY, + size: 0, + modificationTime: new Date(2014, 4, 28, 10, 39, 15), + }, + }, + ['/' + TestFileSystemProvider.FILE_DELETE]: { + metadata: { + isDirectory: false, + name: TestFileSystemProvider.FILE_DELETE, + size: 0, + modificationTime: new Date(2014, 4, 28, 10, 39, 15), + }, + }, // Read error ['/' + TestFileSystemProvider.FILE_FAIL]: { metadata: { @@ -159,6 +175,7 @@ this.setHandlerEnabled('onCloseFileRequested', true); this.setHandlerEnabled('onCopyEntryRequested', true); this.setHandlerEnabled('onCreateFileRequested', true); + this.setHandlerEnabled('onDeleteEntryRequested', true); this.setHandlerEnabled('onGetMetadataRequested', true); this.setHandlerEnabled('onOpenFileRequested', true); this.setHandlerEnabled('onReadFileRequested', true); @@ -648,6 +665,43 @@ metadata.size = newContents.length; onSuccess(); } + + /** + * FSP: implementation of deleting an entry within the same file system. + * + * @param {!chrome.fileSystemProvider.DeleteEntryRequestedOptions} options + * Options. + * @param {function()} onSuccess Success callback + * @param {function(chrome.fileSystemProvider.ProviderError)} onError Error + * callback with an error code. + */ + onDeleteEntryRequested(options, onSuccess, onError) { + if (options.fileSystemId !== this.fileSystemId) { + onError(chrome.fileSystemProvider.ProviderError.SECURITY); + return; + } + + if (options.entryPath === '/') { + onError(chrome.fileSystemProvider.ProviderError.INVALID_OPERATION); + return; + } + + if (options.entryPath === + '/' + TestFileSystemProvider.TEST_DIR_DELETE_NONEMPTY) { + if (options.recursive) + onSuccess(); + else + onError(chrome.fileSystemProvider.ProviderError.INVALID_OPERATION); + return; + } + + if (options.entryPath === '/' + TestFileSystemProvider.FILE_DELETE) { + onSuccess(); + return; + } + + onError(chrome.fileSystemProvider.ProviderError.NOT_FOUND); + } }; /** @@ -711,3 +765,28 @@ * @const */ TestFileSystemProvider.INITIAL_TEXT = 'Hello world. How are you today?'; + +/** + * Non-empty directory. Can only be deleted recursively. + * + * @type {string} + * @const + */ +TestFileSystemProvider.TEST_DIR_DELETE_NONEMPTY = 'non-empty-directory'; + +/** + * File to be deleted. + * + * @type {string} + * @const + */ +TestFileSystemProvider.FILE_DELETE = 'file-delete.txt'; + +// Service worker entry point. +export function serviceWorkerMain(serviceWorker) { + const provider = + new TestFileSystemProvider(TestFileSystemProvider.FILESYSTEM_ID); + + provider.setUpProviderListeners(); + provider.setUpCommandListener(serviceWorker); +} \ No newline at end of file
diff --git a/chrome/test/data/extensions/api_test/file_system_provider/service_worker/read_file/sw.js b/chrome/test/data/extensions/api_test/file_system_provider/service_worker/read_file/sw.js index 388a916..ac074135 100644 --- a/chrome/test/data/extensions/api_test/file_system_provider/service_worker/read_file/sw.js +++ b/chrome/test/data/extensions/api_test/file_system_provider/service_worker/read_file/sw.js
@@ -2,10 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import {TestFileSystemProvider} from '/_test_resources/api_test/file_system_provider/service_worker/provider.js'; +import {serviceWorkerMain} from '/_test_resources/api_test/file_system_provider/service_worker/provider.js'; -const provider = - new TestFileSystemProvider(TestFileSystemProvider.FILESYSTEM_ID); - -provider.setUpProviderListeners(); -provider.setUpCommandListener(self); +serviceWorkerMain(self);
diff --git a/chrome/test/data/extensions/api_test/file_system_provider/service_worker/write_file/sw.js b/chrome/test/data/extensions/api_test/file_system_provider/service_worker/write_file/sw.js index 388a916..ac074135 100644 --- a/chrome/test/data/extensions/api_test/file_system_provider/service_worker/write_file/sw.js +++ b/chrome/test/data/extensions/api_test/file_system_provider/service_worker/write_file/sw.js
@@ -2,10 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import {TestFileSystemProvider} from '/_test_resources/api_test/file_system_provider/service_worker/provider.js'; +import {serviceWorkerMain} from '/_test_resources/api_test/file_system_provider/service_worker/provider.js'; -const provider = - new TestFileSystemProvider(TestFileSystemProvider.FILESYSTEM_ID); - -provider.setUpProviderListeners(); -provider.setUpCommandListener(self); +serviceWorkerMain(self);
diff --git a/chrome/test/data/extensions/platform_apps/web_view/pointer_lock_focus/main.html b/chrome/test/data/extensions/platform_apps/web_view/pointer_lock_focus/main.html index f537c61..fc7b7a1 100644 --- a/chrome/test/data/extensions/platform_apps/web_view/pointer_lock_focus/main.html +++ b/chrome/test/data/extensions/platform_apps/web_view/pointer_lock_focus/main.html
@@ -14,8 +14,8 @@ </style> </head> <body> - <div id="webview-tag-container" style="height:600px; background:#FFFF00;"> - <webview id="webview" style="width: 400px; height: 400px; margin: 0; + <div id="webview-tag-container" style="height:150px; background:#FFFF00;"> + <webview id="webview" style="width: 400px; height: 100px; margin: 0; padding: 0;"></webview> </div> <div id="embedder-area" style="height:600px; background:#FFFF00;">
diff --git a/chrome/test/data/webui/chromeos/emoji_picker/BUILD.gn b/chrome/test/data/webui/chromeos/emoji_picker/BUILD.gn index 72c5450..429b71a 100644 --- a/chrome/test/data/webui/chromeos/emoji_picker/BUILD.gn +++ b/chrome/test/data/webui/chromeos/emoji_picker/BUILD.gn
@@ -6,20 +6,21 @@ js_type_check("closure_compile") { is_polymer3 = true - closure_flags = default_closure_args + mojom_js_args + [ - "browser_resolver_prefix_replacements=\"chrome://emoji-picker/=" + rebase_path( - "//chrome/browser/resources/chromeos/emoji_picker/", - root_build_dir) + "\"", - "js_module_root=" + rebase_path("//chrome/test/data/webui/", - root_build_dir), - "js_module_root=./gen/chrome/test/data/webui/", - "js_module_root=" + rebase_path( - "//chrome/browser/resources/chromeos/emoji_picker/", - root_build_dir), - "js_module_root=" + rebase_path( - "$root_gen_dir/mojom-webui/chrome/browser/ui/webui/chromeos/emoji", - root_build_dir), - ] + closure_flags = + default_closure_args + mojom_js_args + [ + "browser_resolver_prefix_replacements=\"chrome://emoji-picker/=" + + rebase_path("//chrome/browser/resources/chromeos/emoji_picker/", + root_build_dir) + "\"", + "js_module_root=" + + rebase_path("//chrome/test/data/webui/", root_build_dir), + "js_module_root=./gen/chrome/test/data/webui/", + "js_module_root=" + + rebase_path("//chrome/browser/resources/chromeos/emoji_picker/", + root_build_dir), + "js_module_root=" + rebase_path( + "$root_gen_dir/mojom-webui/chrome/browser/ui/webui/ash/emoji", + root_build_dir), + ] deps = [ ":emoji_picker_extension_emoji_test", ":emoji_picker_extension_emoticon_test",
diff --git a/chrome/test/data/webui/settings/chromeos/os_clear_personalization_data_page_test.js b/chrome/test/data/webui/settings/chromeos/os_clear_personalization_data_page_test.js new file mode 100644 index 0000000..e0da3b5 --- /dev/null +++ b/chrome/test/data/webui/settings/chromeos/os_clear_personalization_data_page_test.js
@@ -0,0 +1,48 @@ +// Copyright 2020 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import {LanguagesBrowserProxyImpl} from 'chrome://os-settings/chromeos/lazy_load.js'; +import {CrSettingsPrefs} from 'chrome://os-settings/chromeos/os_settings.js'; +import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; + +import {FakeSettingsPrivate} from './fake_settings_private.js'; +import {TestLanguagesBrowserProxy} from './test_os_languages_browser_proxy.js'; + + +suite('clear personalization data page', () => { + function getFakePrefs() { + return []; + } + + /** @type {?settings.OsSettingsClearPersonalizedDataDialogElement} */ + let clearPersonalizedDataPage; + /** @type {?FakeSettingsPrivate} */ + let settingsPrefs; + + suiteSetup(() => { + CrSettingsPrefs.deferInitialization = true; + }); + + setup(() => { + document.body.innerHTML = ''; + settingsPrefs = document.createElement('settings-prefs'); + const settingsPrivate = new FakeSettingsPrivate(getFakePrefs()); + settingsPrefs.initialize(settingsPrivate); + + clearPersonalizedDataPage = + document.createElement('os-settings-japanese-clear-ime-data-dialog'); + + document.body.appendChild(clearPersonalizedDataPage); + }); + + test( + 'There exists page contents for the clear personalized data page', () => { + assertFalse( + clearPersonalizedDataPage.shadowRoot.querySelector('#dialogBody') + .hidden); + assertFalse( + clearPersonalizedDataPage.shadowRoot.querySelector('.cancel-button') + .hidden); + }); +});
diff --git a/chrome/test/data/webui/settings/chromeos/os_settings_v3_browsertest.js b/chrome/test/data/webui/settings/chromeos/os_settings_v3_browsertest.js index d8787b5..858297a 100644 --- a/chrome/test/data/webui/settings/chromeos/os_settings_v3_browsertest.js +++ b/chrome/test/data/webui/settings/chromeos/os_settings_v3_browsertest.js
@@ -380,6 +380,10 @@ 'os_bluetooth_change_device_name_dialog_tests.js', ], ['OsEditDictionaryPage', 'os_edit_dictionary_page_test.js'], + [ + 'OsClearPersonalizationDataPage', + 'os_clear_personalization_data_page_test.js' + ], ['OsLanguagesPageV2', 'os_languages_page_v2_tests.js'], ['OsPairedBluetoothList', 'os_paired_bluetooth_list_tests.js'], [
diff --git a/chrome/updater/run_all_unittests.cc b/chrome/updater/run_all_unittests.cc index ecffbb2..b464643 100644 --- a/chrome/updater/run_all_unittests.cc +++ b/chrome/updater/run_all_unittests.cc
@@ -26,6 +26,7 @@ #include "base/base_paths.h" #include "base/files/file_path.h" +#include "base/files/file_util.h" #include "base/path_service.h" #include "base/win/registry.h" #include "base/win/scoped_com_initializer.h" @@ -203,6 +204,10 @@ false); // enable_tickcount LOG(ERROR) << "A test timeout has occured in " << updater::test::GetTestName(); +#if BUILDFLAG(IS_WIN) + const base::FilePath updater_test = updater::test::GetUpdaterTestPath(); + PLOG_IF(0, !base::PathExists(updater_test)) << ", " << updater_test; +#endif updater::test::CreateIntegrationTestCommands()->PrintLog(); }), base::BindOnce(&base::TestSuite::Run, base::Unretained(&test_suite)));
diff --git a/chrome/updater/test/integration_tests.cc b/chrome/updater/test/integration_tests.cc index cc2b3ba..145658e 100644 --- a/chrome/updater/test/integration_tests.cc +++ b/chrome/updater/test/integration_tests.cc
@@ -33,6 +33,7 @@ #include "chrome/updater/test/integration_tests_impl.h" #include "chrome/updater/test/server.h" #include "chrome/updater/test_scope.h" +#include "chrome/updater/unittest_util.h" #include "chrome/updater/update_service.h" #include "chrome/updater/updater_scope.h" #include "chrome/updater/updater_version.h" @@ -95,6 +96,9 @@ true, // enable_thread_id true, // enable_timestamp false); // enable_tickcount +#if BUILDFLAG(IS_WIN) + ASSERT_TRUE(base::PathExists(updater_path_)) << updater_path_; +#endif Clean(); ExpectClean(); // TODO(crbug.com/1233612) - reenable the code when system tests pass. @@ -112,6 +116,9 @@ // TODO(crbug.com/1233612) - reenable the code when system tests pass. // TearDownTestService(); Clean(); +#if BUILDFLAG(IS_WIN) + ASSERT_TRUE(base::PathExists(updater_path_)) << updater_path_; +#endif } void CopyLog() { test_commands_->CopyLog(); } @@ -335,6 +342,7 @@ private: base::test::TaskEnvironment environment_; + const base::FilePath updater_path_ = GetUpdaterTestPath(); }; // The project's position is that component builds are not portable outside of
diff --git a/chrome/updater/unittest_util.cc b/chrome/updater/unittest_util.cc index b7df85b..8ab62e2 100644 --- a/chrome/updater/unittest_util.cc +++ b/chrome/updater/unittest_util.cc
@@ -7,13 +7,16 @@ #include <string> #include <utility> +#include "base/base_paths.h" #include "base/files/file_path.h" #include "base/files/file_util.h" #include "base/memory/scoped_refptr.h" +#include "base/path_service.h" #include "base/process/kill.h" #include "base/process/process_iterator.h" #include "base/strings/strcat.h" #include "base/time/time.h" +#include "build/build_config.h" #include "chrome/updater/constants.h" #include "chrome/updater/policy/manager.h" #include "chrome/updater/policy/service.h" @@ -80,4 +83,14 @@ return Local::DeleteDirsIfEmpty(file_path->DirName()); } +base::FilePath GetUpdaterTestPath() { + base::FilePath out_dir; + CHECK(base::PathService::Get(base::DIR_EXE, &out_dir)); +#if BUILDFLAG(IS_WIN) + return out_dir.Append(FILE_PATH_LITERAL("updater_test.exe")); +#else + return out_dir.Append(FILE_PATH_LITERAL("updater_test")); +#endif +} + } // namespace updater::test
diff --git a/chrome/updater/unittest_util.h b/chrome/updater/unittest_util.h index bd5600d..d674120 100644 --- a/chrome/updater/unittest_util.h +++ b/chrome/updater/unittest_util.h
@@ -58,6 +58,10 @@ bool DeleteFileAndEmptyParentDirectories( const absl::optional<base::FilePath>& file_path); +// TODO(crbug.com/1372590) - remove function when the bug is closed. +// Returns the path of the updater_test.exe in the "out" directory of the build. +base::FilePath GetUpdaterTestPath(); + } // namespace updater::test #endif // CHROME_UPDATER_UNITTEST_UTIL_H_
diff --git a/chromeos/ash/components/login/auth/auth_session_authenticator.cc b/chromeos/ash/components/login/auth/auth_session_authenticator.cc index b00a96b..e61d9be 100644 --- a/chromeos/ash/components/login/auth/auth_session_authenticator.cc +++ b/chromeos/ash/components/login/auth/auth_session_authenticator.cc
@@ -448,11 +448,14 @@ std::move(error_callback).Run(std::move(context), error.value()); return; } - LOGIN_LOG(EVENT) << "Regular User Unlock " << user_exists; - if (!user_exists && - !is_ephemeral_mount_enforced_) { // Scenario where user does not exist - // and ephemeral mount is not enforced. + bool is_user_ephemeral = + is_ephemeral_mount_enforced_ || + (context->GetUserType() == user_manager::USER_TYPE_PUBLIC_ACCOUNT); + LOGIN_LOG(EVENT) << "Regular User Unlock " << user_exists << " " + << is_ephemeral_mount_enforced_ << " " << is_user_ephemeral; + + if (!user_exists && !is_user_ephemeral) { LOGIN_LOG(ERROR) << "User directory does not exist for supposedly existing user"; std::move(error_callback) @@ -461,7 +464,7 @@ user_data_auth::CRYPTOHOME_ERROR_ACCOUNT_NOT_FOUND}); return; } - DCHECK(user_exists && !is_ephemeral_mount_enforced_); + DCHECK(user_exists || is_user_ephemeral); bool challenge_response_auth = !context->GetChallengeResponseKeys().empty();
diff --git a/chromeos/profiles/orderfile.newest.txt b/chromeos/profiles/orderfile.newest.txt index 032b1fba..fef5d61 100644 --- a/chromeos/profiles/orderfile.newest.txt +++ b/chromeos/profiles/orderfile.newest.txt
@@ -1 +1 @@ -chromeos-chrome-orderfile-field-107-5304.14-1664791188-benchmark-107.0.5304.30-r1.orderfile.xz +chromeos-chrome-orderfile-field-107-5304.14-1664791188-benchmark-107.0.5304.31-r1.orderfile.xz
diff --git a/chromeos/strings/chromeos_strings_da.xtb b/chromeos/strings/chromeos_strings_da.xtb index 7bd36555..68fd0c2 100644 --- a/chromeos/strings/chromeos_strings_da.xtb +++ b/chromeos/strings/chromeos_strings_da.xtb
@@ -139,7 +139,7 @@ <translation id="2161394479394250669">Annuller udskriftsjob</translation> <translation id="2163937499206714165">Aktivér mørkt tilstand</translation> <translation id="2180197493692062006">Der opstod en fejl. Prøv at åbne appen igen.</translation> -<translation id="2182088270354640012">Tak for din feedback. Din feedback er med til at forbedre Chrome OS og gennemgås af Chrome OS-teamet. Vi modtager et stort antal rapporter, så du modtager ikke et direkte svar.</translation> +<translation id="2182088270354640012">Tak for din feedback. Din feedback er med til at forbedre ChromeOS og gennemgås af ChromeOS-teamet. Vi modtager et stort antal rapporter, så du modtager ikke et direkte svar.</translation> <translation id="2209788852729124853">Nulstil trafiktællere</translation> <translation id="2212733584906323460">Navneløsning</translation> <translation id="2217935453350629363">Nuværende hastighed</translation> @@ -296,7 +296,7 @@ <translation id="3954678691475912818">Enhedstypen er ukendt.</translation> <translation id="3966286471246132217">Luk alle apps, indtil testen er fuldført, for at få mere nøjagtige resultater.</translation> <translation id="3967822245660637423">Download fuldført</translation> -<translation id="3969602104473960991">Chrome OS-adgangskoden er opdateret</translation> +<translation id="3969602104473960991">ChromeOS-adgangskoden er opdateret</translation> <translation id="397105322502079400">Beregner...</translation> <translation id="39823212440917567">Udskriftsjobs, der er ældre end <ph name="NUMBER_OF_DAYS" /> dage, fjernes</translation> <translation id="3993704782688964914">Din <ph name="DEVICE_NAME" /> er nu opdateret</translation> @@ -527,7 +527,7 @@ <translation id="6113701710518389813">Pil op</translation> <translation id="6117895505466548728"><ph name="TITLE" />, +<ph name="NUMBER" /> flere album</translation> <translation id="6122191549521593678">Online</translation> -<translation id="6122277663991249694">Indtastningsmetodetjeneste for Chrome OS</translation> +<translation id="6122277663991249694">Indtastningsmetodetjeneste for ChromeOS</translation> <translation id="6137767437444130246">Brugercertifikat</translation> <translation id="6146993107019042706">Angiv din nye adgangskode for at afslutte</translation> <translation id="6147514244879357420">PNG</translation> @@ -750,7 +750,7 @@ <translation id="8420955526972171689">Kør tests og fejlfinding af hardwareproblemer</translation> <translation id="8422748173858722634">IMEI</translation> <translation id="8428073762635678092">Indbygget tastatur</translation> -<translation id="8431300646573772016">Nyt i Chrome OS</translation> +<translation id="8431300646573772016">Nyt i ChromeOS</translation> <translation id="843568408673868420">Internetforbindelse</translation> <translation id="844521431886043384">DNS er ikke konfigureret</translation> <translation id="8456761643544401578">Automatisk mørk tilstand</translation> @@ -823,7 +823,7 @@ <translation id="9082718469794970195">Brug denne video</translation> <translation id="9087578468327036362">Rapportér denne forespørgsel</translation> <translation id="9088306295921699330">Aktuelt forbrug</translation> -<translation id="9092255287806472980">Din feedback er med til at forbedre Chrome OS og gennemgås af vores team. Vi modtager et stort antal rapporter, så vi kan ikke sende dig et svar.</translation> +<translation id="9092255287806472980">Din feedback er med til at forbedre ChromeOS og gennemgås af vores team. Vi modtager et stort antal rapporter, så vi kan ikke sende dig et svar.</translation> <translation id="9095775724867566971">Pluginvm</translation> <translation id="910415269708673980">Gendan billetten for <ph name="PRINCIPAL_NAME" /></translation> <translation id="9106415115617144481">Scanner side <ph name="PAGE_NUMBER" /></translation>
diff --git a/chromeos/strings/chromeos_strings_en-GB.xtb b/chromeos/strings/chromeos_strings_en-GB.xtb index e3cab3876..64f1b1c 100644 --- a/chromeos/strings/chromeos_strings_en-GB.xtb +++ b/chromeos/strings/chromeos_strings_en-GB.xtb
@@ -470,6 +470,7 @@ <translation id="5502931783115429516">Android not running</translation> <translation id="5519195206574732858">LTE</translation> <translation id="554517032089923082">GTC</translation> +<translation id="5559898619118303662">Automatically switch to Dark theme at sunset</translation> <translation id="5578477003638479617">UMTS</translation> <translation id="5578519639599103840">Rescan</translation> <translation id="5583640892426849032">Backspace</translation>
diff --git a/components/certificate_transparency/data/log_list.json b/components/certificate_transparency/data/log_list.json index 1bad2952..fdb1fe2 100644 --- a/components/certificate_transparency/data/log_list.json +++ b/components/certificate_transparency/data/log_list.json
@@ -1,6 +1,6 @@ { - "version": "13.11", - "log_list_timestamp": "2022-10-08T12:54:28Z", + "version": "13.12", + "log_list_timestamp": "2022-10-09T12:54:59Z", "operators": [ { "name": "Google",
diff --git a/components/favicon/content/content_favicon_driver.cc b/components/favicon/content/content_favicon_driver.cc index 7b25c09..507531e 100644 --- a/components/favicon/content/content_favicon_driver.cc +++ b/components/favicon/content/content_favicon_driver.cc
@@ -115,7 +115,7 @@ // here. web_contents()->GetPrimaryPage().GetManifest( base::BindOnce(&ContentFaviconDriver::OnDidDownloadManifest, - base::Unretained(this), std::move(callback))); + weak_ptr_factory_.GetWeakPtr(), std::move(callback))); } bool ContentFaviconDriver::IsOffTheRecord() {
diff --git a/components/favicon/content/content_favicon_driver.h b/components/favicon/content/content_favicon_driver.h index 30a5174..f16f3a56 100644 --- a/components/favicon/content/content_favicon_driver.h +++ b/components/favicon/content/content_favicon_driver.h
@@ -101,6 +101,8 @@ GURL bypass_cache_page_url_; + base::WeakPtrFactory<ContentFaviconDriver> weak_ptr_factory_{this}; + WEB_CONTENTS_USER_DATA_KEY_DECL(); };
diff --git a/components/policy/resources/policy_templates_pt-BR.xtb b/components/policy/resources/policy_templates_pt-BR.xtb index 680321b..0a0f34a5 100644 --- a/components/policy/resources/policy_templates_pt-BR.xtb +++ b/components/policy/resources/policy_templates_pt-BR.xtb
@@ -52,6 +52,7 @@ Se essa política não for definida, o recurso não será permitido por padrão para usuários gerenciados, mas será permitido para outros usuários.</translation> <translation id="1035860095382451169">Ativar o ícone de bloqueio na omnibox para conexões seguras</translation> +<translation id="1037470927044831850">Permitir que os sites peçam para o usuário compartilhar um stream de vídeo da tela</translation> <translation id="1040125341954178855">Este recurso foi removido no Chrome 100. Se a política for ativada, vai haver recomendações para apps já instalados pelo usuário em outros dispositivos. Se nenhum texto de pesquisa tiver sido inserido, elas vão aparecer no acesso rápido depois das recomendações de apps locais. @@ -276,6 +277,7 @@ Se a política não for definida ou se o valor pós-substituição não for um nome de host válido, nenhum nome de host será definido na solicitação de DHCP.</translation> <translation id="1257550411839719984">Definir diretório de download padrão</translation> +<translation id="1262993197422487260">Não mostrar o botão de exibição de senha nas telas de login e de bloqueio</translation> <translation id="1265053460044691532">Limite o tempo pelo qual um usuário autenticado via SAML pode fazer login off-line</translation> <translation id="1271811620059192171">Ativar grupos atômicos de política</translation> <translation id="127264587838521316">Ativa as solicitações de instalação de extensões do <ph name="PRODUCT_NAME" /></translation> @@ -329,6 +331,7 @@ Se a política for definida como "Forçada" (2), o seletor de perfil não poderá ser suprimido pelos usuários. Ele será exibido mesmo quando houver apenas um perfil disponível.</translation> <translation id="1339174690935954950">Impedir que os usuários enviem feedback</translation> +<translation id="1340053691042184658">Impedir logins em navegação como visitante</translation> <translation id="1342918903685430097">Configura a versão mínima permitida do <ph name="PRODUCT_OS_NAME" /> para o dispositivo.</translation> <translation id="1343128241903870688">Desativar relatórios de informações de apps do dispositivo</translation> <translation id="1347198119056266798">Esta política está obsoleta. Use <ph name="FORCE_GOOGLE_SAFE_SEARCH_POLICY_NAME" /> e <ph name="FORCE_YOUTUBE_RESTRICT_POLICY_NAME" />. Esta política será ignorada se as políticas <ph name="FORCE_GOOGLE_SAFE_SEARCH_POLICY_NAME" />, <ph name="FORCE_YOUTUBE_RESTRICT_POLICY_NAME" /> ou <ph name="FORCE_YOUTUBE_SAFETY_MODE_POLICY_NAME" /> (obsoleta) estiverem definidas. @@ -506,6 +509,7 @@ <translation id="1503969899251962413">A definição da política especifica a chave de licença da <ph name="PLUGIN_VM_NAME" /> para este dispositivo. Essa política foi removida na versão M94.</translation> +<translation id="1507373253059695424">Sempre ativar a tela de privacidade na tela de login</translation> <translation id="150857982247452081">Permite definir uma lista de protocolos e, para cada protocolo, uma lista associada de padrões de origem com permissão para inicializar um aplicativo externo sem notificar o usuário. O separador à direita não pode ser incluído ao listar o protocolo, então liste "skype" em vez de "skype:" ou "skype://". Se esta política for definida, um protocolo só terá permissão para inicializar um aplicativo externo sem notificação se o protocolo estiver listado e a origem do site que tentou inicializar o protocolo corresponder a um dos padrões de origem na lista allowed_origins desse protocolo. Se alguma das condições for falsa, a solicitação de inicialização de protocolo externo não será omitida pela política. @@ -681,6 +685,7 @@ Se você definir esta política, o usuário não poderá mudá-la ou substituí-la. Se esta política não for definida, o ditado ficará inicialmente desativado na tela de login, mas poderá ser ativado pelo usuário a qualquer momento.</translation> +<translation id="1673097259557436886">Sempre informar os sites de que não existem formas de pagamento salvas</translation> <translation id="1674287836076801014">SAML</translation> <translation id="1675002386741412210">Com suporte em:</translation> <translation id="167514072300004091">Se a política for definida como 3, os sites poderão solicitar acesso a dispositivos USB conectados. Se ela for definida como 2, será negado o acesso a dispositivos USB conectados. @@ -758,6 +763,7 @@ Para informações detalhadas sobre padrões de <ph name="URL_LABEL" /> válidos, consulte https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns (link em inglês). O valor <ph name="WILDCARD_VALUE" /> não é aceito para esta política.</translation> <translation id="1736269219679256369">Permitir a continuação na página de aviso SSL</translation> +<translation id="1744340218280697033">Não permitir que os pais adicionem contas supervisionadas</translation> <translation id="1751429117283165017">Se a política for definida, será possível configurar uma lista de padrões de URL que especifica quais sites não podem pedir que os usuários concedam permissão de gravação de arquivos ou diretórios no sistema de arquivos do sistema operacional do host. Se a política não tiver definição, <ph name="DEFAULT_FILE_SYSTEM_WRITE_GUARD_SETTING_POLICY_NAME" /> será aplicada a todos os sites, se estiver definida. Caso contrário, as configurações pessoais dos usuários serão aplicadas. @@ -775,6 +781,7 @@ Observação: para ver mais exemplos detalhados, acesse The Chromium Projects em https://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett (link em inglês).</translation> <translation id="1767673020408652620">Ativar recomendações de app no estado inicial da caixa de pesquisa</translation> +<translation id="1770071413238151235">Formato de relógio de 12 horas</translation> <translation id="1780323582106687813">Esta política está obsoleta. Use <ph name="EXTENSION_INSTALL_ALLOWLIST_POLICY_NAME" />. Se definida, a política especificará as extensões isentas da lista de extensões proibidas. Use o valor <ph name="ALL_EXTENSIONS" /> para <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" /> para que todas as extensões sejam proibidas e os usuários possam instalar apenas extensões explicitamente permitidas. Por padrão, todas as extensões são permitidas. Mas, se você proibiu extensões por meio de uma política, use a lista de extensões permitidas para mudar essa política.</translation> @@ -821,6 +828,7 @@ </translation> <translation id="1808715480127969042">Bloquear cookies nestes sites</translation> <translation id="1810261428246410396">Permitir que o tethering instantâneo seja usado.</translation> +<translation id="1813638828646876133">Ativar o envio automático do PIN na tela de bloqueio e login</translation> <translation id="1813672770917912317">Permite definir se o <ph name="PRODUCT_NAME" /> executará o mecanismo JavaScript V8 com o compilador JIT (Just In Time) ativado ou não. Se você desativar o JIT do JavaScript, o <ph name="PRODUCT_NAME" /> poderá renderizar conteúdo da Web mais lentamente, e partes do próprio JavaScript poderão ser desativadas, incluindo o WebAssembly. Se você desativar o JIT do JavaScript, o <ph name="PRODUCT_NAME" /> poderá renderizar conteúdo da Web com uma configuração mais segura. @@ -924,6 +932,7 @@ Deixar a política sem definição desativa a autenticação <ph name="HTTP_NEGOTIATE" /> no Android.</translation> <translation id="1923704782248889851">Ativar ditado</translation> <translation id="1925529914257504750">P2P de atualização automática ativado</translation> +<translation id="1928355425032308464">Permitir entrada de vídeo</translation> <translation id="1930094135927166199">Desativar compartilhamento de energia via USB</translation> <translation id="1930127294345368978">Número máximo de páginas permitidas para um único trabalho de impressão</translation> <translation id="193259052151668190">Lista de permissões de dispositivos USB removíveis</translation> @@ -1011,6 +1020,7 @@ Se a política for definida como falsa ou se não for definida, as informações não serão enviadas. Se ela for definida como verdadeira, o fuso horário atual do dispositivo será enviado.</translation> <translation id="199764499252435679">Ativar atualizações de componentes no <ph name="PRODUCT_NAME" /></translation> +<translation id="1997943707974344423">Permitir o Smart Lock</translation> <translation id="1998504583649140526">Configurações de solicitações de rede particulares</translation> <translation id="1999000620918508488">Força a tela de login a exibir ou ocultar informações do sistema.</translation> <translation id="1999942889260716089">Se a política for definida como verdadeira, as sugestões de pesquisa na barra de endereço do <ph name="PRODUCT_NAME" /> vão ser ativadas. Se ela for definida como falsa, essas sugestões vão ser desativadas. @@ -1031,6 +1041,7 @@ <translation id="2006530844219044261">Gerenciamento de energia</translation> <translation id="2006954055163088863">Considerar o usuário inativo durante a reprodução de vídeos</translation> <translation id="2008514891623783266">A política de processamento de IPs do WebRTC</translation> +<translation id="2012296492055302633">Sempre ativar a tela de privacidade</translation> <translation id="2013285471046373727">Especifica como um app é instalado. OPTIONAL: o app não será instalado automaticamente, mas o usuário poderá instalá-lo. Caso a política não seja especificada, esse será o valor padrão. PRELOAD: o app será instalado automaticamente, mas o usuário poderá desinstalá-lo. FORCE_INSTALLED: o app será instalado automaticamente, e o usuário não poderá desinstalá-lo. BLOCKED: o app fica bloqueado e não pode ser instalado. Se o app tiver sido instalado por uma política anterior, ele será desinstalado.</translation> <translation id="2014757022750736514">Controla o comportamento da tela de login, onde o usuário se conecta à própria conta. As configurações incluem quem pode fazer login, que tipo de conta é permitido, que métodos de autenticação precisam ser usados, além de configurações gerais de acessibilidade, método de entrada e localidade.</translation> <translation id="201557587962247231">Frequência de uploads de relatórios de status do dispositivo</translation> @@ -1075,6 +1086,7 @@ <translation id="2057317273526988987">Permitir acesso a uma lista de URLs</translation> <translation id="2058055310819710697">Ativar o modo de desenvolvedor para apps isolados</translation> <translation id="205807990145127714">Dados de telemetria para registrar o evento da intensidade do sinal.</translation> +<translation id="2060153898336610735">Automático, com base no idioma atual</translation> <translation id="2061123930713023976">Permitir capturas de pacotes de rede para depuração</translation> <translation id="2061810934846663491">Configurar os nomes de domínio obrigatórios para hosts de acesso remoto</translation> <translation id="2062632109797189011">Reativar a API window.webkitStorageInfo descontinuada</translation> @@ -1106,6 +1118,7 @@ <translation id="209586405398070749">Canal Stable</translation> <translation id="2096932573113293941">Pedir permissão ao usuário para executar plug-ins que exigem autorização</translation> <translation id="2098658257603918882">Ativar relato de uso e dados relacionados a falhas</translation> +<translation id="2099380339157427935">Não mostrar o botão "Sair" na bandeja</translation> <translation id="2104418465060359056">Fornecer informações sobre extensões e plug-ins</translation> <translation id="2106627642643925514">Modifica o modo padrão de impressão com PIN. Se o modo não estiver disponível, a política será ignorada.</translation> <translation id="2107563874993284076">A definição da política como "Ativada" permitirá que os usuários usem Compartilhamentos de arquivos de rede para o <ph name="PRODUCT_NAME" />. Se a política for definida como "Desativada", os usuários não poderão usar esse recurso.</translation> @@ -1139,6 +1152,7 @@ <translation id="2135335181634291106">Se a <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" /> estiver ativada, definir <ph name="DEFAULT_SEARCH_PROVIDER_ICON_URL_POLICY_NAME" /> especificará o URL de ícone favorito do provedor de pesquisa padrão. Se a <ph name="DEFAULT_SEARCH_PROVIDER_ICON_URL_POLICY_NAME" /> não for definida, o provedor de pesquisa não terá um ícone.</translation> +<translation id="2144236546337326489">Permitir que a continuação da tarefa do recurso "Seu smartphone" seja ativada</translation> <translation id="2145735238144543545">Certificados do cliente obrigatórios</translation> <translation id="2146103669166779785">Cor hexadecimal que será usada para gerar e aplicar um tema ao navegador.</translation> <translation id="2148769554831004951">Forçar a ativação do WebSQL.</translation> @@ -1191,6 +1205,7 @@ <translation id="2171952274731262470">Atrasos e ações a serem tomadas quando o dispositivo estiver inativo e funcionando com energia da bateria.</translation> <translation id="2175353308236295184">Objeto de configuração JSON específico do app com um conjunto de pares de chave-valor, por exemplo, '"managedConfiguration": { "key1": value1, "key2": value2 }'. As chaves são definidas no manifesto do app.</translation> <translation id="2176115444876446233">Impede que os usuários coletem o rastreamento de desempenho do sistema.</translation> +<translation id="2177696016354404697">Sempre desativar a tela de privacidade</translation> <translation id="2178899310296064282">Aplicar pelo menos o Modo restrito moderado no YouTube</translation> <translation id="2180958780733364832">Controlar o uso do modo headless</translation> <translation id="2182291258410176649">O usuário decide se quer ativar o backup e a restauração</translation> @@ -1297,6 +1312,8 @@ Os usuários não poderão mudar ou substituir essa configuração. Observação: essa política faz com que o cabeçalho X-GoogApps-Allowed-Domains seja anexado a todas as solicitações HTTP e HTTPS de todos os domínios google.com, como descrito em https://support.google.com/a/answer/1668854.</translation> +<translation id="2282174652047982960">Sempre usar o cliente DNS integrado quando disponível</translation> +<translation id="2288506601233091655">Não permitir a exclusão do histórico de trabalhos de impressão</translation> <translation id="2289265947759479962">Esta política controla a permissão de fornecimento das informações sobre versão, como a versão, a plataforma e a arquitetura do SO, a versão do <ph name="PRODUCT_NAME" /> e o canal do <ph name="PRODUCT_NAME" />. Quando a <ph name="CLOUD_REPORTING_ENABLED_POLICY_NAME" /> não for definida ou for desativada, esta política será ignorada. @@ -1334,6 +1351,7 @@ <translation id="2309284543927494965">Bloquear atualizações</translation> <translation id="2309341709647905294">Não relatar informações sobre periféricos que estão conectados ao dispositivo</translation> <translation id="2309390639296060546">Configuração padrão de geolocalização</translation> +<translation id="2318583605563438459">Permitir que os pais adicionem contas supervisionadas</translation> <translation id="2331354174913096226">O modelo de URI do resolvedor de DNS sobre HTTPS desejado. Para especificar vários resolvedores de DNS sobre HTTPS, separe os modelos de URI correspondentes com espaços. Se DnsOverHttpsMode estiver definido como <ph name="SECURE_DNS_MODE_SECURE" />, esta política precisará ser definida e não poderá estar vazia. @@ -1442,6 +1460,7 @@ Se esta política não for definida, a tela de privacidade ficará desativada inicialmente, mas poderá ser controlada pelo usuário.</translation> <translation id="2413899611035194909">Mostrar opções de acessibilidade no menu da bandeja do sistema na tela de login</translation> <translation id="2415715982424988916">Explorar (compatível desde a versão 91)</translation> +<translation id="2421400544595297401">Não permitir o acesso de usuários não afiliados aos apps Android</translation> <translation id="2421677964966613267">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, será possível configurar uma lista de padrões de URL que especifica os sites que não podem executar o plug-in <ph name="FLASH_PLUGIN_NAME" />. Se a política não tiver definição, <ph name="DEFAULT_PLUGINS_SETTING_POLICY_NAME" /> será aplicada a todos os sites, se estiver definida. Caso contrário, a configuração pessoal do usuário será aplicada. @@ -1477,6 +1496,7 @@ <translation id="2436302465999055995">Tornar o <ph name="LACROS_NAME" /> o único navegador disponível (ainda não implementado)</translation> <translation id="2439187682308339104">Não permitir que nenhum site solicite acesso a dispositivos HID pela API WebHID</translation> <translation id="2439733504887695659">Ativar a opção de dispensar alertas de senha comprometida para as credenciais inseridas</translation> +<translation id="2446244536806499267">Não considerar o usuário como inativo enquanto o áudio é reproduzido</translation> <translation id="2448315169529769573">Se a política for definida como "Ativada", o <ph name="PRODUCT_OS_NAME" /> informará métricas de uso e dados de diagnóstico, incluindo relatórios de erros, para o Google. Se a política for definida como "Desativada", as informações de métrica e dados de diagnóstico serão desativados. Se a política não for definida, as informações de métrica e dados de diagnóstico ficarão desativados nos dispositivos não gerenciados e ativados nos dispositivos gerenciados.</translation> @@ -1675,6 +1695,7 @@ <translation id="2625398797484317969">Controla as configurações das Respostas rápidas.</translation> <translation id="262740370354162807">Ativar o envio de documentos para <ph name="CLOUD_PRINT_NAME" /></translation> <translation id="2633084400146331575">Ativar resposta falada</translation> +<translation id="2633907568797306353">Permitir a ativação das notificações do recurso "Seu smartphone"</translation> <translation id="2635872253077105112">Se a política for definida, ela controlará a abertura da lista de sites em um navegador alternativo. Cada item será tratado como uma regra para abrir algo em um navegador alternativo. No <ph name="PRODUCT_NAME" />, essas regras são usadas para determinar se um URL será aberto em um navegador alternativo ou não. Quando o suplemento do <ph name="IE_PRODUCT_NAME" /> estiver ativado, o <ph name="IE_PRODUCT_NAME" /> retornará ao <ph name="PRODUCT_NAME" /> quando não houver correspondência com as regras. Se as regras forem contraditórias, o <ph name="PRODUCT_NAME" /> usará a regra mais específica. Se a política não for definida, nenhum site será adicionado à lista. @@ -1756,6 +1777,7 @@ <translation id="2725855586003209701">Se a política for definida como "Ativada" ou não for definida, os dispositivos registrados informarão a lista de usuários que fizeram login recentemente. Se a política for definida como "Desativada", os dispositivos registrados não informarão a lista de usuários.</translation> +<translation id="2730200383593984228">Permitir o acesso de usuários não afiliados aos apps Android</translation> <translation id="2730419309754848345">Padrão para imprimir PDF como imagem</translation> <translation id="2731299561202635374">Esta política controla a verificação de URLs em tempo real para identificar os que são perigosos. @@ -1900,6 +1922,7 @@ <translation id="2841911109921764691">Botão direito como principal na tela de login</translation> <translation id="284288632677954003">URL de um arquivo XML contendo URLs que nunca devem acionar uma troca de navegador.</translation> <translation id="2846689894646472396">Frequência de verificação de eventos de rede em milissegundos.</translation> +<translation id="2847788524147474533">As políticas do computador da plataforma têm precedência em relação às políticas do computador na nuvem</translation> <translation id="2849275596224278787">Ocultar opções de acessibilidade no menu da bandeja do sistema na tela de login</translation> <translation id="2853649500575897584">Não bloquear pontos de extensão legados no processo do navegador</translation> <translation id="285480231336205327">Ativar modo de alto contraste</translation> @@ -1907,6 +1930,8 @@ <translation id="2856674246949497058">Faça a reversão e permaneça na versão de destino se a versão do SO for mais recente que a de destino. Execute um Powerwash durante o processo.</translation> <translation id="2866619962692161453">Tipo de metapolítica</translation> <translation id="2866726566162790531">Lista de origens que autorizam todas as autenticações HTTP</translation> +<translation id="2868756546751652023">Permitir o uso do tethering instantâneo</translation> +<translation id="286898786908566256">Permitir que os usuários enviem números de telefone do Chrome para o dispositivo Android</translation> <translation id="2872098849906555324">Desativar a sincronização do Google Drive</translation> <translation id="2872961005593481000">Desligar</translation> <translation id="2874209944580848064">Observação para dispositivos <ph name="PRODUCT_OS_NAME" /> compatíveis com apps Android:</translation> @@ -1967,6 +1992,7 @@ <translation id="2906874737073861391">Lista de extensões AppPack</translation> <translation id="2908277604670530363">Número máximo de conexões simultâneas ao servidor proxy</translation> <translation id="2912366658685903301">Configurar a cor do tema do navegador</translation> +<translation id="2914283793640833265">Não permitir que a continuação de tarefas do recurso "Seu smartphone" seja ativada</translation> <translation id="291853569864365550">Não mostrar sugestões de conteúdo na página "Nova guia"</translation> <translation id="2920795918401557243">Esta configuração permite coletar o rastreamento de desempenho do sistema usando o serviço de rastreamento do sistema. @@ -2067,6 +2093,7 @@ Se uma política estiver na lista, mas não tiver sido lançada oficialmente, o valor dela será aplicado. Esta política não afeta políticas já lançadas.</translation> +<translation id="3002067315837777719">Não permitir que as notificações do recurso "Seu smartphone" sejam ativadas</translation> <translation id="3016255526521614822">Colocar na lista de permissões os apps de anotação permitidos na tela de bloqueio do <ph name="PRODUCT_OS_NAME" />.</translation> <translation id="3017578958356048910">O visualizador de PDF pode fazer anotações em PDFs</translation> <translation id="3020623128585817424">Desativar a verificação de navegador padrão na inicialização</translation> @@ -2256,6 +2283,7 @@ Para informações detalhadas sobre padrões de <ph name="URL_LABEL" /> válidos, consulte https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns (link em inglês). <ph name="WILDCARD_VALUE" /> não é um valor aceitável para esta política.</translation> <translation id="3168968618972302728">Políticas relacionadas à autenticação do Kerberos.</translation> +<translation id="3169872426103732947">Mostrar o URL padrão e permitir que os usuários mudem para o URL completo</translation> <translation id="3171369832001535378">Modelo de nome do host da rede do dispositivo</translation> <translation id="3177802893484440532">Exigir verificações on-line de OCSP/CRL para âncoras de confiança locais</translation> <translation id="3180671894201217988">Se a política for ativada ou deixada sem definição, softwares de terceiros não poderão injetar código executável em processos do <ph name="PRODUCT_NAME" />. @@ -2470,6 +2498,7 @@ Esta política é temporária e será removida em uma versão futura do <ph name="PRODUCT_NAME" />.</translation> +<translation id="3351835664671920945">Usar o teclado normal por padrão para a entrada de senhas</translation> <translation id="3359186795130278362">Ativar sessão de visitante gerenciada restrita.</translation> <translation id="33592541385181121">Não incluir uma porta no SPN do Kerberos gerado</translation> <translation id="3360093276083825336">Esta política está obsoleta e será removida na versão 85 do <ph name="PRODUCT_OS_NAME" />. Por isso, passe a usar <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />. @@ -2510,6 +2539,7 @@ <translation id="3398051852031115795">Comportamento padrão do sistema (depende do tamanho da tela)</translation> <translation id="3399859571630358395">Forçar a desativação do Pareamento rápido (pareamento rápido por Bluetooth).</translation> <translation id="3404681701763345449">Ativar a integração com o <ph name="GOOGLE_CALENDAR_NAME" />.</translation> +<translation id="3406122462682235653">Não perguntar ao usuário (o download começa imediatamente)</translation> <translation id="3408078762098350617">Controla a experiência do usuário com recursos desativados na <ph name="SYSTEM_FEATURES_DISABLE_LIST_POLICY_NAME" />. Se a política for bloqueada, os recursos desativados não poderão ser usados, mas vão ficar visíveis para os usuários. @@ -2583,6 +2613,7 @@ Se você definir esta política, os usuários não poderão alterá-la nem substituí-la. Se esta política não for definida, o recurso "Selecionar para ouvir" ficará inicialmente desativado na tela de login, mas poderá ser ativado pelo usuário a qualquer momento.</translation> +<translation id="3483585138745445814">Permitir que os usuários ativem o recurso "Compartilhar por proximidade"</translation> <translation id="348495353354674884">Ativar teclado virtual</translation> <translation id="3485200437120267231">Desativar interceptação de login</translation> <translation id="3487651201232258606">Mensagens nativas</translation> @@ -2624,6 +2655,7 @@ <translation id="3528000905991875314">Ativar páginas de erro alternativas</translation> <translation id="3531084733660068324">Configurações de supervisão da família</translation> <translation id="3536263244905016305">Desativar a otimização de descoberta automática de proxies da Web (WPAD, na sigla em inglês)</translation> +<translation id="3538869107794555625">Ativar o teclado na tela no modo tablet</translation> <translation id="3539103206548425861">Se a política for definida, será possível iniciar vídeos automaticamente (sem o consentimento do usuário) com conteúdo de áudio no <ph name="PRODUCT_NAME" />. Se a política <ph name="AUTOPLAY_ALLOWED_POLICY_NAME" /> for definida como verdadeira, esta política não terá efeito. Se a política <ph name="AUTOPLAY_ALLOWED_POLICY_NAME" /> for definida como falsa, todos os padrões de URL definidos nesta política terão permissão para serem iniciados. Se a política for modificada enquanto o <ph name="PRODUCT_NAME" /> estiver em execução, ela se aplicará apenas a guias abertas recentemente. Para informações detalhadas sobre padrões de URL válidos, consulte https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation> @@ -2662,6 +2694,7 @@ <translation id="3568762199045490351">A função setTimeout() do JavaScript com um tempo limite de 0 ms vai ser limitada a 1 ms.</translation> <translation id="3574450691573438824">Desativar o upload de registro do sistema do dispositivo</translation> <translation id="3575011234198230041">Autenticação HTTP</translation> +<translation id="3575159471980949522">Não permitir que os usuários enviem números de telefone do Chrome para o dispositivo Android</translation> <translation id="3577251398714997599">Configurações de anúncios para sites com anúncios invasivos</translation> <translation id="3577628175311752799">Usar uma política de referenciador padrão de no-referrer-when-downgrade.</translation> <translation id="357917253161699596">Permitir que os usuários gerenciem certificados</translation> @@ -3305,6 +3338,7 @@ <translation id="4187576366596772431">Bloquear a API WebHID nesses sites</translation> <translation id="4190316993598857632">Ativar a edição de favoritos</translation> <translation id="4192388905594723944">URL para validação do token de autenticação do cliente de acesso remoto</translation> +<translation id="4195698007674066525">Usar o teclado numérico por padrão para a entrada de senhas</translation> <translation id="4203055629055264833">Se a política for definida como "Ativada" ou for deixada sem definição, os usuários vão poder ver a página de resultados mais recente do mecanismo de pesquisa padrão em um painel lateral ao ativar um ícone na barra de ferramentas. Se a política for definida como "Desativada", o ícone da barra de ferramentas que abre o painel lateral com os resultados da página de resultados do mecanismo de pesquisa padrão vai ser removido.</translation> @@ -3407,6 +3441,7 @@ <translation id="4314538398999793073">Desativar a consulta CNAME ao negociar a autenticação do Kerberos</translation> <translation id="4320592646346933548">Wi-Fi</translation> <translation id="4322842393287974810">Permitir que o aplicativo de quiosque aberto automaticamente com zero de atraso controle a versão do <ph name="PRODUCT_OS_NAME" /></translation> +<translation id="4323412353642577604">Ativar atestado remoto para proteção de conteúdo</translation> <translation id="4325690621216251241">Adicionar um botão de logout à bandeja do sistema</translation> <translation id="4329095223358818804">Permitir que o recurso "Respostas rápidas" acesse conteúdo selecionado</translation> <translation id="4330908525441222205">Usar o comportamento padrão do AppCache</translation> @@ -3441,6 +3476,7 @@ <translation id="4370937370030117032">Desativar o envio do nome de usuário e do nome de arquivo para impressoras nativas</translation> <translation id="4372704773119750918">Não permitir que o usuário corporativo faça parte de diversos perfis (primários ou secundários)</translation> <translation id="4373332965635821723">Ativar atalhos de acessibilidade</translation> +<translation id="4377377599658208627">Permitir que os sites rolem até fragmentos de texto específicos via URL</translation> <translation id="4377599627073874279">Permitir que todos os sites exibam todas as imagens</translation> <translation id="437791893267799639">Política não definida. Bloquear migração de dados e ARC</translation> <translation id="4380159792986204036">Permitir que o quiosque da Web abra mais de uma janela do navegador em qualquer tela</translation> @@ -3593,6 +3629,7 @@ <translation id="4558166110367609724">Ignora os TOS automaticamente e carrega o navegador.</translation> <translation id="4559846397119102037">Permitir uso do <ph name="LACROS_NAME" /></translation> <translation id="4561560385824323005">Permitir que os usuários selecionem um layout de área de trabalho pré-configurado para carregar</translation> +<translation id="4561940244682063697">Não permitir que os sites peçam para o usuário compartilhar um stream de vídeo da tela</translation> <translation id="4562165737444703281">Permitir que os usuários [ativem/configurem] o encaminhamento de portas do Crostini</translation> <translation id="456686782928669977">Esta política controla o carregamento das regras da política SiteList do <ph name="IE_PRODUCT_NAME" />. @@ -3609,6 +3646,28 @@ Se esta política estiver desativada ou for deixada sem definição, os sites não terão permissão para navegar e abrir uma nova janela/guia simultaneamente.</translation> <translation id="4572577129745420844">Não permitir que os usuários adicionem contas do Kerberos</translation> <translation id="457430673056611745">Política de configuração para o OnPrint do <ph name="PRODUCT_NAME" /> Enterprise Connector</translation> +<translation id="4576760454200781316">Quando ativado, o recurso <ph name="PRODUCT_NAME" /> faz com que os timers JavaScript nas guias em segundo plano sejam agressivamente limitados e agrupados, sendo executados no máximo uma vez por minuto depois que uma página tiver ficado 5 minutos ou mais em segundo plano. + + Esse é um recurso que obedece aos padrões da Web, mas pode causar falhas na funcionalidade + em alguns sites, fazendo com que certas ações sofram um atraso de até um + minuto. No entanto, ele economiza significativamente o uso da bateria e da CPU quando + ativado. Acesse https://bit.ly/30b1XR4 para ver mais detalhes (em inglês). + + Se essa política for ativada, o recurso vai ter uma ativação forçada e + o usuário não vai poder modificar isso. + + Se ela for desativada, o recurso vai ter uma desativação forçada e + o usuário não vai poder modificar isso. + + Se ela não for definida, o recurso vai ser controlado pela própria + lógica interna, que pode ser configurada manualmente pelo usuário. + + Observe que a política é aplicada em cada processo do renderizador, com os valores + mais recentes dela sendo aplicados quando um processo do renderizador é iniciado. Uma reinicialização + completa é necessária para garantir que todas as guias carregadas recebam uma configuração + consistente da política. Não há problemas em executar processos com valores + diferentes desta política. + </translation> <translation id="4578265298946081589">Não é reinicializado quando o usuário sai.</translation> <translation id="4581507927311097234">O tempo, em milissegundos, sem entrada do usuário até que a tela seja desligada.</translation> <translation id="4582338216073557489">Definir a política como "Nenhuma" faz com que o <ph name="PRODUCT_NAME" /> use o tamanho de cache padrão para o armazenamento de arquivos em cache no disco. Os usuários não podem fazer mudanças. @@ -3659,6 +3718,7 @@ * Quando <ph name="FILTER_PLACEHOLDER" /> estiver definido como <ph name="EMPTY_DICTIONARY" />, a seleção de certificados do cliente não será restringida de nenhuma outra forma. Os filtros fornecidos pelo servidor da Web ainda se aplicam. Se a política não for definida, não haverá seleção automática para nenhum site.</translation> +<translation id="4611983465824842867">Não mostrar avisos nem desativar o preenchimento automático em formulários não seguros</translation> <translation id="4615003180013429835">Modo de análise da lista de sites</translation> <translation id="4617338332148204752">Ignorar a verificação de metatags em <ph name="PRODUCT_FRAME_NAME" /></translation> <translation id="4624417808625504735">Bloquear o uso de JIT pelo JavaScript nestes sites</translation> @@ -3820,6 +3880,7 @@ <translation id="4856471929724652373">Informar detalhes sobre a atualização do SO, por exemplo, o status da atualização, a versão da plataforma, a última verificação de atualização e a última reinicialização. Se a política for definida como falsa ou se não for definida, os detalhes sobre atualização do SO não serão informados. Se for definida como verdadeira, os detalhes sobre atualização do SO serão informados.</translation> +<translation id="4857223512478723171">Não permitir o modo de tela cheia</translation> <translation id="4858735034935305895">Permitir modo tela cheia</translation> <translation id="486146220825734683">Não permitir que os usuários salvem senhas do Kerberos</translation> <translation id="4861767323695239729">Configurar os métodos de entrada permitidos em uma sessão de usuário</translation> @@ -3919,7 +3980,9 @@ para processar as solicitações de sinal de atividade (https://fetch.spec.whatwg.org/#request-keepalive-flag, link em inglês). O valor padrão (0) significa que esse recurso está desativado.</translation> +<translation id="4937423591320233496">Desativar conteúdo sugerido</translation> <translation id="4940810901775798837">Permitir que sites não seguros façam solicitações para qualquer endpoint da rede</translation> +<translation id="4942096314850617489">Desativar atestado remoto para o usuário</translation> <translation id="4942681160308347946">Se esta política for definida como verdadeira, a resposta falada vai ficar ativado na tela de login. Se ela for definida como falsa, a resposta falada vai ficar desativado na tela. Se você definir a política, os usuários podem ativar ou desativar A resposta falada temporariamente. Quando a tela de login for atualizada ou ficar inativa por um minuto, A resposta falada vai voltar ao estado original. @@ -3935,6 +3998,7 @@ Se a política não for definida, o comportamento padrão (exibir para Canary / Canal Dev) será aplicado. Os usuários podem alternar a visibilidade para operações específicas (por exemplo, Alt-V).</translation> <translation id="494613465159630803">Cast Receiver</translation> <translation id="494924690085329212">Será reinicializado quando o usuário sair se o Android tiver sido iniciado.</translation> +<translation id="4950447493143157880">Nunca usar o cliente DNS integrado</translation> <translation id="4952347392677351397">Se a política for definida como 1, os sites poderão acessar e usar sensores de luz e movimento. Se for definida como 2, os sites não poderão acessar os sensores. Se a política não for definida, a <ph name="ALLOW_SENSORS_POLICY_NAME" /> será aplicada, mas os usuários poderão mudar essa configuração.</translation> @@ -4011,6 +4075,7 @@ <translation id="5034504101537897433">Ativar relatórios de erros do dispositivo</translation> <translation id="5039110755072335605">Suporte a cabeçalhos de solicitação de CORS sem caractere curinga</translation> <translation id="504116558738617678">Mostrar alertas de pouco espaço no disco apenas quando o dispositivo não tiver gerenciamento ou quando houver apenas um usuário</translation> +<translation id="5053779531788741830">Usar o cliente DNS integrado no macOS, Android e ChromeOS</translation> <translation id="5055474681190962362">Dia do mês [1-31] em que a reinicialização acontecerá, interpretado no fuso horário local do dispositivo. Usado apenas quando "frequency" for definido como "MONTHLY". Caso seja maior que o número máximo de dias de um mês específico, o último dia do mês será usado.</translation> <translation id="5056708224511062314">Lupa desativada</translation> <translation id="5058573563327660283">Selecionar a estratégia usada para liberar espaço em disco durante a limpeza automática (obsoleta)</translation> @@ -4167,6 +4232,8 @@ Se a política de plano de fundo do dispositivo não for definida, a política de plano de fundo do usuário vai definir o que exibir, caso ela tenha sido configurada.</translation> <translation id="5219844027738217407">Em apps Android, esta política afeta somente o microfone. Quando esta política é definida como true, o microfone é silenciado para todos os apps Android, sem exceções.</translation> +<translation id="5222325605346216869">Forçar a limitação de timers do JavaScript em segundo plano.</translation> +<translation id="5223606242837275233">Não permitir que os sites rolem até fragmentos de texto específicos via URL</translation> <translation id="5227124062673546005">Controla como o <ph name="PRODUCT_NAME" /> imprime no <ph name="MS_WIN_NAME" />. Ao imprimir em uma impressora PostScript no <ph name="MS_WIN_NAME" />, diferentes métodos de geração de PostScript podem afetar a impressão. @@ -4205,6 +4272,7 @@ Se a política for definida como "Desativada" o Varredura do Chrome não fará verificações periódicas e o acionamento manual será desativado. No <ph name="MS_WIN_NAME" />, essa funcionalidade está disponível apenas em instâncias associadas a um domínio do <ph name="MS_AD_NAME" />, executadas no Windows 10 Pro ou registradas no Gerenciamento de nuvem do navegador Chrome.</translation> +<translation id="5245647012663146075">Não permitir a ativação do recurso "Seu smartphone"</translation> <translation id="5245671702326993331">Permite notificações nativas</translation> <translation id="524637053580639111">Esta política foi removida no M82. Use DeviceMinimumVersion. @@ -4605,6 +4673,7 @@ <translation id="5630352020869108293">Restaurar a última sessão</translation> <translation id="5633871703004128675">Ativar o recurso de acessibilidade que destaca o cursor</translation> <translation id="5634032995857968056">Ativar o sandbox do contêiner do app Renderer</translation> +<translation id="5638334542697444045">Não permitir o uso do tethering instantâneo</translation> <translation id="5639454129004500060">Se definida, esta política contém informações para download de um arquivo de modelo de espaço de trabalho. O arquivo contém um modelo de espaço de trabalho a ser fornecido para o usuário atual. Se a política não for definida, nenhum modelo de espaço de trabalho pré-configurado será incluído na lista. Se a política <ph name="DESK_TEMPLATES_ENABLED_POLICY_NAME" /> não for definida como verdadeira, esta política não terá efeito.</translation> @@ -4703,6 +4772,7 @@ Se a política for definida como "Desativada" ou não for definida, os intervalos de gerenciamento de energia e o limite de duração começarão a ser contados assim que a sessão for iniciada.</translation> <translation id="5733357908790472408">Usar a Chrome Root Store.</translation> <translation id="5735915264686983150">Oculte e bloqueie os recursos desativados</translation> +<translation id="5736498355107027047">Mostrar o botão "Sair" na bandeja</translation> <translation id="5737394734996319911">O recurso de acessibilidade "<ph name="PRODUCT_NAME" />" permite que pessoas com deficiência visual que usam leitores de tela recebam descrições de imagens sem etiqueta na Web. Os usuários que decidirem ativá-lo poderão usar um serviço anônimo do Google para fornecer descrições automáticas para imagens sem etiqueta que encontrarem na Web. @@ -4878,6 +4948,7 @@ <translation id="5915023683182228340">Se a política for definida como "Ativada" ou não for definida, o uso de protocolo QUIC será permitido no <ph name="PRODUCT_NAME" />. Se a política for definida como "Desativada", o uso de protocolo QUIC não será permitido.</translation> +<translation id="5916855682471300200">As políticas da nuvem têm prioridade em relação às do computador da plataforma</translation> <translation id="5921713479449475707">Permitir atualização automática de downloads via HTTP</translation> <translation id="5927903236543424081">Forçar o usuário a fazer login antes de usar o navegador</translation> <translation id="5928633129285224981">Controla se o <ph name="PRODUCT_NAME" /> usa a opção "Imprimir como imagem" como padrão ao imprimir PDFs. @@ -5082,6 +5153,7 @@ Observe que, se exigida pelos administradores, esta política enfraquece a proteção dos IPs locais.</translation> <translation id="614662973812186053">Esta política também controla a coleta de dados de uso e diagnóstico do Android.</translation> <translation id="614665605501218241">Permitir que os sites da lista façam solicitações para endpoints de rede mais particulares de forma não segura.</translation> +<translation id="6150320133676152520">Desativar o envio automático do PIN nas telas de bloqueio e login</translation> <translation id="6155350825868160236">Permitir que o usuário escolha se serviços da Web do Google serão usados para solucionar erros de ortografia</translation> <translation id="6155936611791017817">Definir estado padrão do cursor grande na tela de login</translation> <translation id="6157537876488211233">Lista separada por vírgulas das regras de proxies ignoráveis</translation> @@ -5163,6 +5235,7 @@ <translation id="6261643884958898336">Reportar informações de identificação da máquina</translation> <translation id="6265892395051519509">Permite acesso a sensores nesses sites</translation> <translation id="6266043141694454734">Determina se a Chrome Root Store e o verificador de certificados integrado vão ser usados para verificar os certificados do servidor</translation> +<translation id="6270615143812355589">Ativar a entrada de áudio</translation> <translation id="6270791075656665237">Não permitir o protocolo QUIC</translation> <translation id="6273015149273504999"> Especifica uma lista de apps e extensões que são instalados silenciosamente na tela de login, sem qualquer interação do usuário e sem permitir a desinstalação nem a desativação feita por ele. @@ -5320,6 +5393,7 @@ Para informações detalhadas sobre padrões de <ph name="URL_LABEL" /> válidos, consulte https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. <ph name="WILDCARD_VALUE" /> não é um valor aceitável para esta política.</translation> <translation id="6353890097388312479">Se a política for definida como "Todos (0)" ou não for definida, os usuários poderão editar as configurações de confiança para todos os certificados de CA, remover certificados importados e importar outros usando o Gerenciador de certificados. Se a política for definida como "Somente usuário (1)", os usuários poderão gerenciar os certificados importados, mas não poderão mudar as configurações de confiança dos certificados integrados. Se ela for definida como "Nenhum (2)", os usuários poderão ver os certificados de CA, mas não gerenciá-los.</translation> +<translation id="6358320368815225772">Desativar atestado remoto para o dispositivo</translation> <translation id="6362856770865555544">Se a política for definida como "Ativada" ou não for definida, a otimização da descoberta automática de proxies da Web (WPAD, na sigla em inglês) será ativada no <ph name="PRODUCT_NAME" />. Se a política for definida como "Desativada", a otimização da WPAD será desativada e o <ph name="PRODUCT_NAME" /> precisará esperar mais por servidores de WPAD baseados em DNS. @@ -5416,12 +5490,14 @@ A partir da versão M106, os métodos de entrada permitidos são ativados automaticamente na sessão de quiosque. Observação: se não houver suporte para o método de entrada atual, ele vai ser alternado para o layout de teclado de hardware (se permitido) ou para a primeira entrada válida da lista. Métodos de entrada sem suporte ou inválidos são ignorados.</translation> +<translation id="6483115462650732746">Mostrar o menu flutuante de acessibilidade no modo quiosque</translation> <translation id="6489084406497912050">Controla se os usuários podem adicionar contas do Kerberos. Se esta política for ativada ou não for definida, os usuários poderão adicionar contas do Kerberos pela página de configurações de contas dele. Os usuários terão controle total das contas que adicionaram e poderão modificá-las ou removê-las. Se esta política for desativada, os usuários não poderão adicionar contas do Kerberos. As contas só poderão ser adicionadas pela política "Configurar contas do Kerberos". Essa é uma maneira eficiente de bloquear contas.</translation> <translation id="6491139795995924304">Permitir o Bluetooth no dispositivo</translation> +<translation id="6491305972928809525">Não mostrar o menu flutuante de acessibilidade no modo quiosque</translation> <translation id="6491872498385040936">O uso desta política foi suspenso. Recomendamos que você use <ph name="FORCE_YOUTUBE_RESTRICT_POLICY_NAME" />, que substitui esta política e permite um ajuste mais refinado. Força o Modo restrito moderado do YouTube e impede que os usuários alterem esta configuração. @@ -5429,6 +5505,7 @@ Se esta configuração estiver ativada, o Modo restrito do YouTube sempre será aplicado como, pelo menos, moderado. Se esta configuração estiver desativada ou se nenhum valor for definido, o Modo restrito do YouTube não será aplicado pelo <ph name="PRODUCT_NAME" />. No entanto, as políticas externas, como as políticas do YouTube, ainda podem aplicar o Modo restrito.</translation> +<translation id="6492177700737407141">Os usuários inscritos no Programa Proteção Avançada só vão receber as proteções padrão ao consumidor</translation> <translation id="6492737559291967859">A definição da política especifica os usos de localidade do <ph name="PRODUCT_NAME" />. Desativá-la ou deixá-la sem definição significa que a localidade será a primeira válida entre: @@ -5470,6 +5547,7 @@ <translation id="6521971538031711337">Impedir que o usuário gerenciado configure o nome do host do dispositivo</translation> <translation id="6523079496775454310">Ativar o consentimento de indicadores do dispositivo para usuários gerenciados em dispositivos não gerenciados</translation> <translation id="652593254122955308">Tempo limite até o perfil inativo ser fechado</translation> +<translation id="6527674993612811419">Mostrar avisos e desativar o preenchimento automático em formulários não seguros</translation> <translation id="6532026122543921610">A menos que a política <ph name="SYSTEM_TIMEZONE_POLICY_NAME" /> desative a detecção automática de fuso horário, a definição da política especificará o método de detecção automática, que não poderá ser modificado pelos usuários. Se a política for definida como: @@ -5480,7 +5558,9 @@ Se a política não for definida, especifique a opção "Deixar os usuários decidirem" ou defina como "Nenhuma". Assim, os usuários controlarão a detecção automática de fuso horário usando os controles normais em chrome://settings.</translation> <translation id="6532769014584932288">Permitir wake locks</translation> +<translation id="6533881418188970751">Perguntar ao usuário onde salvar o arquivo antes do download</translation> <translation id="6536600139108165863">Reinicialização automática no desligamento do dispositivo</translation> +<translation id="6538653424603921690">Sempre desativar a tela de privacidade na tela de login</translation> <translation id="6539246272469751178">Esta política não tem nenhum efeito sobre apps Android. Os apps Android sempre usam o diretório de downloads padrão e não podem acessar nenhum arquivo transferido por download pelo <ph name="PRODUCT_OS_NAME" /> para um diretório de downloads não padrão.</translation> <translation id="654303922206238013">Estratégia de migração para eCryptfs</translation> <translation id="6543277347547044538">Final do intervalo (não incluso).</translation> @@ -5492,6 +5572,7 @@ <translation id="654546276700640113">Se a política for definida, o tamanho máximo de PIN configurado será aplicado. Se o valor for 0 ou menos, o usuário poderá definir um PIN do tamanho que quiser. Se o valor for maior que 0 e menor que <ph name="PIN_UNLOCK_MINIMUM_LENGTH_POLICY_NAME" />, o tamanho máximo será definido como o mínimo. Se a política não for definida, não haverá tamanho máximo aplicado.</translation> +<translation id="6546185795045702747">Permitir que os sites verifiquem se o usuário tem formas de pagamento salvas</translation> <translation id="6553143066970470539">Porcentagem de brilho da tela</translation> <translation id="6555557921186817432">Programar uma reinicialização automática após a atualização do <ph name="PRODUCT_OS_NAME" /> ser aplicada. @@ -5559,6 +5640,7 @@ Esta política não vai ter efeito se for ativada, deixada vazia ou não for definida.</translation> <translation id="6583249367505445969">Desativar a barra de favoritos</translation> <translation id="6584541828182430328">Desativar a exibição de alertas de tela cheia</translation> +<translation id="6588634282328239769">Mostrar o URL completo</translation> <translation id="6593350713192882944">Ativar Respostas rápidas</translation> <translation id="6594372503585248865">Ativar IUs relacionadas à conexão no computador do host remoto quando uma conexão estiver ativa</translation> <translation id="65947892191748867">Desativar o consentimento de indicadores do dispositivo para usuários gerenciados em dispositivos não gerenciados</translation> @@ -5595,6 +5677,7 @@ <translation id="6625136649067113817">Uma sinalização booleana indicando se o teclado na tela pode oferecer verificação ortográfica.</translation> <translation id="66265932317331474">Enviar informações da CPU</translation> <translation id="6628120204569232711">Informa o status de armazenamento</translation> +<translation id="662991036483361836">Impedir que os usuários ativem o recurso "Compartilhar por proximidade"</translation> <translation id="663685822663765995">Restringir o modo de cor de impressão</translation> <translation id="6637946190026453735">Lista de configurações para os serviços do <ph name="PRODUCT_NAME" /> Enterprise Connectors que serão aplicados ao conector <ph name="ON_PRINT_ENTERPRISE_CONNECTOR" />, que é acionado quando uma página ou um arquivo é impresso usando o <ph name="PRODUCT_NAME" />. @@ -5827,6 +5910,7 @@ 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" />. Esta política está obsoleta. Use a <ph name="PRINTING_API_EXTENSIONS_ALLOWLIST_POLICY_NAME" />.</translation> +<translation id="6847379587945465889">Ativar a transferência de cookies do SSO SAML na sessão do usuário durante o login</translation> <translation id="684856667300805181">Esta política foi removida no <ph name="PRODUCT_NAME" /> 68 e substituída por <ph name="ARC_GLS_POLICY_NAME" />.</translation> <translation id="6848721032946289937">Se a política for definida como "Ativada" ou deixada sem definição, a aceleração de hardware será ativada, se disponível. @@ -5962,6 +6046,7 @@ Deixar esta política sem definição significa que, se os certificados que precisam ser divulgados via Transparência dos certificados não o forem, o <ph name="PRODUCT_NAME" /> não confiará nesses certificados. Um padrão de URL segue o formato descrito em https://www.chromium.org/administrators/url-blocklist-filter-format (link em inglês). No entanto, como a validação dos certificados para um certo nome do host independe do esquema, da porta ou do caminho, o <ph name="PRODUCT_NAME" /> só considera a parte de nome do host do URL. Hosts curinga não são compatíveis.</translation> +<translation id="6969332115615661188">Desativar entrada de vídeo</translation> <translation id="6972540544240464302">Seleciona a configuração do programador de tarefas</translation> <translation id="6975533677426693807">Sempre abrir arquivos PDF usando o leitor de PDF interno</translation> <translation id="6979158407327259162">Google Drive</translation> @@ -5988,6 +6073,7 @@ No <ph name="MS_WIN_NAME" />, essa funcionalidade está disponível apenas em instâncias associadas a um domínio do <ph name="MS_AD_NAME" />, executadas no Windows 10 Pro ou registradas no <ph name="CHROME_BROWSER_CLOUD_MANAGEMENT_NAME" />. No <ph name="MAC_OS_NAME" />, essa funcionalidade está disponível apenas em instâncias gerenciadas por MDM ou associadas a um domínio via MCX.</translation> <translation id="6990736882800900101">Permitir que todos os pop-ups abertos direcionados a <ph name="BLANK_PAGE_NAME" /> interajam com a página que solicitou a abertura do pop-up, a menos que ela rejeite explicitamente essa interação </translation> +<translation id="6992943675460798920">Permitir que os usuários façam capturas de tela e gravações de vídeo</translation> <translation id="6994082778848658360">Especifica como o hardware de elemento seguro integrado pode ser usado para fornecer uma autenticação de segundo fator, se ele for compatível com esse recurso. O botão liga/desliga da máquina é usado para detectar a presença física do usuário. Se a opção Desativado for selecionada, nenhum segundo fator será fornecido. @@ -6007,8 +6093,10 @@ <translation id="7003746348783715221">Preferências do <ph name="PRODUCT_NAME" /></translation> <translation id="7007283257527015835">Uma sinalização booleana indicando se o gerenciador de protocolos precisa ser definido como padrão.</translation> <translation id="7008308728445338159">Verificação de interceptações de DNS ativada</translation> +<translation id="7009043124653876961">Desativar as sugestões de emojis quando o usuário digita</translation> <translation id="7010006999849135962">Ativar a autenticação sem PIN para o host de acesso remoto</translation> <translation id="7013484314513229844">Ativar a inicialização se conectado a uma fonte de alimentação</translation> +<translation id="7014427417852575165">Os usuários inscritos no Programa Proteção Avançada vão receber segurança extra</translation> <translation id="7016587686120059767">Desativar o modo visitante</translation> <translation id="7016736684656067099">Se a política for definida como 1, todos os sites exibirão imagens. Se ela for definida como 2, as imagens não serão exibidas. @@ -6057,9 +6145,11 @@ <translation id="7039815268521168329">Mostrar o fluxo do Voice Match do Google Assistente durante a configuração inicial</translation> <translation id="7040229947030068419">Exemplo de valor:</translation> <translation id="7044883996351280650">Controlar o serviço de backup e restauração do Android</translation> +<translation id="7046113122884041950">Não permitir o Smart Lock</translation> <translation id="7046997898355294677">Mostrar notificações de privacidade até que elas sejam dispensadas pelo usuário</translation> <translation id="7047495632846973438">Especifica se a política de permissões de captura de tela foi marcada ou ignorada.</translation> <translation id="7055022222176591388">Não permitir o <ph name="FLASH_PLUGIN_NAME" /> desatualizado</translation> +<translation id="7062803946218028349">Permitir a ativação do recurso "Seu smartphone"</translation> <translation id="7066292150801784098">Desativar a interação de usuários remotos com janelas elevadas em sessões de assistência remota</translation> <translation id="706669471845501145">Permitir que os sites exibam notificações da área de trabalho</translation> <translation id="70681795425744184">Não permitir que a Área de trabalho remota do Google Chrome execute solicitações de API do WebAuthn transmitidas por proxy de um host remoto.</translation> @@ -6068,6 +6158,7 @@ <translation id="7072567600438630966">Permitir a ativação do recurso "Seu smartphone".</translation> <translation id="7074437930865599190">Congelar a string do user agent da versão principal em 99</translation> <translation id="707988220162760379">Sempre abrir arquivos PDF usando um leitor de PDF externo</translation> +<translation id="7081699207881888532">Ativar as sugestões de emojis quando o usuário digita</translation> <translation id="7081784525008938771">Se a política for definida como "Ativada" ou não for definida, o usuário não será considerado inativo quando o dispositivo estiver reproduzindo vídeo. Isso impede que os intervalos de inatividade e de escurecimento, desligamento e bloqueio da tela sejam atingidos e que as ações correspondentes sejam realizadas. Se a política for definida como "Desativada", o sistema poderá considerar os usuários inativos, independentemente da atividade de vídeo.</translation> @@ -6327,6 +6418,7 @@ Se esta política não for configurada, a limpeza automática usa a estratégia integrada padrão, que atualmente é a estratégia "RemoveLRUIfDormant".</translation> <translation id="733381360015511815">Configurar a lista de apps isolados da Web de instalação forçada</translation> <translation id="7334517274921831425">Permitir que usuários usem a <ph name="BOREALIS_NAME" /> no <ph name="PRODUCT_OS_NAME" /></translation> +<translation id="7334639219471717734">Não permitir que os usuários façam login no próprio dispositivo com o Smart Lock</translation> <translation id="7336785017449297672">Controla configurações do relógio e de fuso horário.</translation> <translation id="7336878834592315572">Manter cookies enquanto durar a sessão</translation> <translation id="7338217396351647423">A definição da política especifica um conjunto de políticas que serão entregues ao ambiente de execução do ARC. Os administradores podem usar essa oportunidade para selecionar os apps Android que serão instalados automaticamente. Insira o valor em um formato JSON válido. @@ -6336,6 +6428,7 @@ <translation id="7340034977315324840">Informar horário das atividades do dispositivo</translation> <translation id="7343004974628511824">Realizar verificações de interceptação de DNS</translation> <translation id="7343497214039883642">Arquivo de configuração de impressora empresarial para dispositivos</translation> +<translation id="7357148531287978404">Desativar a entrada de áudio</translation> <translation id="7358012133037776875">Permite definir uma lista de padrões de URL que especificam os sites que vão conceder automaticamente a permissão para posicionamento de janelas. Isso vai ampliar a capacidade dos sites de ver informações sobre as telas do dispositivo e de usar essas informações para abrir e posicionar janelas ou solicitar a tela cheia em locais específicos. Para ver informações detalhadas sobre padrões de URL válidos, consulte https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. Os caracteres curinga (<ph name="WILDCARD_VALUE" />) são permitidos. A política só faz a correspondência com base na origem, então os caminhos no padrão do URL são ignorados. @@ -6589,6 +6682,7 @@ Esta política se aplica apenas a usuários menores de idade. Quando esta política é definida, o código de acesso do familiar responsável pode ser verificado no dispositivo da criança. Quando esta política não é definida, não é possível verificar o código de acesso do familiar responsável no dispositivo da criança.</translation> +<translation id="7623431489198474050">Desativar atestado remoto para proteção de conteúdo</translation> <translation id="7628747690141606652">Desativar a tradução das Respostas rápidas</translation> <translation id="7629840767216985001">Se esta política for definida como verdadeira, o cursor grande será ativado na tela de login. Se esta política for definida como falsa, o cursor grande será desativado na tela de login. @@ -6756,6 +6850,7 @@ Se a política for deixada sem definição, a<ph name="DEFAULT_CLIPBOARD_SETTING" /> será aplicada a todos os sites, se estiver definida. Caso contrário, a configuração pessoal do usuário será aplicada. Para informações detalhadas sobre padrões de <ph name="URL_LABEL" /> válidos, consulte https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. O valor <ph name="WILDCARD_VALUE" /> não é aceito para esta política.</translation> +<translation id="7791215522423893512">Não permitir que os usuários façam capturas de tela e gravações de vídeo</translation> <translation id="7792796937016596423">O usuário não poderá capturar pacotes de rede</translation> <translation id="7798441698807517880">Esta política foi removida na versão 89 do <ph name="PRODUCT_NAME" /> porque o uso de <ph name="FLASH_PLUGIN_NAME" /> foi suspenso. @@ -6829,6 +6924,7 @@ Recomendação: ative o bloqueio de tela depois de um período de inatividade quando o dispositivo estiver suspenso e suspenda o <ph name="PRODUCT_OS_NAME" /> depois do intervalo de inatividade. Use esta política apenas quando o bloqueio de tela ocorrer muito antes da suspensão ou quando você não quiser a suspensão por inatividade.</translation> <translation id="7895553628261067384">Acesso remoto</translation> +<translation id="789975630884141379">Permitir conteúdo sugerido</translation> <translation id="7899952578398457262">Pedir o consentimento de acesso aos usuários gerenciados para compartilhar indicadores em dispositivos não gerenciados</translation> <translation id="7900469325540540107">Manter os dados de navegação por padrão ao criar um perfil corporativo</translation> <translation id="7902040092815978832">Mostrar teclado numérico para senha</translation> @@ -6948,6 +7044,7 @@ Se ela for ativada, o usuário poderá usar o <ph name="LACROS_NAME" />.</translation> <translation id="8020222525161221827">Ativar a API Desk para o controle do Chrome OS de terceiros</translation> <translation id="802147957407376460">Girar tela em 0 graus</translation> +<translation id="8021777486638359878">Considerar o usuário inativo enquanto o áudio toca</translation> <translation id="80243978433618492">Não permite que parâmetros de URL sejam filtrados.</translation> <translation id="8025620823136567878">Os atalhos de teclados internacionais são associados o local das teclas, não ao glifo delas.</translation> <translation id="802776363472387903">Hash SHA-256 da imagem do <ph name="PLUGIN_VM_NAME" />.</translation> @@ -7320,6 +7417,7 @@ <translation id="8378266419596669629">Bloquear a permissão para fontes locais nesses sites</translation> <translation id="8379317372795444261">A autenticação <ph name="BASIC_AUTH" /> é permitida em conexões HTTP</translation> <translation id="8381678031726288574">Aplicar as configurações padrão para descontinuação da API U2F.</translation> +<translation id="8381774264911275515">Desativar a transferência de cookies do SSO SAML na sessão do usuário durante o login</translation> <translation id="8382184662529825177">Permitir o uso de declaração remota para proteção de conteúdo no dispositivo</translation> <translation id="838870586332499308">Ativa roaming de dados</translation> <translation id="8393850527597048037">Somente de plataforma</translation> @@ -7448,6 +7546,7 @@ Aviso: não é recomendável configurar restrições de versão, porque elas podem impedir que os usuários recebam atualizações de software e correções de segurança críticas. Restringir as atualizações para um prefixo de versão específico pode colocar os usuários em risco.</translation> <translation id="8508489378025029342">Ativar relatórios sobre o horário das atividades do dispositivo</translation> +<translation id="8511192250554640451">Permitir que a limitação de timers do JavaScript em segundo plano seja controlada pela lógica do Chrome e configurada pelos usuários</translation> <translation id="8519264904050090490">URLs de exceção manual do usuário gerenciado</translation> <translation id="8519516251436131647">Ative os atalhos de recursos de acessibilidade. @@ -7857,6 +7956,7 @@ <translation id="8921669704201370845">Ativar os relatórios de nuvem do <ph name="PRODUCT_NAME" /> do perfil gerenciado</translation> <translation id="8922231993239705844">Desativar destaque do cursor</translation> <translation id="8922494933893518624">Forçar a ativação do WebSQL em contextos não seguros.</translation> +<translation id="8923028772162236077">Mostrar o URL padrão</translation> <translation id="8930064580550462145">Durante o login pela tela de bloqueio, o <ph name="PRODUCT_OS_NAME" /> pode fazer a autenticação por um servidor (on-line) ou usando uma senha armazenada em cache (off-line). Quando esta política é definida como -2, ela corresponde ao valor do limite de tempo de login off-line da tela de login definido pela <ph name="POLICY" />. @@ -8090,6 +8190,7 @@ A sessão do usuário é restaurada após a reinicialização.</translation> <translation id="9160028464653564229">Não permitir que nenhum site solicite acesso a portas seriais por meio da API Serial</translation> +<translation id="9162444960513782569">Não forçar a limitação de timers do JavaScript em segundo plano</translation> <translation id="916461878260574432">Especifica se P2P será usado para payloads de atualização do SO. Se for definida como verdadeira, os dispositivos compartilharão e tentarão consumir os payloads de atualização na LAN, possivelmente reduzindo o congestionamento e o uso de largura de banda da Internet. Caos o payload de atualização não esteja disponível na LAN, o dispositivo voltará a fazer o download por um servidor de atualização. Se a política for definida como falsa, o P2P não será usado. @@ -8105,6 +8206,7 @@ Ela é uma medida temporária e será removida em versões futuras do <ph name="PRODUCT_NAME" />. Após a remoção da política, o <ph name="PRODUCT_NAME" /> sempre poderá consultar outros tipos de DNS.</translation> <translation id="9167719789236691545">Desativar o Drive no app Arquivos do <ph name="PRODUCT_OS_NAME" /></translation> +<translation id="9180108183162961002">Permitir logins em navegação como visitante</translation> <translation id="9185963199234034321">Ativar o alto contraste na tela de login e permitir que o usuário o desative temporariamente</translation> <translation id="9187743794267626640">Desativa a montagem de armazenamento externo</translation> <translation id="9190022798664427644">Ativar áudio mono</translation> @@ -8119,6 +8221,7 @@ <translation id="9200828125069750521">Parâmetros para URL de imagens que usa POST</translation> <translation id="9204863016826119209">Chaves corporativas poderão ser usadas por apps Android instalados e listados nesta política.</translation> <translation id="9207596996305971030">Não informar eventos de login/logout</translation> +<translation id="9210647066889383361">Permitir que os usuários façam login no próprio dispositivo com o Smart Lock</translation> <translation id="9213751049772256263">Desativar todas as variações</translation> <translation id="9217154963008402249">Frequência de pacotes de monitoramento de rede</translation> <translation id="9220314833408124365">Usar uma política de referenciador padrão de no-referrer-when-downgrade</translation> @@ -8168,6 +8271,7 @@ <translation id="966425658642788645">Aplicar comportamento padrão</translation> <translation id="971677226939413180">A opção "Imprimir como imagem" não está disponível para a seleção do usuário.</translation> <translation id="974349541138387272">Especifica o modelo de URI do resolvedor DNS sobre HTTPS desejado</translation> +<translation id="978658824596356870">Formato de relógio de 24 horas</translation> <translation id="979467274961593903">Não permitir o uso da depuração remota</translation> <translation id="980218166381006412">Se a política for definida como "Ativada", o modo de segundo plano será ativado. Nesse modo, um processo do <ph name="PRODUCT_NAME" /> será iniciado ao fazer login no SO e continuará em execução quando a última janela do navegador for fechada. Isso permite que os apps em segundo plano e a sessão de navegação continuem ativos. O processo em segundo plano exibirá um ícone na bandeja do sistema, onde poderá ser fechado.
diff --git a/components/services/app_service/public/cpp/preferred_app.cc b/components/services/app_service/public/cpp/preferred_app.cc index 83822fa..bb0df60 100644 --- a/components/services/app_service/public/cpp/preferred_app.cc +++ b/components/services/app_service/public/cpp/preferred_app.cc
@@ -97,61 +97,6 @@ return mojom_preferred_app; } -PreferredAppChangesPtr ConvertMojomPreferredAppChangesToPreferredAppChanges( - const apps::mojom::PreferredAppChangesPtr& mojom_preferred_app_changes) { - if (!mojom_preferred_app_changes) { - return nullptr; - } - - PreferredAppChangesPtr preferred_app_changes = - std::make_unique<PreferredAppChanges>(); - for (const auto& added_filters : mojom_preferred_app_changes->added_filters) { - apps::IntentFilters filters; - for (auto& filter : added_filters.second) { - filters.push_back(ConvertMojomIntentFilterToIntentFilter(filter)); - } - preferred_app_changes->added_filters[added_filters.first] = - std::move(filters); - } - for (const auto& removed_filters : - mojom_preferred_app_changes->removed_filters) { - apps::IntentFilters filters; - for (auto& filter : removed_filters.second) { - filters.push_back(ConvertMojomIntentFilterToIntentFilter(filter)); - } - preferred_app_changes->removed_filters[removed_filters.first] = - std::move(filters); - } - return preferred_app_changes; -} - -apps::mojom::PreferredAppChangesPtr -ConvertPreferredAppChangesToMojomPreferredAppChanges( - const PreferredAppChangesPtr& preferred_app_changes) { - auto mojom_preferred_app_changes = apps::mojom::PreferredAppChanges::New(); - if (!preferred_app_changes) { - return mojom_preferred_app_changes; - } - - for (const auto& added_filters : preferred_app_changes->added_filters) { - std::vector<apps::mojom::IntentFilterPtr> mojom_filters; - for (auto& filter : added_filters.second) { - mojom_filters.push_back(ConvertIntentFilterToMojomIntentFilter(filter)); - } - mojom_preferred_app_changes->added_filters[added_filters.first] = - std::move(mojom_filters); - } - for (const auto& removed_filters : preferred_app_changes->removed_filters) { - std::vector<apps::mojom::IntentFilterPtr> mojom_filters; - for (auto& filter : removed_filters.second) { - mojom_filters.push_back(ConvertIntentFilterToMojomIntentFilter(filter)); - } - mojom_preferred_app_changes->removed_filters[removed_filters.first] = - std::move(mojom_filters); - } - return mojom_preferred_app_changes; -} - PreferredApps ConvertMojomPreferredAppsToPreferredApps( const std::vector<apps::mojom::PreferredAppPtr>& mojom_preferred_apps) { PreferredApps ret;
diff --git a/components/services/app_service/public/cpp/preferred_app.h b/components/services/app_service/public/cpp/preferred_app.h index be62775..4156407 100644 --- a/components/services/app_service/public/cpp/preferred_app.h +++ b/components/services/app_service/public/cpp/preferred_app.h
@@ -64,13 +64,6 @@ apps::mojom::PreferredAppPtr ConvertPreferredAppToMojomPreferredApp( const PreferredAppPtr& preferred_app); -PreferredAppChangesPtr ConvertMojomPreferredAppChangesToPreferredAppChanges( - const apps::mojom::PreferredAppChangesPtr& mojom_preferred_app_changes); - -apps::mojom::PreferredAppChangesPtr -ConvertPreferredAppChangesToMojomPreferredAppChanges( - const PreferredAppChangesPtr& preferred_app_changes); - PreferredApps ConvertMojomPreferredAppsToPreferredApps( const std::vector<apps::mojom::PreferredAppPtr>& mojom_preferred_apps);
diff --git a/components/services/app_service/public/mojom/types.mojom b/components/services/app_service/public/mojom/types.mojom index 7f1d92e3..aa2ad994 100644 --- a/components/services/app_service/public/mojom/types.mojom +++ b/components/services/app_service/public/mojom/types.mojom
@@ -467,13 +467,6 @@ map<string, string>? extras; // Optional string extras. }; -// Represents changes which have been made to the preferred apps list, both -// adding new filters and removing existing filters. -struct PreferredAppChanges { - map<string, array<IntentFilter>> added_filters; - map<string, array<IntentFilter>> removed_filters; -}; - // The preferred app represents by |app_id| for |intent_fitler|. struct PreferredApp { IntentFilter intent_filter;
diff --git a/components/strings/components_google_chrome_strings_da.xtb b/components/strings/components_google_chrome_strings_da.xtb index 0ad8c05..2b987a59 100644 --- a/components/strings/components_google_chrome_strings_da.xtb +++ b/components/strings/components_google_chrome_strings_da.xtb
@@ -5,7 +5,7 @@ <translation id="130631256467250065">Dine ændringer træder i kraft, næste gang du genstarter din enhed.</translation> <translation id="1635457557763038537">Dine ændringer træder i kraft, næste gang du genstarter Chrome.</translation> <translation id="2447485272386224171">Open source-projektet <ph name="BEGIN_LINK_CHROMIUM" />Chromium<ph name="END_LINK_CHROMIUM" /> og anden <ph name="BEGIN_LINK_OSS" />open source-software<ph name="END_LINK_OSS" /> er med til at gøre Chrome muligt.</translation> -<translation id="2505647373045235387">Chrome OS har ikke fuldført sin indledende konfiguration.</translation> +<translation id="2505647373045235387">ChromeOS har ikke fuldført sin indledende konfiguration.</translation> <translation id="2588322182880276190">Chrome-logo</translation> <translation id="3444832043240812445">Denne side viser kun oplysninger om dine seneste nedbrud, hvis du <ph name="BEGIN_LINK" />aktiverer rapportering af nedbrud<ph name="END_LINK" />.</translation> <translation id="3875312571075912821">Tillad, at Chrome får adgang til netværket i dine indstillinger for firewall eller
diff --git a/components/strings/components_strings_da.xtb b/components/strings/components_strings_da.xtb index b740f55..07ca546 100644 --- a/components/strings/components_strings_da.xtb +++ b/components/strings/components_strings_da.xtb
@@ -531,7 +531,7 @@ <translation id="2295290966866883927">Webadresserne for de sider, du besøger, sendes til Google Cloud eller tredjeparter, hvor de analyseres. De kan f.eks. undersøge, om nogen af de tilhørende websites er usikre.</translation> <translation id="2298855485018661510">Knappen Administrer cookies – tryk på Enter for at administrere dine cookiepræferencer i Chrome-indstillingerne</translation> <translation id="2300306941146563769">Ikke uploadet</translation> -<translation id="2316159751672436664">Tilpas dine hjælpefunktioner i Chrome OS-indstillingerne</translation> +<translation id="2316159751672436664">Tilpas dine hjælpefunktioner i ChromeOS-indstillingerne</translation> <translation id="2316887270356262533">Frigiver over 1 MB. Nogle websites indlæses muligvis langsommere under dit næste besøg.</translation> <translation id="2317259163369394535"><ph name="DOMAIN" /> kræver et brugernavn og en adgangskode.</translation> <translation id="2318594867107319532">Tidsstempel for seneste opdatering af politik:</translation> @@ -1183,7 +1183,7 @@ <translation id="4117700440116928470">Politikkens omfang understøttes ikke.</translation> <translation id="4121428309786185360">Udløber den</translation> <translation id="4123572138124678573">Tre huller nederst</translation> -<translation id="4127575959421463246">Leder du efter Chrome OS-demofunktionerne? Besøg</translation> +<translation id="4127575959421463246">Leder du efter ChromeOS-demofunktionerne? Besøg</translation> <translation id="4129401438321186435">{COUNT,plural, =1{1 anden/andet}one{# anden/andet}other{# andre}}</translation> <translation id="4130226655945681476">Tjekke netværkskabler, modem og router</translation> <translation id="4132448310531350254">Identiske handlere for filtypen "<ph name="FILE_EXTENSION" />", som der henvises til i applikationerne "<ph name="POLICY_IDS_LIST" />".</translation> @@ -1738,7 +1738,7 @@ <translation id="5519516356611866228">Med dine ændringer</translation> <translation id="5523118979700054094">Navn på politik</translation> <translation id="5525755241743357906">Filen kopieres eller flyttes</translation> -<translation id="5526617258931667850"><ph name="MANAGE_CHROMEOS_ACCESSIBILITY_FOCUSED_FRIENDLY_MATCH_TEXT" /> – tryk på Tab-tasten efterfulgt af Enter for at tilpasse dine hjælpefunktioner i Chrome OS-indstillingerne</translation> +<translation id="5526617258931667850"><ph name="MANAGE_CHROMEOS_ACCESSIBILITY_FOCUSED_FRIENDLY_MATCH_TEXT" /> – tryk på Tab-tasten efterfulgt af Enter for at tilpasse dine hjælpefunktioner i ChromeOS-indstillingerne</translation> <translation id="5528532273234423708">Hjemmeautomatisering</translation> <translation id="55293785478302737">Kanthæftning</translation> <translation id="5535133333442455806">Knappen Ryd browserdata – tryk på Enter for at rydde browserhistorik, cookies, cache m.m. i Chrome-indstillingerne</translation> @@ -2754,7 +2754,7 @@ <translation id="8242426110754782860">Fortsæt</translation> <translation id="8249296373107784235">Annuller</translation> <translation id="8249463483885748674">Standardiserede prøver og adgangsprøver</translation> -<translation id="8252991034201168845">Knappen Administrer indstillinger for hjælpefunktioner – tryk på Enter for at tilpasse dine hjælpefunktioner i Chrome OS-indstillingerne</translation> +<translation id="8252991034201168845">Knappen Administrer indstillinger for hjælpefunktioner – tryk på Enter for at tilpasse dine hjælpefunktioner i ChromeOS-indstillingerne</translation> <translation id="8253091569723639551">Faktureringsadresse skal angives</translation> <translation id="8257387598443225809">Denne app er udviklet til mobilenheder</translation> <translation id="825929999321470778">Se alle gemte adgangskoder</translation>
diff --git a/components/strings/components_strings_mn.xtb b/components/strings/components_strings_mn.xtb index 50dde9b..10652fd 100644 --- a/components/strings/components_strings_mn.xtb +++ b/components/strings/components_strings_mn.xtb
@@ -714,6 +714,7 @@ <translation id="2799223571221894425">Дахин эхлүүлэх</translation> <translation id="2803306138276472711"><ph name="SITE" />-д <ph name="BEGIN_LINK" />вирус<ph name="END_LINK" /> байгааг Google-ийн Аюулгүй Хайлт олж ирлрүүллээ. Ихэвчлэн аюулгүй байдаг веб сайтууд заримдаа вирусд өртөх тохиолдол байдаг.</translation> <translation id="2807052079800581569">Y тэнхлэгийн дагуу зургийн байршил</translation> +<translation id="2808278141522721006">Та Windows Hello-г <ph name="SETTINGS" />-д асаах эсвэл унтраах боломжтой</translation> <translation id="2820957248982571256">Шалгаж байна...</translation> <translation id="2824775600643448204">Хаяг ба хайлтын цонх</translation> <translation id="2826760142808435982">Энэхүү холболтыг <ph name="CIPHER" /> ашиглаж шифрлэж таниулсан бөгөөд энэ нь түлхүүр солилцох механизмын дагуу <ph name="KX" />-ыг ашигладаг.</translation> @@ -885,6 +886,7 @@ <translation id="3288238092761586174"><ph name="URL" /> таны төлбөрийг баталгаажуулахын тулд нэмэлт алхмыг хийх шаардлагатай байж магадгүй</translation> <translation id="3293642807462928945"><ph name="POLICY_NAME" /> удирдамжийн талаар дэлгэрэнгүй үзэх</translation> <translation id="3295444047715739395">Chrome-н тохиргоо дээрээс нууц үгсээ харах, удирдах</translation> +<translation id="3299098170013242198">Windows Hello-г нууц үг бөглөхөд асаасан байна</translation> <translation id="3303855915957856445">Хайлтын илэрц олдсонгүй</translation> <translation id="3304073249511302126">bluetooth скан хийх</translation> <translation id="33073482541490531">Таны дөнгөж сая ашигласан нууц үгийг өгөгдлийн зөрчлөөс оллоо. Нууц үгний менежер энэ нууц үгийг одоо өөрчлөхийг зөвлөж байна.</translation> @@ -1033,6 +1035,7 @@ <translation id="3678342917559046352">Буруу өргөтгөл: Утгыг дараах маягтуудын аль нэг нь байна гэж тооцоолсон: <extension_id> эсвэл <extension_id>;<update_url>.</translation> <translation id="3678529606614285348">Хуудсыг шинэ Нууцлалтай цонхонд нээх (Ctrl-Shift-N)</translation> <translation id="3681007416295224113">Гэрчилгээний мэдээлэл</translation> +<translation id="3699374065820972102">TouchID-г нууц үг бөглөхөд асаасан байна</translation> <translation id="3701427423622901115">Шинэчлэлтийг хүлээн зөвшөөрсөн.</translation> <translation id="3704162925118123524">Таны ашиглаж буй сүлжээ таныг өөрийн нэвтрэх хуудаст хандахыг шаардах магадлалтай.</translation> <translation id="3705189812819839667"><ph name="RESULT_OWNER" />, <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -1495,6 +1498,7 @@ <translation id="4900217275619098670">Ес дэх хуйлмал</translation> <translation id="4901778704868714008">Хадгалах...</translation> <translation id="4905659621780993806">Танай администратор төхөөрөмжийг тань <ph name="DATE" />-н <ph name="TIME" />-д автоматаар дахин эхлүүлнэ. Таны төхөөрөмж дахин эхлэхээс өмнө нээлттэй байгаа аливаа зүйлсийг хадгална уу.</translation> +<translation id="4911007278801291296">Та TouchID-г <ph name="SETTINGS" />-д асаах эсвэл унтраах боломжтой</translation> <translation id="4913987521957242411">Зүүн дээд буланд нэг нүх цоолох</translation> <translation id="4918221908152712722"><ph name="APP_NAME" />-г суулгах (татаж авах шаардлагагүй)</translation> <translation id="4923459931733593730">Төлбөр</translation> @@ -1688,6 +1692,7 @@ <translation id="5357848622083956825">Визуал урлаг, дизайн</translation> <translation id="536296301121032821">бодлогын тохиргоог хадгалах үйлдэл амжилтгүй болсон байна.</translation> <translation id="5363309033720083897">Танай администраторын зөвшөөрсөн цуваа порт</translation> +<translation id="5363713372507812442">Аялал хайх</translation> <translation id="5371425731340848620">Картыг шинэчлэх</translation> <translation id="5377026284221673050">"Таны цаг хоцорч байна" эсвэл "Таны цаг түрүүлж байна" эсвэл "<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>"</translation> <translation id="5379027395132364855">Үзүүлэн үүсгэх товчлуур, Үзүүлэнд шинэ Google үзүүлэн шуурхай үүсгэхийн тулд Enter дээр дарна уу</translation>
diff --git a/components/strings/components_strings_pt-BR.xtb b/components/strings/components_strings_pt-BR.xtb index 7d641d7..4c193ef 100644 --- a/components/strings/components_strings_pt-BR.xtb +++ b/components/strings/components_strings_pt-BR.xtb
@@ -714,6 +714,7 @@ <translation id="2799223571221894425">Reiniciar</translation> <translation id="2803306138276472711">A Navegação segura do Google recentemente <ph name="BEGIN_LINK" />detectou malware<ph name="END_LINK" /> em <ph name="SITE" />. Websites que geralmente são seguros, algumas vezes, são infetados com malware.</translation> <translation id="2807052079800581569">Posição da imagem Y</translation> +<translation id="2808278141522721006">Você pode ativar ou desativar o Windows Hello nas <ph name="SETTINGS" /></translation> <translation id="2820957248982571256">Verificando...</translation> <translation id="2824775600643448204">Barra de endereço e de pesquisa</translation> <translation id="2826760142808435982">A conexão foi criptografada e autenticada utilizando <ph name="CIPHER" /> e usa <ph name="KX" /> como o mecanismo de troca de chave.</translation> @@ -884,6 +885,7 @@ <translation id="3288238092761586174"><ph name="URL" /> poderá realizar outras etapas para verificar seu pagamento</translation> <translation id="3293642807462928945">Saiba mais sobre a política <ph name="POLICY_NAME" /></translation> <translation id="3295444047715739395">Veja e gerencie suas senhas nas configurações do Chrome</translation> +<translation id="3299098170013242198">O Windows Hello está ativado para preencher senhas</translation> <translation id="3303855915957856445">Nenhum resultado de pesquisa encontrado</translation> <translation id="3304073249511302126">verificação de Bluetooth</translation> <translation id="33073482541490531">A senha que você usou foi encontrada em uma violação de dados. O Gerenciador de senhas recomenda que você a mude imediatamente.</translation> @@ -1032,6 +1034,7 @@ <translation id="3678342917559046352">Extensão inválida: o valor esperado precisa estar no formato <extension_id> ou <extension_id>;<update_url>.</translation> <translation id="3678529606614285348">Abrir página em uma nova janela anônima (Ctrl-Shift-N)</translation> <translation id="3681007416295224113">Informações do certificado</translation> +<translation id="3699374065820972102">O TouchID está ativado para preencher senhas</translation> <translation id="3701427423622901115">Redefinição confirmada.</translation> <translation id="3704162925118123524">A rede que você está usando pode exigir que você visite a página de login.</translation> <translation id="3705189812819839667"><ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -1494,6 +1497,7 @@ <translation id="4900217275619098670">Nono rolo</translation> <translation id="4901778704868714008">Salvar…</translation> <translation id="4905659621780993806">O administrador vai reiniciar seu dispositivo automaticamente em <ph name="DATE" />, <ph name="TIME" />. Salve os itens abertos antes que o dispositivo seja reiniciado.</translation> +<translation id="4911007278801291296">É possível ativar ou desativar o TouchID nas <ph name="SETTINGS" /></translation> <translation id="4913987521957242411">Perfuração na parte superior esquerda</translation> <translation id="4918221908152712722">Instale o <ph name="APP_NAME" /> (nenhum download é necessário)</translation> <translation id="4923459931733593730">Pagamento</translation> @@ -1687,6 +1691,7 @@ <translation id="5357848622083956825">Artes visuais e design</translation> <translation id="536296301121032821">Falha ao armazenar as configurações da política</translation> <translation id="5363309033720083897">Porta serial permitida pelo administrador</translation> +<translation id="5363713372507812442">Pesquisar jornadas</translation> <translation id="5371425731340848620">Atualizar cartão</translation> <translation id="5377026284221673050">"Seu relógio está atrasado", "Seu relógio está adiantado" ou "<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>"</translation> <translation id="5379027395132364855">Botão para criar apresentações. Pressione Enter para criar rapidamente um novo arquivo no Apresentações Google</translation>
diff --git a/components/strings/components_strings_ro.xtb b/components/strings/components_strings_ro.xtb index 2ca08e4..a073140 100644 --- a/components/strings/components_strings_ro.xtb +++ b/components/strings/components_strings_ro.xtb
@@ -714,6 +714,7 @@ <translation id="2799223571221894425">Repornește</translation> <translation id="2803306138276472711">Navigarea sigură Google <ph name="BEGIN_LINK" />a detectat recent programe malware<ph name="END_LINK" /> pe <ph name="SITE" />. Site-urile care sunt de obicei sigure sunt uneori infectate cu programe malware.</translation> <translation id="2807052079800581569">Poziția Y a imaginii</translation> +<translation id="2808278141522721006">Poți să activezi sau să dezactivezi Windows Hello în <ph name="SETTINGS" /></translation> <translation id="2820957248982571256">Se scanează...</translation> <translation id="2824775600643448204">Bara de adrese și de căutare</translation> <translation id="2826760142808435982">Conexiunea este criptată și autentificată utilizând <ph name="CIPHER" /> și folosește <ph name="KX" /> ca mecanism de schimb al cheii.</translation> @@ -884,6 +885,7 @@ <translation id="3288238092761586174">Poate fi necesar ca <ph name="URL" /> să parcurgă câțiva pași suplimentari pentru a confirma plata</translation> <translation id="3293642807462928945">Află mai multe despre politica <ph name="POLICY_NAME" /></translation> <translation id="3295444047715739395">Afișează și gestionează parolele din setările Chrome</translation> +<translation id="3299098170013242198">Windows Hello este activat pentru completarea parolelor</translation> <translation id="3303855915957856445">Nu s-au găsit rezultate de căutare</translation> <translation id="3304073249511302126">căutarea Bluetooth</translation> <translation id="33073482541490531">Parola pe care tocmai ai folosit-o a fost găsită într-o încălcare a securității datelor. Managerul de parole recomandă să schimbi parola acum.</translation> @@ -1032,6 +1034,7 @@ <translation id="3678342917559046352">Extensie nevalidă: se aștepta ca valoarea să aibă una dintre următoarele forme: <extension_id> sau <extension_id>;<update_url>.</translation> <translation id="3678529606614285348">Deschide pagina într-o fereastră incognito nouă (Ctrl-Shift-N)</translation> <translation id="3681007416295224113">Informații despre certificat</translation> +<translation id="3699374065820972102">TouchID este activat pentru completarea parolelor</translation> <translation id="3701427423622901115">Resetare confirmată.</translation> <translation id="3704162925118123524">Rețeaua pe care o folosești poate solicita accesarea paginii de conectare.</translation> <translation id="3705189812819839667"><ph name="RESULT_OWNER" /> – <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -1494,6 +1497,7 @@ <translation id="4900217275619098670">A noua rolă</translation> <translation id="4901778704868714008">Salvează...</translation> <translation id="4905659621780993806">Administratorul îți va reporni dispozitivul automat la ora <ph name="TIME" />, pe <ph name="DATE" />. Salvează elementele deschise înainte ca dispozitivul să repornească.</translation> +<translation id="4911007278801291296">Poți activa sau dezactiva TouchID în <ph name="SETTINGS" /></translation> <translation id="4913987521957242411">Perforare în stânga sus</translation> <translation id="4918221908152712722">Instalează <ph name="APP_NAME" /> (nu necesită descărcare)</translation> <translation id="4923459931733593730">Plată</translation> @@ -1687,6 +1691,7 @@ <translation id="5357848622083956825">Arte vizuale și design</translation> <translation id="536296301121032821">Setările pentru politică nu au putut fi stocate</translation> <translation id="5363309033720083897">Port serial permis de administrator</translation> +<translation id="5363713372507812442">Parcursuri de căutare</translation> <translation id="5371425731340848620">Actualizează cardul</translation> <translation id="5377026284221673050">„Ora este setată în trecut”, „Ora este setată în viitor” sau „<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>”</translation> <translation id="5379027395132364855">Butonul Creează o prezentare, apasă pe Enter pentru a crea rapid o prezentare Google în Prezentări</translation>
diff --git a/components/strings/components_strings_si.xtb b/components/strings/components_strings_si.xtb index d91dd57..21d29d99 100644 --- a/components/strings/components_strings_si.xtb +++ b/components/strings/components_strings_si.xtb
@@ -714,6 +714,7 @@ <translation id="2799223571221894425">නැවත දියත් කරන්න</translation> <translation id="2803306138276472711">Google සුරක්ෂිත පිරික්සුම විසින් මෑතකදී <ph name="BEGIN_LINK" />අනිෂ්ට මෘදුකාංගයක්<ph name="END_LINK" /> <ph name="SITE" /> මත සොයා ගැනිණි. සාමාන්ය යෙන් සුරක්ෂිත වෙබ් අඩවි ඇතැම් විට අනිෂ්ට මෘදුකාංගවලින් ආසාදනය වී තිබිය හැක.</translation> <translation id="2807052079800581569">රූපය Y ස්ථානය</translation> +<translation id="2808278141522721006">ඔබට <ph name="SETTINGS" /> තුළ Windows Hello ක්රියාත්මක හෝ ක්රියා විරහිත කළ හැක</translation> <translation id="2820957248982571256">ස්කෑන් කරමින්...</translation> <translation id="2824775600643448204">ලිපිනය සහ සෙවීම් බාර් එක</translation> <translation id="2826760142808435982">සම්බන්ධතාවය සංකේතනය කර <ph name="CIPHER" /> භාවිතයෙන් සත්යාපනය කර ඇති අතර කේත හුවමාරු ක්රමවේදය ලෙස <ph name="KX" /> භාවිතා කරයි.</translation> @@ -884,6 +885,7 @@ <translation id="3288238092761586174"><ph name="URL" /> හට ඔබගේ ගෙවීම සත්යාපනය කිරීම සඳහා අතිරේක පියවර ගැනීමට අවශ්ය විය හැකිය</translation> <translation id="3293642807462928945"><ph name="POLICY_NAME" /> ප්රතිපත්තිය ගැන තව දැන ගන්න</translation> <translation id="3295444047715739395">Chrome සැකසීම් තුළ ඔබගේ මුරපද බලන්න සහ කළමනාකරණය කරන්න</translation> +<translation id="3299098170013242198">මුරපද පිරවීම සඳහා Windows Hello ක්රියාත්මකයි</translation> <translation id="3303855915957856445">සෙවුම් ප්රතිඵල හමු නොවිණි</translation> <translation id="3304073249511302126">බ්ලූටූත් ස්කෑන් කිරීම</translation> <translation id="33073482541490531">ඔබ මේ දැන් භාවිත කළ මුරපදය දත්ත කඩ කිරීමකින් සොයා ගන්නා ලදී. මුරපද කළමනාකරු මෙම මුරපදය දැන් වෙනස් කිරීම නිර්දේශ කරයි.</translation> @@ -1032,6 +1034,7 @@ <translation id="3678342917559046352">අවලංගු දිගුවක්: අගය පහත පෝරමවලින් එකක් වීමට අපේක්ෂා කරයි: <extension_id> හෝ <extension_id>;<update_url>.</translation> <translation id="3678529606614285348">පිටුව නව අප්රසිද්ධ කවුළුවක විවෘත කරන්න (Ctrl-Shift-N)</translation> <translation id="3681007416295224113">සහතික තොරතුරු</translation> +<translation id="3699374065820972102">මුරපද පිරවීම සඳහා TouchID ක්රියාත්මකයි</translation> <translation id="3701427423622901115">යළි සැකසීම පිළිගැනිණි.</translation> <translation id="3704162925118123524">ඔබ භාවිතකරන ජාලයේ පිවිසුම් පිටුවට පිවිසීම අවශ්ය විය හැක.</translation> <translation id="3705189812819839667"><ph name="RESULT_OWNER" />, <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -1494,6 +1497,7 @@ <translation id="4900217275619098670">Ninth Roll</translation> <translation id="4901778704868714008">සුරකින්න...</translation> <translation id="4905659621780993806">ඔබගේ පරිපාලක ඔබගේ උපාංගය <ph name="DATE" /> <ph name="TIME" />ට ස්වයංක්රියව යළි ආරම්භ කරනු ඇත ඔබගේ උපාංගය යළි ආරම්භ කිරීමට පෙර කිනම් හෝ විවෘත අයිතම සුරකින්න.</translation> +<translation id="4911007278801291296">ඔබට <ph name="SETTINGS" /> තුළ TouchID ක්රියාත්මක හෝ ක්රියාවිරහිත කළ හැක</translation> <translation id="4913987521957242411">ඉහළ වමට අනින්න</translation> <translation id="4918221908152712722"><ph name="APP_NAME" /> ස්ථාපනය කරන්න (බාගැනීමක් අවශ්ය නොවේ)</translation> <translation id="4923459931733593730">ගෙවීම</translation> @@ -1687,6 +1691,7 @@ <translation id="5357848622083956825">දෘශ්ය කලා සහ මෝස්තර</translation> <translation id="536296301121032821">ප්රතිපත්ති සැකසුම් ගබඩා කිරීමට අසමත් විය</translation> <translation id="5363309033720083897">ඔබගේ පරිපාලක විසින් ඉඩ දෙන අනුක්රමික තොට</translation> +<translation id="5363713372507812442">සෙවීම් චාරිකා</translation> <translation id="5371425731340848620">කාඩ්පත යාවත්කාලීන කරන්න</translation> <translation id="5377026284221673050">"ඔබේ ඔරලෝසුව පිටුපසින්" හෝ "ඔබේ ඔරලෝසුව ඉදිරියෙන්" හෝ "<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>"</translation> <translation id="5379027395132364855">ඉදිරිපත් කිරීම තනන්න බොත්තම, Slides තුළ ඉක්මනින් නව Google ඉදිරිපත් කිරීමට තැනීමට Enter ඔබන්න</translation>
diff --git a/components/strings/components_strings_sk.xtb b/components/strings/components_strings_sk.xtb index 4cb4b94..3fd9bcd 100644 --- a/components/strings/components_strings_sk.xtb +++ b/components/strings/components_strings_sk.xtb
@@ -714,6 +714,7 @@ <translation id="2799223571221894425">Znova spustiť</translation> <translation id="2803306138276472711">Funkcia Bezpečné prehliadanie Google nedávno <ph name="BEGIN_LINK" />zistila malvér<ph name="END_LINK" /> na stránkach <ph name="SITE" />. Webové stránky, ktoré sú zvyčajne bezpečné, môžu byť niekedy nakazené malvérom.</translation> <translation id="2807052079800581569">Poloha obrázka na osi Y</translation> +<translation id="2808278141522721006">Windows Hello môžete zapnúť alebo vypnúť v sekcii <ph name="SETTINGS" /></translation> <translation id="2820957248982571256">Prebieha vyhľadávanie...</translation> <translation id="2824775600643448204">Panel s adresou a vyhľadávací panel</translation> <translation id="2826760142808435982">Pripojenie je šifrované pomocou štandardu <ph name="CIPHER" /> a používa mechanizmus výmeny kľúčov <ph name="KX" />.</translation> @@ -881,6 +882,7 @@ <translation id="3288238092761586174"><ph name="URL" /> môže vykonať ďalšie kroky na overenie vašej platby</translation> <translation id="3293642807462928945">Ďalšie informácie o pravidle <ph name="POLICY_NAME" /></translation> <translation id="3295444047715739395">Čítanie a správa hesiel v nastaveniach Chromu</translation> +<translation id="3299098170013242198">Funkcia Windows Hello je zapnutá na vypĺňanie hesiel</translation> <translation id="3303855915957856445">Nič sa nenašlo</translation> <translation id="3304073249511302126">vyhľadávanie zariadení s rozhraním bluetooth</translation> <translation id="33073482541490531">Heslo, ktoré ste práve použili, bolo nájdené v zozname hesiel odhalených pri porušení ochrany údajov. Správca hesiel ho odporúča okamžite zmeniť.</translation> @@ -1028,6 +1030,7 @@ <translation id="3678342917559046352">Neplatné rozšírenie: očakáva sa, že hodnota bude mať jeden z nasledujúcich tvarov: <extension_id> alebo <extension_id>;<update_url>.</translation> <translation id="3678529606614285348">Otvorte stránku v novom okne inkognito (Ctrl-Shift-N)</translation> <translation id="3681007416295224113">Informácie o certifikáte</translation> +<translation id="3699374065820972102">Funkcia TouchID je zapnutá na vypĺňanie hesiel</translation> <translation id="3701427423622901115">Resetovanie bolo potvrdené.</translation> <translation id="3704162925118123524">Sieť, ktorú používate, môže vyžadovať, aby ste navštívili jej prihlasovaciu stránku.</translation> <translation id="3705189812819839667"><ph name="RESULT_OWNER" /> – <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -1490,6 +1493,7 @@ <translation id="4900217275619098670">Deviaty kotúč</translation> <translation id="4901778704868714008">Uložiť...</translation> <translation id="4905659621780993806">Správca reštartuje vaše zariadenie automaticky <ph name="DATE" /> o <ph name="TIME" />. Uložte si predtým všetky otvorené položky.</translation> +<translation id="4911007278801291296">Touch ID môžete zapnúť alebo vypnúť v sekcii <ph name="SETTINGS" /></translation> <translation id="4913987521957242411">Prederaviť vľavo hore</translation> <translation id="4918221908152712722">Nainštalujte si <ph name="APP_NAME" /> (bez nutnosti stiahnutia)</translation> <translation id="4923459931733593730">Platba</translation> @@ -1683,6 +1687,7 @@ <translation id="5357848622083956825">Výtvarné umenie a dizajn</translation> <translation id="536296301121032821">Nastavenia pravidla sa nepodarilo uložiť</translation> <translation id="5363309033720083897">Sériový port povolený vaším správcom</translation> +<translation id="5363713372507812442">Hľadajte cesty</translation> <translation id="5371425731340848620">Aktualizujte si kartu</translation> <translation id="5377026284221673050">„Vaše hodiny meškajú“, „Vaše hodiny idú dopredu“ alebo „<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>“</translation> <translation id="5379027395132364855">Tlačidlo na vytvorenie novej prezentácie, stlačením klávesa Enter vytvoríte rýchlym spôsobom novú prezentáciu Google v Prezentáciách</translation>
diff --git a/components/strings/components_strings_zu.xtb b/components/strings/components_strings_zu.xtb index f97ac3b6..d67d16e 100644 --- a/components/strings/components_strings_zu.xtb +++ b/components/strings/components_strings_zu.xtb
@@ -714,6 +714,7 @@ <translation id="2799223571221894425">Qalisa kabusha</translation> <translation id="2803306138276472711">Kamuva nje Ukuphequlula Okuphephile kwe-Google <ph name="BEGIN_LINK" />kuthole i-malware<ph name="END_LINK" /> ku-<ph name="SITE" />. Ngokujwayelekile amawebhusayithi aphephile ngezinye izikhathi afakwa i-malware.</translation> <translation id="2807052079800581569">Indawo yesithombe engu-Y</translation> +<translation id="2808278141522721006">Ungavula noma uvale i-Windows Hello ku-<ph name="SETTINGS" /></translation> <translation id="2820957248982571256">Iyaskena...</translation> <translation id="2824775600643448204">Ikheli nebha yosesho</translation> <translation id="2826760142808435982">Ukuxhumeka kubetheliwe kwaphinde kwaqinisekiswa kusetshenziswa i-<ph name="CIPHER" /> futhi kusebenzisa i-<ph name="KX" /> njengendlela yokushintshanisa ukhiye.</translation> @@ -882,6 +883,7 @@ <translation id="3288238092761586174">I-<ph name="URL" /> ingase idinge ukuthatha izinyathelo ezengeziwe ukuqinisekisa inkokhelo yakho</translation> <translation id="3293642807462928945">Funda kabanzi mayelana nenqubomgomo ye-<ph name="POLICY_NAME" /></translation> <translation id="3295444047715739395">Buka futhi phatha amaphasiwedi wakho kumasethingi we-Chrome</translation> +<translation id="3299098170013242198">I-Windows Hello ivuliwe ukuze igcwalise amaphasiwedi</translation> <translation id="3303855915957856445">Ayikho imiphumela yosesho etholakele</translation> <translation id="3304073249511302126">ukuskena kwe-bluetooth</translation> <translation id="33073482541490531">Iphasiwedi osanda kuyisebenzisa itholakele ekwephuleni isivumelwano sedatha. Isiphathi sephasiwedi sincoma ukushintsha le phasiwedi manje.</translation> @@ -1029,6 +1031,7 @@ <translation id="3678342917559046352">Isandiso Esingavumelekile: Bekulindeleke ukuthi inani libe ngelinye lamafomu alandelayo: <extension_id> noma <extension_id>;<update_url>.</translation> <translation id="3678529606614285348">Vula ikhasi kuwindi elisha le-incognito (Ctrl-Shift-N)</translation> <translation id="3681007416295224113">Ulwazi lesitifiketi</translation> +<translation id="3699374065820972102">I-TouchID ivulelwe ukugcwalisa amaphasiwedi</translation> <translation id="3701427423622901115">Ukusetha kabusha kuvunyelwe.</translation> <translation id="3704162925118123524">Inethiwekhi oyisebenzisayo ingahle idinge ukuthi uvakashele ikhasi lokungena ngemvume.</translation> <translation id="3705189812819839667"><ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -1491,6 +1494,7 @@ <translation id="4900217275619098670">Umqulu Wesishiyagalolunye</translation> <translation id="4901778704868714008">Londoloza...</translation> <translation id="4905659621780993806">Umphathi wakho uzoqalisa idivayisi yakho ngokuzenzakalelayo ngo-<ph name="TIME" /> ngomhla ka-<ph name="DATE" />. Londoloza noma yiziphi izinto ezivuliwe ngaphambi kokuthi idivayisi yakho iqale kabusha.</translation> +<translation id="4911007278801291296">Ungavula noma uvale i-TouchID ku-<ph name="SETTINGS" /></translation> <translation id="4913987521957242411">Ukushaya phezulu kwesokunxele</translation> <translation id="4918221908152712722">Faka i-<ph name="APP_NAME" /> (akukho ukulandwa okudingekayo)</translation> <translation id="4923459931733593730">Inkokhelo</translation> @@ -1684,6 +1688,7 @@ <translation id="5357848622083956825">Ubuciko obubonakalayo nomklamo</translation> <translation id="536296301121032821">Yehlulekile ukugcina izilungiselelo zenqubomgomo</translation> <translation id="5363309033720083897">Imbobo ye-serial ivunyelwe ngumlawuli wakho</translation> +<translation id="5363713372507812442">Sesha Uhambo</translation> <translation id="5371425731340848620">Buyekeza ikhadi</translation> <translation id="5377026284221673050">"Iwashi lakho lisemuva" noma "Iwashi lakho liphambili" noma "<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>"</translation> <translation id="5379027395132364855">Dala inkinobho yephrezentheshini, cindezela u-Enter ukuze udale iphrezentheshini entsha ye-Google ngokushesha ku-Slides</translation>
diff --git a/content/browser/manifest/manifest_manager_host.cc b/content/browser/manifest/manifest_manager_host.cc index 126148d..ea11aafc 100644 --- a/content/browser/manifest/manifest_manager_host.cc +++ b/content/browser/manifest/manifest_manager_host.cc
@@ -16,11 +16,28 @@ namespace content { +namespace { + +void DispatchManifestNotFound( + std::vector<ManifestManagerHost::GetManifestCallback> callbacks) { + for (ManifestManagerHost::GetManifestCallback& callback : callbacks) + std::move(callback).Run(GURL(), blink::mojom::Manifest::New()); +} + +} // namespace + ManifestManagerHost::ManifestManagerHost(Page& page) : PageUserData<ManifestManagerHost>(page) {} ManifestManagerHost::~ManifestManagerHost() { - DispatchPendingCallbacks(); + std::vector<GetManifestCallback> callbacks = ExtractPendingCallbacks(); + if (callbacks.empty()) + return; + // PostTask the pending callbacks so they run outside of this destruction + // stack frame. + content::GetUIThreadTaskRunner({})->PostTask( + FROM_HERE, + base::BindOnce(DispatchManifestNotFound, std::move(callbacks))); } void ManifestManagerHost::BindObserver( @@ -34,6 +51,7 @@ } void ManifestManagerHost::GetManifest(GetManifestCallback callback) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); // Do not call into MaybeOverrideManifest in a non primary page since // it checks the url from PreRedirectionURLObserver that works only in // a primary page. @@ -66,18 +84,18 @@ return *manifest_manager_; } -void ManifestManagerHost::DispatchPendingCallbacks() { +std::vector<ManifestManagerHost::GetManifestCallback> +ManifestManagerHost::ExtractPendingCallbacks() { std::vector<GetManifestCallback> callbacks; - for (CallbackMap::iterator it(&callbacks_); !it.IsAtEnd(); it.Advance()) { + for (CallbackMap::iterator it(&callbacks_); !it.IsAtEnd(); it.Advance()) callbacks.push_back(std::move(*it.GetCurrentValue())); - } callbacks_.Clear(); - for (auto& callback : callbacks) - std::move(callback).Run(GURL(), blink::mojom::Manifest::New()); + return callbacks; } void ManifestManagerHost::OnConnectionError() { - DispatchPendingCallbacks(); + DCHECK_CURRENTLY_ON(BrowserThread::UI); + DispatchManifestNotFound(ExtractPendingCallbacks()); if (GetForPage(page())) DeleteForPage(page()); } @@ -86,6 +104,7 @@ int request_id, const GURL& url, blink::mojom::ManifestPtr manifest) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); GetContentClient()->browser()->MaybeOverrideManifest( &page().GetMainDocument(), manifest); auto callback = std::move(*callbacks_.Lookup(request_id));
diff --git a/content/browser/manifest/manifest_manager_host.h b/content/browser/manifest/manifest_manager_host.h index 787cd05..00f99e4 100644 --- a/content/browser/manifest/manifest_manager_host.h +++ b/content/browser/manifest/manifest_manager_host.h
@@ -52,7 +52,7 @@ blink::mojom::ManifestManager& GetManifestManager(); - void DispatchPendingCallbacks(); + std::vector<GetManifestCallback> ExtractPendingCallbacks(); void OnConnectionError(); void OnRequestManifestResponse(int request_id,
diff --git a/content/public/browser/page.h b/content/public/browser/page.h index 30696e6a..652333d 100644 --- a/content/public/browser/page.h +++ b/content/public/browser/page.h
@@ -71,6 +71,9 @@ base::OnceCallback<void(const GURL&, blink::mojom::ManifestPtr)>; // Requests the manifest URL and the Manifest of the main frame's document. + // |callback| may be called after the WebContents has been destroyed. + // This must be invoked on the UI thread, |callback| will be invoked on the UI + // thread. virtual void GetManifest(GetManifestCallback callback) = 0; // Returns true iff this Page is primary for the associated `WebContents`
diff --git a/extensions/browser/extension_function_histogram_value.h b/extensions/browser/extension_function_histogram_value.h index 9f3bfed..ef811e7 100644 --- a/extensions/browser/extension_function_histogram_value.h +++ b/extensions/browser/extension_function_histogram_value.h
@@ -1782,6 +1782,8 @@ WMDESKSPRIVATE_SWITCHDESK = 1719, OS_TELEMETRY_GETTPMINFO = 1720, INPUTMETHODPRIVATE_NOTIFYINPUTMETHODREADYFORTESTING = 1721, + AUTOTESTPRIVATE_MAKEFUSEBOXTEMPDIR = 1722, + AUTOTESTPRIVATE_REMOVEFUSEBOXTEMPDIR = 1723, // Last entry: Add new entries above, then run: // tools/metrics/histograms/update_extension_histograms.py ENUM_BOUNDARY
diff --git a/ios/chrome/browser/ui/first_run/BUILD.gn b/ios/chrome/browser/ui/first_run/BUILD.gn index f88e7bd..d4c5aa29 100644 --- a/ios/chrome/browser/ui/first_run/BUILD.gn +++ b/ios/chrome/browser/ui/first_run/BUILD.gn
@@ -151,7 +151,6 @@ "//ios/chrome/browser/signin", "//ios/chrome/browser/ui:feature_flags", "//ios/chrome/browser/ui/settings/sync/utils", - "//ios/chrome/browser/ui/util", "//ios/web/public/thread", "//ui/gfx", ] @@ -227,7 +226,6 @@ "//ios/chrome/browser/ui/content_suggestions:feature_flags", "//ios/chrome/browser/ui/fancy_ui", "//ios/chrome/browser/ui/start_surface:feature_flags", - "//ios/chrome/browser/ui/util", "//ios/chrome/test:test_support", "//ios/public/provider/chrome/browser", "//ios/public/provider/chrome/browser:test_support",
diff --git a/ios/chrome/browser/ui/first_run/first_run_util.mm b/ios/chrome/browser/ui/first_run/first_run_util.mm index 093984fd..338509c 100644 --- a/ios/chrome/browser/ui/first_run/first_run_util.mm +++ b/ios/chrome/browser/ui/first_run/first_run_util.mm
@@ -23,7 +23,6 @@ #import "ios/chrome/browser/signin/identity_manager_factory.h" #import "ios/chrome/browser/ui/settings/sync/utils/sync_util.h" #import "ios/chrome/browser/ui/ui_feature_flags.h" -#import "ios/chrome/browser/ui/util/ui_util.h" #import "ios/web/public/thread/web_thread.h" #import "ui/gfx/ios/NSString+CrStringDrawing.h"
diff --git a/ios/chrome/browser/ui/first_run/welcome_to_chrome_view.mm b/ios/chrome/browser/ui/first_run/welcome_to_chrome_view.mm index 08c2db8..e95ff487 100644 --- a/ios/chrome/browser/ui/first_run/welcome_to_chrome_view.mm +++ b/ios/chrome/browser/ui/first_run/welcome_to_chrome_view.mm
@@ -16,10 +16,10 @@ #import "ios/chrome/browser/ui/elements/text_view_selection_disabled.h" #import "ios/chrome/browser/ui/fancy_ui/primary_action_button.h" #import "ios/chrome/browser/ui/first_run/first_run_util.h" -#import "ios/chrome/browser/ui/util/ui_util.h" #import "ios/chrome/browser/ui/util/uikit_ui_util.h" #import "ios/chrome/common/string_util.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" +#import "ios/chrome/common/ui/util/ui_util.h" #import "ios/chrome/grit/ios_chromium_strings.h" #import "ios/chrome/grit/ios_strings.h" #import "ui/base/l10n/l10n_util.h"
diff --git a/ios/chrome/browser/ui/first_run/welcome_to_chrome_view_controller.mm b/ios/chrome/browser/ui/first_run/welcome_to_chrome_view_controller.mm index 78d8f4c..25e861f 100644 --- a/ios/chrome/browser/ui/first_run/welcome_to_chrome_view_controller.mm +++ b/ios/chrome/browser/ui/first_run/welcome_to_chrome_view_controller.mm
@@ -38,7 +38,6 @@ #import "ios/chrome/browser/ui/first_run/welcome_to_chrome_view.h" #import "ios/chrome/browser/ui/ui_feature_flags.h" #import "ios/chrome/browser/ui/util/terms_util.h" -#import "ios/chrome/browser/ui/util/ui_util.h" #import "ios/chrome/browser/url/chrome_url_constants.h" #import "ios/chrome/browser/web_state_list/web_state_list.h" #import "ios/chrome/common/string_util.h"
diff --git a/ios/chrome/browser/ui/first_run/welcome_to_chrome_view_controller_unittest.mm b/ios/chrome/browser/ui/first_run/welcome_to_chrome_view_controller_unittest.mm index 704023a..d7cf8deb 100644 --- a/ios/chrome/browser/ui/first_run/welcome_to_chrome_view_controller_unittest.mm +++ b/ios/chrome/browser/ui/first_run/welcome_to_chrome_view_controller_unittest.mm
@@ -14,7 +14,6 @@ #import "ios/chrome/browser/ui/fancy_ui/primary_action_button.h" #import "ios/chrome/browser/ui/first_run/welcome_to_chrome_view.h" #import "ios/chrome/browser/ui/first_run/welcome_to_chrome_view_controller.h" -#import "ios/chrome/browser/ui/util/ui_util.h" #import "ios/chrome/test/ios_chrome_scoped_testing_local_state.h" #import "ios/web/public/test/web_task_environment.h" #import "testing/gtest/include/gtest/gtest.h"
diff --git a/net/base/network_anonymization_key.cc b/net/base/network_anonymization_key.cc index 0746040..a86c9cf 100644 --- a/net/base/network_anonymization_key.cc +++ b/net/base/network_anonymization_key.cc
@@ -23,7 +23,23 @@ frame_site_(!IsFrameSiteEnabled() ? absl::nullopt : frame_site), is_cross_site_(IsCrossSiteFlagSchemeEnabled() ? is_cross_site : absl::nullopt), - nonce_(nonce) {} + nonce_(nonce) { + DCHECK(top_frame_site_.has_value()); + DCHECK(!IsFrameSiteEnabled() || frame_site_.has_value()); + // If `is_cross_site` is enabled but the value is not populated, and we have + // the information to calculate it, do calculate it. + if (IsCrossSiteFlagSchemeEnabled() && !is_cross_site_.has_value() && + frame_site.has_value()) { + SiteForCookies site_for_cookies = + net::SiteForCookies(top_frame_site_.value()); + is_cross_site_ = + !site_for_cookies.IsFirstParty(frame_site.value().GetURL()); + } + if (IsCrossSiteFlagSchemeEnabled()) { + // If `frame_site_` is populated, `is_cross_site_` must be as well. + DCHECK(is_cross_site_.has_value()); + } +} NetworkAnonymizationKey NetworkAnonymizationKey::CreateFromNetworkIsolationKey( const net::NetworkIsolationKey& network_isolation_key) {
diff --git a/net/base/network_anonymization_key.h b/net/base/network_anonymization_key.h index f994454..103b839 100644 --- a/net/base/network_anonymization_key.h +++ b/net/base/network_anonymization_key.h
@@ -60,6 +60,8 @@ class NET_EXPORT NetworkAnonymizationKey { public: + // TODO(crbug/1372123): Consider having the constructor not pass + // `is_cross_site` since this may be unnecessary and confusing to consumers. NetworkAnonymizationKey( const SchemefulSite& top_frame_site, const absl::optional<SchemefulSite>& frame_site = absl::nullopt,
diff --git a/net/base/network_anonymization_key_unittest.cc b/net/base/network_anonymization_key_unittest.cc index c97937f..6ebf505 100644 --- a/net/base/network_anonymization_key_unittest.cc +++ b/net/base/network_anonymization_key_unittest.cc
@@ -304,10 +304,6 @@ /*frame_site=*/kDataSite, /*is_cross_site=*/false, /*nonce=*/absl::nullopt); - NetworkAnonymizationKey populated_double_key(/*top_frame_site=*/kTestSiteA, - /*frame_site=*/absl::nullopt, - /*is_cross_site=*/false, - /*nonce=*/absl::nullopt); NetworkAnonymizationKey from_create_transient = NetworkAnonymizationKey::CreateTransient(); @@ -315,16 +311,18 @@ EXPECT_TRUE(empty_key.IsTransient()); EXPECT_FALSE(populated_key.IsTransient()); EXPECT_TRUE(data_top_frame_key.IsTransient()); - EXPECT_TRUE(data_top_frame_key.IsTransient()); EXPECT_TRUE(populated_key_with_nonce.IsTransient()); EXPECT_TRUE(from_create_transient.IsTransient()); if (IsDoubleKeyNetworkAnonymizationKeyEnabled() || IsCrossSiteFlagEnabled()) { + NetworkAnonymizationKey populated_double_key(/*top_frame_site=*/kTestSiteA, + /*frame_site=*/absl::nullopt, + /*is_cross_site=*/false, + /*nonce=*/absl::nullopt); EXPECT_FALSE(data_frame_key.IsTransient()); EXPECT_FALSE(populated_double_key.IsTransient()); } else { EXPECT_TRUE(data_frame_key.IsTransient()); - EXPECT_TRUE(populated_double_key.IsTransient()); } } @@ -334,10 +332,6 @@ /*frame_site=*/kTestSiteB, /*is_cross_site=*/false, /*nonce=*/absl::nullopt); - NetworkAnonymizationKey empty_frame_site_key(/*top_frame_site=*/kTestSiteA, - /*frame_site=*/absl::nullopt, - /*is_cross_site=*/false, - /*nonce=*/absl::nullopt); NetworkAnonymizationKey empty_cross_site_flag_key( /*top_frame_site=*/kTestSiteA, /*frame_site=*/kTestSiteB, @@ -346,17 +340,46 @@ EXPECT_TRUE(populated_key.IsFullyPopulated()); EXPECT_FALSE(empty_key.IsFullyPopulated()); if (IsDoubleKeyNetworkAnonymizationKeyEnabled() || IsCrossSiteFlagEnabled()) { + NetworkAnonymizationKey empty_frame_site_key(/*top_frame_site=*/kTestSiteA, + /*frame_site=*/absl::nullopt, + /*is_cross_site=*/false, + /*nonce=*/absl::nullopt); EXPECT_TRUE(empty_frame_site_key.IsFullyPopulated()); - } else { - EXPECT_FALSE(empty_frame_site_key.IsFullyPopulated()); } // is_cross_site is required when // `kEnableCrossSiteFlagNetworkAnonymizationKey` is enabled. + // Since we have both the top_frame_site and frame_site values the constructor + // should calculate and set `is_cross_site`. + EXPECT_TRUE(empty_cross_site_flag_key.IsFullyPopulated()); +} + +TEST_P(NetworkAnonymizationKeyTest, IsCrossSiteFlagCalculatedInConstructor) { if (IsCrossSiteFlagEnabled()) { - EXPECT_FALSE(empty_cross_site_flag_key.IsFullyPopulated()); - } else { - EXPECT_TRUE(empty_cross_site_flag_key.IsFullyPopulated()); + NetworkAnonymizationKey cross_site_key(/*top_frame_site=*/kTestSiteA, + /*frame_site=*/kTestSiteB, + /*is_cross_site=*/true); + NetworkAnonymizationKey equal_cross_site_key(/*top_frame_site=*/kTestSiteA, + /*frame_site=*/kTestSiteB); + + NetworkAnonymizationKey same_site_key(/*top_frame_site=*/kTestSiteA, + /*frame_site=*/kTestSiteA, + /*is_cross_site=*/false); + NetworkAnonymizationKey equal_same_site_key(/*top_frame_site=*/kTestSiteA, + /*frame_site=*/kTestSiteA); + + NetworkAnonymizationKey double_key_cross_site(/*top_frame_site=*/kTestSiteA, + /*frame_site=*/absl::nullopt, + true); + EXPECT_EQ(cross_site_key.GetIsCrossSite().value(), true); + EXPECT_EQ(equal_cross_site_key.GetIsCrossSite().value(), true); + EXPECT_EQ(cross_site_key, equal_cross_site_key); + + EXPECT_EQ(same_site_key.GetIsCrossSite().value(), false); + EXPECT_EQ(equal_same_site_key.GetIsCrossSite().value(), false); + EXPECT_EQ(same_site_key, equal_same_site_key); + + EXPECT_EQ(double_key_cross_site.GetIsCrossSite().value(), true); } }
diff --git a/net/http/http_request_info_unittest.cc b/net/http/http_request_info_unittest.cc index d5166ef..832e931 100644 --- a/net/http/http_request_info_unittest.cc +++ b/net/http/http_request_info_unittest.cc
@@ -46,14 +46,9 @@ net::HttpRequestInfo triple_nik_double_nak_request_info; triple_nik_double_nak_request_info.network_isolation_key = NetworkIsolationKey(kTestSiteA, kTestSiteB); - triple_nik_double_nak_request_info.network_anonymization_key = - NetworkAnonymizationKey(kTestSiteA); EXPECT_FALSE(request_info_different_nik_nak.IsConsistent()); EXPECT_TRUE(triple_keys_request_info.IsConsistent()); - // Since triple keying is enabled for both NIK and NAK, NAK should not be a - // double key. - EXPECT_FALSE(triple_nik_double_nak_request_info.IsConsistent()); // Double key NIK and triple key NAK. scoped_feature_list_.Reset(); @@ -86,7 +81,6 @@ disabled_features_3); EXPECT_FALSE(triple_keys_request_info.IsConsistent()); - EXPECT_TRUE(triple_nik_double_nak_request_info.IsConsistent()); // Triple key NIK and double key with cross site flag NAK. scoped_feature_list_.Reset();
diff --git a/net/http/transport_security_state_static.pins b/net/http/transport_security_state_static.pins index 90f6136..b7e5300 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-10-08 12:54 UTC +# Last updated: 2022-10-09 12:54 UTC PinsListTimestamp -1665233668 +1665320099 TestSPKI sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
diff --git a/services/network/public/cpp/cors/origin_access_entry.cc b/services/network/public/cpp/cors/origin_access_entry.cc index 43553d6..2fa24e5 100644 --- a/services/network/public/cpp/cors/origin_access_entry.cc +++ b/services/network/public/cpp/cors/origin_access_entry.cc
@@ -14,19 +14,6 @@ namespace { -bool IsSubdomainOfHost(const std::string& subdomain, const std::string& host) { - if (subdomain.length() <= host.length()) - return false; - - if (subdomain[subdomain.length() - host.length() - 1] != '.') - return false; - - if (!base::EndsWith(subdomain, host, base::CompareCase::SENSITIVE)) - return false; - - return true; -} - bool IsPublicSuffixSubdomainOfHost(const std::string& subdomain, const std::string& host) { size_t public_suffix_length = @@ -42,6 +29,19 @@ } // namespace +bool IsSubdomainOfHost(const std::string& subdomain, const std::string& host) { + if (subdomain.length() <= host.length()) + return false; + + if (subdomain[subdomain.length() - host.length() - 1] != '.') + return false; + + if (!base::EndsWith(subdomain, host, base::CompareCase::SENSITIVE)) + return false; + + return true; +} + OriginAccessEntry::OriginAccessEntry( const std::string& protocol, const std::string& host,
diff --git a/services/network/public/cpp/cors/origin_access_entry.h b/services/network/public/cpp/cors/origin_access_entry.h index 35e928c..17a5211 100644 --- a/services/network/public/cpp/cors/origin_access_entry.h +++ b/services/network/public/cpp/cors/origin_access_entry.h
@@ -24,6 +24,11 @@ namespace cors { +// Returns true if the host and subdomain are the same, or if subdomain is a +// subdomain of host. (e.g., bar.foo.com is a subdomain of foo.com). +bool COMPONENT_EXPORT(NETWORK_CPP) + IsSubdomainOfHost(const std::string& subdomain, const std::string& host); + // A class to hold a protocol and domain and port triple and to provide methods // to determine if a given origin or domain matches. The class can have a // setting to control if the matching methods accept a partial match.
diff --git a/services/network/public/cpp/cors/origin_access_entry_unittest.cc b/services/network/public/cpp/cors/origin_access_entry_unittest.cc index 3a4f2a7..b5a4a10 100644 --- a/services/network/public/cpp/cors/origin_access_entry_unittest.cc +++ b/services/network/public/cpp/cors/origin_access_entry_unittest.cc
@@ -13,6 +13,29 @@ namespace { +TEST(OriginAccessEntryTest, IsSubdomainOfHost) { + struct TestCase { + const std::string subdomain; + const std::string host; + const bool expected_result; + } inputs[] = { + {"foo.example.com", "example.com", true}, + {"bar.foo.example.com", "example.com", true}, + {"example.com", "com", true}, + {"example.com", "example.com", false}, + {"badexample.com", "example.com", false}, + {"", "", false}, + {"bar.Example.com", "example.com", false}, + }; + + for (const auto& test : inputs) { + SCOPED_TRACE(testing::Message() + << "subdomain: " << test.subdomain << ", Host: " << test.host); + EXPECT_EQ(test.expected_result, + IsSubdomainOfHost(test.subdomain, test.host)); + } +} + TEST(OriginAccessEntryTest, PublicSuffixListTest) { struct TestCase { const std::string host;
diff --git a/services/network/public/cpp/network_anonymization_key_mojom_traits_unittest.cc b/services/network/public/cpp/network_anonymization_key_mojom_traits_unittest.cc index 5780cb8c..eac6220 100644 --- a/services/network/public/cpp/network_anonymization_key_mojom_traits_unittest.cc +++ b/services/network/public/cpp/network_anonymization_key_mojom_traits_unittest.cc
@@ -48,14 +48,6 @@ network::mojom::NetworkAnonymizationKey>(original, copied)); EXPECT_EQ(original, copied); } - - // A double key is invalid when triple keying is enabled. - net::NetworkAnonymizationKey invalid_triple_key = - net::NetworkAnonymizationKey(net::SchemefulSite(GURL("http://a.test/"))); - net::NetworkAnonymizationKey expect_failed_copy; - EXPECT_FALSE(mojo::test::SerializeAndDeserialize< - network::mojom::NetworkAnonymizationKey>(invalid_triple_key, - expect_failed_copy)); } TEST(NetworkAnonymizationKeyMojomTraitsTest, SerializeAndDeserializeDoubleKey) {
diff --git a/third_party/blink/common/permissions_policy/OWNERS b/third_party/blink/common/permissions_policy/OWNERS index 578de46..6cdc478 100644 --- a/third_party/blink/common/permissions_policy/OWNERS +++ b/third_party/blink/common/permissions_policy/OWNERS
@@ -1,3 +1,4 @@ +arichiv@chromium.org iclelland@chromium.org vogelheim@chromium.org
diff --git a/third_party/blink/common/permissions_policy/origin_with_possible_wildcards.cc b/third_party/blink/common/permissions_policy/origin_with_possible_wildcards.cc index 5850fd77..4244136 100644 --- a/third_party/blink/common/permissions_policy/origin_with_possible_wildcards.cc +++ b/third_party/blink/common/permissions_policy/origin_with_possible_wildcards.cc
@@ -5,7 +5,10 @@ #include "third_party/blink/public/common/permissions_policy/origin_with_possible_wildcards.h" #include "base/feature_list.h" +#include "net/base/registry_controlled_domains/registry_controlled_domain.h" +#include "services/network/public/cpp/cors/origin_access_entry.h" #include "third_party/blink/public/common/features.h" +#include "url/gurl.h" #include "url/origin.h" namespace blink { @@ -28,6 +31,63 @@ OriginWithPossibleWildcards::~OriginWithPossibleWildcards() = default; +// static +OriginWithPossibleWildcards OriginWithPossibleWildcards::Parse( + const std::string& allowlist_entry, + const NodeType type) { + auto wildcard_pos = std::string::npos; + // If there's a subdomain wildcard in the `allowlist_entry` of a permissions + // policy, then we can parse it out and validate the origin. We know there's a + // subdomain wildcard if there is a exactly one `*` and it's after the scheme + // and before the rest of the host. Invalid origins return an instance of + // OriginWithPossibleWildcards with an opaque origin member. + if (base::FeatureList::IsEnabled( + features::kWildcardSubdomainsInPermissionsPolicy) && + type == NodeType::kHeader && + (wildcard_pos = allowlist_entry.find("://*.")) != std::string::npos && + allowlist_entry.find('*') == allowlist_entry.rfind('*')) { + // We need a copy as erase modifies the original. + auto allowlist_entry_copy(allowlist_entry); + allowlist_entry_copy.erase(wildcard_pos + 3, 2); + const auto parsed_origin = url::Origin::Create(GURL(allowlist_entry_copy)); + // The origin must not be opaque and its host must be registrable. + if (parsed_origin.opaque()) { + // We early return here assuming even with the `*.` the origin parses + // opaque. + return OriginWithPossibleWildcards(); + } else if ( + net::registry_controlled_domains::HostHasRegistryControlledDomain( + parsed_origin.host(), + net::registry_controlled_domains::INCLUDE_UNKNOWN_REGISTRIES, + net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES)) { + return OriginWithPossibleWildcards(parsed_origin, + /*has_subdomain_wildcard=*/true); + } + } + // Otherwise, parse the origin string and verify that the result is + // valid. Invalid strings will produce an opaque origin. + const auto parsed_origin = url::Origin::Create(GURL(allowlist_entry)); + if (parsed_origin.opaque()) { + return OriginWithPossibleWildcards(); + } else { + return OriginWithPossibleWildcards(parsed_origin, + /*has_subdomain_wildcard=*/false); + } +} + +std::string OriginWithPossibleWildcards::Serialize() const { + auto wildcard_pos = std::string::npos; + auto serialized_origin = origin.Serialize(); + if (has_subdomain_wildcard && + (wildcard_pos = serialized_origin.find("://")) != std::string::npos) { + // Restore the missing wildcard (`*.`) to the front of the host so this + // permissions policy element is inspectable. Before subdomain wildcard + // support this would have been parsed into a `%2A.`. + serialized_origin.insert(wildcard_pos + 3, "*."); + } + return serialized_origin; +} + bool OriginWithPossibleWildcards::DoesMatchOrigin( const url::Origin& match_origin) const { // TODO(crbug.com/1345994): Merge logic with IsSubdomainOfHost where possible. @@ -41,25 +101,13 @@ if (origin == match_origin) { return false; } - const auto& tested_host = match_origin.host(); - const auto& policy_host = origin.host(); - // The tested host must be at least 2 char longer than the policy host - // to be a subdomain of it. - if (tested_host.length() < (policy_host.length() + 2)) { + // Scheme and port must match. + if (match_origin.scheme() != origin.scheme() || + match_origin.port() != origin.port()) { return false; } - // The tested host must end with the policy host. - if (!base::EndsWith(tested_host, policy_host)) { - return false; - } - // The tested host without the policy host must end with a ".". - if (tested_host[tested_host.length() - policy_host.length() - 1] != '.') { - return false; - } - // If anything but the host doesn't match they can't match. - if (origin != url::Origin::CreateFromNormalizedTuple(match_origin.scheme(), - policy_host, - match_origin.port())) { + // The tested host must be a subdomain of the policy host. + if (!network::cors::IsSubdomainOfHost(match_origin.host(), origin.host())) { return false; } return true;
diff --git a/third_party/blink/common/permissions_policy/origin_with_possible_wildcards_unittest.cc b/third_party/blink/common/permissions_policy/origin_with_possible_wildcards_unittest.cc index 6e3bebd..621b2d2 100644 --- a/third_party/blink/common/permissions_policy/origin_with_possible_wildcards_unittest.cc +++ b/third_party/blink/common/permissions_policy/origin_with_possible_wildcards_unittest.cc
@@ -121,6 +121,134 @@ } } +TEST_P(OriginWithPossibleWildcardsTest, Parse) { + // Tuple of {serialized value, type, origin, wildcard, description}. + const auto& values = { + std::make_tuple("https://foo.com", + OriginWithPossibleWildcards::NodeType::kHeader, + "https://foo.com", false, + "Origin without subdomain wildcard in header"), + std::make_tuple("https://foo.com", + OriginWithPossibleWildcards::NodeType::kAttribute, + "https://foo.com", false, + "Origin without subdomain wildcard in attribute"), + std::make_tuple( + "https://*.foo.com", OriginWithPossibleWildcards::NodeType::kHeader, + HasWildcardSubdomainsInPermissionsPolicy() ? "https://foo.com" + : "https://%2A.foo.com", + HasWildcardSubdomainsInPermissionsPolicy(), + "Origin with subdomain wildcard in header"), + std::make_tuple("https://*.foo.com", + OriginWithPossibleWildcards::NodeType::kAttribute, + "https://%2A.foo.com", false, + "Origin with subdomain wildcard in attribute"), + std::make_tuple("*://foo.com", + OriginWithPossibleWildcards::NodeType::kHeader, "null", + false, "Origin with scheme wildcard in header"), + std::make_tuple("*://foo.com", + OriginWithPossibleWildcards::NodeType::kAttribute, "null", + false, "Origin with scheme wildcard in attribute"), + std::make_tuple( + "https://*", OriginWithPossibleWildcards::NodeType::kHeader, + "https://%2A", false, "Origin with host wildcard in header"), + std::make_tuple( + "https://*", OriginWithPossibleWildcards::NodeType::kAttribute, + "https://%2A", false, "Origin with host wildcard in attribute"), + std::make_tuple("https://*.com", + OriginWithPossibleWildcards::NodeType::kHeader, + "https://%2A.com", false, + "Origin with non-registerable host wildcard in header"), + std::make_tuple( + "https://*.com", OriginWithPossibleWildcards::NodeType::kAttribute, + "https://%2A.com", false, + "Origin with non-registerable host wildcard in attribute"), + std::make_tuple("https://*.appspot.com", + OriginWithPossibleWildcards::NodeType::kHeader, + "https://%2A.appspot.com", false, + "Origin with only private tld host wildcard in header"), + std::make_tuple( + "https://*.appspot.com", + OriginWithPossibleWildcards::NodeType::kAttribute, + "https://%2A.appspot.com", false, + "Origin with only private tld host wildcard in attribute"), + std::make_tuple("https://*.foo.appspot.com", + OriginWithPossibleWildcards::NodeType::kHeader, + HasWildcardSubdomainsInPermissionsPolicy() + ? "https://foo.appspot.com" + : "https://%2A.foo.appspot.com", + HasWildcardSubdomainsInPermissionsPolicy(), + "Origin with private tld host wildcard in header"), + std::make_tuple("https://*.foo.appspot.com", + OriginWithPossibleWildcards::NodeType::kAttribute, + "https://%2A.foo.appspot.com", false, + "Origin with private tld host wildcard in attribute"), + std::make_tuple("https://*.example.test", + OriginWithPossibleWildcards::NodeType::kHeader, + HasWildcardSubdomainsInPermissionsPolicy() + ? "https://example.test" + : "https://%2A.example.test", + HasWildcardSubdomainsInPermissionsPolicy(), + "Origin with unknown tld host wildcard in header"), + std::make_tuple("https://*.example.test", + OriginWithPossibleWildcards::NodeType::kAttribute, + "https://%2A.example.test", false, + "Origin with unknown tld host wildcard in attribute"), + std::make_tuple("https://foo.com:*", + OriginWithPossibleWildcards::NodeType::kHeader, "null", + false, "Origin with port wildcard in header"), + std::make_tuple("https://foo.com:*", + OriginWithPossibleWildcards::NodeType::kAttribute, "null", + false, "Origin with port wildcard in attribute"), + std::make_tuple("https://bar.*.foo.com", + OriginWithPossibleWildcards::NodeType::kHeader, + "https://bar.%2A.foo.com", false, + "Origin with improper subdomain wildcard in header"), + std::make_tuple("https://bar.*.foo.com", + OriginWithPossibleWildcards::NodeType::kAttribute, + "https://bar.%2A.foo.com", false, + "Origin with improper subdomain wildcard in attribute"), + std::make_tuple("https://*.*.foo.com", + OriginWithPossibleWildcards::NodeType::kHeader, + "https://%2A.%2A.foo.com", false, + "Origin with two subdomain wildcards in header"), + std::make_tuple("https://*.*.foo.com", + OriginWithPossibleWildcards::NodeType::kAttribute, + "https://%2A.%2A.foo.com", false, + "Origin with two subdomain wildcards in attribute"), + }; + for (const auto& value : values) { + const auto& origin_with_possible_wildcards = + OriginWithPossibleWildcards::Parse(std::get<0>(value), + std::get<1>(value)); + SCOPED_TRACE(std::get<4>(value)); + EXPECT_EQ(std::get<2>(value), + origin_with_possible_wildcards.origin.Serialize()); + EXPECT_EQ(std::get<3>(value), + origin_with_possible_wildcards.has_subdomain_wildcard); + } +} + +TEST_P(OriginWithPossibleWildcardsTest, Serialize) { + // Tuple of {origin, wildcard, serialized value, description}. + const auto& values = { + std::make_tuple("https://foo.com", false, "https://foo.com", + "Origin without subdomain wildcard"), + std::make_tuple("https://foo.com", true, "https://*.foo.com", + "Origin with subdomain wildcard"), + std::make_tuple("https://%2A.foo.com", false, "https://%2A.foo.com", + "Origin with improper subdomain wildcard"), + std::make_tuple("https://%2A.com", false, "https://%2A.com", + "Origin with non-registerable subdomain wildcard"), + std::make_tuple("null", false, "null", "Opaque origin"), + }; + for (const auto& value : values) { + const auto& origin_with_possible_wildcards = OriginWithPossibleWildcards( + url::Origin::Create(GURL(std::get<0>(value))), std::get<1>(value)); + SCOPED_TRACE(std::get<3>(value)); + EXPECT_EQ(std::get<2>(value), origin_with_possible_wildcards.Serialize()); + } +} + TEST_P(OriginWithPossibleWildcardsTest, Constructors) { OriginWithPossibleWildcards a; OriginWithPossibleWildcards b(url::Origin(), false);
diff --git a/third_party/blink/public/common/permissions_policy/OWNERS b/third_party/blink/public/common/permissions_policy/OWNERS index 7f729e8..72f92a2c 100644 --- a/third_party/blink/public/common/permissions_policy/OWNERS +++ b/third_party/blink/public/common/permissions_policy/OWNERS
@@ -1,3 +1,4 @@ +arichiv@chromium.org iclelland@chromium.org vogelheim@chromium.org
diff --git a/third_party/blink/public/common/permissions_policy/origin_with_possible_wildcards.h b/third_party/blink/public/common/permissions_policy/origin_with_possible_wildcards.h index 009dfce..a1d1285 100644 --- a/third_party/blink/public/common/permissions_policy/origin_with_possible_wildcards.h +++ b/third_party/blink/public/common/permissions_policy/origin_with_possible_wildcards.h
@@ -16,6 +16,12 @@ // or https://test.example.foo.com/ but does not match https://foo.com/. // Origins that do have wildcards cannot be opaque. struct BLINK_COMMON_EXPORT OriginWithPossibleWildcards { + // Indicates the source of a parsed permissions policy. kHeader represents a + // permissions policy in an HTTP header. kAttribute represents an iframe allow + // policy. kUnknown indicated an unknown source. This affects which wildcards + // types are permitted in allowlist origins. + enum NodeType { kHeader, kAttribute, kUnknown }; + OriginWithPossibleWildcards(); OriginWithPossibleWildcards(const url::Origin& origin, bool has_subdomain_wildcard); @@ -24,6 +30,17 @@ const OriginWithPossibleWildcards& rhs); ~OriginWithPossibleWildcards(); + // This constructs a OriginWithPossibleWildcards from an allowlist_entry which + // might or might not have a subdomain wildcard (only if the type is kHeader). + // This does not support special types like *, 'self', 'src', or 'none'. + static OriginWithPossibleWildcards Parse(const std::string& allowlist_entry, + const NodeType type); + + // This should neatly undo the work of Parse, which is to say it + // serializes the origin and inserts a *. back into the front of the host + // if there was a subdomain wildcard. + std::string Serialize() const; + // If there is no subdomain wildcard, this function returns true if the // origins match. // For example: https://foo.com/ matches <https://foo.com/, false> but
diff --git a/third_party/blink/public/mojom/permissions_policy/OWNERS b/third_party/blink/public/mojom/permissions_policy/OWNERS index 11f73a8..de59466 100644 --- a/third_party/blink/public/mojom/permissions_policy/OWNERS +++ b/third_party/blink/public/mojom/permissions_policy/OWNERS
@@ -1,3 +1,4 @@ +arichiv@chromium.org iclelland@chromium.org vogelheim@chromium.org
diff --git a/third_party/blink/renderer/core/permissions_policy/dom_feature_policy.cc b/third_party/blink/renderer/core/permissions_policy/dom_feature_policy.cc index 8c1247a..54c8f517 100644 --- a/third_party/blink/renderer/core/permissions_policy/dom_feature_policy.cc +++ b/third_party/blink/renderer/core/permissions_policy/dom_feature_policy.cc
@@ -123,17 +123,8 @@ } Vector<String> result; for (const auto& origin_with_possible_wildcards : allowed_origins) { - if (!origin_with_possible_wildcards.has_subdomain_wildcard) { - result.push_back(WTF::String::FromUTF8( - origin_with_possible_wildcards.origin.Serialize())); - } else { - // Restore the missing wildcard from the front so this permissions - // policy element is inspectable. This looks different from when the - // wildcard wasn't supported as a %2A will be used instead of a *. - result.push_back(WTF::String::FromUTF8( - origin_with_possible_wildcards.origin.Serialize()) - .Replace("://", "://*.")); - } + result.push_back( + WTF::String::FromUTF8(origin_with_possible_wildcards.Serialize())); } return result; }
diff --git a/third_party/blink/renderer/core/permissions_policy/permissions_policy_parser.cc b/third_party/blink/renderer/core/permissions_policy/permissions_policy_parser.cc index 75bb228e..513a852e 100644 --- a/third_party/blink/renderer/core/permissions_policy/permissions_policy_parser.cc +++ b/third_party/blink/renderer/core/permissions_policy/permissions_policy_parser.cc
@@ -112,7 +112,7 @@ absl::optional<ParsedPermissionsPolicyDeclaration> ParseFeature( const PermissionsPolicyParser::Declaration& declaration_node, - const PermissionsPolicyParser::NodeType type); + const OriginWithPossibleWildcards::NodeType type); struct ParsedAllowlist { std::vector<blink::OriginWithPossibleWildcards> allowed_origins; @@ -126,8 +126,9 @@ const String& feature_name); // Parse allowlist for feature. - ParsedAllowlist ParseAllowlist(const Vector<String>& origin_strings, - const PermissionsPolicyParser::NodeType type); + ParsedAllowlist ParseAllowlist( + const Vector<String>& origin_strings, + const OriginWithPossibleWildcards::NodeType type); void ReportFeatureUsage(mojom::blink::PermissionsPolicyFeature feature); void ReportFeatureUsageLegacy(mojom::blink::PermissionsPolicyFeature feature); @@ -280,10 +281,10 @@ ParsingContext::ParsedAllowlist ParsingContext::ParseAllowlist( const Vector<String>& origin_strings, - const PermissionsPolicyParser::NodeType type) { + const OriginWithPossibleWildcards::NodeType type) { // The source of the PermissionsPolicyParser::Node must have an explicit // source so that we know which wildcards can be enabled. - DCHECK_NE(PermissionsPolicyParser::NodeType::kUnknown, type); + DCHECK_NE(OriginWithPossibleWildcards::NodeType::kUnknown, type); ParsedAllowlist allowlist; if (origin_strings.empty()) { // If a policy entry has no listed origins (e.g. "feature_name1" in @@ -314,13 +315,9 @@ // Determine the target of the declaration. This may be a specific // origin, either explicitly written, or one of the special keywords // 'self' or 'src'. ('src' can only be used in the iframe allow - // attribute.) - url::Origin target_origin; - - // Determine if there is a wildcard subdomain in the target origin + // attribute.) Also determine if this target has a subdomain wildcard // (e.g., https://*.google.com). - bool has_subdomain_wildcard = false; - wtf_size_t wildcard_pos = kNotFound; + OriginWithPossibleWildcards origin_with_possible_wildcards; // If the iframe will have an opaque origin (for example, if it is // sandboxed, or has a data: URL), then 'src' needs to refer to the @@ -333,7 +330,9 @@ // 'self' origin is used if the origin is exactly 'self'. if (EqualIgnoringASCIICase(origin_string, "'self'")) { allowlist_includes_self_ = true; - target_origin = self_origin_->ToUrlOrigin(); + origin_with_possible_wildcards = + OriginWithPossibleWildcards(self_origin_->ToUrlOrigin(), + /*has_subdomain_wildcard=*/false); } // 'src' origin is used if |src_origin| is available and the // origin is a match for 'src'. |src_origin| is only set @@ -341,7 +340,9 @@ else if (src_origin_ && EqualIgnoringASCIICase(origin_string, "'src'")) { allowlist_includes_src_ = true; if (!src_origin_->IsOpaque()) { - target_origin = src_origin_->ToUrlOrigin(); + origin_with_possible_wildcards = + OriginWithPossibleWildcards(src_origin_->ToUrlOrigin(), + /*has_subdomain_wildcard=*/false); } else { target_is_opaque = true; } @@ -352,38 +353,13 @@ allowlist_includes_star_ = true; target_is_all = true; } - // If there's a subdomain wildcard in the `origin_string` of a permissions - // policy, then we can parse it out and update `has_subdomain_wildcard`. - // We know there's a subdomain wildcard because there is a exactly one `*` - // and it's after the scheme and before the rest of the host. - else if (base::FeatureList::IsEnabled( - features::kWildcardSubdomainsInPermissionsPolicy) && - type == PermissionsPolicyParser::NodeType::kHeader && - (wildcard_pos = origin_string.Find("://*.")) != kNotFound && - origin_string.find('*') == origin_string.ReverseFind('*')) { - // We need a copy as Remove modifies the original. - String origin_string_copy(origin_string); - origin_string_copy.Remove(wildcard_pos + 3, 2); - scoped_refptr<SecurityOrigin> parsed_origin = - SecurityOrigin::CreateFromString(origin_string_copy); - if (!parsed_origin->IsOpaque()) { - target_origin = parsed_origin->ToUrlOrigin(); - has_subdomain_wildcard = true; - allowlist_includes_origin_ = true; - } else { - logger_.Warn("Unrecognized origin with subdomain wildcard: '" + - origin_string + "'."); - continue; - } - } // Otherwise, parse the origin string and verify that the result is // valid. Invalid strings will produce an opaque origin, which will // result in an error message. else { - scoped_refptr<SecurityOrigin> parsed_origin = - SecurityOrigin::CreateFromString(origin_string); - if (!parsed_origin->IsOpaque()) { - target_origin = parsed_origin->ToUrlOrigin(); + origin_with_possible_wildcards = + OriginWithPossibleWildcards::Parse(origin_string.Utf8(), type); + if (!origin_with_possible_wildcards.origin.opaque()) { allowlist_includes_origin_ = true; } else { logger_.Warn("Unrecognized origin: '" + origin_string + "'."); @@ -397,8 +373,7 @@ } else if (target_is_opaque) { allowlist.matches_opaque_src = true; } else { - allowlist.allowed_origins.emplace_back(target_origin, - has_subdomain_wildcard); + allowlist.allowed_origins.emplace_back(origin_with_possible_wildcards); } } } @@ -417,7 +392,7 @@ absl::optional<ParsedPermissionsPolicyDeclaration> ParsingContext::ParseFeature( const PermissionsPolicyParser::Declaration& declaration_node, - const PermissionsPolicyParser::NodeType type) { + const OriginWithPossibleWildcards::NodeType type) { absl::optional<mojom::blink::PermissionsPolicyFeature> feature = ParseFeatureName(declaration_node.feature_name); if (!feature) @@ -468,7 +443,7 @@ PermissionsPolicyParser::Node ParsingContext::ParseFeaturePolicyToIR( const String& policy) { PermissionsPolicyParser::Node root{ - PermissionsPolicyParser::NodeType::kAttribute}; + OriginWithPossibleWildcards::NodeType::kAttribute}; if (policy.length() > MAX_LENGTH_PARSE) { logger_.Error("Feature policy declaration exceeds size limit(" + @@ -549,7 +524,7 @@ } PermissionsPolicyParser::Node ir_root{ - PermissionsPolicyParser::NodeType::kHeader}; + OriginWithPossibleWildcards::NodeType::kHeader}; for (const auto& feature_entry : root.value()) { const auto& key = feature_entry.first; const char* feature_name = key.c_str();
diff --git a/third_party/blink/renderer/core/permissions_policy/permissions_policy_parser.h b/third_party/blink/renderer/core/permissions_policy/permissions_policy_parser.h index 873b1eea2..ba6609d0 100644 --- a/third_party/blink/renderer/core/permissions_policy/permissions_policy_parser.h +++ b/third_party/blink/renderer/core/permissions_policy/permissions_policy_parser.h
@@ -6,6 +6,7 @@ #define THIRD_PARTY_BLINK_RENDERER_CORE_PERMISSIONS_POLICY_PERMISSIONS_POLICY_PARSER_H_ #include "base/memory/scoped_refptr.h" +#include "third_party/blink/public/common/permissions_policy/origin_with_possible_wildcards.h" #include "third_party/blink/public/common/permissions_policy/permissions_policy.h" #include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/permissions_policy/policy_helper.h" @@ -56,11 +57,11 @@ String feature_name; Vector<String> allowlist; }; - enum NodeType { kHeader, kAttribute, kUnknown }; // We need to keep track of the source of the list of declarations as // different features (e.g., wildcards) might be active per-context. struct Node { - NodeType type{kUnknown}; + OriginWithPossibleWildcards::NodeType type{ + OriginWithPossibleWildcards::NodeType::kUnknown}; Vector<Declaration> declarations; };
diff --git a/third_party/blink/renderer/modules/manifest/manifest_parser.cc b/third_party/blink/renderer/modules/manifest/manifest_parser.cc index 8832a86..5ddd0b7 100644 --- a/third_party/blink/renderer/modules/manifest/manifest_parser.cc +++ b/third_party/blink/renderer/modules/manifest/manifest_parser.cc
@@ -14,6 +14,7 @@ #include "third_party/blink/public/common/manifest/manifest.h" #include "third_party/blink/public/common/manifest/manifest_util.h" #include "third_party/blink/public/common/mime_util/mime_util.h" +#include "third_party/blink/public/common/permissions_policy/origin_with_possible_wildcards.h" #include "third_party/blink/public/common/permissions_policy/permissions_policy.h" #include "third_party/blink/public/common/security/protocol_handler_security_level.h" #include "third_party/blink/public/mojom/manifest/manifest.mojom-blink-forward.h" @@ -1619,7 +1620,7 @@ Vector<blink::ParsedPermissionsPolicyDeclaration> ManifestParser::ParseIsolatedAppPermissions(const JSONObject* object) { PermissionsPolicyParser::Node policy{ - PermissionsPolicyParser::NodeType::kHeader}; + OriginWithPossibleWildcards::NodeType::kHeader}; JSONValue* json_value = object->Get("permissions_policy"); if (!json_value)
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json index 17a16ee..f80b0c54 100644 --- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json +++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
@@ -2549,6 +2549,13 @@ {} ] ], + "chrome-first-letter-inside-replaced-crash.html": [ + "cf9e2d71633e5c5c45ba458b394c986a21acc13d", + [ + null, + {} + ] + ], "file-selector-button-display-none-overflow-crash.html": [ "81051741c29824bb79460f6dba1b147b9e79de45", [ @@ -4096,6 +4103,13 @@ }, "fullscreen": { "crashtests": { + "backdrop-list-item.html": [ + "c5f58263ff354036525cc6f816d2007f48fb7397", + [ + null, + {} + ] + ], "chrome-1312699.html": [ "c783b0d9cc9634654f59654945a1bdcf38539cc8", [ @@ -12235,6 +12249,13 @@ {} ] ], + "local_FileSystemBaseHandle-getUniqueId-manual.https.html": [ + "32fc5ea103c265b9b258de573757359a263861e5", + [ + null, + {} + ] + ], "local_FileSystemBaseHandle-isSameEntry-manual.https.html": [ "6587bdf506eb7e8bfafe308efee26061f5b1e009", [ @@ -16062,6 +16083,32 @@ ] }, "css-multicol": { + "auto-fill-auto-size-001-print.html": [ + "6652fe18e9d41ea08b25b8436698c6149776e404", + [ + null, + [ + [ + "/css/css-multicol/auto-fill-auto-size-001-print-ref.html", + "==" + ] + ], + {} + ] + ], + "auto-fill-auto-size-002-print.html": [ + "4e0243212e14f65fbc5b7b6e1fe65591a240553c", + [ + null, + [ + [ + "/css/css-multicol/auto-fill-auto-size-002-print-ref.html", + "==" + ] + ], + {} + ] + ], "column-balancing-paged-001-print.html": [ "933519ab5b01ded09f1173c9e45a1692a65daa99", [ @@ -99738,6 +99785,19 @@ {} ] ], + "content-visibility-resize-observer-no-error.html": [ + "f323e606039e72a696d2de75eb0d43c7f9cab095", + [ + null, + [ + [ + "/css/css-contain/content-visibility/content-visibility-resize-observer-no-error-ref.html", + "==" + ] + ], + {} + ] + ], "content-visibility-video.html": [ "bed5954fe410cd4f21b7e06eb3c1abeaa62b7ca2", [ @@ -99751,7 +99811,7 @@ {} ] ], - "content-visibility-with-top-layer-000.tentative.html": [ + "content-visibility-with-top-layer-000.html": [ "0fb00894452600c9f95a3f0517b898fc5ddb9b75", [ null, @@ -99764,7 +99824,7 @@ {} ] ], - "content-visibility-with-top-layer-001.tentative.html": [ + "content-visibility-with-top-layer-001.html": [ "4487157cf0523ebb1dc3b105dacde6594630df7b", [ null, @@ -99777,7 +99837,7 @@ {} ] ], - "content-visibility-with-top-layer-002.tentative.html": [ + "content-visibility-with-top-layer-002.html": [ "f54c639d7b2465e8c296d62e438c28ff8f9a37a5", [ null, @@ -99790,7 +99850,7 @@ {} ] ], - "content-visibility-with-top-layer-003.tentative.html": [ + "content-visibility-with-top-layer-003.html": [ "4b410843cf21b8177b5a215170acff71f7e7f30b", [ null, @@ -99803,7 +99863,7 @@ {} ] ], - "content-visibility-with-top-layer-004.tentative.html": [ + "content-visibility-with-top-layer-004.html": [ "9a4c026ed31bf9a0a1bde60381c35732c0d30a25", [ null, @@ -114592,6 +114652,97 @@ {} ] ], + "col-wrap-011.html": [ + "9970d43d0cdc58e5b12f63bd0b397e5dac12fa75", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "col-wrap-012.html": [ + "a46ceea2ec495123ff05d0ffcbe5b2f5d5067a4d", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "col-wrap-013.html": [ + "d8eab3f1331d90611c4dc93acfd4fbb93470e7e0", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "col-wrap-014.html": [ + "5861d829b5822e236de2288ca7e0f3c1a3716cec", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "col-wrap-015.html": [ + "23b762f36a9b2bdbd74b740e67c95c68ab626b07", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "col-wrap-016.html": [ + "a013bbd3566b806e6038d619d0cb80e11b97a358", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "col-wrap-017.html": [ + "c7a64643bf1d4b3482334beaf2ca70c6dd9e7435", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], "row-001.html": [ "a681d07d58a15559cc6594fb045ff9c42c6981b8", [ @@ -144018,6 +144169,58 @@ {} ] ], + "multicol-nested-025.html": [ + "badc91e03f41c3fc01b1611cd0117dd95e864cf6", + [ + null, + [ + [ + "/css/reference/nothing.html", + "==" + ] + ], + {} + ] + ], + "multicol-nested-026.html": [ + "25371b70780b22d50b8b0cfd6b4c17c9f357243d", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "multicol-nested-027.html": [ + "02590d394aea57787e6a64ca9e7ad59c35cb8940", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "multicol-nested-028.html": [ + "cfd164f14ec2a0387b009edaf97d872fb34a34b6", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], "multicol-nested-column-rule-001.xht": [ "8fa8fdb7280083b538ce20b451f20d1c711335e5", [ @@ -255010,7 +255213,7 @@ [] ], "README.md": [ - "8d0f063db02e1950b2ea19cb8dfc59128e081dc2", + "027b606e85066d301eb68498f40b62ddc6835e05", [] ], "generate.py": [ @@ -255797,11 +256000,11 @@ ], "dispatcher": { "README.md": [ - "3bb2900c789ab688f5c279ea706bd331ed9055a0", + "cfaafb6e5d6496800afd40d04898bbbf946651ec", [] ], "dispatcher.js": [ - "7c51fa6af4232c8ea27215b5377f35831299ba79", + "4b9b18dad7799e0598201d05e17812b8195464cc", [] ], "dispatcher.py": [ @@ -255819,6 +256022,10 @@ "executor.html": [ "5fe6a95efaf97d82ba2d377dd1af5b2e8f54ee90", [] + ], + "remote-executor.html": [ + "8b0030390d0d196aa4bfc4ce70d6b6ade1915a10", + [] ] }, "domain-setter.sub.html": [ @@ -256599,10 +256806,6 @@ [] ], "support": { - "executor.html": [ - "4ab5745905b9bd5dd6419be039068aa19f3f9dd8", - [] - ], "frame.html": [ "50be42958744b8a9213d84847fbf0413ae20f3b6", [] @@ -270205,6 +270408,10 @@ "7958810b40ecc2837ecb13d419a577fab9643115", [] ], + "content-visibility-resize-observer-no-error-ref.html": [ + "228eebfaa6b6018dc60db090971f2f8176614a27", + [] + ], "content-visibility-video-ref.html": [ "5e1e9bdde841828cbd4fc3d6cc165305361f4f36", [] @@ -285906,6 +286113,14 @@ "c1322438b92872bc77a47ffc88242e61d39ca535", [] ], + "auto-fill-auto-size-001-print-ref.html": [ + "fcd9b7deff7043f17ab2e1a827d63f6e0925cecb", + [] + ], + "auto-fill-auto-size-002-print-ref.html": [ + "2ae0778d56bee499e73d0efc6912f34343070feb", + [] + ], "balance-grid-container-ref.html": [ "aa0ea5595d067d1c8bfc21f604ff2d662bef155a", [] @@ -293655,11 +293870,11 @@ [] ], "text-align-justifyall-ref-001.html": [ - "80ddf567adcdbf6574c4d9c2cefb92a3fbc322fd", + "e9d071ee99333b001eb67be4621b45cd0b5c2a2e", [] ], "text-align-justifyall-ref-002.html": [ - "93e0cf3aab4420765d194f9771e3d1fc7e824381", + "30160d43f78ec12bac904a6448b37ec4cc839c08", [] ], "text-align-last-wins-001-ref.html": [ @@ -311367,7 +311582,7 @@ }, "origin": { "assorted.window-expected.txt": [ - "6b30c4e43e6a70892310392dada07e458e588443", + "1c2da8742f2a7f567e614b507a7a6d1abde66c40", [] ], "resources": { @@ -311651,7 +311866,7 @@ [] ], "FileSystemDirectoryHandle-move.js": [ - "856c1f3293208e301d7095593f2e9f0297752659", + "ddaa61604439489cfca4332f7aeec35370d09536", [] ] } @@ -313040,6 +313255,10 @@ "15a0c2a3b579b308dfef01b0e1f9fa542641aaee", [] ], + "FileSystemBaseHandle-getUniqueId.js": [ + "d1240d8980c5d06d9357373137532df9bec19aa1", + [] + ], "FileSystemBaseHandle-isSameEntry.js": [ "e3b6d1891e1ec1bafbbeeac3652944c9c699638c", [] @@ -313250,7 +313469,7 @@ [] ], "generic-sensor-tests.js": [ - "da55e741bfccf69f978efb304910820f320b9f98", + "2f910806dfd498f49c5c75557f67f817396e68e9", [] ], "resources": { @@ -313354,7 +313573,7 @@ [] ], "GeolocationSensor.https-expected.txt": [ - "11f9fa8cff297402c3aff283c4b18bd4d7b73536", + "20cd8a1c0a8b2d2e569e356e1e4a98e466149c52", [] ], "GeolocationSensor_read.https-expected.txt": [ @@ -314166,7 +314385,7 @@ "remote-context-helper-tests": { "resources": { "test-helper.js": [ - "5f8e07711cbcaadece8fb40ea6219c258e52faf7", + "71cd87e55391f6f9d3868f3b13f4922703fbcd58", [] ], "test-script.js": [ @@ -315194,10 +315413,6 @@ "89bd268f9c73343f64648e91ed618c3e7096f567", [] ], - "executor.html": [ - "67b9783fec49518eea29b92e7810e9784be9e84b", - [] - ], "post-done-to-opener.html": [ "b47f0f274ef43148d3be418e2c0628a567f1c3c1", [] @@ -317905,6 +318120,10 @@ "e507846181d980fe045028b0aacd9e31600b3b89", [] ], + "dedicated-worker-supporting-revalidation.py": [ + "eef86d1c5561ff415ca62fd2c52866658c18ab4e", + [] + ], "dedicated-worker.js": [ "66f3cc3d413ec4f4ed3e92dd18081a59e2696734", [] @@ -318517,7 +318736,7 @@ }, "dom": { "aria-element-reflection-expected.txt": [ - "e5b83c9b8699969677fa64c45dcd10b5b396716e", + "8f79e66322a2bfc169a21d1d69dcab6ea4b042a1", [] ], "directionality": { @@ -332349,7 +332568,7 @@ ] }, "lint.ignore": [ - "46f50d00781bdbe202c484d6e0432f0cf4f0bbfc", + "8b1b7037a17be14efe3393ec4dc73223395ef823", [] ], "loading": { @@ -332654,7 +332873,7 @@ [] ], "Magnetometer.https-expected.txt": [ - "7ec2483a741db1d95f9c622e2ec560854380473c", + "fd4f82033f5e8b5ddb21cc4b1f0494804ed70780", [] ], "OWNERS": [ @@ -335196,10 +335415,6 @@ "4e5e1a000c9a67b7dbc591dd7d0abc5f279f363c", [] ], - "exec.html": [ - "67b9783fec49518eea29b92e7810e9784be9e84b", - [] - ], "performance-attribute-sender.html": [ "99f544690d331f8c172a3f54bd589a89eaa35716", [] @@ -335891,6 +336106,12 @@ "53099cadb254df0a4d087bc9dd75340b5ddb40fa", [] ], + "not-restored-reasons": { + "test-helper.js": [ + "26d2a3cd65b997c094365ee6e703ec6138655810", + [] + ] + }, "performanceobservers.js": [ "3f357374efdfc2245ee63ff54eb557291449f9db", [] @@ -336109,6 +336330,10 @@ "2cbb8a82c62040e24f809c816d6d35204de396df", [] ], + "permissions-policy-header-policy-allowed-for-malformed-wildcard.https.sub.html.sub.headers": [ + "cfb0f3f5aeed4f2dcf76b191c0896b12515bdf28", + [] + ], "permissions-policy-header-policy-allowed-for-self.https.sub.html.sub.headers": [ "ff7ae4135338e3e525f6f5e0bfe38865c16b30e1", [] @@ -336117,6 +336342,10 @@ "af08d49c2ed6ab950039c391f1b8a7af4f505830", [] ], + "permissions-policy-header-policy-allowed-for-wildcard.https.sub.html.sub.headers": [ + "cc492ecc92319a3881e595c472eec07467215b90", + [] + ], "permissions-policy-header-policy-declined.https.sub.html.sub.headers": [ "175e5465d20a42f1aed100a55fab670eaef7ab33", [] @@ -339431,7 +339660,7 @@ [] ], "generic_sensor_mocks.js": [ - "86904d18b12ea4f960ce91fd2f5f28cffdfbd290", + "bbc3973b407af8d895a2d9a70f8a0e9776001059", [] ], "generic_sensor_mocks.js.headers": [ @@ -348914,7 +349143,7 @@ [] ], "conftest.py": [ - "188f8ddbb5ef742b91c192775f3c9f7fd59aea7a", + "477e4617323c46932a98d94745f1692c1e667d91", [] ], "support": { @@ -348923,7 +349152,7 @@ [] ], "keys.py": [ - "34d3a5b125eb5a86761bf5a275172869b000bfb0", + "e835a6a596f8d52d691afff812c9dacc5012b9e0", [] ], "mouse.py": [ @@ -368429,7 +368658,7 @@ ] ], "AmbientLightSensor.https.html": [ - "7d23896a6488f3fdfef6809f552a06f03fe427a3", + "a8c65e4d3faf710bdc0064c5c968e1f486fe56ea", [ null, { @@ -378687,7 +378916,7 @@ ] ], "frame-src-cross-origin-same-document-navigation.window.js": [ - "a03a3108b16f67eec18d36e24c0b1df0d131268b", + "4c771935415c362bf736c1ceb43e46d9c987b882", [ "content-security-policy/frame-src/frame-src-cross-origin-same-document-navigation.window.html", { @@ -393506,6 +393735,27 @@ {} ] ], + "col-wrap-010.html": [ + "2458443f06595e9ad8ca47199559db156bc5d6cc", + [ + null, + {} + ] + ], + "col-wrap-018.html": [ + "755237fd0b703273b29f72778c28c6cebde559d1", + [ + null, + {} + ] + ], + "col-wrap-019.html": [ + "9da4d77cd12928cafef4418b0d8311b30dd2b1f9", + [ + null, + {} + ] + ], "row-005.html": [ "0f34c6fbdb400c35af723c8be56c22bbe1612e96", [ @@ -405087,6 +405337,13 @@ {} ] ], + "at-rule-in-declaration-list.html": [ + "f40975d27eadf436634491b4a158cee4f9c268ef", + [ + null, + {} + ] + ], "cdc-vs-ident-tokens.html": [ "02cfbe11ae906f50ec3498f554395b7ad495bd70", [ @@ -408341,7 +408598,7 @@ }, "word-spacing": { "word-spacing-computed-001.html": [ - "d51e351c1f88c79966ebb9713e043fd10250f7c8", + "a641fc23533ab58f5a698c9ac76ce586eb500d06", [ null, {} @@ -410297,6 +410554,13 @@ {} ] ], + "cssTransformComponent-2d-flattening.html": [ + "33fd7009cd749ed32d4ed87bbad7442f8591efc9", + [ + null, + {} + ] + ], "cssTransformComponent-toMatrix-relative-units.html": [ "432943b6da03c1ea6587587007cc9e778096db86", [ @@ -419204,7 +419468,7 @@ ] ], "AriaMixin-element-attributes.html": [ - "b8f14273b80c5a1445c06ab294adffb3324274c8", + "09e62b2d39c5e75879046c52f910a297b9e70c93", [ null, {} @@ -452309,7 +452573,7 @@ }, "origin": { "assorted.window.js": [ - "fc6dd1a02870e29f43531821a8958b59ed6cfc1d", + "423790dfb1e1cdbc1a98bc4f8faf235dfa1f0e84", [ "fetch/origin/assorted.window.html", { @@ -454201,6 +454465,47 @@ } ] ], + "FileSystemBaseHandle-getUniqueId.https.any.js": [ + "24ea20244cb02dde5b930f0eebbdfcd897e32325", + [ + "fs/FileSystemBaseHandle-getUniqueId.https.any.html", + { + "script_metadata": [ + [ + "script", + "resources/test-helpers.js" + ], + [ + "script", + "resources/sandboxed-fs-test-helpers.js" + ], + [ + "script", + "script-tests/FileSystemBaseHandle-getUniqueId.js" + ] + ] + } + ], + [ + "fs/FileSystemBaseHandle-getUniqueId.https.any.worker.html", + { + "script_metadata": [ + [ + "script", + "resources/test-helpers.js" + ], + [ + "script", + "resources/sandboxed-fs-test-helpers.js" + ], + [ + "script", + "script-tests/FileSystemBaseHandle-getUniqueId.js" + ] + ] + } + ] + ], "FileSystemBaseHandle-isSameEntry.https.any.js": [ "67d36dfae8ae05a4013af598ec72cda89f964628", [ @@ -460621,7 +460926,7 @@ }, "sandboxing": { "popup-from-initial-empty-sandboxed-document.window.js": [ - "e70a52ae8a1113fb013023a2802a5bea3b5608e8", + "1ae4fad0cbafe3ce59fcc60e98faf224e9f9dd46", [ "html/browsers/sandboxing/popup-from-initial-empty-sandboxed-document.window.html", { @@ -482771,6 +483076,13 @@ {} ] ], + "require-corp-worker-script-revalidation.html": [ + "74794967fb1ce72b494a48b80634151e045d25f2", + [ + null, + {} + ] + ], "require-corp.https.html": [ "d187e0f760129fac1034d8fd5220e05d7cf93202", [ @@ -484265,7 +484577,7 @@ ] ], "aria-element-reflection.html": [ - "742c01557dc8316bfc5758c8c88c20fe7bfe6fc0", + "991f7c7aa12d871ca8ae4742bc1e5a37b4c76f57", [ null, {} @@ -485634,14 +485946,14 @@ ] ], "selection-in-contentEditable-at-turning-designMode-on-off.tentative.html": [ - "9502196b8459fc53eb5086e0f3d0d6613024fc01", + "4ef9d9003d808ae092ee41f9ba52db0713e5e153", [ null, {} ] ], "user-interaction-editing-contenteditable.html": [ - "0a12b8c4f51f5c6a3935ed02f8173ea9c45453df", + "2e51109fa7abe71fb763b9b4beb11aac9b1e8ad9", [ null, {} @@ -496064,6 +496376,15 @@ {} ] ], + "details-keyboard-activation.html": [ + "a5534e24d1cea932acda65d27b801d463400ab8b", + [ + null, + { + "testdriver": true + } + ] + ], "details.html": [ "5ed14c53afc9371275917d460f5b9638ab9a091e", [ @@ -496785,7 +497106,7 @@ ] ], "popup-animation-corner-cases.tentative.html": [ - "e2298fc1752b546c705267c49083031d12bfd990", + "337346b211d3e89ad54f852c3d9471e3bdb146c8", [ null, {} @@ -496827,7 +497148,7 @@ ] ], "popup-events.tentative.html": [ - "441980177c38b38c5f1589e071a15ec33237bed1", + "cd24a83f6ee1a80c61b556607e8f9268783ccb39", [ null, {} @@ -496844,7 +497165,7 @@ ] ], "popup-invoking-attribute.tentative.html": [ - "b676eed54056c2c6b293fadc638e539827a19909", + "b281e1f4c06b1e78f4e62d1904a9cf5280005ffb", [ null, { @@ -496854,14 +497175,14 @@ ] ], "popup-light-dismiss-on-scroll.tentative.html": [ - "d48f1b4b63fe21e0c7d01e295c7a77dcc118358f", + "b5d09883325c42c89fb16c1466cedbc56e9b340e", [ null, {} ] ], "popup-light-dismiss.tentative.html": [ - "7cd95d8dc23ff63f539b9ab7389d8e5f92e714fe", + "8eca7a647a655144c63648729e0e47bb18a14336", [ null, { @@ -496901,7 +497222,7 @@ ] ], "popup-show-event.tentative.html": [ - "e4775ec49b453869b0c927e9c8cee6a861110a6d", + "88f6702d4de45a775a3075655a055729e7b4b99a", [ null, {} @@ -504756,6 +505077,28 @@ {} ] ], + "crbug-583445-regression.window.js": [ + "3809c2e081a543da4d79423122e4ae765d28dda8", + [ + "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/crbug-583445-regression.window.html", + { + "script_metadata": [ + [ + "script", + "/common/get-host-info.sub.js" + ], + [ + "script", + "/common/utils.js" + ], + [ + "script", + "/common/dispatcher/dispatcher.js" + ] + ] + } + ] + ], "custom-element.window.js": [ "1ad06b3d372c7fda351893da9e8a009d3134dfa6", [ @@ -520655,7 +520998,7 @@ ] ], "nested-unload-timing.html": [ - "8b677719e2bfdf24da646b9d854ba390e35e3902", + "1130fb684065f412bdee9ff6a5287e80bedb056c", [ null, { @@ -522820,8 +523163,46 @@ ] ], "not-restored-reasons": { + "performance-navigation-timing-bfcache-reasons-stay.window.js": [ + "47d965f2d488d180c12e47382c3d654ebe20dd49", + [ + "performance-timeline/not-restored-reasons/performance-navigation-timing-bfcache-reasons-stay.window.html", + { + "script_metadata": [ + [ + "title", + "RemoteContextHelper navigation using BFCache" + ], + [ + "script", + "./test-helper.js" + ], + [ + "script", + "/common/dispatcher/dispatcher.js" + ], + [ + "script", + "/common/get-host-info.sub.js" + ], + [ + "script", + "/common/utils.js" + ], + [ + "script", + "/html/browsers/browsing-the-web/remote-context-helper/resources/remote-context-helper.js" + ], + [ + "script", + "/websockets/constants.sub.js" + ] + ] + } + ] + ], "performance-navigation-timing-bfcache.window.js": [ - "a5646f492c73cab8d4e3bb09485fa453487315b3", + "1e7f6d882a5920f4abb17571438a2202636d79bd", [ "performance-timeline/not-restored-reasons/performance-navigation-timing-bfcache.window.html", { @@ -522832,6 +523213,10 @@ ], [ "script", + "./test-helper.js" + ], + [ + "script", "/common/dispatcher/dispatcher.js" ], [ @@ -522845,17 +523230,13 @@ [ "script", "/html/browsers/browsing-the-web/remote-context-helper/resources/remote-context-helper.js" - ], - [ - "script", - "/html/browsers/browsing-the-web/remote-context-helper-tests/resources/test-helper.js" ] ] } ] ], "performance-navigation-timing-cross-origin-bfcache.window.js": [ - "d49e13741ef4f8eb5e212f8f784860ed8afda2f2", + "c3ad64949295b4b43c1aec1946a5838467df4e6f", [ "performance-timeline/not-restored-reasons/performance-navigation-timing-cross-origin-bfcache.window.html", { @@ -522866,6 +523247,10 @@ ], [ "script", + "./test-helper.js" + ], + [ + "script", "/common/dispatcher/dispatcher.js" ], [ @@ -522882,10 +523267,6 @@ ], [ "script", - "/html/browsers/browsing-the-web/remote-context-helper-tests/resources/test-helper.js" - ], - [ - "script", "/websockets/constants.sub.js" ] ] @@ -522893,7 +523274,7 @@ ] ], "performance-navigation-timing-not-bfcached.window.js": [ - "12e02f2c5b5f9e549714e87bdb98861ef1a4b087", + "325425912cced2cf194c8cc5147ccdbdad28bf20", [ "performance-timeline/not-restored-reasons/performance-navigation-timing-not-bfcached.window.html", { @@ -522904,6 +523285,10 @@ ], [ "script", + "./test-helper.js" + ], + [ + "script", "/common/dispatcher/dispatcher.js" ], [ @@ -522920,10 +523305,6 @@ ], [ "script", - "/html/browsers/browsing-the-web/remote-context-helper-tests/resources/test-helper.js" - ], - [ - "script", "/websockets/constants.sub.js" ] ] @@ -522931,7 +523312,7 @@ ] ], "performance-navigation-timing-same-origin-bfcache.window.js": [ - "6d1413ff58d1192c6602463cf2d0fc552cf9c798", + "108fc9d2ea384700ff76106e7758cc423ef52567", [ "performance-timeline/not-restored-reasons/performance-navigation-timing-same-origin-bfcache.window.html", { @@ -522942,6 +523323,10 @@ ], [ "script", + "./test-helper.js" + ], + [ + "script", "/common/dispatcher/dispatcher.js" ], [ @@ -522958,10 +523343,6 @@ ], [ "script", - "/html/browsers/browsing-the-web/remote-context-helper-tests/resources/test-helper.js" - ], - [ - "script", "/websockets/constants.sub.js" ] ] @@ -523746,6 +524127,13 @@ {} ] ], + "permissions-policy-header-policy-allowed-for-malformed-wildcard.https.sub.html": [ + "daa47efb679dd0d24321b424447d0089e647f326", + [ + null, + {} + ] + ], "permissions-policy-header-policy-allowed-for-self.https.sub.html": [ "dba317e64e441fe5da5f6f6a79576cbf89ef27bb", [ @@ -523760,6 +524148,13 @@ {} ] ], + "permissions-policy-header-policy-allowed-for-wildcard.https.sub.html": [ + "713d697e64a6491b798ecd9ef8d1102169c6fb39", + [ + null, + {} + ] + ], "permissions-policy-header-policy-declined.https.sub.html": [ "247f23893ba09cbe2639c4df01aa70b4fa553595", [ @@ -545122,7 +545517,7 @@ ] ], "cache-put.https.any.js": [ - "15aadc96f3571c022ba77a07b0482be29506a0dc", + "e4675d96afc100c7ada8a42bb0a8887cb73254cb", [ "service-workers/cache-storage/cache-put.https.any.html", { @@ -549682,7 +550077,7 @@ ] ], "out-of-document-rule-set.https.html": [ - "6b437fa9c04bdf18cfcafc20fd0ad8e9a216f87c", + "9f2c311715a8a3d9b5ff129809e57dbfe80dceb6", [ "speculation-rules/prefetch/out-of-document-rule-set.https.html?include=BaseCase", {} @@ -549708,6 +550103,10 @@ {} ], [ + "speculation-rules/prefetch/out-of-document-rule-set.https.html?include=InnerListInSpeculationRulesHeader", + {} + ], + [ "speculation-rules/prefetch/out-of-document-rule-set.https.html?include=InvalidMimeType", {} ], @@ -559161,6 +559560,13 @@ {} ] ], + "trusted-types-duplicate-names-without-enforcement.tentative.html": [ + "afef457a9c2328c69c9856a045a94613629a44f7", + [ + null, + {} + ] + ], "trusted-types-duplicate-names.tentative.html": [ "decce5356467f9f4e6a8886c6b6eff7194bf2385", [ @@ -614181,7 +614587,7 @@ ] ], "key_shortcuts.py": [ - "31b533ac8504108037ecccb76de2d089c1ad2a58", + "b5ad7a21739ef1e3e62394b86ad29cb054d21500", [ null, {} @@ -614289,7 +614695,7 @@ ] ], "validity.py": [ - "9e4b85737b0fd8c240cf40e637754e5c0bfac1ad", + "9c056b197d25808864e36dd7a58040a0dbff4abc", [ null, {}
diff --git a/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-with-top-layer-000.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-with-top-layer-000.html similarity index 100% rename from third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-with-top-layer-000.tentative.html rename to third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-with-top-layer-000.html
diff --git a/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-with-top-layer-001.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-with-top-layer-001.html similarity index 100% rename from third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-with-top-layer-001.tentative.html rename to third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-with-top-layer-001.html
diff --git a/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-with-top-layer-002.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-with-top-layer-002.html similarity index 100% rename from third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-with-top-layer-002.tentative.html rename to third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-with-top-layer-002.html
diff --git a/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-with-top-layer-003.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-with-top-layer-003.html similarity index 100% rename from third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-with-top-layer-003.tentative.html rename to third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-with-top-layer-003.html
diff --git a/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-with-top-layer-004.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-with-top-layer-004.html similarity index 100% rename from third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-with-top-layer-004.tentative.html rename to third_party/blink/web_tests/external/wpt/css/css-contain/content-visibility/content-visibility-with-top-layer-004.html
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-align/reference/text-align-justifyall-ref-001.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-align/reference/text-align-justifyall-ref-001.html index 80ddf56..e9d071e 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-text/text-align/reference/text-align-justifyall-ref-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-align/reference/text-align-justifyall-ref-001.html
@@ -1,24 +1,18 @@ <!DOCTYPE html> -<html lang="en" > +<html lang="en"> <head> <meta charset="utf-8"> <title>text-align: justify-all, direction: rtl</title> <link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> -<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> <style type='text/css'> -.test, .ref { border: 1px solid orange; margin: 20px; width: 402px; color: orange; font: 24px/24px Ahem; } -.ref { text-align: right; position: relative; height:72px; } -.rb { position: absolute; background-color: orange; width: 72px; } -.rb1 { top: 0; left: 0; height: 72px; } -.rb2 { top: 0; left: 110px; height: 48px; } -.rb3 { top: 0; left: 220px; height: 48px; } -.rb4 { top: 0; left: 330px; height: 72px; } -.rb5 { top: 48px; left: 165px; height: 24px; } +.ref { border: 1px solid orange; margin: 20px; width: 510px; color: orange; font: 30px/1 Ahem; word-spacing: 20px; } +div.last-line { word-spacing: 90px; } </style> </head> <body> <div id='instructions'>Test passes if the shading in both orange boxes is identical.</div> -<div class="ref"><div class="rb rb1"></div><div class="rb rb2"></div><div class="rb rb3"></div><div class="rb rb4"></div><div class="rb rb5"></div></div> -<div class="ref"><div class="rb rb1"></div><div class="rb rb2"></div><div class="rb rb3"></div><div class="rb rb4"></div><div class="rb rb5"></div></div> +<div class="ref"><div>REF REF REF REF</div><div>REF REF REF REF</div><div class="last-line">REF REF REF </div></div> +<div class="ref"><div>REF REF REF REF</div><div>REF REF REF REF</div><div class="last-line">REF REF REF </div></div> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-align/reference/text-align-justifyall-ref-002.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-align/reference/text-align-justifyall-ref-002.html index 93e0cf3a..30160d4 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-text/text-align/reference/text-align-justifyall-ref-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-align/reference/text-align-justifyall-ref-002.html
@@ -1,26 +1,20 @@ <!DOCTYPE html> -<html lang="en" > +<html lang="en"> <head> <meta charset="utf-8"> <title>text-align: justify-all, direction: ltr</title> <link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> -<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> <style type='text/css'> -.test, .ref { border: 1px solid orange; margin: 20px; width: 402px; color: orange; font: 24px/24px Ahem; } -.ref { text-align: right; position: relative; height:72px; } -.rb { position: absolute; background-color: orange; width: 72px; } -.rb1 { top: 0; right: 0; height: 72px; } -.rb2 { top: 0; right: 110px; height: 48px; } -.rb3 { top: 0; right: 220px; height: 48px; } -.rb4 { top: 0; right: 330px; height: 72px; } -.rb5 { top: 48px; left: 165px; height: 24px; } +.ref { border: 1px solid orange; margin: 20px; width: 510px; color: orange; font: 30px/1 Ahem; word-spacing: 20px; } +div.last-line { word-spacing: 90px; } </style> </head> <body> <div id='instructions'>Test passes if the shading in both orange boxes is identical.</div> <div style="direction: rtl;"> -<div class="ref"><div class="rb rb1"></div><div class="rb rb2"></div><div class="rb rb3"></div><div class="rb rb4"></div><div class="rb rb5"></div></div> -<div class="ref"><div class="rb rb1"></div><div class="rb rb2"></div><div class="rb rb3"></div><div class="rb rb4"></div><div class="rb rb5"></div></div> +<div class="ref"><div>REF REF REF REF</div><div>REF REF REF REF</div><div class="last-line">REF REF REF </div></div> +<div class="ref"><div>REF REF REF REF</div><div>REF REF REF REF</div><div class="last-line">REF REF REF </div></div> </div> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/word-spacing/word-spacing-computed-001.html b/third_party/blink/web_tests/external/wpt/css/css-text/word-spacing/word-spacing-computed-001.html index d51e351..a641fc2 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-text/word-spacing/word-spacing-computed-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-text/word-spacing/word-spacing-computed-001.html
@@ -7,7 +7,7 @@ <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> <link rel="help" href="https://www.w3.org/TR/css-text-3/#word-spacing-property"> - <meta content="This test checks that the computed value of 'normal' for the property word-spacing is zero. We also check the computed value of various <length>." name="assert"> + <meta content="This test checks that the computed value of 'normal' for the property word-spacing is '0px'. We also check the computed value of various <length>." name="assert"> <script src="/resources/testharness.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-typed-om/stylevalue-subclasses/cssTransformComponent-2d-flattening.html b/third_party/blink/web_tests/external/wpt/css/css-typed-om/stylevalue-subclasses/cssTransformComponent-2d-flattening.html new file mode 100644 index 0000000..33fd700 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-typed-om/stylevalue-subclasses/cssTransformComponent-2d-flattening.html
@@ -0,0 +1,47 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSSTransformComponent 2d flattening</title> +<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-csstransformcomponent-tomatrix"> +<meta name="assert" content="Test CSSTransformComponent.toMatrix handles 2d flattening" /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../resources/testhelper.js"></script> +<script> +'use strict'; + +const gEpsilon = 1e-6; + +test(() => { + const translate = new CSSTranslate(CSS.px(1), CSS.px(1), CSS.px(1)); + translate.is2D = true; + const expectedTranslate = new DOMMatrix(); + expectedTranslate.translateSelf(1, 1); + assert_matrix_approx_equals(translate.toMatrix(), expectedTranslate, gEpsilon); +}, 'CSSTranslate.toMatrix() flattens when told it is 2d'); + +test(() => { + const rotate = new CSSRotate(1, 2, 3, CSS.deg(90)); + rotate.is2D = true; + const expectedRotate = new DOMMatrix(); + expectedRotate.rotateSelf(90); + assert_matrix_approx_equals(rotate.toMatrix(), expectedRotate, gEpsilon); +}, 'CSSRotate.toMatrix() flattens when told it is 2d'); + +test(() => { + const scale = new CSSScale(2, 3, 2); + scale.is2D = true; + const expectedScale = new DOMMatrix(); + expectedScale.scaleSelf(2, 3); + assert_matrix_approx_equals(scale.toMatrix(), expectedScale, gEpsilon); +}, 'CSSScale.toMatrix() flattens when told it is 2d'); + +test(() => { + const transformMatrix = new DOMMatrixReadOnly([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]); + const matrixComponent = new CSSMatrixComponent(transformMatrix); + matrixComponent.is2D = true; + const expectedMatrix = new DOMMatrix(); + expectedMatrix.multiplySelf(new DOMMatrixReadOnly([1, 2, 5, 6, 13, 14])); + assert_matrix_approx_equals(matrixComponent.toMatrix(), expectedMatrix, gEpsilon); +}, 'CSSMatrixComponent.toMatrix() flattens when told it is 2d'); + +</script>
diff --git a/third_party/blink/web_tests/external/wpt/feature-policy/OWNERS b/third_party/blink/web_tests/external/wpt/feature-policy/OWNERS index 7f44d1b..8a638a4 100644 --- a/third_party/blink/web_tests/external/wpt/feature-policy/OWNERS +++ b/third_party/blink/web_tests/external/wpt/feature-policy/OWNERS
@@ -1 +1,2 @@ +arichiv@chromium.org iclelland@chromium.org
diff --git a/third_party/blink/web_tests/external/wpt/feature-policy/feature-policy-header-policy-allowed-for-all.https.sub.html b/third_party/blink/web_tests/external/wpt/feature-policy/feature-policy-header-policy-allowed-for-all.https.sub.html index bfbdd6a..a036859 100644 --- a/third_party/blink/web_tests/external/wpt/feature-policy/feature-policy-header-policy-allowed-for-all.https.sub.html +++ b/third_party/blink/web_tests/external/wpt/feature-policy/feature-policy-header-policy-allowed-for-all.https.sub.html
@@ -28,22 +28,34 @@ // Test that fullscreen is not allowed on cross-origin subframes without an // allow attribute. test_disallowed_feature_for_subframe( - header_policy + ' -- test fullscreen is allowed on cross-origin subframe', + header_policy + ' -- test fullscreen is disallowed on cross-origin subframe', 'fullscreen', cross_origin_src); - // Dynamically update sub frame's container policy + // Dynamically update sub frame's container policy to self var allow = "fullscreen 'self';" test_allowed_feature_for_subframe( header_policy + ', iframe.allow = ' + allow + ' -- test fullscreen is allowed on same-origin subframe', 'fullscreen', same_origin_src, allow); - test_disallowed_feature_for_subframe( header_policy + ', iframe.allow = ' + allow + ' -- test fullscreen is disallowed on cross-origin subframe', 'fullscreen', cross_origin_src, allow); + + // Dynamically update sub frame's container policy to src + var allow = "fullscreen 'src';" + test_allowed_feature_for_subframe( + header_policy + ', iframe.allow = ' + allow + ' -- test fullscreen is allowed on same-origin subframe', + 'fullscreen', + same_origin_src, + allow); + test_allowed_feature_for_subframe( + header_policy + ', iframe.allow = ' + allow + ' -- test fullscreen is allowed on cross-origin subframe', + 'fullscreen', + cross_origin_src, + allow); </script> </body>
diff --git a/third_party/blink/web_tests/external/wpt/feature-policy/feature-policy-header-policy-allowed-for-self.https.sub.html b/third_party/blink/web_tests/external/wpt/feature-policy/feature-policy-header-policy-allowed-for-self.https.sub.html index 8641746e..b6fbdd2c 100644 --- a/third_party/blink/web_tests/external/wpt/feature-policy/feature-policy-header-policy-allowed-for-self.https.sub.html +++ b/third_party/blink/web_tests/external/wpt/feature-policy/feature-policy-header-policy-allowed-for-self.https.sub.html
@@ -36,11 +36,10 @@ 'fullscreen', same_origin_src, allow); - - test_allowed_feature_for_subframe( - header_policy + ', iframe.allow = ' + allow + ' -- test fullscreen is allowed on cross-origin subframe', + test_disallowed_feature_for_subframe( + header_policy + ', iframe.allow = ' + allow + ' -- test fullscreen is disallowed on cross-origin subframe', 'fullscreen', - same_origin_src, + cross_origin_src, allow); </script> </body>
diff --git a/third_party/blink/web_tests/external/wpt/feature-policy/feature-policy-header-policy-allowed-for-some.https.sub.html b/third_party/blink/web_tests/external/wpt/feature-policy/feature-policy-header-policy-allowed-for-some.https.sub.html index d89ccef5..5eda8ba 100644 --- a/third_party/blink/web_tests/external/wpt/feature-policy/feature-policy-header-policy-allowed-for-some.https.sub.html +++ b/third_party/blink/web_tests/external/wpt/feature-policy/feature-policy-header-policy-allowed-for-some.https.sub.html
@@ -8,8 +8,10 @@ 'use strict'; var same_origin = 'https://{{domains[]}}:{{ports[https][0]}}'; var cross_origin = 'https://{{domains[www]}}:{{ports[https][0]}}'; + var cross_origin1 = 'https://{{domains[www1]}}:{{ports[https][0]}}'; var same_origin_src = '/feature-policy/resources/feature-policy-allowedfeatures.html'; var cross_origin_src = cross_origin + same_origin_src; + var cross_origin_src1 = cross_origin1 + same_origin_src; var header_policy = 'Feature-Policy: fullscreen \'self\' ' + cross_origin + ' https://www.example.com;'; @@ -27,27 +29,48 @@ 'fullscreen', same_origin_src); test_disallowed_feature_for_subframe( - header_policy + ' -- test fullscreen is allowed on cross-origin ' + cross_origin_src + ' subframe', + header_policy + ' -- test fullscreen is disallowed on cross-origin ' + cross_origin_src + ' subframe', 'fullscreen', cross_origin_src); - var cross_origin_src1 = 'https://{{domains[www1]}}:{{ports[https][0]}}' + same_origin_src; test_disallowed_feature_for_subframe( header_policy + ' -- test fullscreen is disallowed on cross-origin ' + cross_origin_src1 + ' subframe', 'fullscreen', cross_origin_src1); - // dynamically update sub frame's container policy + // dynamically update sub frame's container policy to none var allow = "fullscreen 'none';" test_disallowed_feature_for_subframe( header_policy + ', iframe.allow = ' + allow + ' -- test fullscreen is disallowed on same-origin subframe', 'fullscreen', same_origin_src, allow); - test_disallowed_feature_for_subframe( header_policy + 'iframe.allow = ' + allow + ' -- test fullscreen is disallowed on cross-origin subframe', 'fullscreen', cross_origin_src, allow); + test_disallowed_feature_for_subframe( + header_policy + 'iframe.allow = ' + allow + ' -- test fullscreen is disallowed on another cross-origin subframe', + 'fullscreen', + cross_origin_src1, + allow); + + // dynamically update sub frame's container policy to src + var allow = "fullscreen 'src';" + test_allowed_feature_for_subframe( + header_policy + ', iframe.allow = ' + allow + ' -- test fullscreen is allowed on same-origin subframe', + 'fullscreen', + same_origin_src, + allow); + test_allowed_feature_for_subframe( + header_policy + 'iframe.allow = ' + allow + ' -- test fullscreen is allowed on cross-origin subframe', + 'fullscreen', + cross_origin_src, + allow); + test_disallowed_feature_for_subframe( + header_policy + 'iframe.allow = ' + allow + ' -- test fullscreen is disallowed on another cross-origin subframe', + 'fullscreen', + cross_origin_src1, + allow); </script> </body>
diff --git a/third_party/blink/web_tests/external/wpt/feature-policy/feature-policy-header-policy-declined.https.sub.html b/third_party/blink/web_tests/external/wpt/feature-policy/feature-policy-header-policy-declined.https.sub.html index ebe09ec..17378e3e1 100644 --- a/third_party/blink/web_tests/external/wpt/feature-policy/feature-policy-header-policy-declined.https.sub.html +++ b/third_party/blink/web_tests/external/wpt/feature-policy/feature-policy-header-policy-declined.https.sub.html
@@ -8,8 +8,10 @@ 'use strict'; var same_origin = 'https://{{domains[]}}:{{ports[https][0]}}'; var cross_origin = 'https://{{domains[www]}}:{{ports[https][0]}}'; + var cross_origin1 = 'https://{{domains[www1]}}:{{ports[https][0]}}'; var same_origin_src = '/feature-policy/resources/feature-policy-allowedfeatures.html'; var cross_origin_src = cross_origin + same_origin_src; + var cross_origin_src1 = cross_origin1 + same_origin_src; var header_policy = 'Feature-Policy: fullscreen \'self\' ' + cross_origin + ' https://www.example.com;'; @@ -22,45 +24,52 @@ // Test that fullscreen is disallowed everywhere. test_disallowed_feature_for_subframe( - header_policy + ' -- test fullscreen is allowed on same-origin subframe', + header_policy + ' -- test fullscreen is disallowed on same-origin subframe', 'fullscreen', same_origin_src); test_disallowed_feature_for_subframe( - header_policy + ' -- test fullscreen is allowed on cross-origin ' + cross_origin_src + ' subframe', + header_policy + ' -- test fullscreen is disallowed on cross-origin ' + cross_origin_src + ' subframe', 'fullscreen', cross_origin_src); - var cross_origin_src1 = 'https://{{domains[www1]}}:{{ports[https][0]}}' + same_origin_src; test_disallowed_feature_for_subframe( header_policy + ' -- test fullscreen is disallowed on cross-origin ' + cross_origin_src1 + ' subframe', 'fullscreen', cross_origin_src1); - // dynamically update sub frame's container policy; fullscreen will still not - // be allowed. + // dynamically update sub frame's container policy to none var disallow = "fullscreen 'none';" test_disallowed_feature_for_subframe( header_policy + ', iframe.allow = ' + disallow + ' -- test fullscreen is disallowed on same-origin subframe', 'fullscreen', same_origin_src, disallow); - test_disallowed_feature_for_subframe( - header_policy + 'iframe.allow = ' + disallow + ' -- test fullscreen is allowed on specific cross-origin subframe', + header_policy + 'iframe.allow = ' + disallow + ' -- test fullscreen is disallowed on specific cross-origin subframe', 'fullscreen', cross_origin_src, disallow); + test_disallowed_feature_for_subframe( + header_policy + 'iframe.allow = ' + disallow + ' -- test fullscreen is disallowed on another cross-origin subframe', + 'fullscreen', + cross_origin_src1, + disallow); + // dynamically update sub frame's container policy to cross_origin var allow = "fullscreen " + cross_origin; test_disallowed_feature_for_subframe( header_policy + ', iframe.allow = ' + allow + ' -- test fullscreen is disallowed on same-origin subframe', 'fullscreen', same_origin_src, allow); - test_disallowed_feature_for_subframe( - header_policy + 'iframe.allow = ' + allow + ' -- test fullscreen is allowed on specific cross-origin subframe', + header_policy + 'iframe.allow = ' + allow + ' -- test fullscreen is disallowed on specific cross-origin subframe', 'fullscreen', cross_origin_src, allow); + test_disallowed_feature_for_subframe( + header_policy + 'iframe.allow = ' + allow + ' -- test fullscreen is disallowed on another cross-origin subframe', + 'fullscreen', + cross_origin_src1, + allow); </script> </body>
diff --git a/third_party/blink/web_tests/external/wpt/feature-policy/feature-policy-header-policy-disallowed-for-all.https.sub.html b/third_party/blink/web_tests/external/wpt/feature-policy/feature-policy-header-policy-disallowed-for-all.https.sub.html index 971af0f..936f2619 100644 --- a/third_party/blink/web_tests/external/wpt/feature-policy/feature-policy-header-policy-disallowed-for-all.https.sub.html +++ b/third_party/blink/web_tests/external/wpt/feature-policy/feature-policy-header-policy-disallowed-for-all.https.sub.html
@@ -37,7 +37,6 @@ 'fullscreen', same_origin_src, allow); - test_disallowed_feature_for_subframe( header_policy + ', iframe.allow = ' + allow + ' -- test fullscreen is disallowed on cross-origin subframe', 'fullscreen',
diff --git a/third_party/blink/web_tests/external/wpt/feature-policy/permissions-policy-header-policy-allowed-for-self.https.sub.html b/third_party/blink/web_tests/external/wpt/feature-policy/permissions-policy-header-policy-allowed-for-self.https.sub.html index 5c4c656..32df2b7 100644 --- a/third_party/blink/web_tests/external/wpt/feature-policy/permissions-policy-header-policy-allowed-for-self.https.sub.html +++ b/third_party/blink/web_tests/external/wpt/feature-policy/permissions-policy-header-policy-allowed-for-self.https.sub.html
@@ -36,11 +36,10 @@ 'fullscreen', same_origin_src, allow); - - test_allowed_feature_for_subframe( - header_policy + ', iframe.allow = ' + allow + ' -- test fullscreen is allowed on cross-origin subframe', + test_disallowed_feature_for_subframe( + header_policy + ', iframe.allow = ' + allow + ' -- test fullscreen is disallowed on cross-origin subframe', 'fullscreen', - same_origin_src, + cross_origin_src, allow); </script> </body>
diff --git a/third_party/blink/web_tests/external/wpt/fetch/origin/assorted.window-expected.txt b/third_party/blink/web_tests/external/wpt/fetch/origin/assorted.window-expected.txt index 6b30c4e4..1c2da87 100644 --- a/third_party/blink/web_tests/external/wpt/fetch/origin/assorted.window-expected.txt +++ b/third_party/blink/web_tests/external/wpt/fetch/origin/assorted.window-expected.txt
@@ -4,7 +4,7 @@ PASS Origin header and POST navigation PASS Origin header and POST same-origin navigation with Referrer-Policy no-referrer FAIL Origin header and POST same-origin fetch no-cors mode with Referrer-Policy no-referrer assert_equals: expected "null" but got "http://web-platform.test:8001" -FAIL Origin header and POST same-origin fetch cors mode with Referrer-Policy no-referrer assert_equals: expected "null" but got "http://web-platform.test:8001" +PASS Origin header and POST same-origin fetch cors mode with Referrer-Policy no-referrer PASS Origin header and GET same-origin fetch cors mode with Referrer-Policy no-referrer PASS Origin header and POST cross-origin navigation with Referrer-Policy no-referrer FAIL Origin header and POST cross-origin fetch no-cors mode with Referrer-Policy no-referrer assert_equals: expected "null" but got "http://web-platform.test:8001"
diff --git a/third_party/blink/web_tests/external/wpt/fetch/origin/assorted.window.js b/third_party/blink/web_tests/external/wpt/fetch/origin/assorted.window.js index fc6dd1a..423790d 100644 --- a/third_party/blink/web_tests/external/wpt/fetch/origin/assorted.window.js +++ b/third_party/blink/web_tests/external/wpt/fetch/origin/assorted.window.js
@@ -194,7 +194,7 @@ promise_test(fetchReferrerPolicy(testObj.policy, destination.name, "cors", - (destination.name == "same-origin") ? destination.expectedOrigin : origins.HTTP_ORIGIN, + origins.HTTP_ORIGIN, "POST"), referrerPolicyTestString(testObj.policy, "POST", destination.name + " fetch cors mode"));
diff --git a/third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemDirectoryHandle-move.js b/third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemDirectoryHandle-move.js index 856c1f32..ddaa616 100644 --- a/third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemDirectoryHandle-move.js +++ b/third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemDirectoryHandle-move.js
@@ -198,10 +198,32 @@ directory_test(async (t, root) => { const handle = await createFileWithContents(t, 'file-before', 'foo', root); - await promise_rejects_js( - t, TypeError, handle.move(root, '#$23423@352^*3243')); + const valid_name = '#$23423@352^*3243'; + await handle.move(root, valid_name); - assert_array_equals(await getSortedDirectoryEntries(root), ['file-before']); + assert_array_equals(await getSortedDirectoryEntries(root), [valid_name]); + assert_equals(await getFileContents(handle), 'foo'); + assert_equals(await getFileSize(handle), 3); + + const contains_invalid_characters = '/file\\'; + await promise_rejects_js( + t, TypeError, handle.move(root, contains_invalid_characters)); + + assert_array_equals(await getSortedDirectoryEntries(root), [valid_name]); + assert_equals(await getFileContents(handle), 'foo'); + assert_equals(await getFileSize(handle), 3); + + const empty_name = ''; + await promise_rejects_js(t, TypeError, handle.move(root, empty_name)); + + assert_array_equals(await getSortedDirectoryEntries(root), [valid_name]); + assert_equals(await getFileContents(handle), 'foo'); + assert_equals(await getFileSize(handle), 3); + + const banned_name = '..'; + await promise_rejects_js(t, TypeError, handle.move(root, banned_name)); + + assert_array_equals(await getSortedDirectoryEntries(root), [valid_name]); assert_equals(await getFileContents(handle), 'foo'); assert_equals(await getFileSize(handle), 3); }, 'move(dir, name) with a name with invalid characters should fail');
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/require-corp-worker-script-revalidation.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/require-corp-worker-script-revalidation.html new file mode 100644 index 0000000..74794967 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/require-corp-worker-script-revalidation.html
@@ -0,0 +1,25 @@ +<!doctype html> +<title>COEP and dedicated worker</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="resources/worker-support.js"></script> +<body> +<script> + +promise_test(async (t) => { + const worker1 = new Worker("/html/cross-origin-embedder-policy/resources/dedicated-worker-supporting-revalidation.py"); + worker1.onerror = t.unreached_func('Worker.onerror should not be called for first worker'); + worker1.postMessage("foo"); + const result1 = await waitForMessage(worker1); + assert_equals(result1.data, 'LOADED'); + + // Load the worker a second time, which should trigger revalidation of the cached resource. + const worker2 = new Worker("/html/cross-origin-embedder-policy/resources/dedicated-worker-supporting-revalidation.py"); + worker2.onerror = t.unreached_func('Worker.onerror should not be called worker second worker'); + worker2.postMessage("foo"); + const result2 = await waitForMessage(worker2); + assert_equals(result2.data, 'LOADED'); +}, 'COEP: require-corp with revalidated worker script'); +</script> +</body>
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/resources/dedicated-worker-supporting-revalidation.py b/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/resources/dedicated-worker-supporting-revalidation.py new file mode 100755 index 0000000..eef86d1 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/resources/dedicated-worker-supporting-revalidation.py
@@ -0,0 +1,15 @@ +#!/usr/bin/env python + + +def main(request, response): + headers = [] + if request.headers.get(b'if-none-match', None): + status = 304, u"Not Modified" + return status, headers, u"" + else: + headers.append((b"Content-Type", b"text/javascript")) + headers.append((b"Cross-Origin-Embedder-Policy", b"require-corp")) + headers.append((b"Cache-Control", b"private, max-age=0, must-revalidate")) + headers.append((b"ETag", b"abcdef")) + status = 200, u"OK" + return status, headers, u"self.onmessage = (e) => { self.postMessage('LOADED'); };"
diff --git a/third_party/blink/web_tests/external/wpt/html/editing/editing-0/contenteditable/selection-in-contentEditable-at-turning-designMode-on-off.tentative.html b/third_party/blink/web_tests/external/wpt/html/editing/editing-0/contenteditable/selection-in-contentEditable-at-turning-designMode-on-off.tentative.html index 9502196..4ef9d900 100644 --- a/third_party/blink/web_tests/external/wpt/html/editing/editing-0/contenteditable/selection-in-contentEditable-at-turning-designMode-on-off.tentative.html +++ b/third_party/blink/web_tests/external/wpt/html/editing/editing-0/contenteditable/selection-in-contentEditable-at-turning-designMode-on-off.tentative.html
@@ -1,6 +1,6 @@ <!DOCTYPE html> <meta charset=utf-8> -<title>selection in contenteditable should not be changed when designMode is turned on/of</title> +<title>selection in contenteditable should not be changed when designMode is turned on/off</title> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <div id="log"></div>
diff --git a/third_party/blink/web_tests/external/wpt/html/editing/editing-0/contenteditable/user-interaction-editing-contenteditable.html b/third_party/blink/web_tests/external/wpt/html/editing/editing-0/contenteditable/user-interaction-editing-contenteditable.html index 0a12b8c..2e51109 100644 --- a/third_party/blink/web_tests/external/wpt/html/editing/editing-0/contenteditable/user-interaction-editing-contenteditable.html +++ b/third_party/blink/web_tests/external/wpt/html/editing/editing-0/contenteditable/user-interaction-editing-contenteditable.html
@@ -12,217 +12,47 @@ <div id="log"></div> </head> <body> - <script type="text/javascript"> - test(function() { - const testElement = document.createElement("testElement"); + <script> + function testContentEditable(variationFunc, title, expectIsContentEditable, expectContentEditable) { + test(() => { + const div = document.createElement("div"); + variationFunc(div); + assert_equals(div.isContentEditable, expectIsContentEditable, 'isContentEditable'); + assert_equals(div.contentEditable, expectContentEditable, 'contentEditable'); + }, title); + } - assert_equals( - testElement.contentEditable, - "inherit", - "check for testElement.contentEditable value" - ); - }, "no contentEditable attribute"); + testContentEditable(el => { + }, "no contenteditable attribute", false, "inherit"); - test(function() { - const testElement = document.createElement("testElement"); - testElement.setAttribute("contentEditable", ""); + testContentEditable(el => { + el.setAttribute("contenteditable", ""); + }, "empty contentEditable attribute", true, "true"); - assert_true( - testElement.isContentEditable, - "check for testElement.isContentEditable value" - ); + testContentEditable(el => { + el.contentEditable = "true"; + }, 'set contentEditable = "true"', true, "true"); - assert_equals( - testElement.contentEditable, - "true", - "check for testElement.contentEditable value" - ); - }, "empty contentEditable attribute"); + testContentEditable(el => { + el.contentEditable = "false"; + }, 'set contentEditable = "false"', false, "false"); - test(function() { - const testElement = document.createElement("testElement"); - testElement.contentEditable = "true"; + testContentEditable(el => { + const parent = document.createElement("div"); + parent.appendChild(el); + parent.contentEditable = "true"; + }, 'set parent element contentEditable = "true"', true, "inherit"); - assert_true( - testElement.isContentEditable, - "check for testElement.isContentEditable value" - ); + testContentEditable(el => { + const parent = document.createElement("div"); + parent.appendChild(el); + parent.contentEditable = "false"; + }, 'set parent element contentEditable = "false"', false, "inherit"); - assert_equals( - testElement.contentEditable, - "true", - "check for testElement.contentEditable value" - ); - }, 'set contentEditable = "true"'); - - test(function() { - const testElement = document.createElement("testElement"); - testElement.contentEditable = "false"; - - assert_false( - testElement.isContentEditable, - "check for testElement.isContentEditable value" - ); - - assert_equals( - testElement.contentEditable, - "false", - "check for testElement.contentEditable value" - ); - }, 'set contentEditable = "false"'); - - test(function() { - const testElement = document.createElement("testElement"); - testElement.contentEditable = "inherit"; - - assert_equals( - testElement.contentEditable, - "inherit", - "check for testElement.contentEditable value" - ); - }, 'set contentEditable = "inherit"'); - - test(function() { - const testElement = document.createElement("testElement"); - const childElement = document.createElement("childElement"); - testElement.appendChild(childElement); - testElement.contentEditable = "true"; - - assert_true( - testElement.isContentEditable, - "check for testElement.isContentEditable value" - ); - - assert_equals( - testElement.contentEditable, - "true", - "check for testElement.contentEditable value" - ); - - assert_true( - childElement.isContentEditable, - "check for childElement.isContentEditable value" - ); - - assert_equals( - childElement.contentEditable, - "inherit", - "check for childElement.contentEditable value" - ); - }, 'set parent element contentEditable = "true"'); - - test(function() { - const testElement = document.createElement("testElement"); - const childElement = document.createElement("childElement"); - testElement.appendChild(childElement); - testElement.contentEditable = "false"; - - assert_false( - testElement.isContentEditable, - "check for testElement.isContentEditable value" - ); - - assert_equals( - testElement.contentEditable, - "false", - "check for testElement.contentEditable value" - ); - - assert_false( - childElement.isContentEditable, - "check for childElement.isContentEditable value" - ); - - assert_equals( - childElement.contentEditable, - "inherit", - "check for childElement.contentEditable value" - ); - }, 'set parent element contentEditable = "false"'); - - test(function() { - var testElement = document.createElement("testElement"); - - assert_equals( - testElement.contentEditable, - "inherit", - "no contentEditable attribute, so inherit" - ); - testElement.setAttribute("contentEditable", ""); - - assert_true( - testElement.isContentEditable, - "check for testElement.isContentEditable value" - ); - assert_equals( - testElement.contentEditable, - "true", - "empty contentEditable attribute is 'true'" - ); - - testElement.contentEditable = "true"; - assert_true( - testElement.isContentEditable, - "check for testElement.isContentEditable value" - ); - assert_equals( - testElement.contentEditable, - "true", - "contentEditable='true' is 'true'" - ); - - testElement.contentEditable = "false"; - assert_false( - testElement.isContentEditable, - "check for testElement.isContentEditable value" - ); - assert_equals( - testElement.contentEditable, - "false", - "contentEditable = 'false' is 'false'" - ); - - testElement.contentEditable = "inherit"; - assert_equals( - testElement.contentEditable, - "inherit", - "contentEditable='inherit' is 'inherit'" - ); - - var childElement = document.createElement("childElement"); - testElement.appendChild(childElement); - testElement.contentEditable = "true"; - assert_true( - testElement.isContentEditable, - 'parent element contentEditable = "true"' - ); - assert_equals(testElement.contentEditable, "true"); - assert_true( - childElement.isContentEditable, - 'parent element contentEditable = "true", so childElement must be editable' - ); - assert_equals( - childElement.contentEditable, - "inherit", - 'parent element contentEditable = "true", so child inherits' - ); - - testElement.contentEditable = "false"; - assert_false( - testElement.isContentEditable, - 'parent element contentEditable = "false"' - ); - assert_equals(testElement.contentEditable, "false"); - assert_false( - childElement.isContentEditable, - 'parent element contentEditable = "false"' - ); - assert_equals( - childElement.contentEditable, - "inherit", - 'parent element contentEditable = "false"' - ); - }, "Dynamically changing contentEditable values"); + testContentEditable(el => { + el.contentEditable = "true"; + el.removeAttribute("contenteditable"); + }, 'set contentEditable = "true" and then remove contenteditable attribute', false, "inherit"); </script> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/interactive-elements/the-details-element/details-keyboard-activation.html b/third_party/blink/web_tests/external/wpt/html/semantics/interactive-elements/the-details-element/details-keyboard-activation.html new file mode 100644 index 0000000..a5534e2 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/interactive-elements/the-details-element/details-keyboard-activation.html
@@ -0,0 +1,52 @@ +<!doctype html> +<meta charset="utf-8"> +<title>Details activation with space bar</title> +<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez"> +<link rel="author" href="https://mozilla.org" title="Mozilla"> +<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1726454"> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-actions.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<style> +:root { + scroll-behavior: instant; +} +.spacer { + height: 200vh; +} +</style> +<details> + <summary>Activate me with the <kbd>Space</kbd> key</summary> + <p>Summary</p> +</details> +<div class="spacer"></div> +<script> +function tick() { + return new Promise(resolve => requestAnimationFrame(() => requestAnimationFrame(resolve))); +} + +promise_test(async t => { + const details = document.querySelector("details"); + const summary = details.querySelector("summary"); + + summary.focus(); + assert_equals(document.activeElement, summary, "Summary should be focusable"); + assert_false(details.open, "Details should be closed"); + + const oldScrollY = window.scrollY; + assert_equals(oldScrollY, 0, "Should be at top"); + + window.addEventListener("scroll", t.unreached_func("Unexpected scroll event")); + + await test_driver.send_keys(summary, " "); + + assert_true(details.open, "Space bar on summary should open details"); + assert_equals(window.scrollY, oldScrollY, "Scroll position shouldn't change"); + + await tick(); + + assert_equals(window.scrollY, oldScrollY, "Scroll position shouldn't change"); +}); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/permissions-policy/OWNERS b/third_party/blink/web_tests/external/wpt/permissions-policy/OWNERS index 7f44d1b..8a638a4 100644 --- a/third_party/blink/web_tests/external/wpt/permissions-policy/OWNERS +++ b/third_party/blink/web_tests/external/wpt/permissions-policy/OWNERS
@@ -1 +1,2 @@ +arichiv@chromium.org iclelland@chromium.org
diff --git a/third_party/blink/web_tests/external/wpt/permissions-policy/permissions-policy-header-policy-allowed-for-all.https.sub.html b/third_party/blink/web_tests/external/wpt/permissions-policy/permissions-policy-header-policy-allowed-for-all.https.sub.html index a089866..16a2b60c 100644 --- a/third_party/blink/web_tests/external/wpt/permissions-policy/permissions-policy-header-policy-allowed-for-all.https.sub.html +++ b/third_party/blink/web_tests/external/wpt/permissions-policy/permissions-policy-header-policy-allowed-for-all.https.sub.html
@@ -28,22 +28,34 @@ // Test that fullscreen is not allowed on cross-origin subframes without an // allow attribute. test_disallowed_feature_for_subframe( - header_policy + ' -- test fullscreen is allowed on cross-origin subframe', + header_policy + ' -- test fullscreen is disallowed on cross-origin subframe', 'fullscreen', cross_origin_src); - // Dynamically update sub frame's container policy + // Dynamically update sub frame's container policy to self var allow = "fullscreen 'self';" test_allowed_feature_for_subframe( header_policy + ', iframe.allow = ' + allow + ' -- test fullscreen is allowed on same-origin subframe', 'fullscreen', same_origin_src, allow); - test_disallowed_feature_for_subframe( header_policy + ', iframe.allow = ' + allow + ' -- test fullscreen is disallowed on cross-origin subframe', 'fullscreen', cross_origin_src, allow); + + // Dynamically update sub frame's container policy to src + var allow = "fullscreen 'src';" + test_allowed_feature_for_subframe( + header_policy + ', iframe.allow = ' + allow + ' -- test fullscreen is allowed on same-origin subframe', + 'fullscreen', + same_origin_src, + allow); + test_allowed_feature_for_subframe( + header_policy + ', iframe.allow = ' + allow + ' -- test fullscreen is allowed on cross-origin subframe', + 'fullscreen', + cross_origin_src, + allow); </script> </body>
diff --git a/third_party/blink/web_tests/external/wpt/permissions-policy/permissions-policy-header-policy-allowed-for-self.https.sub.html b/third_party/blink/web_tests/external/wpt/permissions-policy/permissions-policy-header-policy-allowed-for-self.https.sub.html index dba317e6..363ff0b 100644 --- a/third_party/blink/web_tests/external/wpt/permissions-policy/permissions-policy-header-policy-allowed-for-self.https.sub.html +++ b/third_party/blink/web_tests/external/wpt/permissions-policy/permissions-policy-header-policy-allowed-for-self.https.sub.html
@@ -36,11 +36,10 @@ 'fullscreen', same_origin_src, allow); - - test_allowed_feature_for_subframe( - header_policy + ', iframe.allow = ' + allow + ' -- test fullscreen is allowed on cross-origin subframe', + test_disallowed_feature_for_subframe( + header_policy + ', iframe.allow = ' + allow + ' -- test fullscreen is disallowed on cross-origin subframe', 'fullscreen', - same_origin_src, + cross_origin_src, allow); </script> </body>
diff --git a/third_party/blink/web_tests/external/wpt/permissions-policy/permissions-policy-header-policy-allowed-for-some.https.sub.html b/third_party/blink/web_tests/external/wpt/permissions-policy/permissions-policy-header-policy-allowed-for-some.https.sub.html index 0035eea..e9d8ac14 100644 --- a/third_party/blink/web_tests/external/wpt/permissions-policy/permissions-policy-header-policy-allowed-for-some.https.sub.html +++ b/third_party/blink/web_tests/external/wpt/permissions-policy/permissions-policy-header-policy-allowed-for-some.https.sub.html
@@ -8,8 +8,10 @@ 'use strict'; var same_origin = 'https://{{domains[]}}:{{ports[https][0]}}'; var cross_origin = 'https://{{domains[www]}}:{{ports[https][0]}}'; + var cross_origin1 = 'https://{{domains[www1]}}:{{ports[https][0]}}'; var same_origin_src = '/permissions-policy/resources/permissions-policy-allowedfeatures.html'; var cross_origin_src = cross_origin + same_origin_src; + var cross_origin_src1 = cross_origin1 + same_origin_src; var header_policy = `Permissions-Policy: fullscreen=(self "${cross_origin}" "https://www.example.com")`; // Test that fullscreen's allowlist is [same_origin, cross_origin, 'https://www.example.com'] @@ -26,27 +28,48 @@ 'fullscreen', same_origin_src); test_disallowed_feature_for_subframe( - header_policy + ' -- test fullscreen is allowed on cross-origin ' + cross_origin_src + ' subframe', + header_policy + ' -- test fullscreen is disallowed on cross-origin ' + cross_origin_src + ' subframe', 'fullscreen', cross_origin_src); - var cross_origin_src1 = 'https://{{domains[www1]}}:{{ports[https][0]}}' + same_origin_src; test_disallowed_feature_for_subframe( header_policy + ' -- test fullscreen is disallowed on cross-origin ' + cross_origin_src1 + ' subframe', 'fullscreen', cross_origin_src1); - // dynamically update sub frame's container policy + // dynamically update sub frame's container policy to none var allow = "fullscreen 'none';" test_disallowed_feature_for_subframe( header_policy + ', iframe.allow = ' + allow + ' -- test fullscreen is disallowed on same-origin subframe', 'fullscreen', same_origin_src, allow); - test_disallowed_feature_for_subframe( header_policy + 'iframe.allow = ' + allow + ' -- test fullscreen is disallowed on cross-origin subframe', 'fullscreen', cross_origin_src, allow); + test_disallowed_feature_for_subframe( + header_policy + 'iframe.allow = ' + allow + ' -- test fullscreen is disallowed on another cross-origin subframe', + 'fullscreen', + cross_origin_src1, + allow); + + // dynamically update sub frame's container policy to src + allow = "fullscreen 'src';" + test_allowed_feature_for_subframe( + header_policy + ', iframe.allow = ' + allow + ' -- test fullscreen is allowed on same-origin subframe', + 'fullscreen', + same_origin_src, + allow); + test_allowed_feature_for_subframe( + header_policy + 'iframe.allow = ' + allow + ' -- test fullscreen is allowed on cross-origin subframe', + 'fullscreen', + cross_origin_src, + allow); + test_disallowed_feature_for_subframe( + header_policy + ', iframe.allow = ' + allow + ' -- test fullscreen is disallowed on another cross-origin subframe', + 'fullscreen', + cross_origin_src1, + allow); </script> </body>
diff --git a/third_party/blink/web_tests/external/wpt/permissions-policy/permissions-policy-header-policy-declined.https.sub.html b/third_party/blink/web_tests/external/wpt/permissions-policy/permissions-policy-header-policy-declined.https.sub.html index 247f238..f02cdce7 100644 --- a/third_party/blink/web_tests/external/wpt/permissions-policy/permissions-policy-header-policy-declined.https.sub.html +++ b/third_party/blink/web_tests/external/wpt/permissions-policy/permissions-policy-header-policy-declined.https.sub.html
@@ -8,8 +8,10 @@ 'use strict'; var same_origin = 'https://{{domains[]}}:{{ports[https][0]}}'; var cross_origin = 'https://{{domains[www]}}:{{ports[https][0]}}'; + var cross_origin1 = 'https://{{domains[www1]}}:{{ports[https][0]}}'; var same_origin_src = '/permissions-policy/resources/permissions-policy-allowedfeatures.html'; var cross_origin_src = cross_origin + same_origin_src; + var cross_origin_src1 = cross_origin1 + same_origin_src; var header_policy = `Permissions-Policy: fullscreen=(self "${cross_origin}" "https://www.example.com"`; // Test that fullscreen's allowlist is [same_origin, cross_origin, 'https://www.example.com'] @@ -21,45 +23,52 @@ // Test that fullscreen is everywhere. test_disallowed_feature_for_subframe( - header_policy + ' -- test fullscreen is allowed on same-origin subframe', + header_policy + ' -- test fullscreen is disallowed on same-origin subframe', 'fullscreen', same_origin_src); test_disallowed_feature_for_subframe( - header_policy + ' -- test fullscreen is allowed on cross-origin ' + cross_origin_src + ' subframe', + header_policy + ' -- test fullscreen is disallowed on cross-origin ' + cross_origin_src + ' subframe', 'fullscreen', cross_origin_src); - var cross_origin_src1 = 'https://{{domains[www1]}}:{{ports[https][0]}}' + same_origin_src; test_disallowed_feature_for_subframe( header_policy + ' -- test fullscreen is disallowed on cross-origin ' + cross_origin_src1 + ' subframe', 'fullscreen', cross_origin_src1); - // dynamically update sub frame's container policy; fullscreen will still not - // be allowed. + // dynamically update sub frame's container policy to none var disallow = "fullscreen 'none';" test_disallowed_feature_for_subframe( header_policy + ', iframe.allow = ' + disallow + ' -- test fullscreen is disallowed on same-origin subframe', 'fullscreen', same_origin_src, disallow); - test_disallowed_feature_for_subframe( - header_policy + 'iframe.allow = ' + disallow + ' -- test fullscreen is allowed on specific cross-origin subframe', + header_policy + 'iframe.allow = ' + disallow + ' -- test fullscreen is disallowed on specific cross-origin subframe', 'fullscreen', cross_origin_src, disallow); + test_disallowed_feature_for_subframe( + header_policy + 'iframe.allow = ' + disallow + ' -- test fullscreen is disallowed on another cross-origin subframe', + 'fullscreen', + cross_origin_src1, + disallow); + // dynamically update sub frame's container policy to cross_origin var allow = "fullscreen " + cross_origin; test_disallowed_feature_for_subframe( header_policy + ', iframe.allow = ' + allow + ' -- test fullscreen is disallowed on same-origin subframe', 'fullscreen', same_origin_src, allow); - test_disallowed_feature_for_subframe( - header_policy + 'iframe.allow = ' + allow + ' -- test fullscreen is allowed on specific cross-origin subframe', + header_policy + 'iframe.allow = ' + allow + ' -- test fullscreen is disallowed on specific cross-origin subframe', 'fullscreen', cross_origin_src, allow); + test_disallowed_feature_for_subframe( + header_policy + 'iframe.allow = ' + allow + ' -- test fullscreen is disallowed on another cross-origin subframe', + 'fullscreen', + cross_origin_src1, + allow); </script> </body>
diff --git a/third_party/blink/web_tests/external/wpt/permissions-policy/permissions-policy-header-policy-disallowed-for-all.https.sub.html b/third_party/blink/web_tests/external/wpt/permissions-policy/permissions-policy-header-policy-disallowed-for-all.https.sub.html index 6c6f6ef..f787b7d 100644 --- a/third_party/blink/web_tests/external/wpt/permissions-policy/permissions-policy-header-policy-disallowed-for-all.https.sub.html +++ b/third_party/blink/web_tests/external/wpt/permissions-policy/permissions-policy-header-policy-disallowed-for-all.https.sub.html
@@ -37,7 +37,6 @@ 'fullscreen', same_origin_src, allow); - test_disallowed_feature_for_subframe( header_policy + ', iframe.allow = ' + allow + ' -- test fullscreen is disallowed on cross-origin subframe', 'fullscreen',
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/perform_actions/conftest.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/perform_actions/conftest.py index 188f8dd..477e461 100644 --- a/third_party/blink/web_tests/external/wpt/webdriver/tests/perform_actions/conftest.py +++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/perform_actions/conftest.py
@@ -2,6 +2,8 @@ from webdriver.error import NoSuchWindowException +from tests.perform_actions.support.keys import Keys + @pytest.fixture def session_new_window(capabilities, session): @@ -75,6 +77,14 @@ @pytest.fixture +def modifier_key(session): + if session.capabilities["platformName"] == "mac": + return Keys.META + else: + return Keys.CONTROL + + +@pytest.fixture def test_actions_page(session, url): session.url = url("/webdriver/tests/perform_actions/support/test_actions_wdspec.html")
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/perform_actions/key_shortcuts.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/perform_actions/key_shortcuts.py index 31b533a..b5ad7a2 100644 --- a/third_party/blink/web_tests/external/wpt/webdriver/tests/perform_actions/key_shortcuts.py +++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/perform_actions/key_shortcuts.py
@@ -1,47 +1,47 @@ -from tests.perform_actions.support.keys import Keys, MODIFIER_KEY +from tests.perform_actions.support.keys import Keys from tests.perform_actions.support.refine import get_keys -def test_mod_a_and_backspace_deletes_all_text(session, key_reporter, key_chain): +def test_mod_a_and_backspace_deletes_all_text(session, key_reporter, key_chain, modifier_key): key_chain.send_keys("abc d") \ - .key_down(MODIFIER_KEY) \ + .key_down(modifier_key) \ .key_down("a") \ - .key_up(MODIFIER_KEY) \ + .key_up(modifier_key) \ .key_up("a") \ .key_down(Keys.BACKSPACE) \ .perform() assert get_keys(key_reporter) == "" -def test_mod_a_mod_c_right_mod_v_pastes_text(session, key_reporter, key_chain): +def test_mod_a_mod_c_right_mod_v_pastes_text(session, key_reporter, key_chain, modifier_key): initial = "abc d" key_chain.send_keys(initial) \ - .key_down(MODIFIER_KEY) \ + .key_down(modifier_key) \ .key_down("a") \ - .key_up(MODIFIER_KEY) \ + .key_up(modifier_key) \ .key_up("a") \ - .key_down(MODIFIER_KEY) \ + .key_down(modifier_key) \ .key_down("c") \ - .key_up(MODIFIER_KEY) \ + .key_up(modifier_key) \ .key_up("c") \ .send_keys([Keys.RIGHT]) \ - .key_down(MODIFIER_KEY) \ + .key_down(modifier_key) \ .key_down("v") \ - .key_up(MODIFIER_KEY) \ + .key_up(modifier_key) \ .key_up("v") \ .perform() assert get_keys(key_reporter) == initial * 2 -def test_mod_a_mod_x_deletes_all_text(session, key_reporter, key_chain): +def test_mod_a_mod_x_deletes_all_text(session, key_reporter, key_chain, modifier_key): key_chain.send_keys("abc d") \ - .key_down(MODIFIER_KEY) \ + .key_down(modifier_key) \ .key_down("a") \ - .key_up(MODIFIER_KEY) \ + .key_up(modifier_key) \ .key_up("a") \ - .key_down(MODIFIER_KEY) \ + .key_down(modifier_key) \ .key_down("x") \ - .key_up(MODIFIER_KEY) \ + .key_up(modifier_key) \ .key_up("x") \ .perform() assert get_keys(key_reporter) == ""
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/perform_actions/support/keys.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/perform_actions/support/keys.py index 34d3a5b1..e835a6a5 100644 --- a/third_party/blink/web_tests/external/wpt/webdriver/tests/perform_actions/support/keys.py +++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/perform_actions/support/keys.py
@@ -903,8 +903,3 @@ "SUBTRACT": "Subtract", "UP": "Up", } - -if sys.platform == "darwin": - MODIFIER_KEY = Keys.META -else: - MODIFIER_KEY = Keys.CONTROL
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/perform_actions/validity.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/perform_actions/validity.py index 9e4b857..9c056b1 100644 --- a/third_party/blink/web_tests/external/wpt/webdriver/tests/perform_actions/validity.py +++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/perform_actions/validity.py
@@ -11,19 +11,22 @@ @pytest.mark.parametrize("action_type", ["none", "key", "pointer"]) -def test_pause_positive_integer(session, action_type): - for valid_duration in [0.0, 1]: +def test_pause_duration_invalid_type(session, action_type): + for invalid_type in [0.1, None, "foo", True, [], {}]: actions = [{ "type": action_type, "id": "foobar", "actions": [{ "type": "pause", - "duration": valid_duration + "duration": invalid_type }] }] response = perform_actions(session, actions) - assert_success(response) + assert_error(response, "invalid argument") + +@pytest.mark.parametrize("action_type", ["none", "key", "pointer"]) +def test_pause_duration_invalid_value(session, action_type): actions = [{ "type": action_type, "id": "foobar", @@ -37,18 +40,18 @@ @pytest.mark.parametrize("action_type", ["none", "key", "pointer"]) -def test_pause_invalid_types(session, action_type): - for invalid_type in [0.1, None, "foo", True, [], {}]: +def test_pause_duration_valid(session, action_type): + for valid_duration in [0, 1]: actions = [{ "type": action_type, "id": "foobar", "actions": [{ "type": "pause", - "duration": invalid_type + "duration": valid_duration }] }] response = perform_actions(session, actions) - assert_error(response, "invalid argument") + assert_success(response) @pytest.mark.parametrize("action_type", ["none", "key", "pointer"])
diff --git a/third_party/nearby/README.chromium b/third_party/nearby/README.chromium index c2f917d9..74abb10 100644 --- a/third_party/nearby/README.chromium +++ b/third_party/nearby/README.chromium
@@ -1,7 +1,7 @@ Name: Nearby Connections Library Short Name: Nearby URL: https://github.com/google/nearby -Version: 7350643c36c76866f47a7cba479179c3793c14b9 +Version: 4bd0337c105c502de845ba9501ad6e0350f613b9 License: Apache 2.0 License File: LICENSE Security Critical: yes
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 28cab57..954b1d6 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -35716,6 +35716,8 @@ <int value="1720" label="OS_TELEMETRY_GETTPMINFO"/> <int value="1721" label="INPUTMETHODPRIVATE_NOTIFYINPUTMETHODREADYFORTESTING"/> + <int value="1722" label="AUTOTESTPRIVATE_MAKEFUSEBOXTEMPDIR"/> + <int value="1723" label="AUTOTESTPRIVATE_REMOVEFUSEBOXTEMPDIR"/> </enum> <enum name="ExtensionIconState"> @@ -81319,6 +81321,11 @@ <int value="1" label="PriorityChanged"/> </enum> +<enum name="PrivacyHubNavigationOrigin"> + <int value="0" label="System settings"/> + <int value="1" label="Notification"/> +</enum> + <enum name="PrivacySandboxAggregationServiceKeyFetcherStatus"> <int value="0" label="Success"/> <int value="1" label="Download error"/> @@ -103532,6 +103539,16 @@ <int value="0" label="Unused and unclosed"/> </enum> +<enum name="WebRtcStunIntegrityOutcome"> + <summary> + Records the outcome of a STUN integrity check - succeeds, fails, or "no + integrity attribute present". + </summary> + <int value="1" label="No integrity attribute"/> + <int value="2" label="OK"/> + <int value="3" label="Bad"/> +</enum> + <enum name="WebRtcVideoCodecs"> <int value="0" label="Unknown"/> <int value="1" label="VP8"/>
diff --git a/tools/metrics/histograms/metadata/chromeos/histograms.xml b/tools/metrics/histograms/metadata/chromeos/histograms.xml index 00df182..8d2d2bb6 100644 --- a/tools/metrics/histograms/metadata/chromeos/histograms.xml +++ b/tools/metrics/histograms/metadata/chromeos/histograms.xml
@@ -1583,6 +1583,36 @@ </summary> </histogram> +<histogram name="ChromeOS.PrivacyHub.Opened" enum="PrivacyHubNavigationOrigin" + expires_after="2023-09-01"> + <owner>zauri@google.com</owner> + <owner>chromeos-privacyhub@google.com</owner> + <summary> + Records when the user visits the Privacy Hub page in system settings. + Capturing the origin where the user navigated from. + </summary> +</histogram> + +<histogram name="ChromeOS.PrivacyHub.{FeatureName}.{Source}.Enabled" + enum="BooleanEnabled" expires_after="2023-09-01"> + <owner>zauri@google.com</owner> + <owner>chromeos-privacyhub@google.com</owner> + <summary> + Records when the user changes the device-wide {FeatureName} access from the + {Source}. This can happen directly from the settings page + "Settings">"Security and Privacy">"Privacy + hub" or through notifications. + </summary> + <token key="FeatureName"> + <variant name="Camera"/> + <variant name="Microphone"/> + </token> + <token key="Source"> + <variant name="Notification"/> + <variant name="Settings"/> + </token> +</histogram> + <histogram name="ChromeOS.PrivacyScreen.Toggled" enum="PrivacyScreenToggleUISurface" expires_after="2022-04-01"> <owner>tengs@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/input/histograms.xml b/tools/metrics/histograms/metadata/input/histograms.xml index 7788832..e8c1d92 100644 --- a/tools/metrics/histograms/metadata/input/histograms.xml +++ b/tools/metrics/histograms/metadata/input/histograms.xml
@@ -119,7 +119,7 @@ </histogram> <histogram name="InputMethod.Assistive.AutocorrectV2.Internal.VkState" - enum="IMEAutocorrectInternalStates" expires_after="2022-12-15"> + enum="IMEAutocorrectInternalStates" expires_after="2023-05-01"> <owner>mehrab@google.com</owner> <owner>essential-inputs-team@google.com</owner> <summary> @@ -148,7 +148,7 @@ </histogram> <histogram name="InputMethod.Assistive.AutocorrectV2.Latency.ExitField" - units="ms" expires_after="2022-12-15"> + units="ms" expires_after="2023-05-01"> <owner>mehrab@google.com</owner> <owner>essential-inputs-team@google.com</owner> <summary> @@ -159,7 +159,7 @@ </histogram> <histogram name="InputMethod.Assistive.AutocorrectV2.Latency.PkPending" - units="ms" expires_after="2022-12-15"> + units="ms" expires_after="2023-05-01"> <owner>mehrab@google.com</owner> <owner>essential-inputs-team@google.com</owner> <summary> @@ -172,7 +172,7 @@ </histogram> <histogram name="InputMethod.Assistive.AutocorrectV2.Latency.Reject" units="ms" - expires_after="2022-12-15"> + expires_after="2023-05-01"> <owner>mehrab@google.com</owner> <owner>essential-inputs-team@google.com</owner> <summary> @@ -183,7 +183,7 @@ </histogram> <histogram name="InputMethod.Assistive.AutocorrectV2.Latency.VkPending" - units="ms" expires_after="2022-12-15"> + units="ms" expires_after="2023-05-01"> <owner>mehrab@google.com</owner> <owner>essential-inputs-team@google.com</owner> <summary> @@ -196,7 +196,7 @@ </histogram> <histogram name="InputMethod.Assistive.AutocorrectV2.Quality.PkAccepted" - enum="IMEAutocorrectQualityBreakdown" expires_after="2022-12-15"> + enum="IMEAutocorrectQualityBreakdown" expires_after="2023-05-01"> <owner>mehrab@google.com</owner> <owner>essential-inputs-team@google.com</owner> <summary> @@ -210,7 +210,7 @@ </histogram> <histogram name="InputMethod.Assistive.AutocorrectV2.Quality.PkRejected" - enum="IMEAutocorrectQualityBreakdown" expires_after="2022-12-15"> + enum="IMEAutocorrectQualityBreakdown" expires_after="2023-05-01"> <owner>mehrab@google.com</owner> <owner>essential-inputs-team@google.com</owner> <summary> @@ -224,7 +224,7 @@ </histogram> <histogram name="InputMethod.Assistive.AutocorrectV2.Quality.VkAccepted" - enum="IMEAutocorrectQualityBreakdown" expires_after="2022-12-15"> + enum="IMEAutocorrectQualityBreakdown" expires_after="2023-05-01"> <owner>mehrab@google.com</owner> <owner>essential-inputs-team@google.com</owner> <summary> @@ -238,7 +238,7 @@ </histogram> <histogram name="InputMethod.Assistive.AutocorrectV2.Quality.VkRejected" - enum="IMEAutocorrectQualityBreakdown" expires_after="2022-12-15"> + enum="IMEAutocorrectQualityBreakdown" expires_after="2023-05-01"> <owner>mehrab@google.com</owner> <owner>essential-inputs-team@google.com</owner> <summary> @@ -252,7 +252,7 @@ </histogram> <histogram name="InputMethod.Assistive.CandidateGenerationTime.MultiWord" - units="ms" expires_after="2022-10-04"> + units="ms" expires_after="2023-05-01"> <owner>curtismcmullan@google.com</owner> <owner>essential-inputs-team@google.com</owner> <summary> @@ -285,7 +285,7 @@ </histogram> <histogram name="InputMethod.Assistive.Disabled.Emoji" - enum="IMEAssistiveDisabledReason" expires_after="2022-12-04"> + enum="IMEAssistiveDisabledReason" expires_after="2023-05-01"> <owner>myy@google.com</owner> <owner>essential-inputs-team@google.com</owner> <summary> @@ -297,7 +297,7 @@ </histogram> <histogram name="InputMethod.Assistive.Disabled.MultiWord" - enum="IMEAssistiveDisabledReason" expires_after="2022-10-04"> + enum="IMEAssistiveDisabledReason" expires_after="2023-05-01"> <owner>curtismcmullan@google.com</owner> <owner>essential-inputs-team@google.com</owner> <summary> @@ -461,7 +461,7 @@ </histogram> <histogram name="InputMethod.Assistive.NotAllowed" enum="IMEAssistiveAction" - expires_after="2022-09-30"> + expires_after="2023-05-01"> <owner>jiwan@google.com</owner> <owner>essential-inputs-team@google.com</owner> <summary> @@ -496,7 +496,7 @@ </histogram> <histogram name="InputMethod.Assistive.TimeToAccept.MultiWord" units="ms" - expires_after="2022-12-04"> + expires_after="2023-05-01"> <owner>curtismcmullan@google.com</owner> <owner>essential-inputs-team@google.com</owner> <summary> @@ -533,7 +533,7 @@ </histogram> <histogram name="InputMethod.Assistive.TimeToDismiss.MultiWord" units="ms" - expires_after="2022-12-04"> + expires_after="2023-05-01"> <owner>curtismcmullan@google.com</owner> <owner>essential-inputs-team@google.com</owner> <summary> @@ -568,7 +568,7 @@ </histogram> <histogram name="InputMethod.Assistive.UserPref.MultiWord" - enum="BooleanEnabled" expires_after="2022-12-04"> + enum="BooleanEnabled" expires_after="2023-05-01"> <owner>curtismcmullan@google.com</owner> <owner>essential-inputs-team@google.com</owner> <summary> @@ -620,7 +620,7 @@ </histogram> <histogram name="InputMethod.CharactersPerSession{InputModality}" - units="characters" expires_after="2022-12-04"> + units="characters" expires_after="2023-05-01"> <owner>keithlee@chromium.org</owner> <owner>essential-inputs-team@google.com</owner> <summary> @@ -639,7 +639,7 @@ </histogram> <histogram name="InputMethod.Commit.Index" units="units" - expires_after="2022-04-24"> + expires_after="2023-05-01"> <owner>shend@chromium.org</owner> <owner>essential-inputs-team@google.com</owner> <summary> @@ -983,7 +983,7 @@ </histogram> <histogram name="InputMethod.PkCommit.Index" units="units" - expires_after="2021-10-10"> + expires_after="2023-05-01"> <owner>shend@chromium.org</owner> <owner>essential-inputs-team@google.com</owner> <summary> @@ -993,7 +993,7 @@ </histogram> <histogram name="InputMethod.PkCommit.Type" enum="IMECommitType2" - expires_after="2021-12-12"> + expires_after="2023-05-01"> <owner>dvallet@chromium.org</owner> <owner>shuchen@chromium.org</owner> <owner>essential-inputs-team@google.com</owner> @@ -1099,7 +1099,7 @@ <histogram name="InputMethod.VirtualKeyboard.CharactersPerMinute{InputModality}" - units="charactersPerMinute" expires_after="2022-06-30"> + units="charactersPerMinute" expires_after="2023-05-01"> <owner>keithlee@chromium.org</owner> <owner>essential-inputs-team@google.com</owner> <summary> @@ -1119,7 +1119,7 @@ <histogram name="InputMethod.VirtualKeyboard.CharactersPerSession{InputModality}" - units="characters" expires_after="2022-06-30"> + units="characters" expires_after="2023-05-01"> <owner>keithlee@chromium.org</owner> <owner>essential-inputs-team@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/web_rtc/histograms.xml b/tools/metrics/histograms/metadata/web_rtc/histograms.xml index d90b296..73ba584 100644 --- a/tools/metrics/histograms/metadata/web_rtc/histograms.xml +++ b/tools/metrics/histograms/metadata/web_rtc/histograms.xml
@@ -1349,24 +1349,30 @@ </histogram> <histogram name="WebRTC.PeerConnection.BundlePolicy" - enum="PeerConnectionBundlePolicy" expires_after="2022-08-28"> + enum="PeerConnectionBundlePolicy" expires_after="2023-02-28"> <owner>hta@chromium.org</owner> <owner>webrtc-dev@chromium.org</owner> <summary> Determines whether BUNDLE is configured. Recorded during the first DTLS connection establishment. Values are specified in https://w3c.github.io/webrtc-pc/#dom-rtcbundlepolicy + + Warning: This histogram was expired from 2022-08-28 to 2022-10-10. Data may + be missing. </summary> </histogram> <histogram name="WebRTC.PeerConnection.BundleUsage" - enum="PeerConnectionBundleUsage" expires_after="2022-08-28"> + enum="PeerConnectionBundleUsage" expires_after="2023-02-28"> <owner>hta@chromium.org</owner> <owner>webrtc-dev@chromium.org</owner> <summary> Determines whether BUNDLE is used in remote offers or answers. Recorded during setRemoteDescription calls. Distinguishes between simple, complex, datachannel-only and legacy plan-b usage. + + Warning: This histogram was expired from 2022-08-28 to 2022-10-10. Data may + be missing. </summary> </histogram> @@ -2141,6 +2147,31 @@ </token> </histogram> +<histogram name="WebRTC.Stun.Integrity.{StunPacketType}" + enum="WebRtcStunIntegrityOutcome" expires_after="2023-04-07"> + <owner>hta@chromium.org</owner> + <owner>webrtc-dev@chromium.org</owner> + <summary> + Records outcome of integrity checks for STUN requests. This is used in + investigation of crbug.com/1177125, in order to figure out if it is safe to + turn on checking of these attributes. + </summary> + <token key="StunPacketType"> + <variant name="ErrorResponse.BadRequest"/> + <variant name="ErrorResponse.ErrorOther"/> + <variant name="ErrorResponse.GlobalFailure"/> + <variant name="ErrorResponse.NoErrorAttribute"/> + <variant name="ErrorResponse.ServerError"/> + <variant name="ErrorResponse.StaleNonce"/> + <variant name="ErrorResponse.TryAlternate"/> + <variant name="ErrorResponse.Unauthorized"/> + <variant name="ErrorResponse.UnknownAttribute"/> + <variant name="Indication"/> + <variant name="Request"/> + <variant name="Response"/> + </token> +</histogram> + <histogram name="WebRTC.Stun.ResponseLatency{NatType}" units="ms" expires_after="M85"> <owner>qingsi@google.com</owner>
diff --git a/ui/chromeos/file_manager_strings.grdp b/ui/chromeos/file_manager_strings.grdp index 5dea164..749486ff 100644 --- a/ui/chromeos/file_manager_strings.grdp +++ b/ui/chromeos/file_manager_strings.grdp
@@ -475,6 +475,9 @@ <message name="IDS_FILE_BROWSER_EMPTY_TRASH_BUTTON_LABEL" desc="Context menu item that empties (permanently deletes all items in) the trash / recycle bin."> Empty trash now </message> + <message name="IDS_FILE_BROWSER_TRASH_NUDGE_LABEL" desc="Shown when a user trashes a file for the the first time"> + Deleted files are now moved to trash + </message> <message name="IDS_FILE_BROWSER_PASTE_BUTTON_LABEL" desc="Context menu item that pastes the file(s) in the clipboard."> Paste </message>
diff --git a/ui/chromeos/file_manager_strings_grdp/IDS_FILE_BROWSER_TRASH_NUDGE_LABEL.png.sha1 b/ui/chromeos/file_manager_strings_grdp/IDS_FILE_BROWSER_TRASH_NUDGE_LABEL.png.sha1 new file mode 100644 index 0000000..712348c --- /dev/null +++ b/ui/chromeos/file_manager_strings_grdp/IDS_FILE_BROWSER_TRASH_NUDGE_LABEL.png.sha1
@@ -0,0 +1 @@ +6a3a3b441523a6b3530a43fc1c13e380b47f4a9c \ No newline at end of file
diff --git a/ui/chromeos/translations/ui_chromeos_strings_da.xtb b/ui/chromeos/translations/ui_chromeos_strings_da.xtb index 65a8a388..6d8b4aa 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_da.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_da.xtb
@@ -87,7 +87,7 @@ <translation id="1742316578210444689">Hebræisk translitteration</translation> <translation id="1747761757048858544">Hollandsk (Holland)</translation> <translation id="174937106936716857">Samlet antal filer</translation> -<translation id="1755345808328621801">Denne fil er designet til en pc, der kører Windows-software. Den er ikke kompatibel med din enhed, der kører Chrome OS. Søg efter en anden egnet app i Chrome Webshop.</translation> +<translation id="1755345808328621801">Denne fil er designet til en pc, der kører Windows-software. Den er ikke kompatibel med din enhed, der kører ChromeOS. Søg efter en anden egnet app i Chrome Webshop.</translation> <translation id="1757915090001272240">Wide Latin</translation> <translation id="1773212559869067373">Godkendelsescertifikatet blev afvist lokalt</translation> <translation id="1775381402323441512">Videooplysninger</translation> @@ -219,7 +219,7 @@ <translation id="2949781154072577687">Formaterer <ph name="DRIVE_NAME" />…</translation> <translation id="2951236788251446349">Vandmand</translation> <translation id="2958458230122209142">Der er kun <ph name="REMAINING_PERCENTAGE" /> % ledig lagerplads tilbage af din individuelle lagerplads på <ph name="TOTAL_SPACE" />.</translation> -<translation id="2977940621473452797">Denne fil er beregnet til en computer med Macintosh-software. Den er ikke kompatibel med din enhed, som kører Chrome OS. Søg efter en anden egnet app i Chrome Webshop.</translation> +<translation id="2977940621473452797">Denne fil er beregnet til en computer med Macintosh-software. Den er ikke kompatibel med din enhed, som kører ChromeOS. Søg efter en anden egnet app i Chrome Webshop.</translation> <translation id="2984337792991268709">I dag <ph name="TODAY_DAYTIME" /></translation> <translation id="299638574917407533">Fransk (Canada)</translation> <translation id="3003189754374775221">Netværk <ph name="NETWORK_INDEX" /> af <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="NETWORK_PROVIDER_NAME" />, signalstyrke <ph name="SIGNAL_STRENGTH" /> %, opret forbindelse</translation> @@ -421,7 +421,7 @@ <translation id="4694604912444486114">Abe</translation> <translation id="469612310041132144">Kinesisk quick</translation> <translation id="4697043402264950621">Listen med filer er sorteret efter <ph name="COLUMN_NAME" /> i stigende rækkefølge.</translation> -<translation id="469897186246626197">Denne fil er beregnet til en pc med Windows-software. Den er ikke kompatibel med din enhed, som kører Chrome OS. <ph name="BEGIN_LINK_HELP" />Få flere oplysninger<ph name="END_LINK_HELP" /> om, hvordan du åbner filer i Chrome OS.</translation> +<translation id="469897186246626197">Denne fil er beregnet til en pc med Windows-software. Den er ikke kompatibel med din enhed, som kører ChromeOS. <ph name="BEGIN_LINK_HELP" />Få flere oplysninger<ph name="END_LINK_HELP" /> om, hvordan du åbner filer i ChromeOS.</translation> <translation id="4706042980341760088">Tamil med skrivemaskinetastatur</translation> <translation id="4711094779914110278">Tyrkisk</translation> <translation id="4712283082407695269">Åbner "<ph name="PATH" />"</translation> @@ -549,7 +549,7 @@ <translation id="5583664733673201137">Tegnsætningsbredden er Fuld</translation> <translation id="5602622065581044566">Bulgarsk med fonetisk tastatur</translation> <translation id="5605830556594064952">Amerikansk (Dvorak)</translation> -<translation id="5618330573454123917">Denne fil er beregnet til en computer med Macintosh-software. Den er ikke kompatibel med din enhed, som kører Chrome OS. <ph name="BEGIN_LINK_HELP" />Få flere oplysninger<ph name="END_LINK_HELP" /> om, hvordan du åbner filer i Chrome OS.</translation> +<translation id="5618330573454123917">Denne fil er beregnet til en computer med Macintosh-software. Den er ikke kompatibel med din enhed, som kører ChromeOS. <ph name="BEGIN_LINK_HELP" />Få flere oplysninger<ph name="END_LINK_HELP" /> om, hvordan du åbner filer i ChromeOS.</translation> <translation id="5625294776298156701">Tamil med Tamil99-tastatur</translation> <translation id="5633226425545095130">Hvis du flytter dette element, deles det med alle, der kan se den delte mappe "<ph name="DESTINATION_NAME" />".</translation> <translation id="5649768706273821470">Lyt</translation> @@ -748,7 +748,7 @@ <translation id="7309413087278791451">Tysk (Belgien)</translation> <translation id="7339898014177206373">Nyt vindue</translation> <translation id="7343393116438664539">Vietnamesisk telex</translation> -<translation id="7357762654218998920">Denne filtype understøttes ikke. <ph name="BEGIN_LINK_HELP" />Få flere oplysninger<ph name="END_LINK_HELP" /> om, hvordan du åbner filer i Chrome OS.</translation> +<translation id="7357762654218998920">Denne filtype understøttes ikke. <ph name="BEGIN_LINK_HELP" />Få flere oplysninger<ph name="END_LINK_HELP" /> om, hvordan du åbner filer i ChromeOS.</translation> <translation id="7359359531237882347">Kopierer <ph name="NUMBER_OF_ITEMS" /> elementer...</translation> <translation id="7375951387215729722">Listen med filer er sorteret efter <ph name="COLUMN_NAME" /> i faldende rækkefølge.</translation> <translation id="7402503521691663770">ChromeOS Flex-enheder</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb b/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb index 58be4fae..25fd58d3 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb
@@ -456,6 +456,7 @@ <translation id="4900532980794411603">Share with Parallels Desktop</translation> <translation id="4902546322522096650">Network <ph name="NETWORK_INDEX" /> of <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, signal strength <ph name="SIGNAL_STRENGTH" />%, connect</translation> <translation id="4906580650526544301">Network <ph name="NETWORK_INDEX" /> of <ph name="NETWORK_COUNT" />, <ph name="PHONE_NAME" />, <ph name="PROVIDER_NAME" />, <ph name="CONNECTION_STATUS" />, signal strength <ph name="SIGNAL_STRENGTH" />%, phone battery <ph name="BATTERY_STATUS" />%, details</translation> +<translation id="4929673617759421391">Pasting this file is blocked by administrator policy</translation> <translation id="4935975195727477204">Gazania Flower</translation> <translation id="4943368462779413526">Football</translation> <translation id="4961158930123534723">1 folder shared with Parallels Desktop</translation> @@ -513,6 +514,7 @@ <translation id="5286194356314741248">Scanning</translation> <translation id="5288441970121584418">Burger</translation> <translation id="5288481194217812690"><ph name="FILENAME" /></translation> +<translation id="5293615890992542006">Moving this file is blocked by administrator policy</translation> <translation id="5305688511332277257">None installed</translation> <translation id="5317780077021120954">Save</translation> <translation id="5318819489018851358">Share with Linux</translation> @@ -713,6 +715,7 @@ <translation id="6993826899923627728">These items are in your bin</translation> <translation id="6998711733709403587"><ph name="SELCTED_FOLDERS_COUNT" /> folders selected</translation> <translation id="7008426324576352165">Your organisation requires more storage to complete the upload.</translation> +<translation id="7009985720488544166">Moving <ph name="COUNT" /> files is blocked by administrator policy</translation> <translation id="7012943028104619157"><ph name="ROOT_TITLE" /> (<ph name="ROOT_SUMMARY" />)</translation> <translation id="7014174261166285193">Installation failed.</translation> <translation id="7031639531908619281">Turkish</translation> @@ -972,6 +975,7 @@ <translation id="9183302530794969518">Google Docs</translation> <translation id="9189836632794948435">Kazakh</translation> <translation id="9200427192836333033"><ph name="NUMBER_OF_ITEMS" /> items extracted.</translation> +<translation id="9210751050717126865">Pasting <ph name="COUNT" /> files is blocked by administrator policy</translation> <translation id="9213073329713032541">Installation successfully started.</translation> <translation id="9219103736887031265">Images</translation> <translation id="9219908252191632183">Lunar</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_mn.xtb b/ui/chromeos/translations/ui_chromeos_strings_mn.xtb index 403654b..89aab93 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_mn.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_mn.xtb
@@ -367,6 +367,7 @@ <translation id="4290535918735525311">Linux-тай хуваалцсан 1 фолдер</translation> <translation id="4299729908419173967">Бразил хэл</translation> <translation id="4302605047395093221">Энэ төхөөрөмжийг ашиглаж буй дурын хүн энэ мобайл сүлжээнд холбогдохын тулд ПИН оруулах шаардлагатай болно</translation> +<translation id="4303531889494116116">Энэ сүлжээ завгүй байна. Дараа дахин оролдоно уу.</translation> <translation id="4309915981827077375">Ерөнхий мэдээлэл</translation> <translation id="432252891123397018">Стандарт гартай румын</translation> <translation id="4325128273762811722">Словени</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb b/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb index 12e40f0..a181143 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb
@@ -367,6 +367,7 @@ <translation id="4290535918735525311">1 pasta compartilhada com o Linux</translation> <translation id="4299729908419173967">Português brasileiro</translation> <translation id="4302605047395093221">Para usar este dispositivo, será necessário digitar o PIN para se conectar a esta rede móvel</translation> +<translation id="4303531889494116116">Esta rede está ocupada. Tente novamente mais tarde.</translation> <translation id="4309915981827077375">Informações gerais</translation> <translation id="432252891123397018">Romeno com teclado padrão</translation> <translation id="4325128273762811722">Esloveno</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ro.xtb b/ui/chromeos/translations/ui_chromeos_strings_ro.xtb index b402b05b..bb525fe 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ro.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ro.xtb
@@ -367,6 +367,7 @@ <translation id="4290535918735525311">Un dosar cu accesul permis pentru Linux</translation> <translation id="4299729908419173967">Braziliană</translation> <translation id="4302605047395093221">Oricine folosește dispozitivul va trebui să introducă PIN-ul pentru a se conecta la această rețea mobilă</translation> +<translation id="4303531889494116116">Această rețea este ocupată. Încearcă din nou mai târziu.</translation> <translation id="4309915981827077375">Informații generale</translation> <translation id="432252891123397018">Tastatură română standard</translation> <translation id="4325128273762811722">Slovenă</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_si.xtb b/ui/chromeos/translations/ui_chromeos_strings_si.xtb index bb821ad..3367786 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_si.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_si.xtb
@@ -367,6 +367,7 @@ <translation id="4290535918735525311">ලිනක්ස් සමඟ 1 ෆෝල්ඩරයක් බෙදා ගත්තා</translation> <translation id="4299729908419173967">බ්රසීලියානු</translation> <translation id="4302605047395093221">මෙම උපාංගය භාවිත කරන ඕනෑම කෙනෙකු මෙම ජංගම ජාලයට සම්බන්ධ වීමට PIN අංකය ඇතුළු කළ යුතුය</translation> +<translation id="4303531889494116116">මෙම ජාලය කාර්යබහුලයි. පසුව නැවත උත්සාහ කරන්න.</translation> <translation id="4309915981827077375">සාමාන්ය තතු</translation> <translation id="432252891123397018">සම්මත යතුරුපුවරුව සමග රුමේනියානු</translation> <translation id="4325128273762811722">ස්ලොවේනියානු</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sk.xtb b/ui/chromeos/translations/ui_chromeos_strings_sk.xtb index 6c20ea7e..9db8964a 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_sk.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_sk.xtb
@@ -367,6 +367,7 @@ <translation id="4290535918735525311">So systémom Linux zdieľate 1 priečinok</translation> <translation id="4299729908419173967">brazílčina</translation> <translation id="4302605047395093221">Každý, kto sa bude chcieť v tomto zariadení pripojiť k tejto mobilnej sieti, bude musieť zadať PIN</translation> +<translation id="4303531889494116116">Táto sieť je zaneprázdnená. Skúste to neskôr.</translation> <translation id="4309915981827077375">Všeobecné informácie</translation> <translation id="432252891123397018">Rumunská štandardná klávesnica</translation> <translation id="4325128273762811722">Slovinská klávesnica</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_zu.xtb b/ui/chromeos/translations/ui_chromeos_strings_zu.xtb index 890a7dd..bb56603 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_zu.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_zu.xtb
@@ -367,6 +367,7 @@ <translation id="4290535918735525311">1 ifolda yabiwe nge-Linux</translation> <translation id="4299729908419173967">Isi-Brazilian</translation> <translation id="4302605047395093221">Noma ubani osebenzisa le divayisi kuzodingeka afake Iphinikhodi ukuze axhumeke kule nethiwekhi yeselula</translation> +<translation id="4303531889494116116">Le nethiwekhi imatasa. Zama futhi ngemuva kwesikhathi.</translation> <translation id="4309915981827077375">Ulwazi oluvamile</translation> <translation id="432252891123397018">Isi-Romanian esinekhibhodi Evamile</translation> <translation id="4325128273762811722">Slovenian</translation>
diff --git a/ui/file_manager/OWNERS b/ui/file_manager/OWNERS index 96c25432..657baeb 100644 --- a/ui/file_manager/OWNERS +++ b/ui/file_manager/OWNERS
@@ -1,4 +1,5 @@ adanilo@chromium.org +alexbn@chromium.org austinct@chromium.org benreich@chromium.org fdegros@chromium.org
diff --git a/ui/file_manager/file_manager/BUILD.gn b/ui/file_manager/file_manager/BUILD.gn index e7b3707a..c2308e3 100644 --- a/ui/file_manager/file_manager/BUILD.gn +++ b/ui/file_manager/file_manager/BUILD.gn
@@ -29,7 +29,6 @@ "common/js/files_app_state.js", "common/js/icon_util.js", "common/js/mock_chrome.js", - "common/js/power.js", "common/js/storage_adapter.js", "common/js/test_error_reporting.js", "common/js/volume_manager_types.js", @@ -78,6 +77,7 @@ "foreground/images/files/ui/info.svg", "foreground/images/files/ui/list_check.svg", "foreground/images/files/ui/menu_ng.svg", + "foreground/images/files/ui/nudge_star_icon.svg", "foreground/images/files/ui/offline.svg", "foreground/images/files/ui/refresh.svg", "foreground/images/files/ui/restore.svg",
diff --git a/ui/file_manager/file_manager/background/js/file_operation_manager.js b/ui/file_manager/file_manager/background/js/file_operation_manager.js index 35a07d27..61cfd14 100644 --- a/ui/file_manager/file_manager/background/js/file_operation_manager.js +++ b/ui/file_manager/file_manager/background/js/file_operation_manager.js
@@ -245,112 +245,6 @@ } /** - * Service all pending tasks, as well as any that might appear during the - * copy. We allow to run tasks in parallel when destinations are different - * volumes. - * - * @private - */ - serviceAllTasks_() { - if (this.pendingCopyTasks_.length === 0 && - Object.keys(this.runningCopyTasks_).length === 0) { - // All tasks have been serviced, clean up and exit. - xfm.power.releaseKeepAwake(); - return; - } - - if (!this.volumeManager_) { - volumeManagerFactory.getInstance().then(volumeManager => { - this.volumeManager_ = volumeManager; - this.serviceAllTasks_(); - }); - return; - } - - // Prevent the system from sleeping while copy is in progress. - xfm.power.requestKeepAwake('system'); - - // Find next task which can run at now. - let nextTask = null; - let nextTaskVolumeId = null; - for (let i = 0; i < this.pendingCopyTasks_.length; i++) { - const task = this.pendingCopyTasks_[i]; - - // Fails a copy task of which it fails to get volume info. The destination - // volume might be already unmounted. - const volumeInfo = this.volumeManager_.getVolumeInfo( - /** @type {!DirectoryEntry} */ (task.targetDirEntry)); - if (volumeInfo === null) { - this.eventRouter_.sendProgressEvent( - FileOperationProgressEvent.EventType.ERROR, - this.getTaskStatus(task), task.taskId, - new FileOperationError( - util.FileOperationErrorType.FILESYSTEM_ERROR, - util.createDOMError(util.FileError.NOT_FOUND_ERR))); - - this.pendingCopyTasks_.splice(i, 1); - i--; - - continue; - } - - // When no task is running for the volume, run the task. - if (!this.runningCopyTasks_[volumeInfo.volumeId]) { - nextTask = this.pendingCopyTasks_.splice(i, 1)[0]; - nextTaskVolumeId = volumeInfo.volumeId; - break; - } - } - - // There is no task which can run at now. - if (nextTask === null) { - return; - } - - const onTaskProgress = function(task) { - this.eventRouter_.sendProgressEvent( - FileOperationProgressEvent.EventType.PROGRESS, - this.getTaskStatus(task), task.taskId); - }.bind(this, nextTask); - - const onEntryChanged = (kind, entry) => { - this.eventRouter_.sendEntryChangedEvent(kind, entry); - }; - - // Since getVolumeInfo of targetDirEntry might not be available when this - // callback is called, bind volume id here. - const onTaskError = function(volumeId, err) { - const task = this.runningCopyTasks_[volumeId]; - delete this.runningCopyTasks_[volumeId]; - - const reason = err.data.name === util.FileError.ABORT_ERR ? - FileOperationProgressEvent.EventType.CANCELED : - FileOperationProgressEvent.EventType.ERROR; - this.eventRouter_.sendProgressEvent( - reason, this.getTaskStatus(task), task.taskId, err); - this.serviceAllTasks_(); - }.bind(this, nextTaskVolumeId); - - const onTaskSuccess = function(volumeId) { - const task = this.runningCopyTasks_[volumeId]; - delete this.runningCopyTasks_[volumeId]; - - this.eventRouter_.sendProgressEvent( - FileOperationProgressEvent.EventType.SUCCESS, - this.getTaskStatus(task), task.taskId); - this.serviceAllTasks_(); - }.bind(this, nextTaskVolumeId); - - // Add to running tasks and run it. - this.runningCopyTasks_[nextTaskVolumeId] = nextTask; - - this.eventRouter_.sendProgressEvent( - FileOperationProgressEvent.EventType.PROGRESS, - this.getTaskStatus(nextTask), nextTask.taskId); - nextTask.run(onEntryChanged, onTaskProgress, onTaskSuccess, onTaskError); - } - - /** * Returns true if all entries will use trash for delete. * * @param {!VolumeManager} volumeManager
diff --git a/ui/file_manager/file_manager/background/js/runtime_loaded_test_util.js b/ui/file_manager/file_manager/background/js/runtime_loaded_test_util.js index 9c03c8d..718ab0f 100644 --- a/ui/file_manager/file_manager/background/js/runtime_loaded_test_util.js +++ b/ui/file_manager/file_manager/background/js/runtime_loaded_test_util.js
@@ -1239,3 +1239,18 @@ } callback(false); }; + +/** + * Disables the nudge expiry period for testing. + * + * @param {Window} contentWindow Window the banner controller exists. + * @param {function(boolean)} callback Callback function to be called with a + * boolean indicating success or failure. + * @suppress {missingProperties} nudgeContainer is only defined for foreground + * Window so it isn't visible in the background. + */ +test.util.async.disableNudgeExpiry = async (contentWindow, callback) => { + contentWindow.fileManager.ui_.nudgeContainer + .setExpiryPeriodEnabledForTesting = false; + callback(true); +};
diff --git a/ui/file_manager/file_manager/common/js/BUILD.gn b/ui/file_manager/file_manager/common/js/BUILD.gn index 22f148e..ab1771c 100644 --- a/ui/file_manager/file_manager/common/js/BUILD.gn +++ b/ui/file_manager/file_manager/common/js/BUILD.gn
@@ -39,7 +39,6 @@ ":metrics", ":metrics_base", ":notifications_browser_proxy", - ":power", ":progress_center_common", ":recent_date_bucket", ":storage_adapter", @@ -71,7 +70,6 @@ ":mock_entry", ":mock_util", ":notifications_browser_proxy", - ":power", ":progress_center_common", ":recent_date_bucket", ":storage_adapter", @@ -273,9 +271,6 @@ js_library("progress_center_common") { } -js_library("power") { -} - js_library("recent_date_bucket") { deps = [ ":util", @@ -310,7 +305,6 @@ js_library("xfm") { deps = [ ":notifications_browser_proxy", - ":power", ":storage_adapter", ] }
diff --git a/ui/file_manager/file_manager/common/js/power.js b/ui/file_manager/file_manager/common/js/power.js deleted file mode 100644 index 33ea788..0000000 --- a/ui/file_manager/file_manager/common/js/power.js +++ /dev/null
@@ -1,44 +0,0 @@ -// Copyright 2021 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// namespace -export const power = {}; - -if ('wakeLock' in navigator) { - power.lock_ = null; - /** @type {function(string):!Promise<boolean>} */ - power.requestKeepAwake = async (type) => { - try { - if (power.lock_ !== null) { - console.warn('Next wakeLock requested before wakeLock release called'); - } - // type == 'system' is not supported, we always use screen. - power.lock_ = await navigator.wakeLock.request('screen'); - power.lock_.addEventListener('release', () => { - power.lock_ = null; - }); - } catch (err) { - console.warn('failed to acquire wakeLock: ', err); - } - return power.lock_ !== null; - }; - /** @type {function():void} */ - power.releaseKeepAwake = () => { - if (power.lock_) { - power.lock_.release(); - } - }; -} else { - power.callCount = 0; - power.awake = false; - power.requestKeepAwake = async (type) => { - ++power.callCount; - power.awake = true; - return true; - }; - power.releaseKeepAwake = () => { - ++power.callCount; - power.awake = false; - }; -}
diff --git a/ui/file_manager/file_manager/common/js/volume_manager_types.js b/ui/file_manager/file_manager/common/js/volume_manager_types.js index eff2a93..b35a6083 100644 --- a/ui/file_manager/file_manager/common/js/volume_manager_types.js +++ b/ui/file_manager/file_manager/common/js/volume_manager_types.js
@@ -50,7 +50,10 @@ }; /** - * Type of a root directory. + * Type of a navigation root. + * + * Navigation root are the top-level entries in the navigation tree, in the left + * hand side. * @enum {string} * @const */ @@ -170,10 +173,6 @@ VolumeManagerCommon.RootType.TRASH, // 27 VolumeManagerCommon.RootType.GUEST_OS, // 28 ]; -console.assert( - Object.keys(VolumeManagerCommon.RootType).length === - VolumeManagerCommon.RootTypesForUMA.length, - 'Members in RootTypesForUMA do not match them in RootTypes.'); /** * Error type of VolumeManager.
diff --git a/ui/file_manager/file_manager/common/js/volume_manager_types_unittest.js b/ui/file_manager/file_manager/common/js/volume_manager_types_unittest.js index f29c7b0..8159ee9 100644 --- a/ui/file_manager/file_manager/common/js/volume_manager_types_unittest.js +++ b/ui/file_manager/file_manager/common/js/volume_manager_types_unittest.js
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import {assertFalse, assertTrue} from 'chrome://webui-test/chai_assert.js'; +import {assertEquals, assertFalse, assertTrue} from 'chrome://webui-test/chai_assert.js'; import {MockFileEntry, MockFileSystem} from './mock_entry.js'; import {VolumeManagerCommon} from './volume_manager_types.js'; @@ -67,3 +67,16 @@ 'Documents/abc.pdf'); assertTrue(VolumeManagerCommon.isRecentArcEntry(recentEntry)); } + +// Deprecated roots shouldn't have an enum on RootType, however all te indexes +// in the UMA array has to still match the enums.xml. +export function testRootTypeEnumIndexes() { + const numDeprecatedRoots = + VolumeManagerCommon.RootTypesForUMA + .filter(r => r.toLowerCase().startsWith('deprecated')) + .length; + assertEquals( + Object.keys(VolumeManagerCommon.RootType).length, + VolumeManagerCommon.RootTypesForUMA.length - numDeprecatedRoots, + 'Members in RootTypesForUMA do not match them in RootTypes.'); +}
diff --git a/ui/file_manager/file_manager/common/js/xfm.js b/ui/file_manager/file_manager/common/js/xfm.js index 9b84e56..94f99cb 100644 --- a/ui/file_manager/file_manager/common/js/xfm.js +++ b/ui/file_manager/file_manager/common/js/xfm.js
@@ -3,13 +3,11 @@ // found in the LICENSE file. import {notifications} from './notifications_browser_proxy.js'; -import {power} from './power.js'; import {storage} from './storage_adapter.js'; // namespace export const xfm = { notifications, - power, storage, /** * @return {!chrome.app.window.AppWindow}
diff --git a/ui/file_manager/file_manager/containers/nudge_container.ts b/ui/file_manager/file_manager/containers/nudge_container.ts new file mode 100644 index 0000000..eb83d9b --- /dev/null +++ b/ui/file_manager/file_manager/containers/nudge_container.ts
@@ -0,0 +1,351 @@ +// Copyright 2022 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import '../widgets/xf_nudge.js'; + +import {str} from '../common/js/util.js'; +import {xfm} from '../common/js/xfm.js'; +import {NudgeDirection, XfNudge} from '../widgets/xf_nudge.js'; + +/** + * NudgeContainer maintains the lifetime of a "nudge". A nudge refers to an + * educational overlay that shows up to highlight new features, currently we + * only support a single nudge showing in Files app. + */ +export class NudgeContainer { + /** + * The educational nudge that is added as a web component to the DOM. + */ + private nudge_: XfNudge = document.querySelector('xf-nudge')!; + + /** + * The handle that represents the requestIdleCallback to enable cancellation. + */ + private idleCallbackHandle_: number = -1; + + /** + * The current `NudgeType` that is visible. + */ + private currentNudgeType_: NudgeType|undefined = undefined; + + /** + * Each nudge has a described-by <p> tag to enable an announcement to be made + * when hovering over or tabbing to the anchored element. + */ + private readonly anchorAriaDescribedbyElement_ = document.createElement('p'); + + /** + * A controller which sends out an abort signal once we no longer want to + * listen to events i.e. on nudge hide. + */ + private listenerAbortController_: AbortController|null = null; + + /** + * Cache the DOMRect of the anchor to allow comparison of the previous + * location and in the case the anchor DOMRect changes, reposition the nudge + * accordingly. + */ + private anchorDomRect_: DOMRect|undefined = undefined; + + /** + * Stores the ID of the current requestAnimationFrame(). Used to ensure only + * run callback is running at a time. + */ + private requestAnimationFrameId_: number|undefined = undefined; + + /** + * True if the expiry period on the nudge is observed. False otherwise. + */ + private expiryPeriodEnabled_: boolean = true; + + constructor() { + this.anchorAriaDescribedbyElement_.id = 'nudge-content'; + this.anchorAriaDescribedbyElement_.style.display = 'none'; + } + + /** + * A callback that repositions the nudge element prior to a repaint. The + * callback is throttled to only run on animation frames since we call it for + * scroll events; which can be numerous between frames. + */ + private throttledRepositionCallback_() { + if (this.requestAnimationFrameId_) { + return; + } + + this.requestAnimationFrameId_ = window.requestAnimationFrame(() => { + if (!this.nudgeShowing_) { + return; + } + + const anchorDomRect = this.nudge_.anchor!.getBoundingClientRect(); + // First verify that the anchor has changed in some position or dimension + // before repositioning the nudge. This ensures we're not too aggressive + // in repositioning. + if (this.anchorDomRect_ && + (anchorDomRect.x !== this.anchorDomRect_.x || + anchorDomRect.y !== this.anchorDomRect_.y || + anchorDomRect.width !== this.anchorDomRect_.width || + anchorDomRect.height !== this.anchorDomRect_.height)) { + this.anchorDomRect_ = anchorDomRect; + this.nudge_.reposition(); + } + + this.requestAnimationFrameId_ = undefined; + }); + } + + /** + * Attempts to reposition the visible nudge if it is showing. There is no easy + * way to listen for DOM elements that change without user input (e.g. if a + * volume is added or removed from the directory tree). So use an IdleCallback + * to keep checking the nudge is in the right position. + */ + private idleCallback_() { + if (this.nudgeShowing_) { + this.throttledRepositionCallback_(); + this.idleCallbackHandle_ = window.requestIdleCallback( + this.idleCallback_.bind(this), {timeout: 1000}); + return; + } + + window.cancelIdleCallback(this.idleCallbackHandle_); + } + + /** + * A method for the nudge manager to decide whether a given nudge has been + * previously seen and dismissed by the user. + */ + async checkSeen(nudgeId: string) { + const seen = await xfm.storage.local.getAsync(nudgeId); + return seen[nudgeId] === 'true'; + } + + /** + * A method for the nudge manager to specify that a given nudge has been seen + * and dismissed by the user. + */ + async setSeen(nudgeId: string) { + return xfm.storage.local.setAsync({[nudgeId]: 'true'}); + } + + /** + * Shows the nudge if it has not already been seen before. + */ + async showNudge(nudge: NudgeType) { + if (this.nudgeShowing_) { + return; + } + + // No nudge info exists for the supplied nudge. + if (!nudgeInfo[nudge]) { + console.warn('Nudge', nudge, 'does not exist'); + return; + } + if (!nudgeInfo[nudge].anchor()) { + console.warn('nudge anchor', nudge, 'does not exist'); + return; + } + const info = nudgeInfo[nudge]; + const anchor = info.anchor() as HTMLElement; + + // Don't show the nudge if it's expired and the expiry period is enabled. + if (info.expiryDate && info.expiryDate < new Date() && + this.expiryPeriodEnabled_) { + return; + } + + if (await this.checkSeen(nudge)) { + return; + } + + this.currentNudgeType_ = nudge; + + // Create a new controller since they can only be aborted once (adding an + // aborted signal to a listener will result in no listening). + this.listenerAbortController_ = new AbortController(); + // Anchor container scrolling and document resizes can potentially + // reposition the anchor, which will need a matching reposition of the nudge + // element-- so we listen to those events and reposition upon them + // occurring. Note, it is possible that there are other ways of manipulating + // the anchor position without triggering any of the events here (e.g. + // resizing an element within the document); but no such use case exists + // yet. + const config = { + signal: this.listenerAbortController_.signal, + passive: true, + }; + let anchorTreeNode: Node|null = anchor; + while (anchorTreeNode) { + if (anchorTreeNode instanceof EventTarget) { + anchorTreeNode.addEventListener( + 'scroll', this.throttledRepositionCallback_.bind(this), config); + } + anchorTreeNode = anchorTreeNode.parentNode; + if (anchorTreeNode instanceof ShadowRoot) { + anchorTreeNode = anchorTreeNode.host; + } + } + window.addEventListener( + 'resize', this.throttledRepositionCallback_.bind(this), config); + document.addEventListener('keydown', e => this.handleKeyDown_(e), config); + document.addEventListener( + 'pointerdown', e => this.handlePointerDown_(e), config); + anchor.addEventListener( + 'blur', (_: Event) => this.closeNudge(this.currentNudgeType_), config); + + this.nudge_.anchor = anchor; + this.nudge_.content = info.content; + this.nudge_.direction = info.direction; + + this.nudge_.show(); + this.anchorDomRect_ = anchor.getBoundingClientRect(); + this.setAnchorAriaDescribedby_(); + + window.cancelIdleCallback(this.idleCallbackHandle_); + this.idleCallbackHandle_ = window.requestIdleCallback( + this.idleCallback_.bind(this), {timeout: 1000}); + } + + /** + * Hide the currently showing nudge and update the seen status if provided. + */ + async closeNudge(seenNudgeId?: string) { + window.cancelIdleCallback(this.idleCallbackHandle_); + if (!this.nudgeShowing_) { + return; + } + if (seenNudgeId) { + await this.setSeen(seenNudgeId); + } + this.nudge_.hide(); + this.currentNudgeType_ = undefined; + this.anchorDomRect_ = undefined; + this.removeAnchorAriaDescribedby_(); + // Abort listeners since we don't want to update position after hiding. + this.listenerAbortController_?.abort(); + } + + /** + * Used to override the expiry period for nudges in test. + */ + set setExpiryPeriodEnabledForTesting(value: boolean) { + this.expiryPeriodEnabled_ = value; + } + + /** + * Handle key down events such that any "Escape", "Enter" or "Space" should + * close the nudge. + */ + private handleKeyDown_(event: KeyboardEvent) { + switch (event.key) { + case 'Escape': + case 'Enter': + case 'Space': + this.closeNudge(this.currentNudgeType_); + break; + default: + break; + } + } + + /** + * Handle any pointer down events on the Nudge. + */ + private handlePointerDown_(event: MouseEvent) { + // Ignore pointer events on the nudge to allow copying the nudge's text. + if (event.composedPath().includes( + /** @type {!EventTarget} */ (this.nudge_))) { + return; + } + this.closeNudge(this.currentNudgeType_); + } + + /** + * Set the <p> aria-described-by content to enable screen readers to hear the + * nudge content when navigating over the anchored element. + */ + private setAnchorAriaDescribedby_() { + if (!this.nudge_.anchor) { + return; + } + + this.anchorAriaDescribedbyElement_.innerText = this.nudge_.content; + // Add a new element as a sibling of the anchor so we can aria-describedBy + // it to read out the contents of the nudge. + this.nudge_.anchor.insertAdjacentElement( + 'afterend', this.anchorAriaDescribedbyElement_); + this.nudge_.anchor.setAttribute('aria-describedby', 'nudge-content'); + } + + /** + * Remove the <p> aria-described-by content. + */ + private removeAnchorAriaDescribedby_() { + this.anchorAriaDescribedbyElement_.remove(); + + if (!this.nudge_.anchor) { + return; + } + + this.nudge_.anchor.removeAttribute('aria-describedby'); + } + + /** + * Helper function to return whether a current nudge is showing. + */ + private get nudgeShowing_() { + return this.currentNudgeType_ !== undefined; + } +} + +/** + * An enum of nudges that can be shown, only a single nudge is shown at a time. + */ +export enum NudgeType { + TEST_NUDGE = 'test-nudge', + TRASH_NUDGE = 'trash-nudge', +} + +/** + * Type to define the callback used that gets the anchor element from the DOM. + */ +interface NudgeInfo { + // The anchor that the nudge will appear near. The location of the nudge + // relative to the anchor is dictated by the `direction`. + anchor: () => HTMLElement | null; + + // The string contents of the nudge. + content: string; + + // The direction that nudge appears relative to the anchor. For more + // explanation on the various `NudgeDirection`'s look in `xf_nudge.ts` file. + direction: NudgeDirection; + + // The date the nudge expires, after this date even if the nudge is invoked it + // will not appear. + expiryDate: Date; +} + +/** + * A mapping of nudges to their information that can be shown throughout the + * Files app. + */ +export const nudgeInfo: {[type in NudgeType]: NudgeInfo} = { + [NudgeType['TEST_NUDGE']]: { + anchor: () => document.querySelector<HTMLDivElement>('div#test'), + content: 'Test content', + direction: NudgeDirection.BOTTOM_ENDWARD, + expiryDate: new Date(2999, 1, 1), + }, + // A nudge that is shown when an item is first sent to the trash. + [NudgeType['TRASH_NUDGE']]: { + anchor: () => + document.querySelector<HTMLSpanElement>('span[root-type-icon="trash"]'), + content: str('TRASH_NUDGE_LABEL'), + direction: NudgeDirection.BOTTOM_ENDWARD, + // Expire this after 4 releases (expires when M112 hits Stable). + expiryDate: new Date(2023, 4, 6), + }, +};
diff --git a/ui/file_manager/file_manager/containers/nudge_container_unittest.ts b/ui/file_manager/file_manager/containers/nudge_container_unittest.ts new file mode 100644 index 0000000..9450ba9 --- /dev/null +++ b/ui/file_manager/file_manager/containers/nudge_container_unittest.ts
@@ -0,0 +1,209 @@ +// Copyright 2022 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import {assertEquals, assertFalse, assertNotEquals, assertTrue} from 'chrome://webui-test/chai_assert.js'; + +import {waitUntil} from '../common/js/test_error_reporting.js'; +import {XfNudge} from '../widgets/xf_nudge.js'; + +import {NudgeContainer, nudgeInfo, NudgeType} from './nudge_container.js'; + +/** + * Holds all the elements, used to easily clear the DOM in between tests. + */ +const nudgeHolder: HTMLElement = document.createElement('div'); + +/** + * An instance of the `NudgeContainer`, this is reset in between every test. + */ +let nudgeContainer: NudgeContainer|undefined; + +/** + * The <xf-nudge> element that is appended to the page at the start of every + * test. + */ +let nudgeElement: XfNudge|undefined; + +/** + * Save a copy of the test Nudge so that any test overwrites can be restored in + * between tests. For example if the expiry date needs to be overwritten it is + * restored for the next test. + */ +const savedNudgeInfo = {...nudgeInfo[NudgeType.TEST_NUDGE]}; + +/** + * Sets up the initial holder that is used for every test. + */ +export function setUpPage() { + document.body.appendChild(nudgeHolder); +} + +/** + * Creates new <xf-nudge> element for each test. + */ +export function setUp() { + nudgeInfo[NudgeType.TEST_NUDGE] = {...savedNudgeInfo}; + nudgeElement = document.createElement('xf-nudge'); + nudgeHolder.appendChild(nudgeElement); + nudgeContainer = new NudgeContainer(); +} + +/** + * Clears the <xf-nudge> between each test to ensure a clean slate. + */ +export function tearDown() { + nudgeHolder.innerText = ''; + + // Ensure to close the nudge before clearing the container as the idle + // callback needs to be properly shutdown. + nudgeContainer!.closeNudge(NudgeType.TEST_NUDGE); + nudgeContainer = undefined; + nudgeElement = undefined; + window.localStorage.clear(); +} + +/** + * Create a <div id="test"> which anchors the `NudgeType.TEST_NUDGE`. + */ +async function createAndAppendTestDiv() { + const testDiv = document.createElement('div'); + testDiv.id = 'test'; + testDiv.style.width = '100px'; + testDiv.style.height = '100px'; + testDiv.style.position = 'absolute'; + nudgeHolder.appendChild(testDiv); + await waitUntil(() => { + const boundingBox = testDiv.getBoundingClientRect(); + return boundingBox.width === 100 && boundingBox.height === 100; + }); + return testDiv; +} + +/** + * Helper method to get the <p id="nudge-content"> element that is added to the + * page to describe the content in the nudge. + */ +function getDescribedByElement(): HTMLElement|null { + return document.querySelector('p#nudge-content'); +} + +/** + * Wait until the desired number of repositions is met. + */ +function waitUntilRepositions(repositions: number) { + return waitUntil(() => nudgeElement!.repositions === repositions); +} + +/** + * The repositions are setup as 0, this indicates the nudge has not been moved + * to position, i.e. an uninitialised state. + */ +function waitUntilRepositionsUnitialised() { + return waitUntilRepositions(0); +} + +/** + * Creates the test anchor and nudge and waits until the repositions are 1. + */ +async function createAndShowTestNudge() { + await createAndAppendTestDiv(); + nudgeContainer!.showNudge(NudgeType.TEST_NUDGE); + await waitUntilRepositions(1); +} + +/** + * Tests that a defined nudge without an anchor is not shown. + */ +export async function testShowWorksOnlyWhenAProperAnchorIsAvailable() { + // The first showing of nudge should not work as the <div id="test"> is not + // visible on the DOM. + nudgeContainer!.showNudge(NudgeType.TEST_NUDGE); + assertFalse(await nudgeContainer!.checkSeen(NudgeType.TEST_NUDGE)); + await waitUntilRepositionsUnitialised(); + + // The second showing of the nudge should work as we've appended the <div + // id="test"> to the DOM. + await createAndAppendTestDiv(); + nudgeContainer!.showNudge(NudgeType.TEST_NUDGE); + await waitUntilRepositions(1); +} + +/** + * Tests that the enter key dismisses the nudge. + */ +export async function testEnterKeyHidesNudge() { + await createAndShowTestNudge(); + + const keyDownEvent = new KeyboardEvent('keydown', {key: 'Enter'}); + document.dispatchEvent(keyDownEvent); + + // No new repositions should be called and the check seen property should be + // true. + await waitUntilRepositions(1); + assertTrue( + await nudgeContainer!.checkSeen(NudgeType.TEST_NUDGE), + 'check nudge has been seen'); +} + +/** + * Tests that a <p> element is appended beside the anchor element with the nudge + * content to enable screen readers to hear the content. + */ +export async function testAriaDescribedByElementIsAdded() { + await createAndShowTestNudge(); + + await waitUntil(() => getDescribedByElement() !== null); + const describedByElement: HTMLElement|null = + document.querySelector('p#nudge-content'); + + assertNotEquals(describedByElement, null); + assertEquals( + describedByElement!.innerText, nudgeInfo[NudgeType.TEST_NUDGE].content); +} + +/** + * Tests that the nudge moves with the element if it gets moved + * programmatically. + */ +export async function testNudgeMovesWhenElementIsRepositioned() { + const testDiv = await createAndAppendTestDiv(); + nudgeContainer!.showNudge(NudgeType.TEST_NUDGE); + await waitUntilRepositions(1); + + // Moving the `testDiv` should toggle the repositioning logic. + testDiv.style.left = '200px'; + testDiv.style.top = '200px'; + await waitUntilRepositions(2); +} + +/** + * Tests that the nudge is not shown after being shown for the first time. + */ +export async function testNudgeIsNotShownAfterFirstTime() { + await createAndShowTestNudge(); + + // Close the nudge which should set the nudge to "seen". + nudgeContainer!.closeNudge(NudgeType.TEST_NUDGE); + await waitUntilRepositionsUnitialised(); + assertTrue( + await nudgeContainer!.checkSeen(NudgeType.TEST_NUDGE), + 'check nudge has been seen'); + + // Assert that showing the nudge again doesn't work as it's already been + // "seen". + nudgeContainer!.showNudge(NudgeType.TEST_NUDGE); + await waitUntilRepositionsUnitialised(); +} + +/** + * Tests the nudge doesn't show if the expiry period has elapsed. + */ +export async function testNudgeIsNotShownIfExpiryPeriodElapsed() { + // Update the test nudge timestamp to be 60s before now. + nudgeInfo[NudgeType.TEST_NUDGE].expiryDate = + new Date(new Date().getTime() - (60 * 1000)); + await createAndAppendTestDiv(); + nudgeContainer!.showNudge(NudgeType.TEST_NUDGE); + await waitUntilRepositionsUnitialised(); +}
diff --git a/ui/file_manager/file_manager/foreground/images/files/ui/nudge_star_icon.svg b/ui/file_manager/file_manager/foreground/images/files/ui/nudge_star_icon.svg new file mode 100644 index 0000000..35180f1 --- /dev/null +++ b/ui/file_manager/file_manager/foreground/images/files/ui/nudge_star_icon.svg
@@ -0,0 +1,3 @@ +<svg width="20" height="20" fill="none" xmlns="http://www.w3.org/2000/svg"> + <path d="m10.4 7-2-4.5-2.2 4.6-4.5 2 4.5 2.2 2.1 4.5 2.1-4.6 4.6-2L10.4 7Zm4.6 3.8-1 2.3-2.3 1 2.3 1.1 1 2.3 1-2.3 2.3-1-2.3-1-1-2.4Z" fill="#E8EAED"/> +</svg> \ No newline at end of file
diff --git a/ui/file_manager/file_manager/foreground/js/file_manager_commands.js b/ui/file_manager/file_manager/foreground/js/file_manager_commands.js index 2c46bc8..6fe1b5b 100644 --- a/ui/file_manager/file_manager/foreground/js/file_manager_commands.js +++ b/ui/file_manager/file_manager/foreground/js/file_manager_commands.js
@@ -17,6 +17,7 @@ import {str, strf, util} from '../../common/js/util.js'; import {VolumeManagerCommon} from '../../common/js/volume_manager_types.js'; import {xfm} from '../../common/js/xfm.js'; +import {NudgeType} from '../../containers/nudge_container.js'; import {CommandHandlerDeps} from '../../externs/command_handler_deps.js'; import {FakeEntry, FilesAppDirEntry, FilesAppEntry} from '../../externs/files_app_entry_interfaces.js'; import {VolumeInfo} from '../../externs/volume_info.js'; @@ -1184,6 +1185,8 @@ fileManager.fileOperationManager.willUseTrash( fileManager.volumeManager, entries) && fileManager.trashEnabled) { + fileManager.ui.nudgeContainer.showNudge(NudgeType['TRASH_NUDGE']); + chrome.fileManagerPrivate.startIOTask( chrome.fileManagerPrivate.IOTaskType.TRASH, entries, /*params=*/ {});
diff --git a/ui/file_manager/file_manager/foreground/js/ui/file_manager_ui.js b/ui/file_manager/file_manager/foreground/js/ui/file_manager_ui.js index c887119..7bc0c38 100644 --- a/ui/file_manager/file_manager/foreground/js/ui/file_manager_ui.js +++ b/ui/file_manager/file_manager/foreground/js/ui/file_manager_ui.js
@@ -9,6 +9,7 @@ import {str, strf, util} from '../../../common/js/util.js'; import {AllowedPaths} from '../../../common/js/volume_manager_types.js'; import {BreadcrumbContainer} from '../../../containers/breadcrumb_container.js'; +import {NudgeContainer} from '../../../containers/nudge_container.js'; import {VolumeManager} from '../../../externs/volume_manager.js'; import {XfDlpRestrictionDetailsDialog} from '../../../widgets/xf_dlp_restriction_details_dialog.js'; import {FilesPasswordDialog} from '../../elements/files_password_dialog.js'; @@ -383,6 +384,13 @@ this.actionsSubmenu = new ActionsSubmenu(this.fileContextMenu); /** + * The container that maintains the lifetime of nudges. + * @public {!NudgeContainer} + * @const + */ + this.nudgeContainer = new NudgeContainer(); + + /** * @type {!FilesToast} * @const */
diff --git a/ui/file_manager/file_manager/foreground/js/ui/file_table.js b/ui/file_manager/file_manager/foreground/js/ui/file_table.js index 9da74bff..e26ff0b 100644 --- a/ui/file_manager/file_manager/foreground/js/ui/file_table.js +++ b/ui/file_manager/file_manager/foreground/js/ui/file_table.js
@@ -271,6 +271,7 @@ container.classList.add('table-label-container'); const textElement = table.ownerDocument.createElement('span'); + textElement.setAttribute('id', `column-${column.id}`); textElement.textContent = column.name; const dm = table.dataModel; @@ -989,12 +990,14 @@ const item = baseRenderFunction(entry, this); const nameId = item.id + '-entry-name'; const sizeId = item.id + '-size'; + const typeId = item.id + '-type'; const dateId = item.id + '-date'; const dlpId = item.id + '-dlp-managed-icon'; filelist.decorateListItem(item, entry, assert(this.metadataModel_)); item.setAttribute('file-name', entry.name); item.querySelector('.detail-name').setAttribute('id', nameId); item.querySelector('.size').setAttribute('id', sizeId); + item.querySelector('.type').setAttribute('id', typeId); item.querySelector('.date').setAttribute('id', dateId); const dlpManagedIcon = item.querySelector('.dlp-managed-icon'); if (dlpManagedIcon) { @@ -1004,7 +1007,10 @@ .addTargets(item.querySelectorAll('.dlp-managed-icon')); } - item.setAttribute('aria-labelledby', nameId); + item.setAttribute( + 'aria-labelledby', + `${nameId} column-size ${sizeId} column-type ${ + typeId} column-modificationTime ${dateId}`); return item; }
diff --git a/ui/file_manager/file_manager/main.html b/ui/file_manager/file_manager/main.html index 3270a7ca..a87bb42 100644 --- a/ui/file_manager/file_manager/main.html +++ b/ui/file_manager/file_manager/main.html
@@ -518,5 +518,6 @@ <div id="drop-label"></div> <files-toast id="toast"></files-toast> <files-format-dialog id="format-dialog"></files-format-dialog> + <xf-nudge></xf-nudge> </body> </html>
diff --git a/ui/file_manager/file_manager/widgets/xf_nudge.html b/ui/file_manager/file_manager/widgets/xf_nudge.html index 43ee19ab..546f0b2 100644 --- a/ui/file_manager/file_manager/widgets/xf_nudge.html +++ b/ui/file_manager/file_manager/widgets/xf_nudge.html
@@ -27,9 +27,11 @@ border-radius: 18px; } -#bubble > slot[name='icon']::slotted(*) { - --ea-icon-size: 20px; - color: var(--cros-button-icon-color-primary); +#bubble > .icon { + -webkit-mask-image: url(/foreground/images/files/ui/nudge_star_icon.svg); + -webkit-mask-position: center; + -webkit-mask-repeat: no-repeat; + background-color: var(--cros-button-icon-color-primary); height: 20px; margin-inline-end: 12px; width: 20px; @@ -43,7 +45,7 @@ <div aria-hidden="true" id="container"> <div id="dot"></div> <div id="bubble"> - <slot class="icon" name="icon"></slot> + <span class="icon"></span> <span id="text"></span> </div> </div> \ No newline at end of file
diff --git a/ui/file_manager/file_manager/widgets/xf_nudge.ts b/ui/file_manager/file_manager/widgets/xf_nudge.ts index d36b4e6..5199bd9 100644 --- a/ui/file_manager/file_manager/widgets/xf_nudge.ts +++ b/ui/file_manager/file_manager/widgets/xf_nudge.ts
@@ -51,6 +51,12 @@ */ private content_: string = ''; + /** + * How many times the nudge has been repositioned, this is reset when the + * nudge is hidden. + */ + private repositions_: number = 0; + constructor() { super(); @@ -93,6 +99,7 @@ // to position the nudge the next time it is shown. this.dot_.style.left = `-${DOT_DIAMETER_PX}px`; this.bubble_.style.left = '-296px'; + this.repositions_ = 0; } /** @@ -118,6 +125,8 @@ } else { this.positionBubbleHorizontal_(anchorRect); } + + this.repositions_++; } /** @@ -173,6 +182,14 @@ } /** + * Returns the number of repositions for the nudge that is currently showing. + * This is reset when the nudge is hidden. + */ + get repositions() { + return this.repositions_; + } + + /** * Position the dot of the nudge to be at the correct position to the anchored * element. */
diff --git a/ui/file_manager/file_names.gni b/ui/file_manager/file_names.gni index 1a00b55..592f28ef5 100644 --- a/ui/file_manager/file_names.gni +++ b/ui/file_manager/file_names.gni
@@ -62,7 +62,6 @@ "file_manager/common/js/mock_chrome.js", "file_manager/common/js/mock_entry.js", "file_manager/common/js/notifications_browser_proxy.js", - "file_manager/common/js/power.js", "file_manager/common/js/progress_center_common.js", "file_manager/common/js/recent_date_bucket.js", "file_manager/common/js/storage_adapter.js", @@ -259,6 +258,7 @@ "file_manager/widgets/xf_breadcrumb.ts", "file_manager/widgets/xf_nudge.ts", "file_manager/containers/breadcrumb_container.ts", + "file_manager/containers/nudge_container.ts", "file_manager/widgets/xf_dlp_restriction_details_dialog.ts", ] @@ -270,6 +270,9 @@ ] ts_test_files = [ + # Containers + "file_manager/containers/nudge_container_unittest.ts", + # Lib: "file_manager/lib/base_store_unittest.ts", "file_manager/lib/actions_producer_unittest.ts",
diff --git a/ui/file_manager/integration_tests/file_manager/trash.js b/ui/file_manager/integration_tests/file_manager/trash.js index fff22710..c9d4c5e 100644 --- a/ui/file_manager/integration_tests/file_manager/trash.js +++ b/ui/file_manager/integration_tests/file_manager/trash.js
@@ -3,7 +3,7 @@ // found in the LICENSE file. import {DialogType} from '../dialog_type.js'; -import {addEntries, ENTRIES, RootPath, sendTestMessage} from '../test_util.js'; +import {addEntries, ENTRIES, repeatUntil, RootPath, sendTestMessage} from '../test_util.js'; import {testcase} from '../testcase.js'; import {navigateWithDirectoryTree, openNewWindow, remoteCall, setupAndWaitUntilReady} from './background.js'; @@ -1028,3 +1028,51 @@ await remoteCall.waitForElement( appId, contextMenuSelector + ' [command="#rename"][disabled][hidden]'); }; + +/** + * Tests that the trash nudge is shown on the first trash but is not shown on + * subsequent trashes. + * NOTE: The nudge has an expiry period, this will override the expiry period. + */ +testcase.trashNudgeShownOnFirstTrashOperation = async () => { + const appId = await setupAndWaitUntilReady( + RootPath.DOWNLOADS, BASIC_LOCAL_ENTRY_SET, []); + + // Disable the nudge expiry. + await remoteCall.disableNudgeExpiry(appId); + + // Select hello.txt and send it to the Trash, this file should not be removed + // in between enabling and disabling the feature. + await remoteCall.waitUntilSelected(appId, 'hello.txt'); + await clickTrashButton(appId); + await remoteCall.waitForElementLost( + appId, '#file-list [file-name="hello.txt"]'); + + // Verify the dot has been placed somewhere visible. + let nudgeDot = await remoteCall.waitForElementStyles( + appId, ['xf-nudge', '#dot'], ['left']); + chrome.test.assertTrue(nudgeDot.renderedLeft > 0); + chrome.test.assertTrue(nudgeDot.renderedTop > 0); + + // The nudge is dismissed through keyboard and mouse events which are "faked" + // in the integration test harness. So send a blur event to the anchor to + // ensure the nudge gets removed instead. + chrome.test.assertTrue(await remoteCall.callRemoteTestUtil( + 'fakeEvent', appId, ['span[root-type-icon="trash"]', 'blur'])); + await repeatUntil(async () => { + const nudgeDot = await remoteCall.waitForElementStyles( + appId, ['xf-nudge', '#dot'], ['left']); + return nudgeDot.renderedLeft < 0; + }); + + // Select and trash the file "world.ogv". + await remoteCall.waitUntilSelected(appId, 'world.ogv'); + await clickTrashButton(appId); + await remoteCall.waitForElementLost( + appId, '#file-list [file-name="world.ogv"]'); + + // Ensure the nudge doesn't show up again after the first trash. + nudgeDot = await remoteCall.waitForElementStyles( + appId, ['xf-nudge', '#dot'], ['left']); + chrome.test.assertTrue(nudgeDot.renderedLeft < 0); +};
diff --git a/ui/file_manager/integration_tests/remote_call.js b/ui/file_manager/integration_tests/remote_call.js index 4e1fe54..1c38d19 100644 --- a/ui/file_manager/integration_tests/remote_call.js +++ b/ui/file_manager/integration_tests/remote_call.js
@@ -887,4 +887,14 @@ 'deepQueryAllElements', appId, ['#autocomplete-list li']); return elements.map((element) => element.text); } + + /** + * Disable nudges from expiring for testing. + * @param {string} appId App window Id + */ + async disableNudgeExpiry(appId) { + await this.waitFor('isFileManagerLoaded', appId, true); + chrome.test.assertTrue( + await this.callRemoteTestUtil('disableNudgeExpiry', appId, [])); + } }
diff --git a/ui/gfx/geometry/transform.cc b/ui/gfx/geometry/transform.cc index acc8caa..24b5cba 100644 --- a/ui/gfx/geometry/transform.cc +++ b/ui/gfx/geometry/transform.cc
@@ -556,14 +556,14 @@ return true; } -void Transform::TransformBox(BoxF* box) const { +BoxF Transform::MapBox(const BoxF& box) const { BoxF bounds; bool first_point = true; for (int corner = 0; corner < 8; ++corner) { - gfx::Point3F point = box->origin(); - point += gfx::Vector3dF(corner & 1 ? box->width() : 0.f, - corner & 2 ? box->height() : 0.f, - corner & 4 ? box->depth() : 0.f); + gfx::Point3F point = box.origin(); + point += gfx::Vector3dF(corner & 1 ? box.width() : 0.f, + corner & 2 ? box.height() : 0.f, + corner & 4 ? box.depth() : 0.f); point = MapPoint(point); if (first_point) { bounds.set_origin(point); @@ -572,15 +572,7 @@ bounds.ExpandTo(point); } } - *box = bounds; -} - -bool Transform::TransformBoxReverse(BoxF* box) const { - gfx::Transform inverse = *this; - if (!GetInverse(&inverse)) - return false; - inverse.TransformBox(box); - return true; + return bounds; } bool Transform::Blend(const Transform& from, double progress) {
diff --git a/ui/gfx/geometry/transform.h b/ui/gfx/geometry/transform.h index 9be9f3f..a30ce29 100644 --- a/ui/gfx/geometry/transform.h +++ b/ui/gfx/geometry/transform.h
@@ -349,16 +349,10 @@ // matrix cannot be applied to rrect. bool TransformRRectF(RRectF* rrect) const; - // Applies transformation on the given box. After the function completes, - // |box| will be the smallest axis aligned bounding box containing the + // Returns the box with transformation applied on the given box. The returned + // box will be the smallest axis aligned bounding box containing the // transformed box. - void TransformBox(BoxF* box) const; - - // Applies the reverse transformation on the given box. After the function - // completes, |box| will be the smallest axis aligned bounding box - // containing the transformed box. Returns false if the matrix cannot be - // inverted. - bool TransformBoxReverse(BoxF* box) const; + [[nodiscard]] BoxF MapBox(const BoxF& box) const; // Decomposes |this| and |from|, interpolates the decomposed values, and // sets |this| to the reconstituted result. Returns false if either matrix
diff --git a/ui/gfx/geometry/transform_operation.cc b/ui/gfx/geometry/transform_operation.cc index eaf6dc5e..515f4bb3 100644 --- a/ui/gfx/geometry/transform_operation.cc +++ b/ui/gfx/geometry/transform_operation.cc
@@ -475,11 +475,9 @@ !BlendTransformOperations(from, to, max_progress, &to_operation)) return false; - *bounds = box; - from_operation.matrix.TransformBox(bounds); + *bounds = from_operation.matrix.MapBox(box); - gfx::BoxF to_box = box; - to_operation.matrix.TransformBox(&to_box); + BoxF to_box = to_operation.matrix.MapBox(box); bounds->ExpandTo(to_box); return true;
diff --git a/ui/gfx/geometry/transform_operations_unittest.cc b/ui/gfx/geometry/transform_operations_unittest.cc index d603550..59b1628 100644 --- a/ui/gfx/geometry/transform_operations_unittest.cc +++ b/ui/gfx/geometry/transform_operations_unittest.cc
@@ -1223,8 +1223,7 @@ float t = step / (kNumSteps - 1.f); t = gfx::Tween::FloatValueBetween(t, min_progress, max_progress); gfx::Transform partial_transform = to.Blend(from, t).Apply(); - gfx::BoxF transformed = box; - partial_transform.TransformBox(&transformed); + gfx::BoxF transformed = partial_transform.MapBox(box); if (first_time) { empirical_bounds = transformed;
diff --git a/ui/gfx/geometry/transform_unittest.cc b/ui/gfx/geometry/transform_unittest.cc index bca8d34..38fb0dc2 100644 --- a/ui/gfx/geometry/transform_unittest.cc +++ b/ui/gfx/geometry/transform_unittest.cc
@@ -2830,26 +2830,13 @@ EXPECT_EQ(expected.ToString(), rrect.ToString()); } -TEST(XFormTest, TransformBox) { +TEST(XFormTest, MapBox) { Transform translation; translation.Translate3d(3.f, 7.f, 6.f); BoxF box(1.f, 2.f, 3.f, 4.f, 5.f, 6.f); BoxF expected(4.f, 9.f, 9.f, 4.f, 5.f, 6.f); - translation.TransformBox(&box); - EXPECT_EQ(expected.ToString(), box.ToString()); -} - -TEST(XFormTest, TransformBoxReverse) { - Transform translation; - translation.Translate3d(3.f, 7.f, 6.f); - BoxF box(1.f, 2.f, 3.f, 4.f, 5.f, 6.f); - BoxF expected(-2.f, -5.f, -3.f, 4.f, 5.f, 6.f); - EXPECT_TRUE(translation.TransformBoxReverse(&box)); - EXPECT_EQ(expected.ToString(), box.ToString()); - - Transform singular; - singular.Scale3d(0.f, 0.f, 0.f); - EXPECT_FALSE(singular.TransformBoxReverse(&box)); + BoxF transformed = translation.MapBox(box); + EXPECT_EQ(expected, transformed); } TEST(XFormTest, RoundTranslationComponents) {